手动测试是否正确——对数器

手动测试是否正确——对数器

想要测试自己写的方法是否正确,除了通过在线测试平台,还可以通过自己创建对数器来测试。

对数器组成:
元素1:要测试的方法a
元素2:在不考虑时间复杂度下,好想好做稳定的,与方法a同功能的方法b(暴力解法、编译器内置函数方法等等)
元素3:一个随机样本产生器

过程:
让随机样本在方法a中跑一遍,再在方法b中跑一遍,将两次得到的结果进行比对,若是一致则正确,不一致则方法a有问题,测试次数要多。

举例:
我想测试我写的冒泡排序是否正确。
方法a:

public static void Bubble(int[] arr)//冒泡排序法
{
    
    
    if (arr == null || arr.Length < 2)//筛选数组
    {
    
    
        return;
    }

    for (int i = arr.Length - 1; i > 0; i--)//交换的趟数
    {
    
    
        for (int j = 0; j < arr.Length - 1; j++)//j<arr.Length-1,防止数组越界,因为有j+1
        {
    
    
            if (arr[j] > arr[j + 1])//比较,大的数字后移,先确定的是最后的数字,即最大的数字
                Swap(arr, j, j + 1);
        }
    }
}
public static void Swap(int[] arr, int minIndex, int i)
{
    
    //这种交换方式虽然快但是容易出问题
    arr[minIndex] = arr[minIndex] ^ arr[i];
    arr[i] = arr[minIndex] ^ arr[i];
    arr[minIndex] = arr[minIndex] ^ arr[i];
}

方法b:C#中的排序函数

public static void Comparator(int[] arr)
{
    
    
    Array.Sort(arr);//编译器自带排序函数,做对数器的B函数
}

随机样本产生器:

public static int[] GenerateRandomArray(int maxSize, int maxValue)//随机数组生成器
{
    
    //可以控制数组最大个数及最大值
    Random random = new Random();
    int[] arr = new int[random.Next(0, maxSize + 1)];//生成[0,maxSize]中的随机数,实现数组大小随机
    for (int i = 0; i < arr.Length; i++)
        arr[i] = random.Next(0, maxValue + 1) - random.Next(0, maxValue);//实现每个元素随机
    return arr;
}

进行测试,在main函数:

int testTime = 10000;//定义测试次数
 int maxSize = 100; //定义数组最大长度
 int maxValue = 100;//定义最大值
 bool succeed = true;
 for (int i = 0; i < testTime; i++)
  {
    
    
     int[] arr5 = GenerateRandomArray(maxSize, maxValue);
     int[] arr6 = new int[arr5.Length];
     Array.Copy(arr5, 0, arr6, 0, arr5.Length);//将arr5复制到arr6
     Bubble(arr5);
     Comparator(arr6);
     if (!Enumerable.SequenceEqual(arr5, arr6))//判断两个数组是否相同
     {
    
    
         Console.WriteLine(string.Join(",", arr5));
         Console.WriteLine(string.Join(",", arr6));
         succeed = false;
         break;
     }
}
 Console.WriteLine(succeed);

其中的方法B一定要是准确的,这样才能比较出方法a是否正确。
如有问题,欢迎留言。 o( ̄▽ ̄)ブ

猜你喜欢

转载自blog.csdn.net/weixin_51565051/article/details/129693147
今日推荐