随机生成测试用例(以当前时间为随机种子)
2018-01-26 18:05
447 查看
随机生成测试用例(以当前时间为随机种子)
在学习排序算法的过程中,特别是对比不同排序算法之间以及同一排序算法的优化之间的效率时,需要用到大量的测试用例,采取硬编码的方式难以满足测试需要,故采用随机生成测试用例的方式。
【思想】:将当前时间设置为随机种子,在给定的随机数范围[rangeL, rangeR]内生成随机数,此处选择用rand()对整个随机范围取余,再加上偏移量的方式。
【代码】:
SortTestHelper.h:
#pragmaonce
#ifndef SELECTIONSORT_SORTTESTHELPER_H
#defineSELECTIONSORT_SORTTESTHELPER_H
#include<iostream>
#include<ctime>
#include<cassert>
usingnamespace std;
//把测试相关的函数放到新的命名空间里
namespace SortTestHelper {
//返回一个随机生成的数组(测试暂定义为int*类型)
//生成有n个元素的随机数组,每个元素的范围为[rangeL, rangeR]
int*generateRandomArray(intn,
intrangeL,
intrangeR){
assert(rangeL <=
rangeR);//确保左端点<=右端点
int *arr =
newint[n];
srand(time(NULL));//将当前时间设置为随机种子
for (int i = 0; i <
n; i++)
arr[i]= rand() % (rangeR -
rangeL + 1) +
rangeL;
//rand()对整个范围取余,再加上偏移量
return arr;
}
}
#endif
main:
// SelectionSort.cpp:
定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<iostream>
#include<algorithm>
#include<string>
#include"Student.h"
#include"SortTestHelper.h"
usingnamespace std;
//泛型
template<typenameT>
voidselectionSort(Tarr[],
intn) {
for (int i = 0; i <
n; i++) {
//寻找(i, n)区间中的最小值及其所在位置
int minIndex = i;//每次默认未排序部分的第一个为最小值
for (int j = i + 1; j <
n; j++)
if (arr[j] <
arr[minIndex])
minIndex= j;
//交换
swap(arr[i],
arr[minIndex]);//老版中swap函数在algorithm库
}
}
//打印函数
template<typenameT>
voidprintArray(Tarr[],
intn) {
for (int i = 0; i <
n; i++)
cout<< arr[i]<<
" ";
cout<< endl;
}
int main()
{
int n = 10000;//随机数组的长度
int *arr =SortTestHelper::generateRandomArray(n, 0, n);
selectionSort(arr,n);
printArray(arr,n);
//在SortTestHelper中使用了new开辟了新的命名空间,此处释放,避免内存泄漏
delete[] arr;//arr开的是数组空间,故用该方法释放
return 0;
}
【运行截图】:以下为首、尾截图(10000个在[0, 10000]范围内的随机数经选择排序selectionSort后的结果)
在学习排序算法的过程中,特别是对比不同排序算法之间以及同一排序算法的优化之间的效率时,需要用到大量的测试用例,采取硬编码的方式难以满足测试需要,故采用随机生成测试用例的方式。
【思想】:将当前时间设置为随机种子,在给定的随机数范围[rangeL, rangeR]内生成随机数,此处选择用rand()对整个随机范围取余,再加上偏移量的方式。
【代码】:
SortTestHelper.h:
#pragmaonce
#ifndef SELECTIONSORT_SORTTESTHELPER_H
#defineSELECTIONSORT_SORTTESTHELPER_H
#include<iostream>
#include<ctime>
#include<cassert>
usingnamespace std;
//把测试相关的函数放到新的命名空间里
namespace SortTestHelper {
//返回一个随机生成的数组(测试暂定义为int*类型)
//生成有n个元素的随机数组,每个元素的范围为[rangeL, rangeR]
int*generateRandomArray(intn,
intrangeL,
intrangeR){
assert(rangeL <=
rangeR);//确保左端点<=右端点
int *arr =
newint[n];
srand(time(NULL));//将当前时间设置为随机种子
for (int i = 0; i <
n; i++)
arr[i]= rand() % (rangeR -
rangeL + 1) +
rangeL;
//rand()对整个范围取余,再加上偏移量
return arr;
}
}
#endif
main:
// SelectionSort.cpp:
定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include<iostream>
#include<algorithm>
#include<string>
#include"Student.h"
#include"SortTestHelper.h"
usingnamespace std;
//泛型
template<typenameT>
voidselectionSort(Tarr[],
intn) {
for (int i = 0; i <
n; i++) {
//寻找(i, n)区间中的最小值及其所在位置
int minIndex = i;//每次默认未排序部分的第一个为最小值
for (int j = i + 1; j <
n; j++)
if (arr[j] <
arr[minIndex])
minIndex= j;
//交换
swap(arr[i],
arr[minIndex]);//老版中swap函数在algorithm库
}
}
//打印函数
template<typenameT>
voidprintArray(Tarr[],
intn) {
for (int i = 0; i <
n; i++)
cout<< arr[i]<<
" ";
cout<< endl;
}
int main()
{
int n = 10000;//随机数组的长度
int *arr =SortTestHelper::generateRandomArray(n, 0, n);
selectionSort(arr,n);
printArray(arr,n);
//在SortTestHelper中使用了new开辟了新的命名空间,此处释放,避免内存泄漏
delete[] arr;//arr开的是数组空间,故用该方法释放
return 0;
}
【运行截图】:以下为首、尾截图(10000个在[0, 10000]范围内的随机数经选择排序selectionSort后的结果)
相关文章推荐
- 用JS实现根据当前时间随机生成流水号或者订单号
- c#根据当前系统时间生成的随机序列数
- 两种方法利用Java生成唯一ID,取当前时间与字母随机组合,并发少的情况足以胜任
- 根据当前文件夹下所有文件随机自动生成训练和测试样本列表
- 时间格式化以及获取当前时间,利用日期生成随机数字
- 2-3 随机生成算法测试用例-Selection-Sort-Generate-Test-Cases
- java随机生成测试用例
- java随机生成时间字符串的方法
- SQL 生成随机时间
- Oracle生成随机日期时间
- Java—以当前系统时间生成随机数
- 用TestDirector生成的测试用例
- php pear benchmark测试随机生成密码函数性能
- Java 批量随机生成身份证号码(未测试)
- 使用timeit模块 测试两种方式生成列表的所用的时间
- 一个用TestDirector生成的测试用例
- 函数:以当前时间为文件名的生成
- 测试用例“当前状态”
- 面向安全苛求软件的测试用例自动生成(转载)
- 用组合提高软件测试用例的生成