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

Side by Side Diff: test/cctest/test-strings.cc

Issue 23534067: bulk replace Isolate::Current in tests (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-spaces.cc ('k') | test/cctest/test-symbols.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 }; 130 };
131 131
132 132
133 static void InitializeBuildingBlocks(Handle<String>* building_blocks, 133 static void InitializeBuildingBlocks(Handle<String>* building_blocks,
134 int bb_length, 134 int bb_length,
135 bool long_blocks, 135 bool long_blocks,
136 MyRandomNumberGenerator* rng, 136 MyRandomNumberGenerator* rng,
137 Zone* zone) { 137 Zone* zone) {
138 // A list of pointers that we don't have any interest in cleaning up. 138 // A list of pointers that we don't have any interest in cleaning up.
139 // If they are reachable from a root then leak detection won't complain. 139 // If they are reachable from a root then leak detection won't complain.
140 Isolate* isolate = Isolate::Current(); 140 Isolate* isolate = CcTest::i_isolate();
141 Factory* factory = isolate->factory(); 141 Factory* factory = isolate->factory();
142 for (int i = 0; i < bb_length; i++) { 142 for (int i = 0; i < bb_length; i++) {
143 int len = rng->next(16); 143 int len = rng->next(16);
144 int slice_head_chars = 0; 144 int slice_head_chars = 0;
145 int slice_tail_chars = 0; 145 int slice_tail_chars = 0;
146 int slice_depth = 0; 146 int slice_depth = 0;
147 for (int j = 0; j < 3; j++) { 147 for (int j = 0; j < 3; j++) {
148 if (rng->next(0.35)) slice_depth++; 148 if (rng->next(0.35)) slice_depth++;
149 } 149 }
150 // Must truncate something for a slice string. Loop until 150 // Must truncate something for a slice string. Loop until
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 private: 283 private:
284 DISALLOW_COPY_AND_ASSIGN(ConsStringGenerationData); 284 DISALLOW_COPY_AND_ASSIGN(ConsStringGenerationData);
285 }; 285 };
286 286
287 287
288 ConsStringGenerationData::ConsStringGenerationData(bool long_blocks, 288 ConsStringGenerationData::ConsStringGenerationData(bool long_blocks,
289 Zone* zone) { 289 Zone* zone) {
290 rng_.init(); 290 rng_.init();
291 InitializeBuildingBlocks( 291 InitializeBuildingBlocks(
292 building_blocks_, kNumberOfBuildingBlocks, long_blocks, &rng_, zone); 292 building_blocks_, kNumberOfBuildingBlocks, long_blocks, &rng_, zone);
293 empty_string_ = Isolate::Current()->heap()->empty_string(); 293 empty_string_ = CcTest::i_isolate()->heap()->empty_string();
294 Reset(); 294 Reset();
295 } 295 }
296 296
297 297
298 Handle<String> ConsStringGenerationData::block(uint32_t offset) { 298 Handle<String> ConsStringGenerationData::block(uint32_t offset) {
299 return building_blocks_[offset % kNumberOfBuildingBlocks ]; 299 return building_blocks_[offset % kNumberOfBuildingBlocks ];
300 } 300 }
301 301
302 302
303 Handle<String> ConsStringGenerationData::block(int offset) { 303 Handle<String> ConsStringGenerationData::block(int offset) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 stats.left_traversals_ = data->stats_.left_traversals_; 396 stats.left_traversals_ = data->stats_.left_traversals_;
397 stats.right_traversals_ = data->stats_.right_traversals_; 397 stats.right_traversals_ = data->stats_.right_traversals_;
398 // Adjust total leaves to compensate. 398 // Adjust total leaves to compensate.
399 stats.leaves_ += stats.empty_leaves_; 399 stats.leaves_ += stats.empty_leaves_;
400 stats.VerifyEqual(data->stats_); 400 stats.VerifyEqual(data->stats_);
401 } 401 }
402 402
403 403
404 static Handle<String> ConstructRandomString(ConsStringGenerationData* data, 404 static Handle<String> ConstructRandomString(ConsStringGenerationData* data,
405 unsigned max_recursion) { 405 unsigned max_recursion) {
406 Factory* factory = Isolate::Current()->factory(); 406 Factory* factory = CcTest::i_isolate()->factory();
407 // Compute termination characteristics. 407 // Compute termination characteristics.
408 bool terminate = false; 408 bool terminate = false;
409 bool flat = data->rng_.next(data->empty_leaf_threshold_); 409 bool flat = data->rng_.next(data->empty_leaf_threshold_);
410 bool terminate_early = data->rng_.next(data->early_termination_threshold_); 410 bool terminate_early = data->rng_.next(data->early_termination_threshold_);
411 if (terminate_early) data->early_terminations_++; 411 if (terminate_early) data->early_terminations_++;
412 // The obvious condition. 412 // The obvious condition.
413 terminate |= max_recursion == 0; 413 terminate |= max_recursion == 0;
414 // Flat cons string terminate by definition. 414 // Flat cons string terminate by definition.
415 terminate |= flat; 415 terminate |= flat;
416 // Cap for max leaves. 416 // Cap for max leaves.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 FlattenString(root); 458 FlattenString(root);
459 CHECK(root->IsConsString() && root->IsFlat()); 459 CHECK(root->IsConsString() && root->IsFlat());
460 } 460 }
461 return root; 461 return root;
462 } 462 }
463 463
464 464
465 static Handle<String> ConstructLeft( 465 static Handle<String> ConstructLeft(
466 ConsStringGenerationData* data, 466 ConsStringGenerationData* data,
467 int depth) { 467 int depth) {
468 Factory* factory = Isolate::Current()->factory(); 468 Factory* factory = CcTest::i_isolate()->factory();
469 Handle<String> answer = factory->NewStringFromAscii(CStrVector("")); 469 Handle<String> answer = factory->NewStringFromAscii(CStrVector(""));
470 data->stats_.leaves_++; 470 data->stats_.leaves_++;
471 for (int i = 0; i < depth; i++) { 471 for (int i = 0; i < depth; i++) {
472 Handle<String> block = data->block(i); 472 Handle<String> block = data->block(i);
473 Handle<String> next = factory->NewConsString(answer, block); 473 Handle<String> next = factory->NewConsString(answer, block);
474 if (next->IsConsString()) data->stats_.leaves_++; 474 if (next->IsConsString()) data->stats_.leaves_++;
475 data->stats_.chars_ += block->length(); 475 data->stats_.chars_ += block->length();
476 answer = next; 476 answer = next;
477 } 477 }
478 data->stats_.left_traversals_ = data->stats_.leaves_ - 2; 478 data->stats_.left_traversals_ = data->stats_.leaves_ - 2;
479 return answer; 479 return answer;
480 } 480 }
481 481
482 482
483 static Handle<String> ConstructRight( 483 static Handle<String> ConstructRight(
484 ConsStringGenerationData* data, 484 ConsStringGenerationData* data,
485 int depth) { 485 int depth) {
486 Factory* factory = Isolate::Current()->factory(); 486 Factory* factory = CcTest::i_isolate()->factory();
487 Handle<String> answer = factory->NewStringFromAscii(CStrVector("")); 487 Handle<String> answer = factory->NewStringFromAscii(CStrVector(""));
488 data->stats_.leaves_++; 488 data->stats_.leaves_++;
489 for (int i = depth - 1; i >= 0; i--) { 489 for (int i = depth - 1; i >= 0; i--) {
490 Handle<String> block = data->block(i); 490 Handle<String> block = data->block(i);
491 Handle<String> next = factory->NewConsString(block, answer); 491 Handle<String> next = factory->NewConsString(block, answer);
492 if (next->IsConsString()) data->stats_.leaves_++; 492 if (next->IsConsString()) data->stats_.leaves_++;
493 data->stats_.chars_ += block->length(); 493 data->stats_.chars_ += block->length();
494 answer = next; 494 answer = next;
495 } 495 }
496 data->stats_.right_traversals_ = data->stats_.leaves_ - 2; 496 data->stats_.right_traversals_ = data->stats_.leaves_ - 2;
497 return answer; 497 return answer;
498 } 498 }
499 499
500 500
501 static Handle<String> ConstructBalancedHelper( 501 static Handle<String> ConstructBalancedHelper(
502 ConsStringGenerationData* data, 502 ConsStringGenerationData* data,
503 int from, 503 int from,
504 int to) { 504 int to) {
505 Factory* factory = Isolate::Current()->factory(); 505 Factory* factory = CcTest::i_isolate()->factory();
506 CHECK(to > from); 506 CHECK(to > from);
507 if (to - from == 1) { 507 if (to - from == 1) {
508 data->stats_.chars_ += data->block(from)->length(); 508 data->stats_.chars_ += data->block(from)->length();
509 return data->block(from); 509 return data->block(from);
510 } 510 }
511 if (to - from == 2) { 511 if (to - from == 2) {
512 data->stats_.chars_ += data->block(from)->length(); 512 data->stats_.chars_ += data->block(from)->length();
513 data->stats_.chars_ += data->block(from+1)->length(); 513 data->stats_.chars_ += data->block(from+1)->length();
514 return factory->NewConsString(data->block(from), data->block(from+1)); 514 return factory->NewConsString(data->block(from), data->block(from+1));
515 } 515 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 } 564 }
565 s1->Get(s1->length() - 1); 565 s1->Get(s1->length() - 1);
566 s2->Get(s2->length() - 1); 566 s2->Get(s2->length() - 1);
567 } 567 }
568 568
569 569
570 TEST(Traverse) { 570 TEST(Traverse) {
571 printf("TestTraverse\n"); 571 printf("TestTraverse\n");
572 CcTest::InitializeVM(); 572 CcTest::InitializeVM();
573 v8::HandleScope scope(CcTest::isolate()); 573 v8::HandleScope scope(CcTest::isolate());
574 Zone zone(Isolate::Current()); 574 Zone zone(CcTest::i_isolate());
575 ConsStringGenerationData data(false, &zone); 575 ConsStringGenerationData data(false, &zone);
576 Handle<String> flat = ConstructBalanced(&data); 576 Handle<String> flat = ConstructBalanced(&data);
577 FlattenString(flat); 577 FlattenString(flat);
578 Handle<String> left_asymmetric = ConstructLeft(&data, DEEP_DEPTH); 578 Handle<String> left_asymmetric = ConstructLeft(&data, DEEP_DEPTH);
579 Handle<String> right_asymmetric = ConstructRight(&data, DEEP_DEPTH); 579 Handle<String> right_asymmetric = ConstructRight(&data, DEEP_DEPTH);
580 Handle<String> symmetric = ConstructBalanced(&data); 580 Handle<String> symmetric = ConstructBalanced(&data);
581 printf("1\n"); 581 printf("1\n");
582 Traverse(flat, symmetric); 582 Traverse(flat, symmetric);
583 printf("2\n"); 583 printf("2\n");
584 Traverse(flat, left_asymmetric); 584 Traverse(flat, left_asymmetric);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 "lefts", data.stats_.left_traversals_, 652 "lefts", data.stats_.left_traversals_,
653 "rights", data.stats_.right_traversals_, 653 "rights", data.stats_.right_traversals_,
654 "early_terminations", data.early_terminations_); 654 "early_terminations", data.early_terminations_);
655 #endif 655 #endif
656 } 656 }
657 657
658 658
659 template<typename BuildString> 659 template<typename BuildString>
660 void TestStringCharacterStream(BuildString build, int test_cases) { 660 void TestStringCharacterStream(BuildString build, int test_cases) {
661 CcTest::InitializeVM(); 661 CcTest::InitializeVM();
662 Isolate* isolate = Isolate::Current(); 662 Isolate* isolate = CcTest::i_isolate();
663 HandleScope outer_scope(isolate); 663 HandleScope outer_scope(isolate);
664 Zone zone(isolate); 664 Zone zone(isolate);
665 ConsStringGenerationData data(true, &zone); 665 ConsStringGenerationData data(true, &zone);
666 for (int i = 0; i < test_cases; i++) { 666 for (int i = 0; i < test_cases; i++) {
667 printf("%d\n", i); 667 printf("%d\n", i);
668 HandleScope inner_scope(isolate); 668 HandleScope inner_scope(isolate);
669 AlwaysAllocateScope always_allocate; 669 AlwaysAllocateScope always_allocate;
670 // Build flat version of cons string. 670 // Build flat version of cons string.
671 Handle<String> flat_string = build(i, &data); 671 Handle<String> flat_string = build(i, &data);
672 ConsStringStats flat_string_stats; 672 ConsStringStats flat_string_stats;
(...skipping 17 matching lines...) Expand all
690 VerifyCharacterStream(flat_string_ptr, *cons_string); 690 VerifyCharacterStream(flat_string_ptr, *cons_string);
691 } 691 }
692 } 692 }
693 693
694 694
695 static const int kCharacterStreamNonRandomCases = 8; 695 static const int kCharacterStreamNonRandomCases = 8;
696 696
697 697
698 static Handle<String> BuildEdgeCaseConsString( 698 static Handle<String> BuildEdgeCaseConsString(
699 int test_case, ConsStringGenerationData* data) { 699 int test_case, ConsStringGenerationData* data) {
700 Factory* factory = Isolate::Current()->factory(); 700 Factory* factory = CcTest::i_isolate()->factory();
701 data->Reset(); 701 data->Reset();
702 switch (test_case) { 702 switch (test_case) {
703 case 0: 703 case 0:
704 return ConstructBalanced(data, 71); 704 return ConstructBalanced(data, 71);
705 case 1: 705 case 1:
706 return ConstructLeft(data, 71); 706 return ConstructLeft(data, 71);
707 case 2: 707 case 2:
708 return ConstructRight(data, 71); 708 return ConstructRight(data, 71);
709 case 3: 709 case 3:
710 return ConstructLeft(data, 10); 710 return ConstructLeft(data, 10);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 TestStringCharacterStream(BuildRandomConsString, kUniqueRandomParameters*7); 853 TestStringCharacterStream(BuildRandomConsString, kUniqueRandomParameters*7);
854 } 854 }
855 855
856 856
857 static const int DEEP_ASCII_DEPTH = 100000; 857 static const int DEEP_ASCII_DEPTH = 100000;
858 858
859 859
860 TEST(DeepAscii) { 860 TEST(DeepAscii) {
861 printf("TestDeepAscii\n"); 861 printf("TestDeepAscii\n");
862 CcTest::InitializeVM(); 862 CcTest::InitializeVM();
863 Factory* factory = Isolate::Current()->factory(); 863 Factory* factory = CcTest::i_isolate()->factory();
864 v8::HandleScope scope(CcTest::isolate()); 864 v8::HandleScope scope(CcTest::isolate());
865 865
866 char* foo = NewArray<char>(DEEP_ASCII_DEPTH); 866 char* foo = NewArray<char>(DEEP_ASCII_DEPTH);
867 for (int i = 0; i < DEEP_ASCII_DEPTH; i++) { 867 for (int i = 0; i < DEEP_ASCII_DEPTH; i++) {
868 foo[i] = "foo "[i % 4]; 868 foo[i] = "foo "[i % 4];
869 } 869 }
870 Handle<String> string = 870 Handle<String> string =
871 factory->NewStringFromAscii(Vector<const char>(foo, DEEP_ASCII_DEPTH)); 871 factory->NewStringFromAscii(Vector<const char>(foo, DEEP_ASCII_DEPTH));
872 Handle<String> foo_string = factory->NewStringFromAscii(CStrVector("foo")); 872 Handle<String> foo_string = factory->NewStringFromAscii(CStrVector("foo"));
873 for (int i = 0; i < DEEP_ASCII_DEPTH; i += 10) { 873 for (int i = 0; i < DEEP_ASCII_DEPTH; i += 10) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 for (int j = 0; j < lengths[i]; j++) 923 for (int j = 0; j < lengths[i]; j++)
924 CHECK_EQ(as_utf8[j], static_cast<unsigned char>(buffer[j])); 924 CHECK_EQ(as_utf8[j], static_cast<unsigned char>(buffer[j]));
925 // Check that the rest of the buffer hasn't been touched 925 // Check that the rest of the buffer hasn't been touched
926 for (int j = lengths[i]; j < 11; j++) 926 for (int j = lengths[i]; j < 11; j++)
927 CHECK_EQ(kNoChar, buffer[j]); 927 CHECK_EQ(kNoChar, buffer[j]);
928 } 928 }
929 } 929 }
930 930
931 931
932 TEST(ExternalShortStringAdd) { 932 TEST(ExternalShortStringAdd) {
933 Isolate* isolate = Isolate::Current(); 933 Isolate* isolate = CcTest::i_isolate();
934 Zone zone(isolate); 934 Zone zone(isolate);
935 935
936 CcTest::InitializeVM(); 936 CcTest::InitializeVM();
937 v8::HandleScope handle_scope(CcTest::isolate()); 937 v8::HandleScope handle_scope(CcTest::isolate());
938 938
939 // Make sure we cover all always-flat lengths and at least one above. 939 // Make sure we cover all always-flat lengths and at least one above.
940 static const int kMaxLength = 20; 940 static const int kMaxLength = 20;
941 CHECK_GT(kMaxLength, i::ConsString::kMinLength); 941 CHECK_GT(kMaxLength, i::ConsString::kMinLength);
942 942
943 // Allocate two JavaScript arrays for holding short strings. 943 // Allocate two JavaScript arrays for holding short strings.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 " }" 1011 " }"
1012 " }" 1012 " }"
1013 " return 0;" 1013 " return 0;"
1014 "};" 1014 "};"
1015 "test()"; 1015 "test()";
1016 CHECK_EQ(0, CompileRun(source)->Int32Value()); 1016 CHECK_EQ(0, CompileRun(source)->Int32Value());
1017 } 1017 }
1018 1018
1019 1019
1020 TEST(JSONStringifySliceMadeExternal) { 1020 TEST(JSONStringifySliceMadeExternal) {
1021 Isolate* isolate = Isolate::Current(); 1021 Isolate* isolate = CcTest::i_isolate();
1022 Zone zone(isolate); 1022 Zone zone(isolate);
1023 CcTest::InitializeVM(); 1023 CcTest::InitializeVM();
1024 // Create a sliced string from a one-byte string. The latter is turned 1024 // Create a sliced string from a one-byte string. The latter is turned
1025 // into a two-byte external string. Check that JSON.stringify works. 1025 // into a two-byte external string. Check that JSON.stringify works.
1026 v8::HandleScope handle_scope(CcTest::isolate()); 1026 v8::HandleScope handle_scope(CcTest::isolate());
1027 v8::Handle<v8::String> underlying = 1027 v8::Handle<v8::String> underlying =
1028 CompileRun("var underlying = 'abcdefghijklmnopqrstuvwxyz';" 1028 CompileRun("var underlying = 'abcdefghijklmnopqrstuvwxyz';"
1029 "underlying")->ToString(); 1029 "underlying")->ToString();
1030 v8::Handle<v8::String> slice = 1030 v8::Handle<v8::String> slice =
1031 CompileRun("var slice = underlying.slice(1);" 1031 CompileRun("var slice = underlying.slice(1);"
(...skipping 12 matching lines...) Expand all
1044 1044
1045 CHECK_EQ("\"bcdefghijklmnopqrstuvwxyz\"", 1045 CHECK_EQ("\"bcdefghijklmnopqrstuvwxyz\"",
1046 *v8::String::Utf8Value(CompileRun("JSON.stringify(slice)"))); 1046 *v8::String::Utf8Value(CompileRun("JSON.stringify(slice)")));
1047 } 1047 }
1048 1048
1049 1049
1050 TEST(CachedHashOverflow) { 1050 TEST(CachedHashOverflow) {
1051 // We incorrectly allowed strings to be tagged as array indices even if their 1051 // We incorrectly allowed strings to be tagged as array indices even if their
1052 // values didn't fit in the hash field. 1052 // values didn't fit in the hash field.
1053 // See http://code.google.com/p/v8/issues/detail?id=728 1053 // See http://code.google.com/p/v8/issues/detail?id=728
1054 Isolate* isolate = Isolate::Current(); 1054 Isolate* isolate = CcTest::i_isolate();
1055 Zone zone(isolate); 1055 Zone zone(isolate);
1056 1056
1057 CcTest::InitializeVM(); 1057 CcTest::InitializeVM();
1058 v8::HandleScope handle_scope(CcTest::isolate()); 1058 v8::HandleScope handle_scope(CcTest::isolate());
1059 // Lines must be executed sequentially. Combining them into one script 1059 // Lines must be executed sequentially. Combining them into one script
1060 // makes the bug go away. 1060 // makes the bug go away.
1061 const char* lines[] = { 1061 const char* lines[] = {
1062 "var x = [];", 1062 "var x = [];",
1063 "x[4] = 42;", 1063 "x[4] = 42;",
1064 "var s = \"1073741828\";", 1064 "var s = \"1073741828\";",
(...skipping 26 matching lines...) Expand all
1091 CHECK_EQ(Smi::cast(results[i]->ToSmi()->ToObjectChecked())->value(), 1091 CHECK_EQ(Smi::cast(results[i]->ToSmi()->ToObjectChecked())->value(),
1092 result->ToInt32()->Value()); 1092 result->ToInt32()->Value());
1093 } 1093 }
1094 } 1094 }
1095 } 1095 }
1096 1096
1097 1097
1098 TEST(SliceFromCons) { 1098 TEST(SliceFromCons) {
1099 FLAG_string_slices = true; 1099 FLAG_string_slices = true;
1100 CcTest::InitializeVM(); 1100 CcTest::InitializeVM();
1101 Factory* factory = Isolate::Current()->factory(); 1101 Factory* factory = CcTest::i_isolate()->factory();
1102 v8::HandleScope scope(CcTest::isolate()); 1102 v8::HandleScope scope(CcTest::isolate());
1103 Handle<String> string = 1103 Handle<String> string =
1104 factory->NewStringFromAscii(CStrVector("parentparentparent")); 1104 factory->NewStringFromAscii(CStrVector("parentparentparent"));
1105 Handle<String> parent = factory->NewConsString(string, string); 1105 Handle<String> parent = factory->NewConsString(string, string);
1106 CHECK(parent->IsConsString()); 1106 CHECK(parent->IsConsString());
1107 CHECK(!parent->IsFlat()); 1107 CHECK(!parent->IsFlat());
1108 Handle<String> slice = factory->NewSubString(parent, 1, 25); 1108 Handle<String> slice = factory->NewSubString(parent, 1, 25);
1109 // After slicing, the original string becomes a flat cons. 1109 // After slicing, the original string becomes a flat cons.
1110 CHECK(parent->IsFlat()); 1110 CHECK(parent->IsFlat());
1111 CHECK(slice->IsSlicedString()); 1111 CHECK(slice->IsSlicedString());
(...skipping 14 matching lines...) Expand all
1126 virtual size_t length() const { return data_.length(); } 1126 virtual size_t length() const { return data_.length(); }
1127 virtual const char* data() const { return data_.start(); } 1127 virtual const char* data() const { return data_.start(); }
1128 private: 1128 private:
1129 i::Vector<const char> data_; 1129 i::Vector<const char> data_;
1130 }; 1130 };
1131 1131
1132 1132
1133 TEST(SliceFromExternal) { 1133 TEST(SliceFromExternal) {
1134 FLAG_string_slices = true; 1134 FLAG_string_slices = true;
1135 CcTest::InitializeVM(); 1135 CcTest::InitializeVM();
1136 Factory* factory = Isolate::Current()->factory(); 1136 Factory* factory = CcTest::i_isolate()->factory();
1137 v8::HandleScope scope(CcTest::isolate()); 1137 v8::HandleScope scope(CcTest::isolate());
1138 AsciiVectorResource resource( 1138 AsciiVectorResource resource(
1139 i::Vector<const char>("abcdefghijklmnopqrstuvwxyz", 26)); 1139 i::Vector<const char>("abcdefghijklmnopqrstuvwxyz", 26));
1140 Handle<String> string = factory->NewExternalStringFromAscii(&resource); 1140 Handle<String> string = factory->NewExternalStringFromAscii(&resource);
1141 CHECK(string->IsExternalString()); 1141 CHECK(string->IsExternalString());
1142 Handle<String> slice = factory->NewSubString(string, 1, 25); 1142 Handle<String> slice = factory->NewSubString(string, 1, 25);
1143 CHECK(slice->IsSlicedString()); 1143 CHECK(slice->IsSlicedString());
1144 CHECK(string->IsExternalString()); 1144 CHECK(string->IsExternalString());
1145 CHECK_EQ(SlicedString::cast(*slice)->parent(), *string); 1145 CHECK_EQ(SlicedString::cast(*slice)->parent(), *string);
1146 CHECK(SlicedString::cast(*slice)->parent()->IsExternalString()); 1146 CHECK(SlicedString::cast(*slice)->parent()->IsExternalString());
1147 CHECK(slice->IsFlat()); 1147 CHECK(slice->IsFlat());
1148 } 1148 }
1149 1149
1150 1150
1151 TEST(TrivialSlice) { 1151 TEST(TrivialSlice) {
1152 // This tests whether a slice that contains the entire parent string 1152 // This tests whether a slice that contains the entire parent string
1153 // actually creates a new string (it should not). 1153 // actually creates a new string (it should not).
1154 FLAG_string_slices = true; 1154 FLAG_string_slices = true;
1155 CcTest::InitializeVM(); 1155 CcTest::InitializeVM();
1156 Factory* factory = Isolate::Current()->factory(); 1156 Factory* factory = CcTest::i_isolate()->factory();
1157 v8::HandleScope scope(CcTest::isolate()); 1157 v8::HandleScope scope(CcTest::isolate());
1158 v8::Local<v8::Value> result; 1158 v8::Local<v8::Value> result;
1159 Handle<String> string; 1159 Handle<String> string;
1160 const char* init = "var str = 'abcdefghijklmnopqrstuvwxyz';"; 1160 const char* init = "var str = 'abcdefghijklmnopqrstuvwxyz';";
1161 const char* check = "str.slice(0,26)"; 1161 const char* check = "str.slice(0,26)";
1162 const char* crosscheck = "str.slice(1,25)"; 1162 const char* crosscheck = "str.slice(1,25)";
1163 1163
1164 CompileRun(init); 1164 CompileRun(init);
1165 1165
1166 result = CompileRun(check); 1166 result = CompileRun(check);
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1379 CheckCanonicalEquivalence(c, test); 1379 CheckCanonicalEquivalence(c, test);
1380 continue; 1380 continue;
1381 } 1381 }
1382 if (upper != c && lower != c) { 1382 if (upper != c && lower != c) {
1383 CheckCanonicalEquivalence(c, test); 1383 CheckCanonicalEquivalence(c, test);
1384 continue; 1384 continue;
1385 } 1385 }
1386 CHECK_EQ(Min(upper, lower), test); 1386 CHECK_EQ(Min(upper, lower), test);
1387 } 1387 }
1388 } 1388 }
OLDNEW
« no previous file with comments | « test/cctest/test-spaces.cc ('k') | test/cctest/test-symbols.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698