| //@ runBigIntEnabled |
| |
| let assert = { |
| sameValue: function(i, e, m) { |
| if (i !== e) |
| throw new Error(m); |
| } |
| } |
| |
| function bigIntMod(x, y) { |
| return x % y; |
| } |
| noInline(bigIntMod); |
| |
| for (let i = 0; i < 10000; i++) { |
| let r = bigIntMod(30n, 10n); |
| assert.sameValue(r, 0n, 30n + " % " + 10n + " = " + r); |
| } |
| |
| function bigIntModFolding(x, y) { |
| let r = x % y; |
| return -r; |
| } |
| noInline(bigIntModFolding); |
| |
| for (let i = 0; i < 10000; i++) { |
| let r = bigIntModFolding(10, 30); |
| assert.sameValue(r, -10, "-(" + 10 + " % " + 30 + ") = " + r); |
| } |
| |
| let r = bigIntModFolding(10n, 30n); |
| assert.sameValue(r, -10n, "-(" + 10n + " % " + 30n + ") = " + r); |
| |