blob: d8b53dd7212746f590e15b66853270905ec52230 [file] [log] [blame]
ticaiolima@gmail.com7fae6fe2018-12-20 11:59:05 +00001function assert(a, e) {
2 if (a !== e)
3 throw new Error("Expected " + e + " but got: " + a);
4}
5
6function bigIntAdd(a, b) {
7 let c = a + b;
8 return b + a + c;
9}
10noInline(bigIntAdd);
11
12for (let i = 0; i < 100000; i++) {
13 assert(bigIntAdd(3n, 5n), 16n);
14}
15
16for (let i = 0; i < 100000; i++) {
17 assert(bigIntAdd(0xffffffffffffffffffn, 0xaaffffffffffffffffffn), 1624494070107157953511420n);
18}
19
20function bigIntMul(a, b) {
21 let c = a * b;
22 return b * a + c;
23}
24noInline(bigIntMul);
25
26for (let i = 0; i < 100000; i++) {
27 assert(bigIntMul(3n, 5n), 30n);
28}
29
30for (let i = 0; i < 100000; i++) {
31 assert(bigIntMul(0xffffffffffffffffffn, 0xaaffffffffffffffffffn), 7626854857897473114403591155175632477091790850n);
32}
33
34function bigIntDiv(a, b) {
35 let c = a / b;
36 return a / b + c;
37}
38noInline(bigIntDiv);
39
40for (let i = 0; i < 100000; i++) {
41 assert(bigIntDiv(15n, 5n), 6n);
42}
43
44for (let i = 0; i < 100000; i++) {
45 assert(bigIntDiv(0xaaffffffffffffffffffn, 0xffffffffffffffffffn), 342n);
46}
47
48function bigIntSub(a, b) {
49 let c = a - b;
50 return a - b + c;
51}
52noInline(bigIntSub);
53
54for (let i = 0; i < 100000; i++) {
55 assert(bigIntSub(15n, 5n), 20n);
56}
57
58for (let i = 0; i < 100000; i++) {
59 assert(bigIntSub(0xaaffffffffffffffffffn, 0xffffffffffffffffffn), 1605604604175679372656640n);
60}
61
62function bigIntBitOr(a, b) {
63 let c = a | b;
64 return (b | a) + c;
65}
66noInline(bigIntBitOr);
67
68for (let i = 0; i < 100000; i++) {
69 assert(bigIntBitOr(0b1101n, 0b0010n), 30n);
70}
71
72for (let i = 0; i < 100000; i++) {
73 assert(bigIntBitOr(0xaaffffffffffffffffffn, 0xffffffffffffffffffn), 1615049337141418663084030n);
74}
75
76function bigIntBitAnd(a, b) {
77 let c = a & b;
78 return (b & a) + c;
79}
80noInline(bigIntBitAnd);
81
82for (let i = 0; i < 100000; i++) {
83 assert(bigIntBitAnd(0b1101n, 0b0010n), 0n);
84}
85
86for (let i = 0; i < 100000; i++) {
87 assert(bigIntBitAnd(0xaaffffffffffffffffffn, 0xffffffffffffffffffn), 9444732965739290427390n);
88}
89
90function bigIntBitXor(a, b) {
91 let c = a ^ b;
92 return (b ^ a) + c;
93}
94noInline(bigIntBitXor);
95
96for (let i = 0; i < 100000; i++) {
97 assert(bigIntBitXor(0b1101n, 0b0010n), 30n);
98}
99
100for (let i = 0; i < 100000; i++) {
101 assert(bigIntBitXor(0xaaffffffffffffffffffn, 0xffffffffffffffffffn), 1605604604175679372656640n);
102}
103