tuple-ts 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/dist/index.js.map +0 -1
- package/dist/record.spec.d.ts +0 -2
- package/dist/record.spec.d.ts.map +0 -1
- package/dist/record.spec.js +0 -24
- package/dist/struct.spec.d.ts +0 -2
- package/dist/struct.spec.d.ts.map +0 -1
- package/dist/struct.spec.js +0 -35
- package/dist/tuple.spec.d.ts +0 -2
- package/dist/tuple.spec.d.ts.map +0 -1
- package/dist/tuple.spec.js +0 -102
package/package.json
CHANGED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/record.spec.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"record.spec.d.ts","sourceRoot":"","sources":["../src/record.spec.ts"],"names":[],"mappings":""}
|
package/dist/record.spec.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { struct } from ".";
|
|
2
|
-
describe("struct", () => {
|
|
3
|
-
it("preserves keys and values", () => {
|
|
4
|
-
const a = struct({ x: 1, y: 2 });
|
|
5
|
-
expect(a).toEqual({ x: 1, y: 2 });
|
|
6
|
-
});
|
|
7
|
-
it("returns the same object for shallow-equal input objects", () => {
|
|
8
|
-
const a = struct({ x: 1, y: 2 });
|
|
9
|
-
const b = struct({ x: 1, y: 2 });
|
|
10
|
-
expect(a).toBe(b);
|
|
11
|
-
});
|
|
12
|
-
it("returns different object if keys or values differ", () => {
|
|
13
|
-
const r = struct({ x: 1, y: 2 });
|
|
14
|
-
expect(struct({ x: 1, y: 3 })).not.toBe(r);
|
|
15
|
-
expect(struct({ x: 1, y: 3 })).not.toBe(r);
|
|
16
|
-
expect(struct({ x: 1, y: 2, z: 3 })).not.toBe(r);
|
|
17
|
-
});
|
|
18
|
-
it("can be customised", () => {
|
|
19
|
-
const geocode = (struct);
|
|
20
|
-
const a = geocode({ lat: 1, long: 2 });
|
|
21
|
-
const b = geocode({ lat: 1, long: 2 });
|
|
22
|
-
expect(a).toBe(b);
|
|
23
|
-
});
|
|
24
|
-
});
|
package/dist/struct.spec.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"struct.spec.d.ts","sourceRoot":"","sources":["../src/struct.spec.ts"],"names":[],"mappings":""}
|
package/dist/struct.spec.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { struct } from ".";
|
|
2
|
-
describe("struct", () => {
|
|
3
|
-
it("preserves keys and values", () => {
|
|
4
|
-
const obj = { x: 1, y: 2 };
|
|
5
|
-
const s = struct(obj);
|
|
6
|
-
expect(s).toEqual(obj);
|
|
7
|
-
});
|
|
8
|
-
it("returns the same object for shallow-equal input objects", () => {
|
|
9
|
-
const a = struct({ x: 1, y: 2 });
|
|
10
|
-
const b = struct({ x: 1, y: 2 });
|
|
11
|
-
expect(a).toBe(b);
|
|
12
|
-
expect(a === b).toBe(true);
|
|
13
|
-
});
|
|
14
|
-
it("returns different object if keys or values differ", () => {
|
|
15
|
-
const s1 = struct({ x: 1, y: 2 });
|
|
16
|
-
const s2 = struct({ x: 1, y: 3 });
|
|
17
|
-
const s3 = struct({ x: 1, y: 2, z: 3 });
|
|
18
|
-
expect(s1).not.toBe(s2);
|
|
19
|
-
expect(s1).not.toBe(s3);
|
|
20
|
-
expect(s1 === s3).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
it("can be customised", () => {
|
|
23
|
-
const geocode = (struct);
|
|
24
|
-
const a = geocode({ lat: 1, long: 2 });
|
|
25
|
-
const b = geocode({ lat: 1, long: 2 });
|
|
26
|
-
expect(a).toBe(b);
|
|
27
|
-
});
|
|
28
|
-
it("returns frozen instances", () => {
|
|
29
|
-
const s = struct({ x: 1, y: 2 });
|
|
30
|
-
expect(Object.isFrozen(s)).toBe(true);
|
|
31
|
-
expect(() => {
|
|
32
|
-
s.x = 42;
|
|
33
|
-
}).toThrow();
|
|
34
|
-
});
|
|
35
|
-
});
|
package/dist/tuple.spec.d.ts
DELETED
package/dist/tuple.spec.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.spec.d.ts","sourceRoot":"","sources":["../src/tuple.spec.ts"],"names":[],"mappings":""}
|
package/dist/tuple.spec.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { tuple, _tupleCache } from ".";
|
|
2
|
-
async function waitForGC() {
|
|
3
|
-
await new Promise((res) => setTimeout(res, 0));
|
|
4
|
-
global.gc(); // requires node --expose-gc
|
|
5
|
-
await new Promise((res) => setTimeout(res, 0));
|
|
6
|
-
}
|
|
7
|
-
test("Empty tuples", () => {
|
|
8
|
-
const a = tuple();
|
|
9
|
-
const b = tuple();
|
|
10
|
-
expect(b).toBe(a); // identity
|
|
11
|
-
expect(a === b).toBe(true); // equality
|
|
12
|
-
});
|
|
13
|
-
test("Indexability", () => {
|
|
14
|
-
const a = {};
|
|
15
|
-
const t = tuple(42, "blah", a);
|
|
16
|
-
expect(t[0]).toBe(42);
|
|
17
|
-
expect(t[1]).toBe("blah");
|
|
18
|
-
expect(t[2]).toBe(a);
|
|
19
|
-
});
|
|
20
|
-
test("Iterability", () => {
|
|
21
|
-
const a = {};
|
|
22
|
-
const t = tuple(42, "blah", a);
|
|
23
|
-
expect(typeof t[Symbol.iterator]).toBe("function");
|
|
24
|
-
expect([...t]).toEqual([42, "blah", a]);
|
|
25
|
-
});
|
|
26
|
-
test("Basic interned equality (if same input, same object)", () => {
|
|
27
|
-
const a = {};
|
|
28
|
-
const f = () => { };
|
|
29
|
-
const t1 = tuple(a, f, 42, "hi", undefined, true, null, 7839278492n);
|
|
30
|
-
const t2 = tuple(a, f, 42, "hi", undefined, true, null, 7839278492n);
|
|
31
|
-
expect(t1).toBe(t2); // identity
|
|
32
|
-
expect(t1 === t2).toBe(true); // equality
|
|
33
|
-
});
|
|
34
|
-
test("Referential inequality (same structure, different references)", () => {
|
|
35
|
-
const t1 = tuple({}, 42);
|
|
36
|
-
const t2 = tuple({}, 42);
|
|
37
|
-
expect(t1).not.toBe(t2); // non-identity
|
|
38
|
-
expect(t1 === t2).toBe(false); // non-equality
|
|
39
|
-
});
|
|
40
|
-
test("Different-length tuples are different tuples", () => {
|
|
41
|
-
const t1 = tuple(1, 2);
|
|
42
|
-
const t2 = tuple(1, 2, 3);
|
|
43
|
-
const t3 = tuple(1, 2, undefined);
|
|
44
|
-
expect(t1).not.toBe(t2);
|
|
45
|
-
expect(t1).not.toBe(t3);
|
|
46
|
-
});
|
|
47
|
-
test("Nestable", () => {
|
|
48
|
-
const t1 = tuple("a", tuple("b1", "b2"), "c");
|
|
49
|
-
const t2 = tuple("a", tuple("b1", "b2"), "c");
|
|
50
|
-
const t3 = tuple("a", tuple("b1", "b3"), "c");
|
|
51
|
-
expect(t2).toBe(t1);
|
|
52
|
-
expect(t1 === t2).toBe(true);
|
|
53
|
-
expect(t3).not.toBe(t1);
|
|
54
|
-
});
|
|
55
|
-
test("NaN is equivalent to itself", () => {
|
|
56
|
-
expect(tuple(NaN)).toBe(tuple(NaN));
|
|
57
|
-
expect(tuple(NaN) === tuple(NaN)).toBe(true);
|
|
58
|
-
});
|
|
59
|
-
test("NaN values with different bit representations are interned as identical", () => {
|
|
60
|
-
// Construct NaN with payload 1
|
|
61
|
-
const view1 = new DataView(new ArrayBuffer(8));
|
|
62
|
-
view1.setUint32(0, 0x7ff80000);
|
|
63
|
-
view1.setUint32(4, 0x00000001);
|
|
64
|
-
const nan1 = view1.getFloat64(0);
|
|
65
|
-
// Construct NaN with payload 2
|
|
66
|
-
const view2 = new DataView(new ArrayBuffer(8));
|
|
67
|
-
view2.setUint32(0, 0x7ff80000);
|
|
68
|
-
view2.setUint32(4, 0x00000002);
|
|
69
|
-
const nan2 = view2.getFloat64(0);
|
|
70
|
-
// Verify they are both recognized as NaNs and Object.is equivalent:
|
|
71
|
-
expect(Number.isNaN(nan1)).toBe(true);
|
|
72
|
-
expect(Number.isNaN(nan2)).toBe(true);
|
|
73
|
-
expect(Object.is(nan1, nan2)).toBe(true);
|
|
74
|
-
// If NaNs were not canonicalized in numberToUint32s, this would fail (.not.toBe)
|
|
75
|
-
// because nan1 and nan2 would hash to different buckets:
|
|
76
|
-
expect(tuple(nan1)).toBe(tuple(nan2));
|
|
77
|
-
expect(tuple(nan1) === tuple(nan2)).toBe(true);
|
|
78
|
-
});
|
|
79
|
-
test("Positive and negative zero are distinct", () => {
|
|
80
|
-
const t1 = tuple(+0);
|
|
81
|
-
const t2 = tuple(-0);
|
|
82
|
-
expect(t1).not.toBe(t2);
|
|
83
|
-
expect(t1 === t2).toBe(false);
|
|
84
|
-
expect(tuple(+0)).not.toBe(tuple(-0));
|
|
85
|
-
expect(tuple(+0) === tuple(-0)).toBe(false);
|
|
86
|
-
});
|
|
87
|
-
test("Tuple cache entry is cleared when tuple is garbage-collected", async () => {
|
|
88
|
-
_tupleCache.reset();
|
|
89
|
-
expect(_tupleCache.size).toBe(0);
|
|
90
|
-
const Point = (tuple);
|
|
91
|
-
Point(15, 42);
|
|
92
|
-
expect(_tupleCache.size).toBe(1);
|
|
93
|
-
await waitForGC();
|
|
94
|
-
expect(_tupleCache.size).toBe(0);
|
|
95
|
-
});
|
|
96
|
-
test("Tuples are frozen", () => {
|
|
97
|
-
const t = tuple(1, 2, 3);
|
|
98
|
-
expect(Object.isFrozen(t)).toBe(true);
|
|
99
|
-
expect(() => {
|
|
100
|
-
t[0] = 42;
|
|
101
|
-
}).toThrow();
|
|
102
|
-
});
|