中国开源基础类库 NDKK 开发进展 2013-10-23

来源:互联网 发布:淘宝设置2件包邮 编辑:程序博客网 时间:2024/06/18 12:54


开源地址:https://github.com/ndkk/GreatFoundationLibrary

*经过测试验证的代码才是有价值的代码


当前进展:1)最短路径算法 (采用广度优先算法)  -- 2013/10/11 初始化->进行中->已完成2) 排序算法(包括冒泡/选择/插入/快速)  -- 2013/10/16 初始化->进行中

注:该代码中llt_开头的文件就是测试文件,该测试文件实际也是实现函数的调用方法。


1)寻路算法已经可以很好使用,经过了全面的UT测试,测试用例包括了两个部分:

     (1)从文件读取地图的正确性:

       用例项写在了llt_mapfile.cpp文件中

    static const ST_MAPFILE s_StMapFile[] = 
    {
        {true, "map_normal.txt", "-", "~", " \r\n"},                    //normal
        {false, "map_abn_flat.txt", "-", "~", " \r\n"},                 //异常平地 x
        {false, "map_abn_uneven.txt", "-", "~", " \r\n"},               //异常障碍  y
        {false, "map_abn_delimeter.txt", "-", "~", " \r\n"},            //异常分隔副 /
        {true, "map_normal_multi_flat.txt", "-=", "~", " \r\n"},         //多符号平地 =
        {true, "map_normal_multi_uneven.txt", "-", "~!", " \r\n"},       //多符号障碍 !        
        {true, "map_normal_multi_delimeter.txt", "-", "~", " .\r\n"},    //多符号分隔符 .
        
        {true, "map_normal_diff_row_len.txt", "-", "~", " \r\n"},       //每行长度不同        
        {true, "map_normal_empty_row.txt", "-", "~", " \r\n"},          //空行
        {true, "map_abn_row_upper_boundary.txt", "-", "~", " \r\n"},   //行出边界
        {true, "map_abn_col_upper_boundary.txt", "-", "~", " \r\n"},   //列出边界
        
        {false, "map_normal.txt", "-~", "~", " \r\n"},                    //normal 平地和障碍字符集重复 
        {false, "map_normal.txt", "-", "~-", " \r\n"},                    //normal 平地和障碍字符集重复
        {false, "map_normal.txt", "-", "~", " -\r\n"},                    //normal 平地和障碍字符集重复                        
        
    };

     以上是我验证的所有情况,在地图中定义了平地为“-”,障碍物为“~”,分隔符为“  \r\n”,以上用例已全部通过。

     

  (2)验证寻路算法

    用例项写在llt_shortestpath.cpp文件中。

    测试过的用例有:

     static const ST_TESTCONDITION s_TestCond[] = 
    {
        //连通地图
        {true, "map_s_walk.txt", 0, 0, 2, 7},
        {true, "map_s_walk.txt", 2, 7, 0, 0},
        {true, "map_s_walk.txt", 3, 7, 0, 0},        
        {false, "map_s_walk.txt", 0, 0, 0, 0},        
        {false, "map_s_walk.txt", 0, 2, 0, 0},        
        {true, "map_s_walk.txt", 0, 3, 0, 0},        
        {false,"map_s_walk.txt",  0, 10, 0, 0},
        {false,"map_s_walk.txt",  0, 0, 0, 100},        
        {false,"map_s_walk.txt",  100, 0, 0, 0},
        {false, "map_s_walk.txt", 0, 0, 100, 0},
        {false,"map_s_walk.txt",  0, 0, 6, 3},        
        {false,"map_s_walk.txt",  0, 0, 4, 3},
        {true,"map_s_walk.txt",  0, 0, 4, 4},
        
        //地图不连通
        {false,"map_s_not_walk.txt",  0, 0, 3, 6},  
        {false,"map_s_not_walk.txt",  0, 0, 3, 5},  
        {true,"map_s_not_walk.txt",  0, 0, 3, 4},      
    };

     

     主要对连通地图和不连通地图进行测试。


   2) 最短路径算法调用方法:

        CShortestPath *m_pShortestPath = new CShortestPath();    //初始化最短路径类

         CMapfile Mapfile;        //初始化地图文件调用类       
        Mapfile.SetFileName(".\\map_normal.txt");     //设置地图文件名
        Mapfile.SetCanWalkToken("-");                        //设置可走动地方标示
        Mapfile.SetCannotWalkToken("~");                 //设置障碍标示
        Mapfile.SetDelimeterToken(" \r\n");                //设置文件分隔符
        int x = 0;
        int y = 0;
        int **ppMap = Mapfile.GetMap(x, y);          //获取地图的对象及对象的横纵轴范围   ppMap指向地图对象,x:横坐标 y:纵坐标
        m_pShortestPath->SetMap(x, y, ppMap);   //最短路径类设置对应的实体数组   
        
        

ST_PT bPt(s_TestCond[i].bX, s_TestCond[i].bY);
        ST_PT ePt(s_TestCond[i].eX, s_TestCond[i].eY);
        
        m_pShortestPath->SetBeginPoint(bPt);       //设置起点和终点         
        m_pShortestPath->SetEndPoint(ePt);        
        m_pShortestPath->DoService();      //进行最短路径计算
        if (bRet)
 {
     m_pShortestPath->ShowResult();  //结果展现
 }     

         delete m_pShortestPath;


另通报一下最新

排序算法(包括冒泡/选择/插入/快速)
的完成情况,本以为会比较顺利,简单测试都已经通过了。
但写了大量测试用例才发现,快速排序会死循环。
呵呵,看来不经过测试的代码确实是无用的。
今天太晚了,明天再继续定位。


   

   

   

     

    

   

原创粉丝点击