1*c8dee2aaSAndroid Build Coastguard Worker// Tests for util-related things 2*c8dee2aaSAndroid Build Coastguard Workerdescribe('PathKit\'s CubicMap Behavior', function() { 3*c8dee2aaSAndroid Build Coastguard Worker it('computes YFromX correctly', function(done) { 4*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(catchException(done, () => { 5*c8dee2aaSAndroid Build Coastguard Worker // Spot check a few points 6*c8dee2aaSAndroid Build Coastguard Worker const testcases = [ 7*c8dee2aaSAndroid Build Coastguard Worker // input x, expected y 8*c8dee2aaSAndroid Build Coastguard Worker [0.025391, 0.117627], 9*c8dee2aaSAndroid Build Coastguard Worker [0.333984, 0.276221], 10*c8dee2aaSAndroid Build Coastguard Worker [0.662109, 0.366052], 11*c8dee2aaSAndroid Build Coastguard Worker [0.939453, 0.643296], 12*c8dee2aaSAndroid Build Coastguard Worker ]; 13*c8dee2aaSAndroid Build Coastguard Worker for (tc of testcases) { 14*c8dee2aaSAndroid Build Coastguard Worker expect(PathKit.cubicYFromX(0, 0.5, 1.0, 0, tc[0])).toBeCloseTo(tc[1], 5); 15*c8dee2aaSAndroid Build Coastguard Worker } 16*c8dee2aaSAndroid Build Coastguard Worker done(); 17*c8dee2aaSAndroid Build Coastguard Worker })); 18*c8dee2aaSAndroid Build Coastguard Worker }); 19*c8dee2aaSAndroid Build Coastguard Worker it('computes a point from T correctly', function(done) { 20*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(catchException(done, () => { 21*c8dee2aaSAndroid Build Coastguard Worker // Spot check a few points 22*c8dee2aaSAndroid Build Coastguard Worker const testcases = [ 23*c8dee2aaSAndroid Build Coastguard Worker // input t, expected x, expected y 24*c8dee2aaSAndroid Build Coastguard Worker [0.25, [0.128125, 0.240625]], 25*c8dee2aaSAndroid Build Coastguard Worker [0.5, [0.35, 0.35]], 26*c8dee2aaSAndroid Build Coastguard Worker [0.75, [0.646875, 0.534375]], 27*c8dee2aaSAndroid Build Coastguard Worker [1.0, [1.0, 1.0]], 28*c8dee2aaSAndroid Build Coastguard Worker ]; 29*c8dee2aaSAndroid Build Coastguard Worker for (tc of testcases) { 30*c8dee2aaSAndroid Build Coastguard Worker let ans = PathKit.cubicPtFromT(0.1, 0.5, 0.5, 0.1, tc[0]); 31*c8dee2aaSAndroid Build Coastguard Worker expect(ans).toBeTruthy(); 32*c8dee2aaSAndroid Build Coastguard Worker expect(ans.length).toBe(2); 33*c8dee2aaSAndroid Build Coastguard Worker expect(ans[0]).toBeCloseTo(tc[1][0]); 34*c8dee2aaSAndroid Build Coastguard Worker expect(ans[1]).toBeCloseTo(tc[1][1]); 35*c8dee2aaSAndroid Build Coastguard Worker } 36*c8dee2aaSAndroid Build Coastguard Worker done(); 37*c8dee2aaSAndroid Build Coastguard Worker })); 38*c8dee2aaSAndroid Build Coastguard Worker }); 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker it('does not leak, with or without cache', function(done) { 41*c8dee2aaSAndroid Build Coastguard Worker LoadPathKit.then(catchException(done, () => { 42*c8dee2aaSAndroid Build Coastguard Worker // Run it a lot to make sure we don't leak. 43*c8dee2aaSAndroid Build Coastguard Worker for (let i = 0; i < 300000; i++) { 44*c8dee2aaSAndroid Build Coastguard Worker PathKit.cubicYFromX(0.1, 0.5, 0.5, 0.1, 0.1); 45*c8dee2aaSAndroid Build Coastguard Worker PathKit.cubicPtFromT(0.1, 0.5, 0.5, 0.1, 0.1); 46*c8dee2aaSAndroid Build Coastguard Worker } 47*c8dee2aaSAndroid Build Coastguard Worker done(); 48*c8dee2aaSAndroid Build Coastguard Worker })); 49*c8dee2aaSAndroid Build Coastguard Worker }); 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker}); 52