Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148678
  • 博文数量: 54
  • 博客积分: 1732
  • 博客等级: 上尉
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-23 23:29
文章分类

全部博文(54)

文章存档

2011年(3)

2010年(26)

2009年(25)

分类: C/C++

2009-12-22 00:11:54

四、测试
为了测试前面的BinTree类,我写了如下测试函数(没学过软件测试,根据自己的理解写的)

后来想想,应该将错误信息输出到stderr而不是stdout,这样就可以使用shell的重定向功能过滤了。


/**********************************************************************
 * filename: main.cc
 * destination: 测试binTree结构
 *
 * 从stdin读入整数,并将其插入binTree结构中,然后对binTree执行各种操作
 * 本程序不能检测 binTree的析构函数是否会发生内存泄漏
 *
 * Author: compass
 * Email: xjtu.ym@gmail.com
 * last modify: 2009年 12月 20日 星期日 21:03:09 CST
 * version 1
 **********************************************************************/


#include "binTree.h"
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>

int main(int argc, char* argv[])
{
    /*还差复制控制没有检测 */

    std::istream_iterator<int>    iIter(std::cin);
    std::istream_iterator<int>    eof;
    std::vector<int>            iVec;
    std::copy(iIter, eof, std::back_inserter(iVec));

    BinTree<int> binTree;
    for(std::vector<int>::iterator iter = iVec.begin();
            iter != iVec.end(); ++iter)
    {
        if(binTree.insert(*iter))
            std::cout << "向binTree插入"
                << *iter << "成功!\n";
        else
            std::cout << "向binTree插入"
                << *iter << "不成功,"
                << *iter << "已经存在于binTree中!\n";
    }
    std::cout << "binTree含有" << binTree.size()
         << "个元素" << std::endl;

    for(std::vector<int>::iterator iter = iVec.begin();
            iter != iVec.end(); ++iter)
    {
        if( !binTree.query(*iter))
            std::cout << *iter << "查询出现错误!" << std::endl;
        else
            std::cout << *iter << "查询正确!" << std::endl;
    }

    /*因为这里没有处理异常,所以必须加条件*/
    if(binTree.size() > 0)
    {
        int min = binTree.min();
        int max = binTree.max();
        std::cout << "min=" << min
            <<" max=" << max << std::endl;
        if( binTree.query(min-1) )
            std::cout << "min-1查询出现错误!" << std::endl;
        else
            std::cout << "min-1查询正确!" << std::endl;
        if( binTree.successor( max -1) != max)
            std::cout << "successor函数输出错误!" << std::endl;
        else
            std::cout << "successor函数输出正确!" << std::endl;
    }

    if(binTree.size() > 1)
    {
        std::vector<int>::iterator iter = iVec.begin();
        ++iter;
        if(binTree.query(*iter))
        {
            binTree.remove(*iter);
            if( binTree.query(*iter) )
                std::cout << "remove错误或者query错误" << std::endl;
            else
                std::cout << "remove测试正确!" << std::endl;
        }
        else
            std::cout << "query错误!" << std::endl;
    }

    return 0;

}

上面的测试程序没有测试出前文描述的successor函数的潜在bug,我也没去改了。

测试过程考虑了输入空集,单个元素,两个元素以及多个元素的情况,目前未发现异常
,测试平台为:
kubuntu9.10,g++ (Ubuntu 4.4.1-4ubuntu8) 4.4.1

最后,附上我的源文件
文件:srcFile.rar
大小:5KB
下载:下载

阅读(597) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~