认识对数器

1,你想要测的方法a
2,实现复杂度不好但是容易实现的方法b(可以用已有的库函数)
3,实现一个随机样本产生器
4,把方法a和方法b跑相同的随机样本,看看得到的结果是否一样
5,如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,改对方法a和方法b
6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。

// for test
public static void main(String[] args){
    int testTime = 500000;//测试次数
    int maxSize = 100;//数组最大长度
    int maxValue = 100;//数据最大值
    boolean succeed = true;
    //测试
    for(int i=testTime;i>0;i--){
        //随机样本
        int[] arr = generateRandomArray(maxSize, maxValue);
        int[] arr2 = copyArray(arr);
        //方法a
        bubbleSort(arr);
        //方法b
        comparator(arr2);
        //查看结果是否一样
        if(!isEqual(arr,arr2)){
            succeed = false;
            break;
        }
    }
    System.out.println(succeed?"Nice!":"Fucking fucked!");
    int[] arr = generateRandomArray(maxSize, maxValue);
    printArray(arr);
    bubbleSort(arr);
    printArray(arr);
}
//for test
private static int[] generateRandomArray(int maxSize,int maxValue){
    int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
    for(int i=0;i<arr.length;i++){
        //生成随机数
        int random = (int)(Math.random()*(maxSize+1)) - (int)(Math.random()*maxSize);
        arr[i] = random;
    }
    return arr;
}
// for test
public static int[] copyArray(int[] arr) {
    if(arr == null){
        return null;
    }
    int[] res = new int[arr.length];
    for(int i=0;i<arr.length;i++){
        res[i] = arr[i];
    }
    return res;
}
// for test
public static boolean isEqual(int[] arr1, int[] arr2) {
    if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
        return false;
    }
    if (arr1 == null && arr2 == null) {
        return true;
    }
    if (arr1.length != arr2.length) {
        return false;
    }
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] != arr2[i]) {
            return false;
        }
    }
    return true;
}
// for test
public static void printArray(int[] arr) {
    if (arr == null) {
        return;
    }
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
    System.out.println();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值