blob: 3e7f5c9a4a6a3d9013528a24cd6e8049201af036 [file] [log] [blame]
Kevin Lubick774be5a2018-09-07 14:00:41 -04001// Tests for util-related things
Kevin Lubick774be5a2018-09-07 14:00:41 -04002describe('PathKit\'s CubicMap Behavior', function() {
Kevin Lubick774be5a2018-09-07 14:00:41 -04003 it('computes YFromX correctly', function(done) {
Kevin Lubicke71e9ef2018-11-05 07:51:40 -05004 LoadPathKit.then(catchException(done, () => {
Kevin Lubick774be5a2018-09-07 14:00:41 -04005 // 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();
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050017 }));
Kevin Lubick774be5a2018-09-07 14:00:41 -040018 });
19 it('computes a point from T 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 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();
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050037 }));
Kevin Lubick774be5a2018-09-07 14:00:41 -040038 });
39
40 it('does not leak, with or without cache', function(done) {
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050041 LoadPathKit.then(catchException(done, () => {
Kevin Lubick774be5a2018-09-07 14:00:41 -040042 // 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();
Kevin Lubicke71e9ef2018-11-05 07:51:40 -050048 }));
Kevin Lubick774be5a2018-09-07 14:00:41 -040049 });
50
Kevin Lubickfaa73872019-01-06 22:27:54 -050051});