Home Reference Source Test

spec/peakcache.spec.js

/* eslint-env jasmine */
import PeakCache from '../src/peakcache';

describe('PeakCache:', function() {
    let peakcache;
    let test_length = 200;
    let test_length2 = 300;
    let test_start = 50;
    let test_end = 100;
    let test_start2 = 100;
    let test_end2 = 120;
    let test_start3 = 120;
    let test_end3 = 150;

    let window_size = 20;

    function __createPeakCache() {
        peakcache = new PeakCache();
    }

    beforeEach(function(done) {
        __createPeakCache();
        done();
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    it('empty cache returns full range', function() {
        let newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start,
            test_end
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_start);
        expect(newranges[0][1]).toEqual(test_end);
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    it('different length clears cache', function() {
        peakcache.addRangeToPeakCache(test_length, test_start, test_end);
        let newranges = peakcache.addRangeToPeakCache(
            test_length2,
            test_start,
            test_end
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_start);
        expect(newranges[0][1]).toEqual(test_end);
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    it('consecutive calls return no ranges', function() {
        peakcache.addRangeToPeakCache(test_length, test_start, test_end);
        let newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start,
            test_end
        );
        expect(newranges.length).toEqual(0);
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    it('sliding window returns window sized range', function() {
        let newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start,
            test_end
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_start);
        expect(newranges[0][1]).toEqual(test_end);
        newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start + window_size,
            test_end + window_size
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_end);
        expect(newranges[0][1]).toEqual(test_end + window_size);
        newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start + window_size * 2,
            test_end + window_size * 2
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_end + window_size);
        expect(newranges[0][1]).toEqual(test_end + window_size * 2);
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    /** @test {PeakCache#getCacheRanges} */
    it('disjoint set creates two ranges', function() {
        peakcache.addRangeToPeakCache(test_length, test_start, test_end);
        peakcache.addRangeToPeakCache(test_length, test_start3, test_end3);
        let ranges = peakcache.getCacheRanges();
        expect(ranges.length).toEqual(2);
        expect(ranges[0][0]).toEqual(test_start);
        expect(ranges[0][1]).toEqual(test_end);
        expect(ranges[1][0]).toEqual(test_start3);
        expect(ranges[1][1]).toEqual(test_end3);
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    /** @test {PeakCache#getCacheRanges} */
    it('filling in disjoint sets coalesces', function() {
        peakcache.addRangeToPeakCache(test_length, test_start, test_end);
        peakcache.addRangeToPeakCache(test_length, test_start3, test_end3);
        let newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start,
            test_end3
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_end);
        expect(newranges[0][1]).toEqual(test_start3);
        let ranges = peakcache.getCacheRanges();
        expect(ranges.length).toEqual(1);
        expect(ranges[0][0]).toEqual(test_start);
        expect(ranges[0][1]).toEqual(test_end3);
    });

    /** @test {PeakCache#addRangeToPeakCache} */
    /** @test {PeakCache#getCacheRanges} */
    it('filling in disjoint sets coalesces / edge cases', function() {
        peakcache.addRangeToPeakCache(test_length, test_start, test_end);
        peakcache.addRangeToPeakCache(test_length, test_start3, test_end3);
        let newranges = peakcache.addRangeToPeakCache(
            test_length,
            test_start2,
            test_end2
        );
        expect(newranges.length).toEqual(1);
        expect(newranges[0][0]).toEqual(test_end);
        expect(newranges[0][1]).toEqual(test_start3);
        let ranges = peakcache.getCacheRanges();
        expect(ranges.length).toEqual(1);
        expect(ranges[0][0]).toEqual(test_start);
        expect(ranges[0][1]).toEqual(test_end3);
    });
});