OldvsNewEncoder

Benchmark created on


Setup

var _totalArrays, _firstTrue, _lastTrue, _lastIDX;
        var _key = [];
        var _segmentsA = [
                [0,0,0,0,1,0,0], //[0,0,0,0,1,0,0]
                [0,0,0,0,1,0,0], //[0,0,0,0,1,0,0]
            [0,0,0,1,0,0,0], //[1,1,1,1,0,1,1]
            [0,0,0,1,0,0,0]  //[1,1,1,1,0,1,1]
        ];
        var _segmentResult = [
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0],
                [0,0,0,0,0,0,0]
        ];
        var _segmentResult2 = [];

Test runner

Ready to run.

Testing in
TestOps/sec
old
    function encodeSchedule(segment){
        _totalArrays    = segment.length;
        _lastIDX                = segment[0].length - 1;
        generateKey(segment);
        setFirstTrue();
        _lastTrue = _firstTrue;
        encode(segment);
    }

    function generateKey(segment){
        for (var i = 0; i <=_lastIDX; i++){
            for (var j = 0; j < _totalArrays; j++){
                _key[i] = _key[i] | segment[j][i];
            }
        }
    }

    function setFirstTrue(){
        _firstTrue = _key.indexOf(1);
    }

    function writeValues(idx, array){
        var i = idx;
        do{
            _segmentResult[array][i] = 1;
            i--;
        }while(i>_lastTrue);
    }

    function writeWrappingValues(segment){
        for (var i = 0; i<_totalArrays; i++){
                if (segment[i][_firstTrue]){
                        var j = _firstTrue;

                        // Write ones from first true to the start of the array
                        do{
                            _segmentResult[i][j] = 1;
                            j--;
                        }while(j>=0);

                        // Write ones from end of array back to lastTrue if there were weren't any trues at end of array
                        if(_key[_lastIDX]===0){
                                var k = _lastIDX;
                                do{
                                    _segmentResult[i][k] = 1;
                                    k--;
                                }while(k>_lastTrue);
                        }
                }
        }
    }

    function findKeyMatch(idx){
        for (var i=0; i<_totalArrays; i++){
                _segmentsA[i][idx] && writeValues(idx,i);
        }
    }

    function encode(segment){
        for(var i=0; i<=_lastIDX; i++){
            if(_key[i]===1){
                findKeyMatch(i);
                _lastTrue=i;
            }
            if(i==(_lastIDX)){
                writeWrappingValues(segment);
            }
        }
    }
                encodeSchedule(_segmentsA);
ready
new
    function encodeSchedule(segment){
        _totalArrays    = segment.length;
        _lastIDX                = segment[0].length - 1;
        generateKey(segment);
        _firstTrue      = _key.indexOf(1);
        _lastTrue       = _firstTrue;
        encode(segment);
    }

    function generateKey(segment){
        for (var i = 0; i <=_lastIDX; i++){
            for (var j = 0; j < _totalArrays; j++){
                _key[i] = _key[i] | segment[j][i];
            }
        }
    }

    function writeValues(idx, segment){
        for (var i=0; i<_totalArrays; i++){
                for (var j=idx; j>_lastTrue; j--){
                        if (segment[i][idx]===1){
                                _segmentResult[i][j] = 1;
                        }
                }
            }
    }

    function wrapValues(segment){
        for (var i = 0; i<_totalArrays; i++){
                if (segment[i][_firstTrue]){
                        writeWrapValues(segment, i, 1);
                }
        }
    }

    function writeWrapValues(segment, idx, value){
        for(var j = _firstTrue; j>=0; j--){
                        _segmentResult[idx][j] = value;
                }
        if(_key[_lastIDX]===0){
                for(var k = _lastIDX; k>_lastTrue; k--){
                                _segmentResult[idx][k] = value;
                        }
        }
    }

    function encode(segment){
        for(var i=0; i<=_lastIDX; i++){
            if(_key[i]===1){
                writeValues(i, segment);
                _lastTrue=i;
            } else{
                writeValues(i, segment);
            }
            if(i==(_lastIDX)){
                wrapValues(segment);
            }
        }
    }
encodeSchedule(_segmentsA);
 
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.