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

      public static void insertionSort(int[] arr) {

      1. if (arr == null || arr.length < 2) {
      2. return;
      3. }
      4. for (int i = 1; i < arr.length; i++) {
      5. for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
      6. swap(arr, j, j + 1);
      7. }
      8. }

      }

      public static void swap(int[] arr, int i, int j) {

       arr[i] = arr[i] ^ arr[j];
       arr[j] = arr[i] ^ arr[j];
       arr[i] = arr[i] ^ arr[j];
      

      }

      // for test public static void comparator(int[] arr) {

       Arrays.sort(arr);
      

      }

      // for 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;
      

      }

      // 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();
      

      }

      // for test 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(arr1);
           comparator(arr2);
           if (!isEqual(arr1, arr2)) {
               succeed = false;
               break;
           }
       }
       System.out.println(succeed ? "Nice!" : "Fucking fucked!");
      
       int[] arr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       insertionSort(arr);
       printArray(arr);
      

      }

    }

    ```