linux下利用c++测试数据比对py代码的准确性

 首先,我们目录需要创建的文件:

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++程序的运行结果是一样的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值