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