aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/test-code-stub-assembler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/cctest/test-code-stub-assembler.cc')
-rw-r--r--deps/v8/test/cctest/test-code-stub-assembler.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/test-code-stub-assembler.cc b/deps/v8/test/cctest/test-code-stub-assembler.cc
index 65f07a64af..12e9fe4bea 100644
--- a/deps/v8/test/cctest/test-code-stub-assembler.cc
+++ b/deps/v8/test/cctest/test-code-stub-assembler.cc
@@ -206,6 +206,49 @@ TEST(ToUint32) {
ft.CheckThrows(factory->match_symbol());
}
+namespace {
+void IsValidPositiveSmiCase(Isolate* isolate, intptr_t value, bool expected) {
+ const int kNumParams = 0;
+ CodeAssemblerTester asm_tester(isolate, kNumParams);
+
+ CodeStubAssembler m(asm_tester.state());
+ m.Return(
+ m.SelectBooleanConstant(m.IsValidPositiveSmi(m.IntPtrConstant(value))));
+
+ FunctionTester ft(asm_tester.GenerateCode(), kNumParams);
+ MaybeHandle<Object> maybe_handle = ft.Call();
+
+ if (expected) {
+ CHECK(maybe_handle.ToHandleChecked()->IsTrue(isolate));
+ } else {
+ CHECK(maybe_handle.ToHandleChecked()->IsFalse(isolate));
+ }
+}
+} // namespace
+
+TEST(IsValidPositiveSmi) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+
+ IsValidPositiveSmiCase(isolate, -1, false);
+ IsValidPositiveSmiCase(isolate, 0, true);
+ IsValidPositiveSmiCase(isolate, 1, true);
+
+#ifdef V8_TARGET_ARCH_32_BIT
+ IsValidPositiveSmiCase(isolate, 0x3FFFFFFFU, true);
+ IsValidPositiveSmiCase(isolate, 0xC0000000U, false);
+ IsValidPositiveSmiCase(isolate, 0x40000000U, false);
+ IsValidPositiveSmiCase(isolate, 0xBFFFFFFFU, false);
+#else
+ typedef std::numeric_limits<int32_t> int32_limits;
+ IsValidPositiveSmiCase(isolate, int32_limits::max(), true);
+ IsValidPositiveSmiCase(isolate, int32_limits::min(), false);
+ IsValidPositiveSmiCase(isolate,
+ static_cast<intptr_t>(int32_limits::max()) + 1, false);
+ IsValidPositiveSmiCase(isolate,
+ static_cast<intptr_t>(int32_limits::min()) - 1, false);
+#endif
+}
+
TEST(FixedArrayAccessSmiIndex) {
Isolate* isolate(CcTest::InitIsolateOnce());
CodeAssemblerTester asm_tester(isolate);