Ns2中的测试用例

发表于:2009-03-05来源:作者:点击数: 标签:
1测试用例说明 在NS2的源代码包中包含了几乎所有协议的 测试 代码,全部存放在ns2\tcl\test目录下,即test-suite-*.tcl这样的文件。每个文件基本就对应一个协议,而且有一个对应的输出目录存放供比较用的运行结果。在运行test-suite-*.tcl之后将会产生一个te

1测试用例说明
        在NS2的源代码包中包含了几乎所有协议的测试代码,全部存放在ns2\tcl\test目录下,即test-suite-*.tcl这样的文件。每个文件基本就对应一个协议,而且有一个对应的输出目录存放供比较用的运行结果。在运行test-suite-*.tcl之后将会产生一个temp.rands文件,只要这个文件和相应目录下的文件比较相一致就说明NS2的安装是正确的。
        如test-suite-adaptive-red.tcl这个文件的对应目录就是test-output-adaptive-red。
        每个测试用的tcl文件中都使用了一个或多个测试用例,因此output目录下也对应有一个或者多个文件,这些供比较用的文件都是用gzip压缩的,比较前应先解压缩。通过ns test-suite-*.tcl这样的命令可以知道每个TCL文件所支持的测试用例。使用ns test-suite-*.tcl test_name这样的格式就可以调用指定的测试用例。

        Ns test-suite-adaptive-red.tcl red1
        就指明了要调用red1这个测试用例,运行之后在测试目录下生成temp.rands文件,将这个文件与test-output-adaptive-red\red1.Z解压缩后的文件进行比较即可。
2测试代码
        在此测试目录下同时提供了完整的测试Shell代码,不过很遗憾在windows下没法运行(需要cygwin),于是自己动手写了下面的C++代码进行完整的测试。
// NsTest.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include <windows.h>
#include <fstream>
#include <math.h>
using namespace std;
 
#define TEST_PATH "d:\\temp\\test\\"
#define FIND_MASK "d:\\temp\\test\\test-suite-*.tcl"
#define NS_PATH "d:\\research\\debug\\ns-2.31.exe"
 
void Compare(char* f1, char* f2)
{
     // 比较两个文件是否相同,之所以不用cmp进行比较,是因为在不同版本生成的数据中输出格式可能会不一致,
     // 主要是科学计数法输出的不一致,如提供的原始数据为.2e-05,而生成的数据为.2e-005
     ifstream s1(f1);
     ifstream s2(f2);
     if(s1.is_open() && s2.is_open())
     {
         char line1[2048], line2[2048];
         int nLine = 0;
         while(!s1.eof() && !s2.eof())
         {
              nLine++;
              s1.getline(line1, 2048);
              s2.getline(line2, 2048);
              if(strcmp(line1, line2) == 0) continue;
              double d[4];
              sscanf(line1, "%lf %lf", &d[0], &d[1]);
              sscanf(line2, "%lf %lf", &d[2], &d[3]);
              if(fabs(d[0] - d[2]) > 0.00005 || fabs(d[1] - d[3]) > 0.005)
          

原文转自:http://www.ltesting.net