首先,我们目录需要创建的文件:
r100-gen.cpp 生成100道随机测试数据的cpp文本文件
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
extern FILE* stdin;
extern FILE* stdout;
const int MAX_ABS_VAL = 1000000000; //一个数的最大绝对值
const int num_case = 100;//测试用例的数量
typedef struct
{
int a;
int b;
}pair_t;
pair_t pairs[num_case + 10];
inline int swap(int& a, int& b)
{
int c = a;
a = b;
b = c;
return 0;
}
inline int randSgn()//生成一个随机的符号(正或负)
{
int rnd = rand() % 100;
return rnd > 50 ? 1 : -1;
}
int cmp(const void* v1, const void* v2) //用于qsort排序函数。
{
const pair_t* p1 = (const pair_t*)v1;
const pair_t* p2 = (const pair_t*)v2;
if (p1->a == p2->a) return p1->b - p2->b;
else return p1->a - p2->a;
}
//当前时间作为种子来生成随机数,
//创建num_case个测试用例,并将这些测试用例存储在pairs数组中。
//然后,它使用qsort函数对这些测试用例进行排序。
int genTestData()
{
srand(time(NULL));
for (int i = 1; i <= num_case; i++)
{
int a = rand() % MAX_ABS_VAL * randSgn();
int b = rand() % MAX_ABS_VAL * randSgn();
if (a > b) swap(a, b);
pairs[i].a = a;
pairs[i].b = b;
}
qsort(pairs + 1, num_case, sizeof(pair_t), cmp);
return 0;
}
int main()
{
genTestData();
for (int i; i <= num_case; i++)
{
fprintf(stdout, "echo %d %d > %03d.input\n", pairs[i].a,pairs[i].b,i);
}
return 0;
}
#include<cstdio>
using namespace std;
extern FILE* stdin;
extern FILE* stdout;
const int num_case = 100;
int main()
{
for (int i=1; i <= num_case; i++)
{
fprintf(stdout, "./test.exe <%03d.input >%03d.output\n", i, i);
}
return 0;
}
r100-run.cpp 生成100道随机测试数据的cpp文本文件
#include<cstdio>
using namespace std;
extern FILE* stdin;
extern FILE* stdout;
const int num_case = 100;
int main()
{
for (int i=1; i <= num_case; i++)
{
//其中./test.exe是要执行的程序名,
//<是输入重定向操作符,程序从名为XX.input的文件中读取输入(使用%03d格式化以确保编号始终是三位数,例如001)。
//>是输出重定向操作符,程序将输出写入到名为XX.output的文件中。
fprintf(stdout, "./test.exe <%03d.input >%03d.output\n", i, i);
}
return 0;
}
2:./r100-gen.exe | bash 生成100道随机测试数据
./r100-run.exe 生成100道输出数据
3:用/usr/bin/time计时第二步封装的测试脚本
g++ -o test.exe std.cpp (r100-run.cpp 需求 test.exe 文件)
./r100-run.exe > r100-run.sh
chmod +x r100-run.sh
/usr/bin/time ./r100-run.sh
c++ test
4:find . -type f | grep put| sort | xargs md5sum >std.md5
将输入、输出文件整理成有序列表,制作std.md5
5:find . -type f | grep put| sort | xargs grep -h "" > std.txt
在当前目录及其所有子目录中查找所有文件,筛选出文件名中包含"put"的文件,对这些文件名进行排序,然后在这些文件中搜索不包含任何文本的行,并将这些搜索结果输出到std.txt
文件中
py test
6: find . -type f | grep put| sort | xargs md5sum > alt.md5
将输入、输出文件整理成有序列表,制作std.md5
7: find . -type f | grep put| sort | xargs grep -h "" > alt.txt
在当前目录及其所有子目录中查找所有文件,筛选出文件名中包含"put"的文件,对这些文件名进行排序,然后在这些文件中搜索不包含任何文本的行,并将这些搜索结果输出到std.txt
文件中
8:使用 md5sum
命令可以帮助你确认文件是否在传输或存储过程中被更改。如果两组md5、txt的摘要码都一样, 这说明python程序和C++程序的运行结果是一样的