1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| // Tests for util-related things
| jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
| 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();
| }));
| });
|
| });
|
|