Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(666)

Unified Diff: test/cctest/interpreter/test-interpreter.cc

Issue 1768593002: [Interpreter] Removes TestNotEqualsStrict bytecode from interpreter. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/interpreter/interpreter.cc ('k') | test/unittests/interpreter/bytecode-array-builder-unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/interpreter/test-interpreter.cc
diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc
index 69cf0e18bd48dfa507f248e563083519be77c5d0..6644c13cb520002239a6a767930b686c51002632 100644
--- a/test/cctest/interpreter/test-interpreter.cc
+++ b/test/cctest/interpreter/test-interpreter.cc
@@ -1179,12 +1179,10 @@ TEST(InterpreterConditionalJumps2) {
CHECK_EQ(Smi::cast(*return_value)->value(), 7);
}
-
static const Token::Value kComparisonTypes[] = {
- Token::Value::EQ, Token::Value::NE, Token::Value::EQ_STRICT,
- Token::Value::NE_STRICT, Token::Value::LT, Token::Value::LTE,
- Token::Value::GT, Token::Value::GTE};
-
+ Token::Value::EQ, Token::Value::NE, Token::Value::EQ_STRICT,
+ Token::Value::LT, Token::Value::LTE, Token::Value::GT,
+ Token::Value::GTE};
template <typename T>
bool CompareC(Token::Value op, T lhs, T rhs, bool types_differed = false) {
@@ -1379,6 +1377,76 @@ TEST(InterpreterMixedComparisons) {
}
}
+TEST(InterpreterStrictNotEqual) {
+ HandleAndZoneScope handles;
+ i::Factory* factory = handles.main_isolate()->factory();
+ const char* code_snippet =
+ "function f(lhs, rhs) {\n"
+ " return lhs !== rhs;\n"
+ "}\n"
+ "f(0, 0);\n";
+ InterpreterTester tester(handles.main_isolate(), code_snippet);
+ auto callable = tester.GetCallable<Handle<Object>, Handle<Object>>();
+
+ // Test passing different types.
+ const char* inputs[] = {"-1.77", "-40.333", "0.01", "55.77e5", "2.01"};
+ i::UnicodeCache unicode_cache;
+ for (size_t i = 0; i < arraysize(inputs); i++) {
+ for (size_t j = 0; j < arraysize(inputs); j++) {
+ double lhs = StringToDouble(&unicode_cache, inputs[i],
+ i::ConversionFlags::NO_FLAGS);
+ double rhs = StringToDouble(&unicode_cache, inputs[j],
+ i::ConversionFlags::NO_FLAGS);
+ Handle<Object> lhs_obj = factory->NewNumber(lhs);
+ Handle<Object> rhs_obj = factory->NewStringFromAsciiChecked(inputs[j]);
+
+ Handle<Object> return_value =
+ callable(lhs_obj, rhs_obj).ToHandleChecked();
+ CHECK(return_value->IsBoolean());
+ CHECK_EQ(return_value->BooleanValue(),
+ CompareC(Token::Value::NE_STRICT, lhs, rhs, true));
+ }
+ }
+
+ // Test passing string types.
+ const char* inputs_str[] = {"A", "abc", "z", "", "Foo!", "Foo"};
+ for (size_t i = 0; i < arraysize(inputs_str); i++) {
+ for (size_t j = 0; j < arraysize(inputs_str); j++) {
+ Handle<Object> lhs_obj =
+ factory->NewStringFromAsciiChecked(inputs_str[i]);
+ Handle<Object> rhs_obj =
+ factory->NewStringFromAsciiChecked(inputs_str[j]);
+
+ Handle<Object> return_value =
+ callable(lhs_obj, rhs_obj).ToHandleChecked();
+ CHECK(return_value->IsBoolean());
+ CHECK_EQ(return_value->BooleanValue(),
+ CompareC(Token::Value::NE_STRICT, inputs_str[i], inputs_str[j]));
+ }
+ }
+
+ // Test passing doubles.
+ double inputs_number[] = {std::numeric_limits<double>::min(),
+ std::numeric_limits<double>::max(),
+ -0.001,
+ 0.01,
+ 0.1000001,
+ 1e99,
+ -1e-99};
+ for (size_t i = 0; i < arraysize(inputs_number); i++) {
+ for (size_t j = 0; j < arraysize(inputs_number); j++) {
+ Handle<Object> lhs_obj = factory->NewNumber(inputs_number[i]);
+ Handle<Object> rhs_obj = factory->NewNumber(inputs_number[j]);
+
+ Handle<Object> return_value =
+ callable(lhs_obj, rhs_obj).ToHandleChecked();
+ CHECK(return_value->IsBoolean());
+ CHECK_EQ(return_value->BooleanValue(),
+ CompareC(Token::Value::NE_STRICT, inputs_number[i],
+ inputs_number[j]));
+ }
+ }
+}
TEST(InterpreterInstanceOf) {
HandleAndZoneScope handles;
« no previous file with comments | « src/interpreter/interpreter.cc ('k') | test/unittests/interpreter/bytecode-array-builder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698