-
Notifications
You must be signed in to change notification settings - Fork 576
/
test.ts
103 lines (97 loc) · 3.37 KB
/
test.ts
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { decodeU32, decodeU64, encodeU32, encodeU64 } from "./mod.ts";
import { assertEquals, assertThrows } from "../../testing/asserts.ts";
const U32MAX = 4_294_967_295;
const U64MAX = 18_446_744_073_709_551_615n;
Deno.test({
name: "VarInt encode",
fn: function () {
assertEquals(encodeU32(0), new Uint8Array([0]));
assertEquals(encodeU32(1), new Uint8Array([1]));
assertEquals(encodeU32(127), new Uint8Array([127]));
assertEquals(encodeU32(128), new Uint8Array([128, 1]));
assertEquals(encodeU32(255), new Uint8Array([255, 1]));
assertEquals(encodeU32(25565), new Uint8Array([221, 199, 1]));
assertEquals(encodeU32(2097151), new Uint8Array([255, 255, 127]));
assertEquals(
encodeU32(2147483647),
new Uint8Array([255, 255, 255, 255, 7]),
);
assertThrows(() => encodeU32(-1), RangeError, "Signed");
assertThrows(() => encodeU32(U32MAX + 1), RangeError);
assertThrows(() => encodeU32(1.1), TypeError);
},
});
Deno.test({
name: "VarInt decode",
fn: function () {
assertEquals(decodeU32(new Uint8Array([0])), 0);
assertEquals(decodeU32(new Uint8Array([1])), 1);
assertEquals(decodeU32(new Uint8Array([127])), 127);
assertEquals(decodeU32(new Uint8Array([128, 1])), 128);
assertEquals(decodeU32(new Uint8Array([255, 1])), 255);
assertEquals(decodeU32(new Uint8Array([221, 199, 1])), 25565);
assertEquals(
decodeU32(new Uint8Array([255, 255, 127])),
2097151,
);
assertEquals(
decodeU32(new Uint8Array([255, 255, 255, 255, 7])),
2147483647,
);
assertThrows(() => decodeU32(new Uint8Array(6)), RangeError, "Too");
assertThrows(
() => decodeU32(new Uint8Array([255, 255])),
RangeError,
"Bad",
);
},
});
Deno.test({
name: "VarLong encode",
fn: function () {
assertEquals(encodeU64(0n), new Uint8Array([0]));
assertEquals(encodeU64(1n), new Uint8Array([1]));
assertEquals(encodeU64(2n), new Uint8Array([2]));
assertEquals(encodeU64(127n), new Uint8Array([127]));
assertEquals(encodeU64(128n), new Uint8Array([128, 1]));
assertEquals(encodeU64(255n), new Uint8Array([255, 1]));
assertEquals(
encodeU64(2147483647n),
new Uint8Array([255, 255, 255, 255, 7]),
);
assertEquals(
encodeU64(9223372036854775807n),
new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255, 127]),
);
assertThrows(() => encodeU64(-1n), RangeError, "Signed");
assertThrows(() => encodeU64(U64MAX + 1n), RangeError);
},
});
Deno.test({
name: "VarLong decode",
fn: function () {
assertEquals(decodeU64(new Uint8Array([0])), 0n);
assertEquals(decodeU64(new Uint8Array([1])), 1n);
assertEquals(decodeU64(new Uint8Array([2])), 2n);
assertEquals(decodeU64(new Uint8Array([127])), 127n);
assertEquals(decodeU64(new Uint8Array([128, 1])), 128n);
assertEquals(decodeU64(new Uint8Array([255, 1])), 255n);
assertEquals(
decodeU64(new Uint8Array([255, 255, 255, 255, 7])),
2147483647n,
);
assertEquals(
decodeU64(
new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255, 127]),
),
9223372036854775807n,
);
assertThrows(() => decodeU32(new Uint8Array(11)), RangeError, "Too");
assertThrows(
() => decodeU32(new Uint8Array([255, 255])),
RangeError,
"Bad",
);
},
});