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

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

Issue 1416623003: [Interpreter] Add support for for count operations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix gcc error Created 5 years, 2 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
Index: test/cctest/interpreter/test-interpreter.cc
diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc
index 8128be5ddf675130ba3f3965fbed306d1a811746..63df7f73692f31e4ba7f629cdc271cde2fdb70e3 100644
--- a/test/cctest/interpreter/test-interpreter.cc
+++ b/test/cctest/interpreter/test-interpreter.cc
@@ -1724,11 +1724,11 @@ TEST(InterpreterArrayLiterals) {
std::make_pair("return [][0];\n",
factory->undefined_value()),
std::make_pair("return [1, 3, 2][1];\n",
- Handle<Object>(Smi::FromInt(3), isolate)),
+ handle(Smi::FromInt(3), isolate)),
std::make_pair("return ['a', 'b', 'c'][2];\n",
factory->NewStringFromStaticChars("c")),
std::make_pair("var a = 100; return [a, a + 1, a + 2, a + 3][2];\n",
- Handle<Object>(Smi::FromInt(102), isolate)),
+ handle(Smi::FromInt(102), isolate)),
std::make_pair("return [[1, 2, 3], ['a', 'b', 'c']][1][0];\n",
factory->NewStringFromStaticChars("a")),
std::make_pair("var t = 't'; return [[t, t + 'est'], [1 + t]][0][1];\n",
@@ -1757,26 +1757,26 @@ TEST(InterpreterObjectLiterals) {
std::make_pair("return { name: 'string', val: 9.2 }.name;",
factory->NewStringFromStaticChars("string")),
std::make_pair("var a = 15; return { name: 'string', val: a }.val;",
- Handle<Object>(Smi::FromInt(15), isolate)),
+ handle(Smi::FromInt(15), isolate)),
std::make_pair("var a = 5; return { val: a, val: a + 1 }.val;",
- Handle<Object>(Smi::FromInt(6), isolate)),
+ handle(Smi::FromInt(6), isolate)),
std::make_pair("return { func: function() { return 'test' } }.func();",
factory->NewStringFromStaticChars("test")),
std::make_pair("return { func(a) { return a + 'st'; } }.func('te');",
factory->NewStringFromStaticChars("test")),
std::make_pair("return { get a() { return 22; } }.a;",
- Handle<Object>(Smi::FromInt(22), isolate)),
+ handle(Smi::FromInt(22), isolate)),
std::make_pair("var a = { get b() { return this.x + 't'; },\n"
" set b(val) { this.x = val + 's' } };\n"
"a.b = 'te';\n"
"return a.b;",
factory->NewStringFromStaticChars("test")),
std::make_pair("var a = 123; return { 1: a }[1];",
- Handle<Object>(Smi::FromInt(123), isolate)),
+ handle(Smi::FromInt(123), isolate)),
std::make_pair("return Object.getPrototypeOf({ __proto__: null });",
factory->null_value()),
std::make_pair("var a = 'test'; return { [a]: 1 }.test;",
- Handle<Object>(Smi::FromInt(1), isolate)),
+ handle(Smi::FromInt(1), isolate)),
std::make_pair("var a = 'test'; return { b: a, [a]: a + 'ing' }['test']",
factory->NewStringFromStaticChars("testing")),
std::make_pair("var a = 'proto_str';\n"
@@ -1785,7 +1785,7 @@ TEST(InterpreterObjectLiterals) {
factory->NewStringFromStaticChars("proto_str")),
std::make_pair("var n = 'name';\n"
"return { [n]: 'val', get a() { return 987 } }['a'];",
- Handle<Object>(Smi::FromInt(987), isolate)),
+ handle(Smi::FromInt(987), isolate)),
};
for (size_t i = 0; i < arraysize(literals); i++) {
@@ -1864,19 +1864,19 @@ TEST(InterpreterContextVariables) {
std::pair<const char*, Handle<Object>> context_vars[5] = {
std::make_pair("var a; (function() { a = 1; })(); return a;",
- Handle<Object>(Smi::FromInt(1), isolate)),
+ handle(Smi::FromInt(1), isolate)),
std::make_pair("var a = 10; (function() { a; })(); return a;",
- Handle<Object>(Smi::FromInt(10), isolate)),
+ handle(Smi::FromInt(10), isolate)),
std::make_pair("var a = 20; var b = 30;\n"
"return (function() { return a + b; })();",
- Handle<Object>(Smi::FromInt(50), isolate)),
+ handle(Smi::FromInt(50), isolate)),
std::make_pair("'use strict'; let a = 1;\n"
"{ let b = 2; return (function() { return a + b; })(); }",
- Handle<Object>(Smi::FromInt(3), isolate)),
+ handle(Smi::FromInt(3), isolate)),
std::make_pair("'use strict'; let a = 10;\n"
"{ let b = 20; var c = function() { [a, b] };\n"
" return a + b; }",
- Handle<Object>(Smi::FromInt(30), isolate)),
+ handle(Smi::FromInt(30), isolate)),
};
for (size_t i = 0; i < arraysize(context_vars); i++) {
@@ -1896,11 +1896,11 @@ TEST(InterpreterContextParameters) {
std::pair<const char*, Handle<Object>> context_params[3] = {
std::make_pair("return (function() { return arg1; })();",
- Handle<Object>(Smi::FromInt(1), isolate)),
+ handle(Smi::FromInt(1), isolate)),
std::make_pair("(function() { arg1 = 4; })(); return arg1;",
- Handle<Object>(Smi::FromInt(4), isolate)),
+ handle(Smi::FromInt(4), isolate)),
std::make_pair("(function() { arg3 = arg2 - arg1; })(); return arg3;",
- Handle<Object>(Smi::FromInt(1), isolate)),
+ handle(Smi::FromInt(1), isolate)),
};
for (size_t i = 0; i < arraysize(context_params); i++) {
@@ -1910,9 +1910,9 @@ TEST(InterpreterContextParameters) {
auto callable =
tester.GetCallable<Handle<Object>, Handle<Object>, Handle<Object>>();
- Handle<Object> a1 = Handle<Object>(Smi::FromInt(1), isolate);
- Handle<Object> a2 = Handle<Object>(Smi::FromInt(2), isolate);
- Handle<Object> a3 = Handle<Object>(Smi::FromInt(3), isolate);
+ Handle<Object> a1 = handle(Smi::FromInt(1), isolate);
+ Handle<Object> a2 = handle(Smi::FromInt(2), isolate);
+ Handle<Object> a3 = handle(Smi::FromInt(3), isolate);
Handle<i::Object> return_value = callable(a1, a2, a3).ToHandleChecked();
CHECK(return_value->SameValue(*context_params[i].second));
}
@@ -1927,14 +1927,14 @@ TEST(InterpreterComma) {
std::pair<const char*, Handle<Object>> literals[6] = {
std::make_pair("var a; return 0, a;\n", factory->undefined_value()),
std::make_pair("return 'a', 2.2, 3;\n",
- Handle<Object>(Smi::FromInt(3), isolate)),
+ handle(Smi::FromInt(3), isolate)),
std::make_pair("return 'a', 'b', 'c';\n",
factory->NewStringFromStaticChars("c")),
std::make_pair("return 3.2, 2.3, 4.5;\n", factory->NewNumber(4.5)),
std::make_pair("var a = 10; return b = a, b = b+1;\n",
- Handle<Object>(Smi::FromInt(11), isolate)),
+ handle(Smi::FromInt(11), isolate)),
std::make_pair("var a = 10; return b = a, b = b+1, b + 10;\n",
- Handle<Object>(Smi::FromInt(21), isolate))};
+ handle(Smi::FromInt(21), isolate))};
for (size_t i = 0; i < arraysize(literals); i++) {
std::string source(InterpreterTester::SourceForBody(literals[i].first));
@@ -1955,7 +1955,7 @@ TEST(InterpreterLogicalOr) {
std::pair<const char*, Handle<Object>> literals[5] = {
std::make_pair("var a, b; return a || b;\n", factory->undefined_value()),
std::make_pair("var a, b = 10; return a || b;\n",
- Handle<Object>(Smi::FromInt(10), isolate)),
+ handle(Smi::FromInt(10), isolate)),
std::make_pair("var a = '0', b = 10; return a || b;\n",
factory->NewStringFromStaticChars("0")),
std::make_pair("return 0 || 3.2;\n", factory->NewNumber(3.2)),
@@ -1982,17 +1982,17 @@ TEST(InterpreterLogicalAnd) {
std::make_pair("var a, b = 10; return a && b;\n",
factory->undefined_value()),
std::make_pair("var a = 0, b = 10; return a && b / a;\n",
- Handle<Object>(Smi::FromInt(0), isolate)),
+ handle(Smi::FromInt(0), isolate)),
std::make_pair("var a = '0', b = 10; return a && b;\n",
- Handle<Object>(Smi::FromInt(10), isolate)),
+ handle(Smi::FromInt(10), isolate)),
std::make_pair("return 0.0 && 3.2;\n",
- Handle<Object>(Smi::FromInt(0), isolate)),
+ handle(Smi::FromInt(0), isolate)),
std::make_pair("return 'a' && 'b';\n",
factory->NewStringFromStaticChars("b")),
std::make_pair("return 'a' && 0 || 'b', 'c';\n",
factory->NewStringFromStaticChars("c")),
std::make_pair("var x = 1, y = 3; return x && 0 + 1 || y;\n",
- Handle<Object>(Smi::FromInt(1), isolate))};
+ handle(Smi::FromInt(1), isolate))};
for (size_t i = 0; i < arraysize(literals); i++) {
std::string source(InterpreterTester::SourceForBody(literals[i].first));
@@ -2043,7 +2043,7 @@ TEST(InterpreterThrow) {
std::make_pair("throw undefined;\n",
factory->undefined_value()),
std::make_pair("throw 1;\n",
- Handle<Object>(Smi::FromInt(1), isolate)),
+ handle(Smi::FromInt(1), isolate)),
std::make_pair("throw 'Error';\n",
factory->NewStringFromStaticChars("Error")),
std::make_pair("var a = true; if (a) { throw 'Error'; }\n",
@@ -2065,3 +2065,83 @@ TEST(InterpreterThrow) {
CHECK(thrown_obj->SameValue(*throws[i].second));
}
}
+
+
+TEST(InterpreterCountOperators) {
+ HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+ i::Factory* factory = isolate->factory();
+
+ std::pair<const char*, Handle<Object>> count_ops[16] = {
+ std::make_pair("var a = 1; return ++a;",
+ handle(Smi::FromInt(2), isolate)),
+ std::make_pair("var a = 1; return a++;",
+ handle(Smi::FromInt(1), isolate)),
+ std::make_pair("var a = 5; return --a;",
+ handle(Smi::FromInt(4), isolate)),
+ std::make_pair("var a = 5; return a--;",
+ handle(Smi::FromInt(5), isolate)),
+ std::make_pair("var a = 5.2; return --a;",
+ factory->NewHeapNumber(4.2)),
+ std::make_pair("var a = 'string'; return ++a;",
+ factory->nan_value()),
+ std::make_pair("var a = 'string'; return a--;",
+ factory->nan_value()),
+ std::make_pair("var a = true; return ++a;",
+ handle(Smi::FromInt(2), isolate)),
+ std::make_pair("var a = false; return a--;",
+ handle(Smi::FromInt(0), isolate)),
+ std::make_pair("var a = { val: 11 }; return ++a.val;",
+ handle(Smi::FromInt(12), isolate)),
+ std::make_pair("var a = { val: 11 }; return a.val--;",
+ handle(Smi::FromInt(11), isolate)),
+ std::make_pair("var a = { val: 11 }; return ++a.val;",
+ handle(Smi::FromInt(12), isolate)),
+ std::make_pair("var name = 'val'; var a = { val: 22 }; return --a[name];",
+ handle(Smi::FromInt(21), isolate)),
+ std::make_pair("var name = 'val'; var a = { val: 22 }; return a[name]++;",
+ handle(Smi::FromInt(22), isolate)),
+ std::make_pair("var a = 1; (function() { a = 2 })(); return ++a;",
+ handle(Smi::FromInt(3), isolate)),
+ std::make_pair("var a = 1; (function() { a = 2 })(); return a--;",
+ handle(Smi::FromInt(2), isolate)),
+ };
+
+ for (size_t i = 0; i < arraysize(count_ops); i++) {
+ std::string source(InterpreterTester::SourceForBody(count_ops[i].first));
+ InterpreterTester tester(handles.main_isolate(), source.c_str());
+ auto callable = tester.GetCallable<>();
+
+ Handle<i::Object> return_value = callable().ToHandleChecked();
+ CHECK(return_value->SameValue(*count_ops[i].second));
+ }
+}
+
+
+TEST(InterpreterGlobalCountOperators) {
+ HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+
+ std::pair<const char*, Handle<Object>> count_ops[6] = {
+ std::make_pair("var global = 100;function f(){ return ++global; }",
+ handle(Smi::FromInt(101), isolate)),
+ std::make_pair("var global = 100; function f(){ return --global; }",
+ handle(Smi::FromInt(99), isolate)),
+ std::make_pair("var global = 100; function f(){ return global++; }",
+ handle(Smi::FromInt(100), isolate)),
+ std::make_pair("unallocated = 200; function f(){ return ++unallocated; }",
+ handle(Smi::FromInt(201), isolate)),
+ std::make_pair("unallocated = 200; function f(){ return --unallocated; }",
+ handle(Smi::FromInt(199), isolate)),
+ std::make_pair("unallocated = 200; function f(){ return unallocated++; }",
+ handle(Smi::FromInt(200), isolate)),
+ };
+
+ for (size_t i = 0; i < arraysize(count_ops); i++) {
+ InterpreterTester tester(handles.main_isolate(), count_ops[i].first);
+ auto callable = tester.GetCallable<>();
+
+ Handle<i::Object> return_value = callable().ToHandleChecked();
+ CHECK(return_value->SameValue(*count_ops[i].second));
+ }
+}
« no previous file with comments | « test/cctest/interpreter/test-bytecode-generator.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