zoukankan      html  css  js  c++  java
  • JS实现对数器

    对数器的概念和使用

    对数器一般用于验证你写的算法是否正确,因为自己写的测试用例可能写的考虑不够全面。

    0.有一个你想测试的方法a

    1.实现一个绝对正确但是时间复杂度不好的方法b

    2.实现一个随机样本产生器

    3.实现比对的方法

    4.把方法a和方法b比对很多次来验证方法a是否正确

    5.如果有一个样本比对出错,打印样本分析是哪个方法出错

    6.当样本数量很多时,比对测试依然正确,可以确定方法a已经正确。

    举例代码

    假设我们需要测试我们自己写的插入排序

    //要测试的方法
    function insertSort(arr) {
        for (let i = 1; i < arr.length; i++) {
            for (let j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
            }
        }
    }
    //正确的方法
    function rightMethod(arr) {
        arr.sort((a, b)=>a - b);
    }
    //随机数组生成器,size为最大长度,value为最大值
    function generateRandomArray(size, value) {
        //生成长度随机的数组
        let arr = new Array(Math.floor((size + 1) * Math.random()));
        for (let i = 0; i < arr.length; i++) {
            arr[i] = Math.floor((value + 1) * Math.random());
        }
        return arr;
    }
    //拷贝数组方法
    function copyArray(arr) {
        if (arr == null) {
            return null;
        }
        return [].concat(arr);
    }
    //比对方法
    function isEqual(arr1, 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 (let i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                return false
            }
        }
        return true;
    }
    //测试
    function Test() {
        let testTimes = 5000;
        let size = 10;
        let value = 100;
        let succeed = true;
        for (let i = 0; i < testTimes; i++) {
            let arr1 = generateRandomArray(size, value);
            let arr2 = copyArray(arr1);
            let arr3 = copyArray(arr1);
            insertSort(arr1);
            rightMethod(arr2);
            if (!isEqual(arr1, arr2)) {
                succeed = false;
                console.log(arr3);
                break;
            }
        }
        console.log(succeed ? "nice" : "Fucking fucked");
    }
    Test();

    如果输入nice说明所有测试用例正确。

  • 相关阅读:
    项目启动报错:No suitable driver found for jdbc:oracle:thin:@192.168.7.146:1521:oracle
    (八)Oracle学习笔记—— 触发器
    (七)Oracle学习笔记—— 游标
    spring自动装配(No qualifying bean )
    Intellij output 中文乱码
    使用Spring开发和监控线程池服务
    IDEA在编辑时提示could not autowire
    java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
    Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别
    idea 添加多模块项目
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/TestMethod.html
Copyright © 2011-2022 走看看