关于对数器的使用

36 篇文章 0 订阅
  • 有一个你想测试的方法a
  • 实现一个绝对正确但是复杂度不好的方法b
  • 实现一个随机样本产生器
  • 实现比对的方法
  • 把方法a和方法b比对很多次来验证方法a是否正确
  • 如果有一个样本使得比对出错,打印样本分析是那个方法出错。
  • 当样本很多时比对测试依然正确,可以确定方法a已经正确。

下面这个例子就是对归并排序的对数器的使用的测试。

void merge(vector<int> &arr, int l, int m, int r)
{
	int i = 0;
	int p1 = l;
	int p2 = m + 1;
	vector<int> help;
	help.resize(r - l + 1);
	while (p1 <= m && p2 <= r)
	{
		help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
	}
	while (p1 <= m)
	{
		help[i++] = arr[p1++];
	}
	while (p2 <= r)
	{
		help[i++] = arr[p2++];
	}

	for (int j = 0; j < help.size(); ++j)
	{
		arr[l++] = help[j];
	}
}
void mergesort(vector<int> &arr, int l, int r)
{
	if (arr.size() < 2)
		return;
	if (l == r)
	{
		return;
	}
	int m = (l + r) / 2;
	mergesort(arr, l, m);
	mergesort(arr, m + 1, r);
	merge(arr, l, m, r);
}
void comparator(vector<int>& arr)//绝对正确的排序方法
{
	sort(arr.begin(), arr.end());
}
vector<int> generateRandomArray(int maxSize, int maxValue)//获取一个随机数组
{
	vector<int> arr;
	maxSize = (rand() % maxSize + 1);//获取一个小于等于maxSize大于0的随机值
	arr.resize(maxSize);

	for (int i = 0; i < maxSize; ++i)
	{
		arr[i] = (rand() % maxValue + 1);
	}
	return arr;
}
bool isEqual(vector<int>& arr1, vector<int> &arr2)
{
	return arr1 == arr2;
}
void printArray(vector<int> &arr)
{
	for (int val : arr)
	{
		cout << val << " ";
	}
	cout << endl;
}

int main()
{
	int testTime = 5000;
	int maxSize = 100;
	int maxValue = 100;
	bool succeed = true;
	for (int i = 0; i < testTime; i++)
	{
		vector<int> arr1 = generateRandomArray(maxSize, maxValue);
		vector<int> arr2 = arr1;
		mergesort(arr1, 0, arr1.size() - 1);
		comparator(arr2);
		if (!isEqual(arr1, arr2))
		{
			succeed = false;
			break;
		}
	}
	if (succeed)
	{
		cout << "您的测试代码全都通过" << endl;
	}
	else
	{
		cout << "有测试用例出错" << endl;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值