对数器的概念和使用
1,有一个你想要测的方法a
2,实现复杂度不好但是容易实现的方法b
3,实现一个随机样本产生器
4,把方法a和方法b跑相同的随机样本,看看得到的结果是否一样。
5,如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,改对方法a或者
方法b
6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。
code (test1.py)
"""
对数器: 对写的新方法进行验证
1. 新方法
2. 绝对正确的方法
3. 随机大样本验证 (随机样本的生成,验证样本的复制、打印、错误输出)
"""
import math
import random
def swap(arr, i, j):arr[i],arr[j] = arr[j], arr[i]return
def comparator(arr): arr.sort()return
def generateRandomArray(maxSize:int, maxValue:int):lens = int((maxSize + 1) * random.random())arr = [0] * lensfor i in range(lens):val = (maxValue + 1) * random.random() - (maxValue * random.random())arr[i] = int(val)return arr
def generateRandomArraySimple(maxSize:int, maxValue:int):lens = random.randint(1 , maxSize)arr = [random.randint(-maxValue, maxValue) for _ in range(lens)]return arr
def copyArray(arr:list):if arr == []:return []return [v for v in arr]def copyArraySim(arr):return arr.copy()
def isEqual( arr1, arr2):if len(arr1) != len(arr2): return False for i in range(len(arr1)):if arr1[i] != arr2[i]:return False return Truedef printArray(arr):if arr == []: returnfor v in arr: print(v, end=' ')print()returndef selectionSort(arr):pass
def main():testTime = int(5e5)maxSize = 100maxValue = 100succeed = Truefor i in range(testTime):arr1 = generateRandomArray(maxSize, maxValue)arr2 = copyArray(arr1)selectionSort(arr1)comparator(arr2)if (not isEqual(arr1, arr2)): succeed = FalseprintArray(arr1)printArray(arr2)breakprint(i, succeed)if succeed:print("Nice!")else:print("Fucking fucked!")arr = generateRandomArray(maxSize, maxValue)printArray(arr)selectionSort(arr)printArray(arr)if __name__ == '__main__':main()