summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/compiler/bigint-compare.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/bigint-compare.js')
-rw-r--r--deps/v8/test/mjsunit/compiler/bigint-compare.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/bigint-compare.js b/deps/v8/test/mjsunit/compiler/bigint-compare.js
new file mode 100644
index 0000000000..65fac50428
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/bigint-compare.js
@@ -0,0 +1,61 @@
+// Copyright 2022 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --allow-natives-syntax --turbofan --no-always-turbofan
+
+function LessThan(x, y) {
+ return x < y;
+}
+
+function LessThanOrEqual(x, y) {
+ return x <= y;
+}
+
+function GreaterThan(x, y) {
+ return x > y;
+}
+
+function GreaterThanOrEqual(x, y) {
+ return x >= y;
+}
+
+function Test(f, large, lt, eq) {
+ assertEquals(lt, f(1n, 2n));
+ assertEquals(!lt, f(0n, -1n));
+ assertEquals(eq, f(-42n, -42n));
+ assertEquals(!lt, f(-(2n ** 62n), -(2n ** 63n) + 1n));
+ assertEquals(lt, f(-(2n ** 63n) + 1n, (2n ** 63n) - 1n));
+ if (large) {
+ assertEquals(lt, f(2n ** 63n - 1n, 2n ** 63n));
+ assertEquals(!lt, f(-(2n ** 63n) + 1n, -(2n ** 63n)));
+ assertEquals(lt, f(-(13n ** 70n), 13n ** 70n)); // Different signs
+ assertEquals(!lt, f(13n ** 70n, -(13n ** 70n)));
+ assertEquals(lt, f(13n ** 80n, 13n ** 90n)); // Different lengths
+ assertEquals(!lt, f(-(13n ** 70n), -(13n ** 80n))); // Same length
+ assertEquals(eq, f(13n ** 70n, 13n ** 70n));
+ }
+}
+
+function OptAndTest(f, large) {
+ const lt = f === LessThan || f === LessThanOrEqual;
+ const eq = f === LessThanOrEqual || f === GreaterThanOrEqual;
+ %PrepareFunctionForOptimization(f);
+ Test(f, large, lt, eq);
+ assertUnoptimized(f);
+ %OptimizeFunctionOnNextCall(f);
+ Test(f, large, lt, eq);
+ assertOptimized(f);
+}
+
+OptAndTest(LessThan, false);
+OptAndTest(LessThanOrEqual, false);
+OptAndTest(GreaterThan, false);
+OptAndTest(GreaterThanOrEqual, false);
+if (%Is64Bit()) {
+ // Should deopt on large bigints and there should not be deopt loops.
+ OptAndTest(LessThan, true);
+ OptAndTest(LessThanOrEqual, true);
+ OptAndTest(GreaterThan, true);
+ OptAndTest(GreaterThanOrEqual, true);
+}