四、测试
为了测试前面的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 |
下载: | 下载 |
|
阅读(612) | 评论(0) | 转发(0) |