- 有一个你想要测的方法a
- 实现复杂度不好但是容易实现的方法b
- 实现一个随机样本产生器
- 把方法a和方法b跑相同的随机样本,看看得到的结果是否一样。
- 如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,改对方法a或者方法b。
- 当样本数量很多时比对测试依然正确,可以确定方法a已经确定。
简而言之就是测试你的方法是否写对了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| package src.main.java.day01;
import java.util.Arrays;
public class Test { public static int[] generateRandomArray(int maxSize, int maxValue) {
int[] arr = new int[(int) ((maxSize + 1) * Math.random())]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random()); } return arr; }
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; }
public static void collation (int [] arr) { Arrays.sort(arr); }
public static boolean isEqual(int[] arr1, int[] arr2) { if (arr1.length != arr2.length) { return false; } for (int i = 0; i <arr1.length; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; }
public static void printArray(int[] arr) { for (int j : arr) { System.out.println(j); } }
public static void main(String[] args) { int testTime = 500000; int maxSize = 100; int maxValue = 100; boolean succeed = true; for (int i = 0; i < testTime; i++) { int [] arr1 = generateRandomArray(maxSize,maxValue); int [] arr2 = copyArray(arr1); InsertionSort.insertionSort(arr1); collation(arr2); if (!isEqual(arr1, arr2)) { succeed = false; break; } } System.out.println(succeed ? "Nice!" : "Fucking fucked!"); int [] arr = generateRandomArray(maxSize,maxValue); printArray(arr); InsertionSort.insertionSort(arr); printArray(arr); } }
|