forked from microsoft/TypeScript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparsePseudoBigInt.ts
71 lines (70 loc) · 3.16 KB
/
parsePseudoBigInt.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
import * as ts from "../_namespaces/ts.js";
describe("unittests:: BigInt literal base conversions", () => {
describe("parsePseudoBigInt", () => {
const testNumbers: number[] = [];
for (let i = 0; i < 1e3; i++) testNumbers.push(i);
for (let bits = 0; bits <= 52; bits++) {
testNumbers.push(2 ** bits, 2 ** bits - 1);
}
it("can strip base-10 strings", () => {
for (const testNumber of testNumbers) {
for (let leadingZeros = 0; leadingZeros < 10; leadingZeros++) {
assert.equal(
ts.parsePseudoBigInt("0".repeat(leadingZeros) + testNumber + "n"),
String(testNumber),
);
}
}
});
it("can parse binary literals", () => {
for (const testNumber of testNumbers) {
for (let leadingZeros = 0; leadingZeros < 10; leadingZeros++) {
const binary = "0".repeat(leadingZeros) + testNumber.toString(2) + "n";
for (const prefix of ["0b", "0B"]) {
assert.equal(ts.parsePseudoBigInt(prefix + binary), String(testNumber));
}
}
}
});
it("can parse octal literals", () => {
for (const testNumber of testNumbers) {
for (let leadingZeros = 0; leadingZeros < 10; leadingZeros++) {
const octal = "0".repeat(leadingZeros) + testNumber.toString(8) + "n";
for (const prefix of ["0o", "0O"]) {
assert.equal(ts.parsePseudoBigInt(prefix + octal), String(testNumber));
}
}
}
});
it("can parse hex literals", () => {
for (const testNumber of testNumbers) {
for (let leadingZeros = 0; leadingZeros < 10; leadingZeros++) {
const hex = "0".repeat(leadingZeros) + testNumber.toString(16) + "n";
for (const prefix of ["0x", "0X"]) {
for (const hexCase of [hex.toLowerCase(), hex.toUpperCase()]) {
assert.equal(ts.parsePseudoBigInt(prefix + hexCase), String(testNumber));
}
}
}
}
});
it("can parse large literals", () => {
assert.equal(
ts.parsePseudoBigInt("123456789012345678901234567890n"),
"123456789012345678901234567890",
);
assert.equal(
ts.parsePseudoBigInt("0b1100011101110100100001111111101101100001101110011111000001110111001001110001111110000101011010010n"),
"123456789012345678901234567890",
);
assert.equal(
ts.parsePseudoBigInt("0o143564417755415637016711617605322n"),
"123456789012345678901234567890",
);
assert.equal(
ts.parsePseudoBigInt("0x18ee90ff6c373e0ee4e3f0ad2n"),
"123456789012345678901234567890",
);
});
});
});