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

Side by Side Diff: test/unittests/value-serializer-unittest.cc

Issue 2311063004: ValueSerializer: Take advantage of fast elements in dense array serialization. (Closed)
Patch Set: additional unit tests Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « src/value-serializer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/value-serializer.h" 5 #include "src/value-serializer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "include/v8.h" 10 #include "include/v8.h"
(...skipping 929 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 "(() => {" 940 "(() => {"
941 " var x = [1, { get a() { x.length = 0; }}, 3, 4];" 941 " var x = [1, { get a() { x.length = 0; }}, 3, 4];"
942 " return x;" 942 " return x;"
943 "})()", 943 "})()",
944 [this](Local<Value> value) { 944 [this](Local<Value> value) {
945 ASSERT_TRUE(value->IsArray()); 945 ASSERT_TRUE(value->IsArray());
946 ASSERT_EQ(4, Array::Cast(*value)->Length()); 946 ASSERT_EQ(4, Array::Cast(*value)->Length());
947 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1")); 947 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1"));
948 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)")); 948 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)"));
949 }); 949 });
950 // The same is true if the length is shortened, but there are still items
951 // remaining.
952 RoundTripTest(
953 "(() => {"
954 " var x = [1, { get a() { x.length = 3; }}, 3, 4];"
955 " return x;"
956 "})()",
957 [this](Local<Value> value) {
958 ASSERT_TRUE(value->IsArray());
959 ASSERT_EQ(4, Array::Cast(*value)->Length());
960 EXPECT_TRUE(EvaluateScriptForResultBool("result[2] === 3"));
961 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(3)"));
962 });
950 // Same for sparse arrays. 963 // Same for sparse arrays.
951 RoundTripTest( 964 RoundTripTest(
952 "(() => {" 965 "(() => {"
953 " var x = [1, { get a() { x.length = 0; }}, 3, 4];" 966 " var x = [1, { get a() { x.length = 0; }}, 3, 4];"
954 " x.length = 1000;" 967 " x.length = 1000;"
955 " return x;" 968 " return x;"
956 "})()", 969 "})()",
957 [this](Local<Value> value) { 970 [this](Local<Value> value) {
958 ASSERT_TRUE(value->IsArray()); 971 ASSERT_TRUE(value->IsArray());
959 ASSERT_EQ(1000, Array::Cast(*value)->Length()); 972 ASSERT_EQ(1000, Array::Cast(*value)->Length());
960 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1")); 973 EXPECT_TRUE(EvaluateScriptForResultBool("result[0] === 1"));
961 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)")); 974 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(2)"));
962 }); 975 });
976 RoundTripTest(
977 "(() => {"
978 " var x = [1, { get a() { x.length = 3; }}, 3, 4];"
979 " x.length = 1000;"
980 " return x;"
981 "})()",
982 [this](Local<Value> value) {
983 ASSERT_TRUE(value->IsArray());
984 ASSERT_EQ(1000, Array::Cast(*value)->Length());
985 EXPECT_TRUE(EvaluateScriptForResultBool("result[2] === 3"));
986 EXPECT_TRUE(EvaluateScriptForResultBool("!result.hasOwnProperty(3)"));
987 });
963 // If a getter makes a property non-enumerable, it should still be enumerated 988 // If a getter makes a property non-enumerable, it should still be enumerated
964 // as enumeration happens once before getters are invoked. 989 // as enumeration happens once before getters are invoked.
965 RoundTripTest( 990 RoundTripTest(
966 "(() => {" 991 "(() => {"
967 " var x = [{ get a() {" 992 " var x = [{ get a() {"
968 " Object.defineProperty(x, '1', { value: 3, enumerable: false });" 993 " Object.defineProperty(x, '1', { value: 3, enumerable: false });"
969 " }}, 2];" 994 " }}, 2];"
970 " return x;" 995 " return x;"
971 "})()", 996 "})()",
972 [this](Local<Value> value) { 997 [this](Local<Value> value) {
(...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after
1994 } 2019 }
1995 2020
1996 TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, 2021 TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer,
1997 SharedArrayBufferMustBeTransferred) { 2022 SharedArrayBufferMustBeTransferred) {
1998 // A SharedArrayBuffer which was not marked for transfer should fail encoding. 2023 // A SharedArrayBuffer which was not marked for transfer should fail encoding.
1999 InvalidEncodeTest("new SharedArrayBuffer(32)"); 2024 InvalidEncodeTest("new SharedArrayBuffer(32)");
2000 } 2025 }
2001 2026
2002 } // namespace 2027 } // namespace
2003 } // namespace v8 2028 } // namespace v8
OLDNEW
« no previous file with comments | « src/value-serializer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698