blob: 1423d9f4ac72549f99d6972331151c1314c110eb [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,
Kevin Lubick275eaff2019-01-04 14:38:29 -050012 }).ready().then((_PathKit) => {
Kevin Lubick774be5a2018-09-07 14:00:41 -040013 PathKit = _PathKit;
14 resolve();
15 });
16 }
17 });
18
19 it('computes YFromX correctly', function(done) {
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050020 LoadPathKit.then(catchException(done, () => {
Kevin Lubick774be5a2018-09-07 14:00:41 -040021 // 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();
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050033 }));
Kevin Lubick774be5a2018-09-07 14:00:41 -040034 });
35 it('computes a point from T correctly', function(done) {
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050036 LoadPathKit.then(catchException(done, () => {
Kevin Lubick774be5a2018-09-07 14:00:41 -040037 // 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();
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050053 }));
Kevin Lubick774be5a2018-09-07 14:00:41 -040054 });
55
56 it('does not leak, with or without cache', function(done) {
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050057 LoadPathKit.then(catchException(done, () => {
Kevin Lubick774be5a2018-09-07 14:00:41 -040058 // 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();
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050064 }));
Kevin Lubick774be5a2018-09-07 14:00:41 -040065 });
66
67});