// Tests for util-related things

describe('PathKit\'s CubicMap Behavior', function() {
    // Note, don't try to print the PathKit object - it can cause Karma/Jasmine to lock up.
    var PathKit = null;
    const LoadPathKit = new Promise(function(resolve, reject) {
        if (PathKit) {
            resolve();
        } else {
            PathKitInit({
                locateFile: (file) => '/pathkit/'+file,
            }).then((_PathKit) => {
                PathKit = _PathKit;
                resolve();
            });
        }
    });

    it('computes YFromX correctly', function(done) {
        LoadPathKit.then(() => {
            // Spot check a few points
            const testcases = [
                // input x, expected y
                [0.025391,  0.117627],
                [0.333984,  0.276221],
                [0.662109,  0.366052],
                [0.939453,  0.643296],
            ];
            for (tc of testcases) {
                expect(PathKit.cubicYFromX(0, 0.5, 1.0, 0, tc[0])).toBeCloseTo(tc[1], 5);
            }
            done();
        });
    });
    it('computes a point from T correctly', function(done) {
        LoadPathKit.then(() => {
            // Spot check a few points
            const testcases = [
                // input t, expected x, expected y
                [0.25, [0.128125, 0.240625]],
                [0.5,  [0.35, 0.35]],
                [0.75, [0.646875, 0.534375]],
                [1.0, [1.0, 1.0]],
            ];
            for (tc of testcases) {
                let ans = PathKit.cubicPtFromT(0.1, 0.5, 0.5, 0.1, tc[0]);
                expect(ans).toBeTruthy();
                expect(ans.length).toBe(2);
                expect(ans[0]).toBeCloseTo(tc[1][0]);
                expect(ans[1]).toBeCloseTo(tc[1][1]);
            }
            done();
        });
    });

    it('does not leak, with or without cache', function(done) {
        LoadPathKit.then(() => {
            // Run it a lot to make sure we don't leak.
            for (let i = 0; i < 300000; i++) {
                PathKit.cubicYFromX(0.1, 0.5, 0.5, 0.1, 0.1);
                PathKit.cubicPtFromT(0.1, 0.5, 0.5, 0.1, 0.1);
            }
            done();
        });
    });

});