| // 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, |
| }).ready().then((_PathKit) => { |
| PathKit = _PathKit; |
| resolve(); |
| }); |
| } |
| }); |
| |
| it('computes YFromX correctly', function(done) { |
| LoadPathKit.then(catchException(done, () => { |
| // 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(catchException(done, () => { |
| // 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(catchException(done, () => { |
| // 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(); |
| })); |
| }); |
| |
| }); |