newtests/bigint/test.js (330 lines of code) (raw):
/*
* @flow
*/
import type {Suite} from "flow-dev-tools/src/test/Suite";
const { suite, test } = require("flow-dev-tools/src/test/Tester");
module.exports = (suite(({ addFile, addFiles, addCode }) => [
test("BigInt invalid decimal type literal", [
addCode(`
type InvalidDecimal = 1.0n;
`).newErrors(
`
test.js:4
4: type InvalidDecimal = 1.0n;
^^^^ A bigint literal must be an integer
`,
)
]),
test("BigInt invalid negative decimal type literal", [
addCode(`
type InvalidNegDecimal = -1.0n;
`).newErrors(
`
test.js:4
4: type InvalidNegDecimal = -1.0n;
^^^^^ A bigint literal must be an integer
`,
)
]),
test("BigInt invalid decimal literal", [
addCode(`
const invalid_decimal = 1.0n;
`).newErrors(
`
test.js:4
4: const invalid_decimal = 1.0n;
^^^^ A bigint literal must be an integer
`,
)
]),
test("BigInt invalid negative decimal literal", [
addCode(`
const invalid_neg_decimal = -1.0n;
`).newErrors(
`
test.js:4
4: const invalid_neg_decimal = -1.0n;
^^^^ A bigint literal must be an integer
`,
)
]),
test("BigInt invalid scientific type literal", [
addCode(`
type InvalidE = 2e9n;
`).newErrors(
`
test.js:4
4: type InvalidE = 2e9n;
^^^^ A bigint literal cannot use exponential notation
`,
)
]),
test("BigInt invalid negative scientific type literal", [
addCode(`
type InvalidNegE = -2e9n;
`).newErrors(
`
test.js:4
4: type InvalidNegE = -2e9n;
^^^^^ A bigint literal cannot use exponential notation
`,
)
]),
test("BigInt invalid scientific decimal type literal", [
addCode(`
type InvalidNegDecimalE = 2.0e9n;
`).newErrors(
`
test.js:4
4: type InvalidNegDecimalE = 2.0e9n;
^^^^^^ A bigint literal cannot use exponential notation
`,
)
]),
test("BigInt invalid negative scientific decimal type literal", [
addCode(`
type InvalidNegDecimalE = -2.0e9n;
`).newErrors(
`
test.js:4
4: type InvalidNegDecimalE = -2.0e9n;
^^^^^^^ A bigint literal cannot use exponential notation
`,
)
]),
test("BigInt invalid scientific literal", [
addCode(`
const invalid_e = 2e9n;
`).newErrors(
`
test.js:4
4: const invalid_e = 2e9n;
^^^^ A bigint literal cannot use exponential notation
`,
)
]),
test("BigInt invalid negative scientific literal", [
addCode(`
const invalid_neg_e = -2e9n;
`).newErrors(
`
test.js:4
4: const invalid_neg_e = -2e9n;
^^^^ A bigint literal cannot use exponential notation
`,
)
]),
test("BigInt invalid octal legacy type literal", [
addCode(`
type InvalidOctalLegacy = 016432n;
`).newErrors(
`
test.js:4
4: type InvalidOctalLegacy = 016432n;
^^^^^^^ Unexpected token ILLEGAL
`,
)
]),
test("BigInt invalid negative octal legacy type literal", [
addCode(`
type InvalidNegOctalLegacy = -016432n;
`).newErrors(
`
test.js:4
4: type InvalidNegOctalLegacy = -016432n;
^^^^^^^^ Unexpected token ILLEGAL
`,
)
]),
test("BigInt invalid octal legacy literal", [
addCode(`
const invalid_octal_legacy = 016432n;
`).newErrors(
`
test.js:4
4: const invalid_octal_legacy = 016432n;
^^^^^^^ Unexpected token ILLEGAL
`,
)
]),
test("BigInt invalid negative octal legacy literal", [
addCode(`
const invalid_neg_octal_legacy = -016432n;
`).newErrors(
`
test.js:4
4: const invalid_neg_octal_legacy = -016432n;
^^^^^^^ Unexpected token ILLEGAL
`,
)
]),
test("BigInt is not supported yet", [
addCode(`
type S = bigint;
const valid_binary = 0b101011101n;
const valid_neg_binary = -0b101011101n;
type ValidBinary = 0b101011101n;
type ValidNegBinary = -0b101011101n;
const valid_hex = 0xfff123n;
const valid_neg_hex = -0xfff123n;
type ValidHex = 0xfff123n;
type ValidNegHex = -0xfff123n;
const valid_large = 9223372036854775807n;
const valid_neg_large = -9223372036854775807n;
type ValidLarge = 9223372036854775807n;
type ValidNegLarge = -9223372036854775807n;
const valid_octal_new = 0o16432n;
const valid_neg_octal_new = -0o16432n;
type ValidOctalNew = 0o16432n;
type ValidNegOctalNew = -0o16432n;
const valid_small = 100n;
const valid_neg_small = -100n;
type ValidSmall = 100n;
type ValidNegSmall = -1n;
`).newErrors(
`
test.js:4
4: type S = bigint;
^^^^^^ BigInt bigint [1] is not yet supported. [bigint-unsupported]
References:
4: type S = bigint;
^^^^^^ [1]
test.js:6
6: const valid_binary = 0b101011101n;
^^^^^^^^^^^^ BigInt bigint literal \`0b101011101n\` [1] is not yet supported. [bigint-unsupported]
References:
6: const valid_binary = 0b101011101n;
^^^^^^^^^^^^ [1]
test.js:7
7: const valid_neg_binary = -0b101011101n;
^^^^^^^^^^^^ BigInt bigint literal \`0b101011101n\` [1] is not yet supported. [bigint-unsupported]
References:
7: const valid_neg_binary = -0b101011101n;
^^^^^^^^^^^^ [1]
test.js:8
8: type ValidBinary = 0b101011101n;
^^^^^^^^^^^^ BigInt bigint literal \`0b101011101n\` [1] is not yet supported. [bigint-unsupported]
References:
8: type ValidBinary = 0b101011101n;
^^^^^^^^^^^^ [1]
test.js:9
9: type ValidNegBinary = -0b101011101n;
^^^^^^^^^^^^^ BigInt bigint literal \`-0b101011101n\` [1] is not yet supported. [bigint-unsupported]
References:
9: type ValidNegBinary = -0b101011101n;
^^^^^^^^^^^^^ [1]
test.js:11
11: const valid_hex = 0xfff123n;
^^^^^^^^^ BigInt bigint literal \`0xfff123n\` [1] is not yet supported. [bigint-unsupported]
References:
11: const valid_hex = 0xfff123n;
^^^^^^^^^ [1]
test.js:12
12: const valid_neg_hex = -0xfff123n;
^^^^^^^^^ BigInt bigint literal \`0xfff123n\` [1] is not yet supported. [bigint-unsupported]
References:
12: const valid_neg_hex = -0xfff123n;
^^^^^^^^^ [1]
test.js:13
13: type ValidHex = 0xfff123n;
^^^^^^^^^ BigInt bigint literal \`0xfff123n\` [1] is not yet supported. [bigint-unsupported]
References:
13: type ValidHex = 0xfff123n;
^^^^^^^^^ [1]
test.js:14
14: type ValidNegHex = -0xfff123n;
^^^^^^^^^^ BigInt bigint literal \`-0xfff123n\` [1] is not yet supported. [bigint-unsupported]
References:
14: type ValidNegHex = -0xfff123n;
^^^^^^^^^^ [1]
test.js:16
16: const valid_large = 9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^ BigInt bigint literal \`9223372036854775807n\` [1] is not yet supported. [bigint-unsupported]
References:
16: const valid_large = 9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^ [1]
test.js:17
17: const valid_neg_large = -9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^ BigInt bigint literal \`9223372036854775807n\` [1] is not yet supported. [bigint-unsupported]
References:
17: const valid_neg_large = -9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^ [1]
test.js:18
18: type ValidLarge = 9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^ BigInt bigint literal \`9223372036854775807n\` [1] is not yet supported. [bigint-unsupported]
References:
18: type ValidLarge = 9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^ [1]
test.js:19
19: type ValidNegLarge = -9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^^ BigInt bigint literal \`-9223372036854775807n\` [1] is not yet supported. [bigint-unsupported]
References:
19: type ValidNegLarge = -9223372036854775807n;
^^^^^^^^^^^^^^^^^^^^^ [1]
test.js:21
21: const valid_octal_new = 0o16432n;
^^^^^^^^ BigInt bigint literal \`0o16432n\` [1] is not yet supported. [bigint-unsupported]
References:
21: const valid_octal_new = 0o16432n;
^^^^^^^^ [1]
test.js:22
22: const valid_neg_octal_new = -0o16432n;
^^^^^^^^ BigInt bigint literal \`0o16432n\` [1] is not yet supported. [bigint-unsupported]
References:
22: const valid_neg_octal_new = -0o16432n;
^^^^^^^^ [1]
test.js:23
23: type ValidOctalNew = 0o16432n;
^^^^^^^^ BigInt bigint literal \`0o16432n\` [1] is not yet supported. [bigint-unsupported]
References:
23: type ValidOctalNew = 0o16432n;
^^^^^^^^ [1]
test.js:24
24: type ValidNegOctalNew = -0o16432n;
^^^^^^^^^ BigInt bigint literal \`-0o16432n\` [1] is not yet supported. [bigint-unsupported]
References:
24: type ValidNegOctalNew = -0o16432n;
^^^^^^^^^ [1]
test.js:26
26: const valid_small = 100n;
^^^^ BigInt bigint literal \`100n\` [1] is not yet supported. [bigint-unsupported]
References:
26: const valid_small = 100n;
^^^^ [1]
test.js:27
27: const valid_neg_small = -100n;
^^^^ BigInt bigint literal \`100n\` [1] is not yet supported. [bigint-unsupported]
References:
27: const valid_neg_small = -100n;
^^^^ [1]
test.js:28
28: type ValidSmall = 100n;
^^^^ BigInt bigint literal \`100n\` [1] is not yet supported. [bigint-unsupported]
References:
28: type ValidSmall = 100n;
^^^^ [1]
test.js:29
29: type ValidNegSmall = -1n;
^^^ BigInt bigint literal \`-1n\` [1] is not yet supported. [bigint-unsupported]
References:
29: type ValidNegSmall = -1n;
^^^ [1]
`,
)
]),
test("BigInt can be suppressed", [
addCode(`
//$FlowFixMe
type S = bigint;
//$FlowFixMe
type A = 1n;
//$FlowFixMe
const valid_binary = 0b101011101n;
//$FlowFixMe
const valid_hex = 0xfff123n;
//$FlowFixMe
const valid_large = 9223372036854775807n;
//$FlowFixMe
const valid_octal_new = 0o16432n;
//$FlowFixMe
const valid_small = 100n;
`).noNewErrors()
])
]): Suite);