summaryrefslogtreecommitdiff
path: root/tests/napi/bigint_test.js
blob: 4a9ada20577ed1114ea8e2c442c77c334048c048 (plain)
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
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.

import { assertEquals, assertThrows, loadTestLibrary } from "./common.js";

const bi = loadTestLibrary();

Deno.test("cases", function () {
  const cases = [
    0n,
    -0n,
    1n,
    -1n,
    100n,
    2121n,
    -1233n,
    986583n,
    -976675n,
    98765432213456789876546896323445679887645323232436587988766545658n,
    -4350987086545760976737453646576078997096876957864353245245769809n,
  ];

  for (const num of cases) {
    if (num > -(2n ** 63n) && num < 2n ** 63n) {
      assertEquals(bi.testInt64(num), num);
      assertEquals(bi.isLossless(num, true), true);
    } else {
      assertEquals(bi.isLossless(num, true), false);
    }

    if (num >= 0 && num < 2n ** 64n) {
      assertEquals(bi.testUint64(num), num);
      assertEquals(bi.isLossless(num, false), true);
    } else {
      assertEquals(bi.isLossless(num, false), false);
    }

    assertEquals(bi.testWords(num), num);
  }
});

Deno.test(
  // TODO(bartlomieju): fix this test
  { ignore: true },
  function tooBigBigInt() {
    assertThrows(
      () => bi.createTooBigBigInt(),
      Error,
      "Invalid argument",
    );
  },
);

Deno.test(
  // TODO(bartlomieju): fix this test
  { ignore: true },
  function exceptionForwarding() {
    assertThrows(
      () => bi.makeBigIntWordsThrow(),
      Error,
      "Maximum BigInt size exceeded",
    );
  },
);