@synnaxlabs/x 0.42.3 → 0.44.0
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/.turbo/turbo-build.log +78 -78
- package/.vscode/settings.json +4 -6
- package/README.md +1 -7
- package/dist/array.cjs +1 -0
- package/dist/array.js +7 -0
- package/dist/binary.cjs +1 -1
- package/dist/binary.js +1 -1
- package/dist/bounds-D6e9xoHt.cjs +1 -0
- package/dist/bounds-Dj9nG39I.js +174 -0
- package/dist/bounds.cjs +1 -1
- package/dist/bounds.js +1 -1
- package/dist/{box-0YrQibkB.cjs → box-BcGdqkt4.cjs} +1 -1
- package/dist/{box-Cc8IzcNo.js → box-D_qdUyEe.js} +2 -2
- package/dist/box.cjs +1 -1
- package/dist/box.js +1 -1
- package/dist/caseconv.cjs +1 -1
- package/dist/caseconv.js +1 -1
- package/dist/compare.cjs +1 -1
- package/dist/compare.js +1 -1
- package/dist/deep.cjs +1 -1
- package/dist/deep.js +100 -88
- package/dist/{direction-C-b6XTeU.cjs → direction-386XDm2w.cjs} +1 -1
- package/dist/{direction-BL0PhD1k.js → direction-8etxfKaR.js} +4 -3
- package/dist/direction.cjs +1 -1
- package/dist/direction.js +1 -1
- package/dist/external-B9AAGv50.cjs +1 -0
- package/dist/external-BFgJjMcS.js +23 -0
- package/dist/{external-DqPrWKvU.js → external-BYuXBYJh.js} +10 -17
- package/dist/external-mffsMzJx.cjs +1 -0
- package/dist/index-B1m2qvBT.cjs +1 -0
- package/dist/index-B5l_quQn.js +92 -0
- package/dist/index-BQe8OIgm.cjs +3 -0
- package/dist/index-D2xcvEO5.js +46 -0
- package/dist/index-DdhM_E4k.cjs +1 -0
- package/dist/{index-QGplUHuy.js → index-PNh31WTW.js} +64 -37
- package/dist/index.cjs +3 -3
- package/dist/index.js +472 -428
- package/dist/kv.cjs +1 -1
- package/dist/kv.js +1 -1
- package/dist/{location-C3aeu046.js → location-Ar5y2DX2.js} +1 -1
- package/dist/{location-BGl5Ddds.cjs → location-DZi8ftXp.cjs} +1 -1
- package/dist/location.cjs +1 -1
- package/dist/location.js +1 -1
- package/dist/observe.cjs +1 -1
- package/dist/observe.js +16 -20
- package/dist/path-BXdMenka.js +101 -0
- package/dist/path-st_E5-LJ.cjs +1 -0
- package/dist/position-DAL0Qqdf.cjs +1 -0
- package/dist/position-bA6pUwLn.js +85 -0
- package/dist/position.cjs +1 -1
- package/dist/position.js +1 -1
- package/dist/record-CAcQ5PNX.js +14 -0
- package/dist/record-YvCh7bzB.cjs +1 -0
- package/dist/record.cjs +1 -1
- package/dist/record.js +2 -10
- package/dist/scale-Bzn1Cl0r.cjs +1 -0
- package/dist/{scale-DfJe9755.js → scale-CdTNWu-d.js} +55 -59
- package/dist/scale.cjs +1 -1
- package/dist/scale.js +1 -1
- package/dist/series-BeJyqCoP.js +2568 -0
- package/dist/series-anlpaR_I.cjs +6 -0
- package/dist/spatial.cjs +1 -1
- package/dist/spatial.js +6 -6
- package/dist/src/array/index.d.ts +2 -0
- package/dist/src/array/index.d.ts.map +1 -0
- package/dist/src/array/toArray.d.ts +19 -0
- package/dist/src/array/toArray.d.ts.map +1 -0
- package/dist/src/array/toArray.spec.d.ts +2 -0
- package/dist/src/array/toArray.spec.d.ts.map +1 -0
- package/dist/src/binary/codec.d.ts +7 -15
- package/dist/src/binary/codec.d.ts.map +1 -1
- package/dist/src/breaker/breaker.d.ts +5 -5
- package/dist/src/breaker/breaker.d.ts.map +1 -1
- package/dist/src/caseconv/caseconv.d.ts +0 -1
- package/dist/src/caseconv/caseconv.d.ts.map +1 -1
- package/dist/src/change/change.d.ts +2 -2
- package/dist/src/change/change.d.ts.map +1 -1
- package/dist/src/color/color.d.ts +60 -36
- package/dist/src/color/color.d.ts.map +1 -1
- package/dist/src/color/external.d.ts +0 -1
- package/dist/src/color/external.d.ts.map +1 -1
- package/dist/src/color/gradient.d.ts +6 -6
- package/dist/src/color/gradient.d.ts.map +1 -1
- package/dist/src/color/palette.d.ts +9 -9
- package/dist/src/color/palette.d.ts.map +1 -1
- package/dist/src/compare/compare.d.ts +8 -8
- package/dist/src/compare/compare.d.ts.map +1 -1
- package/dist/src/control/control.d.ts +39 -39
- package/dist/src/control/control.d.ts.map +1 -1
- package/dist/src/debounce/debounce.d.ts +1 -1
- package/dist/src/debounce/debounce.d.ts.map +1 -1
- package/dist/src/deep/delete.d.ts +1 -1
- package/dist/src/deep/delete.d.ts.map +1 -1
- package/dist/src/deep/difference.d.ts.map +1 -1
- package/dist/src/deep/equal.d.ts +4 -4
- package/dist/src/deep/equal.d.ts.map +1 -1
- package/dist/src/deep/merge.d.ts.map +1 -1
- package/dist/src/deep/path.d.ts +6 -6
- package/dist/src/deep/path.d.ts.map +1 -1
- package/dist/src/destructor.d.ts +6 -2
- package/dist/src/destructor.d.ts.map +1 -1
- package/dist/src/errors/errors.d.ts +65 -35
- package/dist/src/errors/errors.d.ts.map +1 -1
- package/dist/src/flush.d.ts +11 -0
- package/dist/src/flush.d.ts.map +1 -0
- package/dist/src/id/id.d.ts +1 -0
- package/dist/src/id/id.d.ts.map +1 -1
- package/dist/src/identity.d.ts +2 -2
- package/dist/src/identity.d.ts.map +1 -1
- package/dist/src/index.d.ts +7 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/instance/index.d.ts +2 -0
- package/dist/src/instance/index.d.ts.map +1 -0
- package/dist/src/instance/matcher.d.ts +79 -0
- package/dist/src/instance/matcher.d.ts.map +1 -0
- package/dist/src/instance/matcher.spec.d.ts +2 -0
- package/dist/src/instance/matcher.spec.d.ts.map +1 -0
- package/dist/src/jsonrpc/jsonrpc.d.ts +39 -8
- package/dist/src/jsonrpc/jsonrpc.d.ts.map +1 -1
- package/dist/src/kv/types.d.ts +1 -1
- package/dist/src/kv/types.d.ts.map +1 -1
- package/dist/src/map/index.d.ts +2 -0
- package/dist/src/map/index.d.ts.map +1 -0
- package/dist/src/map/map.d.ts +2 -0
- package/dist/src/map/map.d.ts.map +1 -0
- package/dist/src/map/map.spec.d.ts +2 -0
- package/dist/src/map/map.spec.d.ts.map +1 -0
- package/dist/src/math/math.d.ts +2 -4
- package/dist/src/math/math.d.ts.map +1 -1
- package/dist/src/migrate/migrate.d.ts +4 -4
- package/dist/src/migrate/migrate.d.ts.map +1 -1
- package/dist/src/optional.d.ts +0 -3
- package/dist/src/optional.d.ts.map +1 -1
- package/dist/src/primitive/index.d.ts +2 -0
- package/dist/src/primitive/index.d.ts.map +1 -0
- package/dist/src/primitive/primitive.d.ts +39 -0
- package/dist/src/primitive/primitive.d.ts.map +1 -0
- package/dist/src/primitive/primitive.spec.d.ts +2 -0
- package/dist/src/primitive/primitive.spec.d.ts.map +1 -0
- package/dist/src/record/index.d.ts +2 -0
- package/dist/src/record/index.d.ts.map +1 -0
- package/dist/src/record/record.d.ts +90 -0
- package/dist/src/record/record.d.ts.map +1 -0
- package/dist/src/record/record.spec.d.ts.map +1 -0
- package/dist/src/renderable.d.ts +1 -1
- package/dist/src/renderable.d.ts.map +1 -1
- package/dist/src/replace.d.ts.map +1 -1
- package/dist/src/runtime/detect.d.ts.map +1 -1
- package/dist/src/spatial/base.d.ts +9 -9
- package/dist/src/spatial/base.d.ts.map +1 -1
- package/dist/src/spatial/bounds/bounds.d.ts +82 -16
- package/dist/src/spatial/bounds/bounds.d.ts.map +1 -1
- package/dist/src/spatial/box/box.d.ts +6 -6
- package/dist/src/spatial/box/box.d.ts.map +1 -1
- package/dist/src/spatial/dimensions/dimensions.d.ts +4 -4
- package/dist/src/spatial/dimensions/dimensions.d.ts.map +1 -1
- package/dist/src/spatial/direction/direction.d.ts +2 -2
- package/dist/src/spatial/direction/direction.d.ts.map +1 -1
- package/dist/src/spatial/location/location.d.ts +3 -3
- package/dist/src/spatial/location/location.d.ts.map +1 -1
- package/dist/src/spatial/scale/scale.d.ts +10 -10
- package/dist/src/spatial/scale/scale.d.ts.map +1 -1
- package/dist/src/spatial/xy/xy.d.ts +4 -4
- package/dist/src/spatial/xy/xy.d.ts.map +1 -1
- package/dist/src/status/index.d.ts +2 -0
- package/dist/src/status/index.d.ts.map +1 -0
- package/dist/src/status/status.d.ts +42 -0
- package/dist/src/status/status.d.ts.map +1 -0
- package/dist/src/status/status.spec.d.ts +2 -0
- package/dist/src/status/status.spec.d.ts.map +1 -0
- package/dist/src/strings/strings.d.ts +16 -0
- package/dist/src/strings/strings.d.ts.map +1 -1
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/mutex.d.ts +0 -1
- package/dist/src/sync/mutex.d.ts.map +1 -1
- package/dist/src/telem/series.d.ts +473 -66
- package/dist/src/telem/series.d.ts.map +1 -1
- package/dist/src/telem/telem.d.ts +274 -61
- package/dist/src/telem/telem.d.ts.map +1 -1
- package/dist/src/testutil/testutil.d.ts +1 -0
- package/dist/src/testutil/testutil.d.ts.map +1 -1
- package/dist/src/testutil/testutil.spec.d.ts +2 -0
- package/dist/src/testutil/testutil.spec.d.ts.map +1 -0
- package/dist/src/uuid/index.d.ts +2 -0
- package/dist/src/uuid/index.d.ts.map +1 -0
- package/dist/src/uuid/uuid.d.ts +35 -0
- package/dist/src/uuid/uuid.d.ts.map +1 -0
- package/dist/src/uuid/uuid.spec.d.ts +2 -0
- package/dist/src/uuid/uuid.spec.d.ts.map +1 -0
- package/dist/src/zod/external.d.ts +2 -1
- package/dist/src/zod/external.d.ts.map +1 -1
- package/dist/src/zod/nullToUndefined.d.ts +3 -0
- package/dist/src/zod/nullToUndefined.d.ts.map +1 -0
- package/dist/src/zod/nullToUndefined.spec.d.ts +2 -0
- package/dist/src/zod/nullToUndefined.spec.d.ts.map +1 -0
- package/dist/src/zod/toArray.d.ts +3 -0
- package/dist/src/zod/toArray.d.ts.map +1 -0
- package/dist/src/zod/toArray.spec.d.ts +2 -0
- package/dist/src/zod/toArray.spec.d.ts.map +1 -0
- package/dist/src/zod/util.d.ts +1 -1
- package/dist/src/zod/util.d.ts.map +1 -1
- package/dist/telem.cjs +1 -1
- package/dist/telem.js +10 -11
- package/dist/url.cjs +1 -1
- package/dist/url.js +16 -19
- package/dist/worker.cjs +1 -1
- package/dist/worker.js +18 -22
- package/dist/zod.cjs +1 -1
- package/dist/zod.js +1 -1
- package/eslint.config.js +1 -1
- package/package.json +20 -23
- package/src/array/index.ts +10 -0
- package/src/array/toArray.spec.ts +56 -0
- package/src/array/toArray.ts +28 -0
- package/src/binary/codec.spec.ts +200 -277
- package/src/binary/codec.ts +19 -75
- package/src/breaker/breaker.ts +2 -2
- package/src/caseconv/caseconv.ts +14 -14
- package/src/change/change.ts +1 -1
- package/src/color/color.spec.ts +113 -2
- package/src/color/color.ts +88 -58
- package/src/color/external.ts +0 -1
- package/src/color/gradient.ts +19 -27
- package/src/compare/compare.ts +10 -10
- package/src/control/control.ts +22 -19
- package/src/debounce/debounce.ts +1 -1
- package/src/deep/delete.ts +5 -4
- package/src/deep/difference.ts +6 -2
- package/src/deep/equal.spec.ts +1 -1
- package/src/deep/equal.ts +5 -5
- package/src/deep/merge.spec.ts +1 -2
- package/src/deep/merge.ts +15 -6
- package/src/deep/path.spec.ts +41 -0
- package/src/deep/path.ts +48 -17
- package/src/destructor.ts +6 -2
- package/src/errors/errors.spec.ts +20 -20
- package/src/errors/errors.ts +67 -43
- package/src/flush.ts +21 -0
- package/src/id/id.spec.ts +1 -1
- package/src/id/id.ts +3 -1
- package/src/identity.ts +2 -2
- package/src/index.ts +7 -2
- package/src/instance/index.ts +10 -0
- package/src/instance/matcher.spec.ts +78 -0
- package/src/instance/matcher.ts +98 -0
- package/src/jsonrpc/jsonrpc.spec.ts +2 -1
- package/src/jsonrpc/jsonrpc.ts +35 -6
- package/src/map/index.ts +10 -0
- package/src/map/map.spec.ts +132 -0
- package/src/map/map.ts +17 -0
- package/src/math/math.ts +19 -27
- package/src/migrate/migrate.spec.ts +1 -1
- package/src/migrate/migrate.ts +7 -7
- package/src/optional.ts +0 -4
- package/src/primitive/index.ts +10 -0
- package/src/primitive/primitive.spec.ts +126 -0
- package/src/primitive/primitive.ts +82 -0
- package/src/record/index.ts +10 -0
- package/src/record/record.spec.ts +319 -0
- package/src/record/record.ts +118 -0
- package/src/renderable.ts +1 -1
- package/src/replace.ts +9 -0
- package/src/runtime/detect.ts +0 -2
- package/src/spatial/bounds/bounds.spec.ts +20 -0
- package/src/spatial/bounds/bounds.ts +101 -18
- package/src/spatial/dimensions/dimensions.ts +2 -2
- package/src/spatial/direction/direction.ts +1 -1
- package/src/status/index.ts +10 -0
- package/src/status/status.spec.ts +25 -0
- package/src/status/status.ts +91 -0
- package/src/strings/strings.spec.ts +51 -13
- package/src/strings/strings.ts +20 -0
- package/src/sync/index.ts +9 -0
- package/src/sync/mutex.ts +9 -4
- package/src/telem/series.spec.ts +912 -105
- package/src/telem/series.ts +577 -201
- package/src/telem/telem.spec.ts +262 -90
- package/src/telem/telem.ts +335 -125
- package/src/testutil/testutil.spec.ts +161 -0
- package/src/testutil/testutil.ts +12 -0
- package/src/uuid/index.ts +10 -0
- package/src/uuid/uuid.spec.ts +82 -0
- package/src/uuid/uuid.ts +48 -0
- package/src/zod/external.ts +2 -1
- package/src/zod/nullToUndefined.spec.ts +31 -0
- package/src/zod/nullToUndefined.ts +23 -0
- package/src/zod/toArray.spec.ts +182 -0
- package/src/{toArray.ts → zod/toArray.ts} +3 -4
- package/src/zod/util.spec.ts +1 -1
- package/src/zod/util.ts +7 -7
- package/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/vite.config.ts +2 -3
- package/dist/bounds-BQo7rvs9.cjs +0 -1
- package/dist/bounds-Bn5_l4Z3.js +0 -173
- package/dist/external-C-dNgNQw.cjs +0 -1
- package/dist/external-C8TFju8Q.js +0 -29
- package/dist/external-DWQITF5_.cjs +0 -1
- package/dist/index-BywOGO8U.js +0 -1074
- package/dist/index-CYYjI7Uf.cjs +0 -1
- package/dist/index-C_6NXBlg.cjs +0 -3
- package/dist/index-Dd8DLyMx.cjs +0 -1
- package/dist/index-DizUWH6z.js +0 -47
- package/dist/path-1tZLZ4AN.cjs +0 -1
- package/dist/path-DD6ytXzr.js +0 -76
- package/dist/position-Cai5-wi1.cjs +0 -1
- package/dist/position-DIglP1l2.js +0 -85
- package/dist/scale-BtZINJ-A.cjs +0 -1
- package/dist/search.cjs +0 -1
- package/dist/search.js +0 -14
- package/dist/series-B9JERcqi.js +0 -1977
- package/dist/series-DqJ6f97G.cjs +0 -11
- package/dist/src/color/transformColorsToHex.d.ts +0 -6
- package/dist/src/color/transformColorsToHex.d.ts.map +0 -1
- package/dist/src/primitive.d.ts +0 -9
- package/dist/src/primitive.d.ts.map +0 -1
- package/dist/src/record.d.ts +0 -18
- package/dist/src/record.d.ts.map +0 -1
- package/dist/src/record.spec.d.ts.map +0 -1
- package/dist/src/search.d.ts +0 -18
- package/dist/src/search.d.ts.map +0 -1
- package/dist/src/toArray.d.ts +0 -3
- package/dist/src/toArray.d.ts.map +0 -1
- package/dist/src/zod/integer.d.ts +0 -10
- package/dist/src/zod/integer.d.ts.map +0 -1
- package/dist/src/zod/integer.spec.d.ts +0 -2
- package/dist/src/zod/integer.spec.d.ts.map +0 -1
- package/dist/toArray.cjs +0 -1
- package/dist/toArray.js +0 -5
- package/src/color/transformColorsToHex.ts +0 -30
- package/src/primitive.ts +0 -46
- package/src/record.spec.ts +0 -38
- package/src/record.ts +0 -47
- package/src/search.ts +0 -42
- package/src/zod/integer.spec.ts +0 -148
- package/src/zod/integer.ts +0 -38
- /package/dist/src/{record.spec.d.ts → record/record.spec.d.ts} +0 -0
package/src/telem/telem.spec.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { describe, expect, it, test } from "vitest";
|
|
|
11
11
|
|
|
12
12
|
import { binary } from "@/binary";
|
|
13
13
|
import {
|
|
14
|
+
addSamples,
|
|
14
15
|
type CrudeDataType,
|
|
15
16
|
DataType,
|
|
16
17
|
Density,
|
|
@@ -25,22 +26,22 @@ import {
|
|
|
25
26
|
describe("TimeStamp", () => {
|
|
26
27
|
test("construct", () => {
|
|
27
28
|
const ts = new TimeStamp(1000);
|
|
28
|
-
expect(ts.equals(TimeSpan.MICROSECOND)).
|
|
29
|
+
expect(ts.equals(TimeSpan.MICROSECOND)).toBe(true);
|
|
29
30
|
});
|
|
30
31
|
|
|
31
32
|
test("construct from NaN", () => {
|
|
32
33
|
const ts = new TimeStamp(NaN);
|
|
33
|
-
expect(ts.isZero).
|
|
34
|
+
expect(ts.isZero).toBe(true);
|
|
34
35
|
});
|
|
35
36
|
|
|
36
37
|
test("construct from infinity", () => {
|
|
37
38
|
const ts = new TimeStamp(Infinity);
|
|
38
|
-
expect(ts.equals(TimeStamp.MAX)).
|
|
39
|
+
expect(ts.equals(TimeStamp.MAX)).toBe(true);
|
|
39
40
|
});
|
|
40
41
|
|
|
41
42
|
test("construct from negative infinity", () => {
|
|
42
43
|
const ts = new TimeStamp(-Infinity);
|
|
43
|
-
expect(ts.equals(TimeStamp.MIN)).
|
|
44
|
+
expect(ts.equals(TimeStamp.MIN)).toBe(true);
|
|
44
45
|
});
|
|
45
46
|
|
|
46
47
|
test("toString", () => {
|
|
@@ -59,24 +60,24 @@ describe("TimeStamp", () => {
|
|
|
59
60
|
|
|
60
61
|
test("construct from TimeStamp", () => {
|
|
61
62
|
const ts = new TimeStamp(TimeSpan.microseconds(10));
|
|
62
|
-
expect(ts.equals(TimeSpan.microseconds(10))).
|
|
63
|
+
expect(ts.equals(TimeSpan.microseconds(10))).toBe(true);
|
|
63
64
|
});
|
|
64
65
|
|
|
65
66
|
test("construct from local TimeZone", () => {
|
|
66
67
|
const ts = new TimeStamp(TimeSpan.microseconds(10), "local");
|
|
67
|
-
expect(ts.equals(TimeSpan.microseconds(10).add(TimeStamp.utcOffset))).
|
|
68
|
+
expect(ts.equals(TimeSpan.microseconds(10).add(TimeStamp.utcOffset))).toBe(true);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
71
|
test("construct from time string", () => {
|
|
71
72
|
const ts = new TimeStamp("12:30", "UTC");
|
|
72
73
|
expect(ts.date().getUTCHours()).toEqual(12);
|
|
73
|
-
expect(ts.equals(TimeSpan.hours(12).add(TimeSpan.minutes(30)))).
|
|
74
|
+
expect(ts.equals(TimeSpan.hours(12).add(TimeSpan.minutes(30)))).toBe(true);
|
|
74
75
|
const ts2 = new TimeStamp("12:30:00.22");
|
|
75
76
|
expect(
|
|
76
77
|
ts2.equals(
|
|
77
78
|
TimeSpan.hours(12).add(TimeSpan.minutes(30).add(TimeSpan.milliseconds(22))),
|
|
78
79
|
),
|
|
79
|
-
).
|
|
80
|
+
).toBe(true);
|
|
80
81
|
const ts3 = new TimeStamp("12:30:00.22", "local");
|
|
81
82
|
expect(
|
|
82
83
|
ts3.equals(
|
|
@@ -84,7 +85,7 @@ describe("TimeStamp", () => {
|
|
|
84
85
|
.add(TimeSpan.minutes(30).add(TimeSpan.milliseconds(22)))
|
|
85
86
|
.add(TimeStamp.utcOffset),
|
|
86
87
|
),
|
|
87
|
-
).
|
|
88
|
+
).toBe(true);
|
|
88
89
|
});
|
|
89
90
|
|
|
90
91
|
test("construct from date", () => {
|
|
@@ -108,16 +109,88 @@ describe("TimeStamp", () => {
|
|
|
108
109
|
expect(ts2.date().getUTCMinutes()).toEqual(0);
|
|
109
110
|
});
|
|
110
111
|
|
|
112
|
+
describe("schema", () => {
|
|
113
|
+
it("should parse bigint", () => {
|
|
114
|
+
const ts = TimeStamp.z.parse(1000000000n);
|
|
115
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
116
|
+
expect(ts.valueOf()).toBe(1000000000n);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("should parse Date object", () => {
|
|
120
|
+
const date = new Date("2024-01-15T10:30:00.000Z");
|
|
121
|
+
const ts = TimeStamp.z.parse(date);
|
|
122
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
123
|
+
expect(ts.valueOf()).toBe(BigInt(date.getTime()) * 1000000n);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("should parse TimeSpan", () => {
|
|
127
|
+
const span = new TimeSpan(5000000000n);
|
|
128
|
+
const ts = TimeStamp.z.parse(span);
|
|
129
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
130
|
+
expect(ts.valueOf()).toBe(5000000000n);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("should parse DateComponents array", () => {
|
|
134
|
+
const ts = TimeStamp.z.parse([2024, 3, 15]);
|
|
135
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
136
|
+
const expected = new TimeStamp([2024, 3, 15]);
|
|
137
|
+
expect(ts.valueOf()).toBe(expected.valueOf());
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("should parse DateComponents with missing elements", () => {
|
|
141
|
+
const ts1 = TimeStamp.z.parse([2024]);
|
|
142
|
+
expect(ts1).toBeInstanceOf(TimeStamp);
|
|
143
|
+
expect(ts1.valueOf()).toBe(new TimeStamp([2024, 1, 1]).valueOf());
|
|
144
|
+
|
|
145
|
+
const ts2 = TimeStamp.z.parse([2024, 6]);
|
|
146
|
+
expect(ts2).toBeInstanceOf(TimeStamp);
|
|
147
|
+
expect(ts2.valueOf()).toBe(new TimeStamp([2024, 6, 1]).valueOf());
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it("should parse string representation of bigint", () => {
|
|
151
|
+
const ts = TimeStamp.z.parse("123456789000");
|
|
152
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
153
|
+
expect(ts.valueOf()).toBe(123456789000n);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it("should parse number", () => {
|
|
157
|
+
const ts = TimeStamp.z.parse(987654321);
|
|
158
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
159
|
+
expect(ts.valueOf()).toBe(987654321n);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it("should parse object with value property", () => {
|
|
163
|
+
const ts = TimeStamp.z.parse({ value: 555555555n });
|
|
164
|
+
expect(ts).toBeInstanceOf(TimeStamp);
|
|
165
|
+
expect(ts.valueOf()).toBe(555555555n);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it("should pass through existing TimeStamp instance", () => {
|
|
169
|
+
const original = new TimeStamp(777777777n);
|
|
170
|
+
const ts = TimeStamp.z.parse(original);
|
|
171
|
+
expect(ts).toBe(original);
|
|
172
|
+
expect(ts.valueOf()).toBe(777777777n);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it("should handle edge cases", () => {
|
|
176
|
+
const ts1 = TimeStamp.z.parse(0);
|
|
177
|
+
expect(ts1.valueOf()).toBe(0n);
|
|
178
|
+
|
|
179
|
+
const ts2 = TimeStamp.z.parse(Number.MAX_SAFE_INTEGER);
|
|
180
|
+
expect(ts2.valueOf()).toBe(BigInt(Number.MAX_SAFE_INTEGER));
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
111
184
|
test("span", () => {
|
|
112
185
|
const ts = new TimeStamp(0);
|
|
113
|
-
expect(ts.span(new TimeStamp(1000)).equals(TimeSpan.microseconds())).
|
|
186
|
+
expect(ts.span(new TimeStamp(1000)).equals(TimeSpan.microseconds())).toBe(true);
|
|
114
187
|
});
|
|
115
188
|
|
|
116
189
|
test("range", () => {
|
|
117
190
|
const ts = new TimeStamp(0);
|
|
118
191
|
expect(
|
|
119
192
|
ts.range(new TimeStamp(1000)).equals(new TimeRange(ts, TimeSpan.microseconds())),
|
|
120
|
-
).
|
|
193
|
+
).toBe(true);
|
|
121
194
|
});
|
|
122
195
|
|
|
123
196
|
test("spanRange", () => {
|
|
@@ -126,56 +199,56 @@ describe("TimeStamp", () => {
|
|
|
126
199
|
ts
|
|
127
200
|
.spanRange(TimeSpan.microseconds())
|
|
128
201
|
.equals(new TimeRange(ts, ts.add(TimeSpan.microseconds()))),
|
|
129
|
-
).
|
|
202
|
+
).toBe(true);
|
|
130
203
|
});
|
|
131
204
|
|
|
132
205
|
test("isZero", () => {
|
|
133
206
|
const ts = new TimeStamp(0);
|
|
134
|
-
expect(ts.isZero).
|
|
207
|
+
expect(ts.isZero).toBe(true);
|
|
135
208
|
});
|
|
136
209
|
|
|
137
210
|
test("after", () => {
|
|
138
211
|
const ts = new TimeStamp(0);
|
|
139
|
-
expect(ts.after(new TimeStamp(-1))).
|
|
212
|
+
expect(ts.after(new TimeStamp(-1))).toBe(true);
|
|
140
213
|
const ts2 = new TimeStamp(1);
|
|
141
|
-
expect(ts2.after(new TimeStamp(1))).
|
|
214
|
+
expect(ts2.after(new TimeStamp(1))).toBe(false);
|
|
142
215
|
});
|
|
143
216
|
|
|
144
217
|
test("before", () => {
|
|
145
218
|
const ts = new TimeStamp(0);
|
|
146
|
-
expect(ts.before(new TimeStamp(1))).
|
|
219
|
+
expect(ts.before(new TimeStamp(1))).toBe(true);
|
|
147
220
|
const ts2 = new TimeStamp(1);
|
|
148
|
-
expect(ts2.before(new TimeStamp(1))).
|
|
221
|
+
expect(ts2.before(new TimeStamp(1))).toBe(false);
|
|
149
222
|
});
|
|
150
223
|
|
|
151
224
|
test("beforeEq", () => {
|
|
152
225
|
const ts = new TimeStamp(0);
|
|
153
|
-
expect(ts.beforeEq(new TimeStamp(1))).
|
|
226
|
+
expect(ts.beforeEq(new TimeStamp(1))).toBe(true);
|
|
154
227
|
const ts2 = new TimeStamp(1);
|
|
155
|
-
expect(ts2.beforeEq(new TimeStamp(1))).
|
|
228
|
+
expect(ts2.beforeEq(new TimeStamp(1))).toBe(true);
|
|
156
229
|
const ts3 = new TimeStamp(2);
|
|
157
|
-
expect(ts3.beforeEq(new TimeStamp(1))).
|
|
230
|
+
expect(ts3.beforeEq(new TimeStamp(1))).toBe(false);
|
|
158
231
|
});
|
|
159
232
|
|
|
160
233
|
test("afterEq", () => {
|
|
161
234
|
const ts = new TimeStamp(0);
|
|
162
|
-
expect(ts.afterEq(new TimeStamp(-1))).
|
|
235
|
+
expect(ts.afterEq(new TimeStamp(-1))).toBe(true);
|
|
163
236
|
const ts2 = new TimeStamp(1);
|
|
164
|
-
expect(ts2.afterEq(new TimeStamp(1))).
|
|
237
|
+
expect(ts2.afterEq(new TimeStamp(1))).toBe(true);
|
|
165
238
|
const ts3 = new TimeStamp(0);
|
|
166
|
-
expect(ts3.afterEq(new TimeStamp(1))).
|
|
239
|
+
expect(ts3.afterEq(new TimeStamp(1))).toBe(false);
|
|
167
240
|
});
|
|
168
241
|
|
|
169
242
|
test("add", () => {
|
|
170
243
|
const ts = new TimeStamp(0);
|
|
171
244
|
expect(
|
|
172
245
|
ts.add(TimeSpan.microseconds()).equals(new TimeStamp(TimeSpan.microseconds(1))),
|
|
173
|
-
).
|
|
246
|
+
).toBe(true);
|
|
174
247
|
});
|
|
175
248
|
|
|
176
249
|
test("sub", () => {
|
|
177
250
|
const ts = new TimeStamp(TimeSpan.microseconds());
|
|
178
|
-
expect(ts.sub(TimeSpan.microseconds()).equals(new TimeStamp(0))).
|
|
251
|
+
expect(ts.sub(TimeSpan.microseconds()).equals(new TimeStamp(0))).toBe(true);
|
|
179
252
|
});
|
|
180
253
|
|
|
181
254
|
describe("fString", () => {
|
|
@@ -250,7 +323,7 @@ describe("TimeStamp", () => {
|
|
|
250
323
|
expect(new TimeStamp([2022, 12, 15]).month).toEqual(11);
|
|
251
324
|
});
|
|
252
325
|
test("day", () => {
|
|
253
|
-
expect(new TimeStamp([2022, 12, 15]).day).toEqual(15);
|
|
326
|
+
expect(new TimeStamp([2022, 12, 15], "UTC").day).toEqual(15);
|
|
254
327
|
});
|
|
255
328
|
});
|
|
256
329
|
|
|
@@ -346,7 +419,7 @@ describe("TimeStamp", () => {
|
|
|
346
419
|
`expected ${new TimeSpan(expectedRemainder).toString()} got ${new TimeSpan(
|
|
347
420
|
remainder,
|
|
348
421
|
).toString()}`,
|
|
349
|
-
).
|
|
422
|
+
).toBe(true);
|
|
350
423
|
});
|
|
351
424
|
test("second", () => {
|
|
352
425
|
const expectedRemainder = TimeSpan.milliseconds(12);
|
|
@@ -355,40 +428,66 @@ describe("TimeStamp", () => {
|
|
|
355
428
|
.add(TimeSpan.minutes(20))
|
|
356
429
|
.add(TimeSpan.milliseconds(12));
|
|
357
430
|
const remainder = ts.remainder(TimeSpan.seconds());
|
|
358
|
-
expect(remainder.equals(expectedRemainder)).
|
|
431
|
+
expect(remainder.equals(expectedRemainder)).toBe(true);
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
describe("sort", () => {
|
|
436
|
+
interface Spec {
|
|
437
|
+
a: TimeStamp;
|
|
438
|
+
b: TimeStamp;
|
|
439
|
+
expected: number;
|
|
440
|
+
}
|
|
441
|
+
const TESTS: Spec[] = [
|
|
442
|
+
{
|
|
443
|
+
a: TimeStamp.seconds(3),
|
|
444
|
+
b: TimeStamp.seconds(2),
|
|
445
|
+
expected: TimeSpan.seconds(1).nanoseconds,
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
a: TimeStamp.seconds(2),
|
|
449
|
+
b: TimeStamp.seconds(3),
|
|
450
|
+
expected: TimeSpan.seconds(-1).nanoseconds,
|
|
451
|
+
},
|
|
452
|
+
{ a: TimeStamp.seconds(2), b: TimeStamp.seconds(2), expected: 0 },
|
|
453
|
+
];
|
|
454
|
+
TESTS.forEach(({ a, b, expected }) => {
|
|
455
|
+
test(`TimeStamp.sort(${a.toString()}, ${b.toString()}) = ${expected}`, () => {
|
|
456
|
+
expect(TimeStamp.sort(a, b)).toEqual(expected);
|
|
457
|
+
});
|
|
359
458
|
});
|
|
360
459
|
});
|
|
361
460
|
});
|
|
362
461
|
|
|
363
462
|
describe("TimeSpan", () => {
|
|
364
463
|
test("construct from static", () => {
|
|
365
|
-
expect(TimeSpan.nanoseconds(1).equals(1)).
|
|
366
|
-
expect(TimeSpan.microseconds(1).equals(1000)).
|
|
367
|
-
expect(TimeSpan.milliseconds(1).equals(1000000)).
|
|
368
|
-
expect(TimeSpan.seconds(1).equals(1e9)).
|
|
369
|
-
expect(TimeSpan.minutes(1).equals(6e10)).
|
|
370
|
-
expect(TimeSpan.hours(1).equals(36e11)).
|
|
464
|
+
expect(TimeSpan.nanoseconds(1).equals(1)).toBe(true);
|
|
465
|
+
expect(TimeSpan.microseconds(1).equals(1000)).toBe(true);
|
|
466
|
+
expect(TimeSpan.milliseconds(1).equals(1000000)).toBe(true);
|
|
467
|
+
expect(TimeSpan.seconds(1).equals(1e9)).toBe(true);
|
|
468
|
+
expect(TimeSpan.minutes(1).equals(6e10)).toBe(true);
|
|
469
|
+
expect(TimeSpan.hours(1).equals(36e11)).toBe(true);
|
|
371
470
|
});
|
|
372
471
|
|
|
373
472
|
describe("fromMilliseconds", () => {
|
|
374
473
|
it("should interpret a pure number or bigint as milliseconds", () => {
|
|
375
474
|
const ts = TimeSpan.fromMilliseconds(1000);
|
|
376
|
-
expect(ts.equals(TimeSpan.seconds())).
|
|
475
|
+
expect(ts.equals(TimeSpan.seconds())).toBe(true);
|
|
377
476
|
});
|
|
378
477
|
it("should interpret a TimeSpan as a normal TimeSpan", () => {
|
|
379
478
|
const ts = TimeSpan.fromMilliseconds(TimeSpan.milliseconds(30));
|
|
380
|
-
expect(ts.equals(TimeSpan.milliseconds(30))).
|
|
479
|
+
expect(ts.equals(TimeSpan.milliseconds(30))).toBe(true);
|
|
381
480
|
});
|
|
382
481
|
});
|
|
383
482
|
|
|
384
483
|
describe("fromSeconds", () => {
|
|
385
484
|
it("should interpret a pure number or bigint as seconds", () => {
|
|
386
485
|
const ts = TimeSpan.fromSeconds(1);
|
|
387
|
-
expect(ts.equals(TimeSpan.SECOND)).
|
|
486
|
+
expect(ts.equals(TimeSpan.SECOND)).toBe(true);
|
|
388
487
|
});
|
|
389
488
|
it("should interpret a TimeSpan as a normal TimeSpan", () => {
|
|
390
489
|
const ts = TimeSpan.fromSeconds(TimeSpan.milliseconds(30));
|
|
391
|
-
expect(ts.equals(TimeSpan.milliseconds(30))).
|
|
490
|
+
expect(ts.equals(TimeSpan.milliseconds(30))).toBe(true);
|
|
392
491
|
});
|
|
393
492
|
});
|
|
394
493
|
|
|
@@ -397,16 +496,16 @@ describe("TimeSpan", () => {
|
|
|
397
496
|
});
|
|
398
497
|
|
|
399
498
|
test("isZero", () => {
|
|
400
|
-
expect(TimeSpan.ZERO.isZero).
|
|
401
|
-
expect(TimeSpan.seconds(1).isZero).
|
|
499
|
+
expect(TimeSpan.ZERO.isZero).toBe(true);
|
|
500
|
+
expect(TimeSpan.seconds(1).isZero).toBe(false);
|
|
402
501
|
});
|
|
403
502
|
|
|
404
503
|
test("add", () => {
|
|
405
|
-
expect(TimeSpan.seconds(1).add(TimeSpan.SECOND).equals(2e9)).
|
|
504
|
+
expect(TimeSpan.seconds(1).add(TimeSpan.SECOND).equals(2e9)).toBe(true);
|
|
406
505
|
});
|
|
407
506
|
|
|
408
507
|
test("sub", () => {
|
|
409
|
-
expect(TimeSpan.seconds(1).sub(TimeSpan.SECOND).isZero).
|
|
508
|
+
expect(TimeSpan.seconds(1).sub(TimeSpan.SECOND).isZero).toBe(true);
|
|
410
509
|
});
|
|
411
510
|
|
|
412
511
|
const TRUNCATE_TESTS = [
|
|
@@ -419,7 +518,7 @@ describe("TimeSpan", () => {
|
|
|
419
518
|
expect(
|
|
420
519
|
ts.truncate(unit).equals(expected),
|
|
421
520
|
`expected ${expected.toString()} got ${ts.truncate(unit).toString()}`,
|
|
422
|
-
).
|
|
521
|
+
).toBe(true);
|
|
423
522
|
});
|
|
424
523
|
});
|
|
425
524
|
|
|
@@ -434,7 +533,7 @@ describe("TimeSpan", () => {
|
|
|
434
533
|
|
|
435
534
|
test("remainder", () => {
|
|
436
535
|
REMAINDER_TESTS.forEach(([ts, unit, expected]) => {
|
|
437
|
-
expect(ts.remainder(unit).equals(expected)).
|
|
536
|
+
expect(ts.remainder(unit).equals(expected)).toBe(true);
|
|
438
537
|
});
|
|
439
538
|
});
|
|
440
539
|
|
|
@@ -463,12 +562,12 @@ describe("TimeSpan", () => {
|
|
|
463
562
|
});
|
|
464
563
|
|
|
465
564
|
describe("Rate", () => {
|
|
466
|
-
test("construct", () => expect(new Rate(1).equals(1)).
|
|
565
|
+
test("construct", () => expect(new Rate(1).equals(1)).toBe(true));
|
|
467
566
|
|
|
468
|
-
test("period", () => expect(new Rate(1).period.equals(TimeSpan.SECOND)).
|
|
567
|
+
test("period", () => expect(new Rate(1).period.equals(TimeSpan.SECOND)).toBe(true));
|
|
469
568
|
|
|
470
569
|
test("period", () =>
|
|
471
|
-
expect(new Rate(2).period.equals(TimeSpan.milliseconds(500))).
|
|
570
|
+
expect(new Rate(2).period.equals(TimeSpan.milliseconds(500))).toBe(true));
|
|
472
571
|
|
|
473
572
|
test("sampleCount", () =>
|
|
474
573
|
expect(new Rate(1).sampleCount(TimeSpan.SECOND)).toEqual(1));
|
|
@@ -477,22 +576,22 @@ describe("Rate", () => {
|
|
|
477
576
|
expect(new Rate(1).byteCount(TimeSpan.SECOND, Density.BIT64)).toEqual(8));
|
|
478
577
|
|
|
479
578
|
test("span", () =>
|
|
480
|
-
expect(new Rate(1).span(4).equals(TimeSpan.seconds(4))).
|
|
579
|
+
expect(new Rate(1).span(4).equals(TimeSpan.seconds(4))).toBe(true));
|
|
481
580
|
|
|
482
581
|
test("byteSpan", () =>
|
|
483
582
|
expect(
|
|
484
583
|
new Rate(1).byteSpan(new Size(32), Density.BIT64).equals(TimeSpan.seconds(4)),
|
|
485
|
-
).
|
|
584
|
+
).toBe(true));
|
|
486
585
|
|
|
487
|
-
test("Hz", () => expect(Rate.hz(1).equals(1)).
|
|
488
|
-
test("KHz", () => expect(Rate.khz(1).equals(1e3)).
|
|
586
|
+
test("Hz", () => expect(Rate.hz(1).equals(1)).toBe(true));
|
|
587
|
+
test("KHz", () => expect(Rate.khz(1).equals(1e3)).toBe(true));
|
|
489
588
|
});
|
|
490
589
|
|
|
491
590
|
describe("TimeRange", () => {
|
|
492
591
|
test("construct", () => {
|
|
493
592
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
494
|
-
expect(tr.start.equals(new TimeStamp(0))).
|
|
495
|
-
expect(tr.end.equals(new TimeStamp(1000))).
|
|
593
|
+
expect(tr.start.equals(new TimeStamp(0))).toBe(true);
|
|
594
|
+
expect(tr.end.equals(new TimeStamp(1000))).toBe(true);
|
|
496
595
|
});
|
|
497
596
|
|
|
498
597
|
test("construct from object", () => {
|
|
@@ -500,69 +599,69 @@ describe("TimeRange", () => {
|
|
|
500
599
|
start: new TimeStamp(1000),
|
|
501
600
|
end: new TimeStamp(100000),
|
|
502
601
|
});
|
|
503
|
-
expect(tr.start.equals(new TimeStamp(1000))).
|
|
504
|
-
expect(tr.end.equals(new TimeStamp(100000))).
|
|
602
|
+
expect(tr.start.equals(new TimeStamp(1000))).toBe(true);
|
|
603
|
+
expect(tr.end.equals(new TimeStamp(100000))).toBe(true);
|
|
505
604
|
});
|
|
506
605
|
|
|
507
606
|
test("span", () => {
|
|
508
607
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
509
|
-
expect(tr.span.equals(TimeSpan.MICROSECOND)).
|
|
608
|
+
expect(tr.span.equals(TimeSpan.MICROSECOND)).toBe(true);
|
|
510
609
|
});
|
|
511
610
|
|
|
512
611
|
test("isValid", () => {
|
|
513
612
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
514
|
-
expect(tr.isValid).
|
|
613
|
+
expect(tr.isValid).toBe(true);
|
|
515
614
|
const tr2 = new TimeRange(new TimeStamp(1000), new TimeStamp(0));
|
|
516
|
-
expect(tr2.isValid).
|
|
615
|
+
expect(tr2.isValid).toBe(false);
|
|
517
616
|
});
|
|
518
617
|
|
|
519
618
|
test("isZero", () => {
|
|
520
619
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(0));
|
|
521
|
-
expect(tr.isZero).
|
|
620
|
+
expect(tr.isZero).toBe(true);
|
|
522
621
|
const tr2 = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
523
|
-
expect(tr2.isZero).
|
|
622
|
+
expect(tr2.isZero).toBe(false);
|
|
524
623
|
});
|
|
525
624
|
|
|
526
625
|
test("swap", () => {
|
|
527
626
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
528
|
-
expect(
|
|
529
|
-
|
|
530
|
-
)
|
|
627
|
+
expect(tr.swap().equals(new TimeRange(new TimeStamp(1000), new TimeStamp(0)))).toBe(
|
|
628
|
+
true,
|
|
629
|
+
);
|
|
531
630
|
});
|
|
532
631
|
describe("contains", () => {
|
|
533
632
|
test("TimeStamp", () => {
|
|
534
633
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
535
|
-
expect(tr.contains(new TimeStamp(500))).
|
|
536
|
-
expect(tr.contains(new TimeStamp(1001))).
|
|
634
|
+
expect(tr.contains(new TimeStamp(500))).toBe(true);
|
|
635
|
+
expect(tr.contains(new TimeStamp(1001))).toBe(false);
|
|
537
636
|
});
|
|
538
637
|
test("TimeRange", () => {
|
|
539
638
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
540
|
-
expect(
|
|
541
|
-
|
|
542
|
-
)
|
|
543
|
-
expect(
|
|
544
|
-
|
|
545
|
-
)
|
|
639
|
+
expect(tr.contains(new TimeRange(new TimeStamp(500), new TimeStamp(600)))).toBe(
|
|
640
|
+
true,
|
|
641
|
+
);
|
|
642
|
+
expect(tr.contains(new TimeRange(new TimeStamp(500), new TimeStamp(1001)))).toBe(
|
|
643
|
+
false,
|
|
644
|
+
);
|
|
546
645
|
});
|
|
547
646
|
});
|
|
548
647
|
describe("overlapsWith", () => {
|
|
549
648
|
it("should return true if the end of one time range is after the start of the next time range", () => {
|
|
550
649
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
551
650
|
const one = new TimeRange(new TimeStamp(500), new TimeStamp(600));
|
|
552
|
-
expect(tr.overlapsWith(one)).
|
|
553
|
-
expect(one.overlapsWith(tr)).
|
|
651
|
+
expect(tr.overlapsWith(one)).toBe(true);
|
|
652
|
+
expect(one.overlapsWith(tr)).toBe(true);
|
|
554
653
|
});
|
|
555
654
|
it("should return false if two time ranges are clearly separate", () => {
|
|
556
655
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
557
656
|
const one = new TimeRange(new TimeStamp(1001), new TimeStamp(2000));
|
|
558
|
-
expect(tr.overlapsWith(one)).
|
|
559
|
-
expect(one.overlapsWith(tr)).
|
|
657
|
+
expect(tr.overlapsWith(one)).toBe(false);
|
|
658
|
+
expect(one.overlapsWith(tr)).toBe(false);
|
|
560
659
|
});
|
|
561
660
|
it("should return false if the end of the first time range is the start of the next time range", () => {
|
|
562
661
|
const tr = new TimeRange(new TimeStamp(0), new TimeStamp(1000));
|
|
563
662
|
const one = new TimeRange(new TimeStamp(1000), new TimeStamp(2000));
|
|
564
|
-
expect(tr.overlapsWith(one)).
|
|
565
|
-
expect(one.overlapsWith(tr)).
|
|
663
|
+
expect(tr.overlapsWith(one)).toBe(false);
|
|
664
|
+
expect(one.overlapsWith(tr)).toBe(false);
|
|
566
665
|
});
|
|
567
666
|
it("should return true only if the overlap is within a threshold", () => {
|
|
568
667
|
const tr = new TimeRange(TimeStamp.milliseconds(0), TimeStamp.milliseconds(1000));
|
|
@@ -570,13 +669,13 @@ describe("TimeRange", () => {
|
|
|
570
669
|
TimeStamp.milliseconds(998),
|
|
571
670
|
TimeStamp.milliseconds(2000),
|
|
572
671
|
);
|
|
573
|
-
expect(tr.overlapsWith(one, TimeSpan.milliseconds(2))).
|
|
574
|
-
expect(one.overlapsWith(tr, TimeSpan.milliseconds(3))).
|
|
672
|
+
expect(tr.overlapsWith(one, TimeSpan.milliseconds(2))).toBe(true);
|
|
673
|
+
expect(one.overlapsWith(tr, TimeSpan.milliseconds(3))).toBe(false);
|
|
575
674
|
});
|
|
576
675
|
it("should return two for two ZERO time ranges", () => {
|
|
577
676
|
const tr = new TimeRange(TimeStamp.ZERO, TimeStamp.ZERO);
|
|
578
677
|
const one = new TimeRange(TimeStamp.ZERO, TimeStamp.ZERO);
|
|
579
|
-
expect(tr.overlapsWith(one)).
|
|
678
|
+
expect(tr.overlapsWith(one)).toBe(true);
|
|
580
679
|
});
|
|
581
680
|
});
|
|
582
681
|
|
|
@@ -586,14 +685,14 @@ describe("TimeRange", () => {
|
|
|
586
685
|
const bound = new TimeRange(TimeSpan.seconds(2), TimeSpan.seconds(3));
|
|
587
686
|
const bounded = tr.boundBy(bound);
|
|
588
687
|
const expected = new TimeRange(TimeSpan.seconds(2), TimeSpan.seconds(3));
|
|
589
|
-
expect(bounded.equals(expected)).
|
|
688
|
+
expect(bounded.equals(expected)).toBe(true);
|
|
590
689
|
});
|
|
591
690
|
it("should bound the time range even if the start is after the end", () => {
|
|
592
691
|
const tr = new TimeRange(TimeSpan.seconds(4), TimeSpan.seconds(1));
|
|
593
692
|
const bound = new TimeRange(TimeSpan.seconds(2), TimeSpan.seconds(3));
|
|
594
693
|
const bounded = tr.boundBy(bound);
|
|
595
694
|
const expected = new TimeRange(TimeSpan.seconds(3), TimeSpan.seconds(2));
|
|
596
|
-
expect(bounded.equals(expected)).
|
|
695
|
+
expect(bounded.equals(expected)).toBe(true);
|
|
597
696
|
});
|
|
598
697
|
});
|
|
599
698
|
|
|
@@ -604,8 +703,8 @@ describe("TimeRange", () => {
|
|
|
604
703
|
TimeSpan.seconds(1),
|
|
605
704
|
TimeSpan.seconds(4).add(TimeSpan.milliseconds(500)),
|
|
606
705
|
);
|
|
607
|
-
expect(tr.equals(one, TimeSpan.seconds(1))).
|
|
608
|
-
expect(tr.equals(one, TimeSpan.seconds(0))).
|
|
706
|
+
expect(tr.equals(one, TimeSpan.seconds(1))).toBe(true);
|
|
707
|
+
expect(tr.equals(one, TimeSpan.seconds(0))).toBe(false);
|
|
609
708
|
});
|
|
610
709
|
});
|
|
611
710
|
|
|
@@ -622,15 +721,60 @@ describe("TimeRange", () => {
|
|
|
622
721
|
const trString = tr.toString();
|
|
623
722
|
expect(trString).toEqual("1970-01-03T00:20:00.283Z - 1970-01-05T00:20:00.283Z");
|
|
624
723
|
});
|
|
625
|
-
});
|
|
626
724
|
|
|
627
|
-
describe("
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
725
|
+
describe("sort", () => {
|
|
726
|
+
interface Spec {
|
|
727
|
+
a: TimeRange;
|
|
728
|
+
b: TimeRange;
|
|
729
|
+
expected: number;
|
|
730
|
+
}
|
|
731
|
+
const TESTS: Spec[] = [
|
|
732
|
+
{ a: new TimeRange(1, 2), b: new TimeRange(2, 3), expected: -1 },
|
|
733
|
+
{ a: new TimeRange(2, 3), b: new TimeRange(1, 2), expected: 1 },
|
|
734
|
+
{ a: new TimeRange(1, 2), b: new TimeRange(1, 2), expected: 0 },
|
|
735
|
+
{ a: new TimeRange(2, 0), b: new TimeRange(1, 1), expected: 1 },
|
|
736
|
+
{ a: new TimeRange(2, 2), b: new TimeRange(3, 0), expected: -1 },
|
|
737
|
+
{ a: new TimeRange(2, 8), b: new TimeRange(2, 9), expected: -1 },
|
|
738
|
+
{ a: new TimeRange(2, 9), b: new TimeRange(2, 8), expected: 1 },
|
|
739
|
+
];
|
|
740
|
+
TESTS.forEach(({ a, b, expected }) => {
|
|
741
|
+
test(`TimeRange.sort(${a.toString()}, ${b.toString()}) = ${expected}`, () => {
|
|
742
|
+
expect(TimeRange.sort(a, b)).toEqual(expected);
|
|
743
|
+
});
|
|
744
|
+
});
|
|
632
745
|
});
|
|
746
|
+
describe("numericBounds", () => {
|
|
747
|
+
it("should return correct numeric bounds for a valid time range", () => {
|
|
748
|
+
const tr = new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4));
|
|
749
|
+
const bounds = tr.numericBounds;
|
|
750
|
+
expect(bounds.lower).toBe(tr.start.nanoseconds);
|
|
751
|
+
expect(bounds.upper).toBe(tr.end.nanoseconds);
|
|
752
|
+
});
|
|
633
753
|
|
|
754
|
+
it("should return correct numeric bounds for an invalid time range", () => {
|
|
755
|
+
const tr = new TimeRange(TimeSpan.seconds(4), TimeSpan.seconds(1));
|
|
756
|
+
const bounds = tr.numericBounds;
|
|
757
|
+
expect(bounds.lower).toBe(tr.start.nanoseconds);
|
|
758
|
+
expect(bounds.upper).toBe(tr.end.nanoseconds);
|
|
759
|
+
});
|
|
760
|
+
|
|
761
|
+
it("should handle zero time range", () => {
|
|
762
|
+
const tr = new TimeRange(TimeStamp.ZERO, TimeStamp.ZERO);
|
|
763
|
+
const bounds = tr.numericBounds;
|
|
764
|
+
expect(bounds.lower).toBe(0);
|
|
765
|
+
expect(bounds.upper).toBe(0);
|
|
766
|
+
});
|
|
767
|
+
|
|
768
|
+
it("should handle large time values", () => {
|
|
769
|
+
const tr = new TimeRange(TimeSpan.days(365), TimeSpan.days(730));
|
|
770
|
+
const bounds = tr.numericBounds;
|
|
771
|
+
expect(bounds.lower).toBe(tr.start.nanoseconds);
|
|
772
|
+
expect(bounds.upper).toBe(tr.end.nanoseconds);
|
|
773
|
+
});
|
|
774
|
+
});
|
|
775
|
+
});
|
|
776
|
+
|
|
777
|
+
describe("DataType", () => {
|
|
634
778
|
describe("isVariable", () => {
|
|
635
779
|
it("should return true if the data type has a variable length", () => {
|
|
636
780
|
expect(DataType.INT32.isVariable).toBe(false);
|
|
@@ -680,6 +824,7 @@ describe("DataType", () => {
|
|
|
680
824
|
}),
|
|
681
825
|
);
|
|
682
826
|
});
|
|
827
|
+
|
|
683
828
|
describe("canCastTo", () => {
|
|
684
829
|
it("should return true for any two numeric data types", () => {
|
|
685
830
|
const numericTypes = [
|
|
@@ -745,3 +890,30 @@ describe("Size", () => {
|
|
|
745
890
|
});
|
|
746
891
|
});
|
|
747
892
|
});
|
|
893
|
+
|
|
894
|
+
describe("addSamples", () => {
|
|
895
|
+
test("adds two numbers", () => {
|
|
896
|
+
expect(addSamples(1, 2)).toBe(3);
|
|
897
|
+
expect(addSamples(1.5, 2.5)).toBe(4);
|
|
898
|
+
expect(addSamples(-1, 1)).toBe(0);
|
|
899
|
+
});
|
|
900
|
+
|
|
901
|
+
test("adds two bigints", () => {
|
|
902
|
+
expect(addSamples(1n, 2n)).toBe(3n);
|
|
903
|
+
expect(addSamples(-1n, 1n)).toBe(0n);
|
|
904
|
+
expect(addSamples(9007199254740991n, 1n)).toBe(9007199254740992n);
|
|
905
|
+
});
|
|
906
|
+
|
|
907
|
+
test("handles mixed numeric types", () => {
|
|
908
|
+
expect(addSamples(1, 2n)).toBe(3);
|
|
909
|
+
expect(addSamples(2n, 1)).toBe(3);
|
|
910
|
+
expect(addSamples(1.5, 2n)).toBe(3.5);
|
|
911
|
+
expect(addSamples(2n, 1.5)).toBe(3.5);
|
|
912
|
+
});
|
|
913
|
+
|
|
914
|
+
test("handles edge cases", () => {
|
|
915
|
+
expect(addSamples(0, 0)).toBe(0);
|
|
916
|
+
expect(addSamples(Number.MAX_SAFE_INTEGER, 1)).toBe(Number.MAX_SAFE_INTEGER + 1);
|
|
917
|
+
expect(addSamples(Number.MIN_SAFE_INTEGER, -1)).toBe(Number.MIN_SAFE_INTEGER - 1);
|
|
918
|
+
});
|
|
919
|
+
});
|