blob: 2161769f9b45c5eb8e6e504e1662f40ed053ab04 [file] [log] [blame]
Kevin Lubick774be5a2018-09-07 14:00:41 -04001// Tests for util-related things
2
3describe('PathKit\'s CubicMap Behavior', function() {
4 // Note, don't try to print the PathKit object - it can cause Karma/Jasmine to lock up.
5 var PathKit = null;
6 const LoadPathKit = new Promise(function(resolve, reject) {
7 if (PathKit) {
8 resolve();
9 } else {
10 PathKitInit({
11 locateFile: (file) => '/pathkit/'+file,
12 }).then((_PathKit) => {
13 PathKit = _PathKit;
14 resolve();
15 });
16 }
17 });
18
19 it('computes YFromX correctly', function(done) {
20 LoadPathKit.then(() => {
21 // Spot check a few points
22 const testcases = [
23 // input x, expected y
24 [0.025391, 0.117627],
25 [0.333984, 0.276221],
26 [0.662109, 0.366052],
27 [0.939453, 0.643296],
28 ];
29 for (tc of testcases) {
30 expect(PathKit.cubicYFromX(0, 0.5, 1.0, 0, tc[0])).toBeCloseTo(tc[1], 5);
31 }
32 done();
33 });
34 });
35 it('computes a point from T correctly', function(done) {
36 LoadPathKit.then(() => {
37 // Spot check a few points
38 const testcases = [
39 // input t, expected x, expected y
40 [0.25, [0.128125, 0.240625]],
41 [0.5, [0.35, 0.35]],
42 [0.75, [0.646875, 0.534375]],
43 [1.0, [1.0, 1.0]],
44 ];
45 for (tc of testcases) {
46 let ans = PathKit.cubicPtFromT(0.1, 0.5, 0.5, 0.1, tc[0]);
47 expect(ans).toBeTruthy();
48 expect(ans.length).toBe(2);
49 expect(ans[0]).toBeCloseTo(tc[1][0]);
50 expect(ans[1]).toBeCloseTo(tc[1][1]);
51 }
52 done();
53 });
54 });
55
56 it('does not leak, with or without cache', function(done) {
57 LoadPathKit.then(() => {
58 // Run it a lot to make sure we don't leak.
59 for (let i = 0; i < 300000; i++) {
60 PathKit.cubicYFromX(0.1, 0.5, 0.5, 0.1, 0.1);
61 PathKit.cubicPtFromT(0.1, 0.5, 0.5, 0.1, 0.1);
62 }
63 done();
64 });
65 });
66
67});