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-regexp.cc

Issue 7066004: Inline more zone stuff. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 7 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-liveedit.cc ('k') | test/cctest/test-strings.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 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 #include "ia32/regexp-macro-assembler-ia32.h" 58 #include "ia32/regexp-macro-assembler-ia32.h"
59 #endif 59 #endif
60 #endif // V8_INTERPRETED_REGEXP 60 #endif // V8_INTERPRETED_REGEXP
61 61
62 using namespace v8::internal; 62 using namespace v8::internal;
63 63
64 64
65 static bool CheckParse(const char* input) { 65 static bool CheckParse(const char* input) {
66 V8::Initialize(NULL); 66 V8::Initialize(NULL);
67 v8::HandleScope scope; 67 v8::HandleScope scope;
68 ZoneScope zone_scope(DELETE_ON_EXIT); 68 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
69 FlatStringReader reader(Isolate::Current(), CStrVector(input)); 69 FlatStringReader reader(Isolate::Current(), CStrVector(input));
70 RegExpCompileData result; 70 RegExpCompileData result;
71 return v8::internal::RegExpParser::ParseRegExp(&reader, false, &result); 71 return v8::internal::RegExpParser::ParseRegExp(&reader, false, &result);
72 } 72 }
73 73
74 74
75 static SmartPointer<const char> Parse(const char* input) { 75 static SmartPointer<const char> Parse(const char* input) {
76 V8::Initialize(NULL); 76 V8::Initialize(NULL);
77 v8::HandleScope scope; 77 v8::HandleScope scope;
78 ZoneScope zone_scope(DELETE_ON_EXIT); 78 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
79 FlatStringReader reader(Isolate::Current(), CStrVector(input)); 79 FlatStringReader reader(Isolate::Current(), CStrVector(input));
80 RegExpCompileData result; 80 RegExpCompileData result;
81 CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); 81 CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result));
82 CHECK(result.tree != NULL); 82 CHECK(result.tree != NULL);
83 CHECK(result.error.is_null()); 83 CHECK(result.error.is_null());
84 SmartPointer<const char> output = result.tree->ToString(); 84 SmartPointer<const char> output = result.tree->ToString();
85 return output; 85 return output;
86 } 86 }
87 87
88 static bool CheckSimple(const char* input) { 88 static bool CheckSimple(const char* input) {
89 V8::Initialize(NULL); 89 V8::Initialize(NULL);
90 v8::HandleScope scope; 90 v8::HandleScope scope;
91 unibrow::Utf8InputBuffer<> buffer(input, StrLength(input)); 91 unibrow::Utf8InputBuffer<> buffer(input, StrLength(input));
92 ZoneScope zone_scope(DELETE_ON_EXIT); 92 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
93 FlatStringReader reader(Isolate::Current(), CStrVector(input)); 93 FlatStringReader reader(Isolate::Current(), CStrVector(input));
94 RegExpCompileData result; 94 RegExpCompileData result;
95 CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); 95 CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result));
96 CHECK(result.tree != NULL); 96 CHECK(result.tree != NULL);
97 CHECK(result.error.is_null()); 97 CHECK(result.error.is_null());
98 return result.simple; 98 return result.simple;
99 } 99 }
100 100
101 struct MinMaxPair { 101 struct MinMaxPair {
102 int min_match; 102 int min_match;
103 int max_match; 103 int max_match;
104 }; 104 };
105 105
106 static MinMaxPair CheckMinMaxMatch(const char* input) { 106 static MinMaxPair CheckMinMaxMatch(const char* input) {
107 V8::Initialize(NULL); 107 V8::Initialize(NULL);
108 v8::HandleScope scope; 108 v8::HandleScope scope;
109 unibrow::Utf8InputBuffer<> buffer(input, StrLength(input)); 109 unibrow::Utf8InputBuffer<> buffer(input, StrLength(input));
110 ZoneScope zone_scope(DELETE_ON_EXIT); 110 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
111 FlatStringReader reader(Isolate::Current(), CStrVector(input)); 111 FlatStringReader reader(Isolate::Current(), CStrVector(input));
112 RegExpCompileData result; 112 RegExpCompileData result;
113 CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); 113 CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result));
114 CHECK(result.tree != NULL); 114 CHECK(result.tree != NULL);
115 CHECK(result.error.is_null()); 115 CHECK(result.error.is_null());
116 int min_match = result.tree->min_match(); 116 int min_match = result.tree->min_match();
117 int max_match = result.tree->max_match(); 117 int max_match = result.tree->max_match();
118 MinMaxPair pair = { min_match, max_match }; 118 MinMaxPair pair = { min_match, max_match };
119 return pair; 119 return pair;
120 } 120 }
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 CHECK_PARSE_EQ("[A-Z$-][x]", "(! [A-Z $ -] [x])"); 371 CHECK_PARSE_EQ("[A-Z$-][x]", "(! [A-Z $ -] [x])");
372 CHECK_PARSE_EQ("a{3,4*}", "(: 'a{3,' (# 0 - g '4') '}')"); 372 CHECK_PARSE_EQ("a{3,4*}", "(: 'a{3,' (# 0 - g '4') '}')");
373 CHECK_PARSE_EQ("{", "'{'"); 373 CHECK_PARSE_EQ("{", "'{'");
374 CHECK_PARSE_EQ("a|", "(| 'a' %)"); 374 CHECK_PARSE_EQ("a|", "(| 'a' %)");
375 } 375 }
376 376
377 static void ExpectError(const char* input, 377 static void ExpectError(const char* input,
378 const char* expected) { 378 const char* expected) {
379 V8::Initialize(NULL); 379 V8::Initialize(NULL);
380 v8::HandleScope scope; 380 v8::HandleScope scope;
381 ZoneScope zone_scope(DELETE_ON_EXIT); 381 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
382 FlatStringReader reader(Isolate::Current(), CStrVector(input)); 382 FlatStringReader reader(Isolate::Current(), CStrVector(input));
383 RegExpCompileData result; 383 RegExpCompileData result;
384 CHECK(!v8::internal::RegExpParser::ParseRegExp(&reader, false, &result)); 384 CHECK(!v8::internal::RegExpParser::ParseRegExp(&reader, false, &result));
385 CHECK(result.tree == NULL); 385 CHECK(result.tree == NULL);
386 CHECK(!result.error.is_null()); 386 CHECK(!result.error.is_null());
387 SmartPointer<char> str = result.error->ToCString(ALLOW_NULLS); 387 SmartPointer<char> str = result.error->ToCString(ALLOW_NULLS);
388 CHECK_EQ(expected, *str); 388 CHECK_EQ(expected, *str);
389 } 389 }
390 390
391 391
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 return !IsWhiteSpace(c); 453 return !IsWhiteSpace(c);
454 } 454 }
455 455
456 456
457 static bool NotWord(uc16 c) { 457 static bool NotWord(uc16 c) {
458 return !IsRegExpWord(c); 458 return !IsRegExpWord(c);
459 } 459 }
460 460
461 461
462 static void TestCharacterClassEscapes(uc16 c, bool (pred)(uc16 c)) { 462 static void TestCharacterClassEscapes(uc16 c, bool (pred)(uc16 c)) {
463 ZoneScope scope(DELETE_ON_EXIT); 463 ZoneScope scope(Isolate::Current(), DELETE_ON_EXIT);
464 ZoneList<CharacterRange>* ranges = new ZoneList<CharacterRange>(2); 464 ZoneList<CharacterRange>* ranges = new ZoneList<CharacterRange>(2);
465 CharacterRange::AddClassEscape(c, ranges); 465 CharacterRange::AddClassEscape(c, ranges);
466 for (unsigned i = 0; i < (1 << 16); i++) { 466 for (unsigned i = 0; i < (1 << 16); i++) {
467 bool in_class = false; 467 bool in_class = false;
468 for (int j = 0; !in_class && j < ranges->length(); j++) { 468 for (int j = 0; !in_class && j < ranges->length(); j++) {
469 CharacterRange& range = ranges->at(j); 469 CharacterRange& range = ranges->at(j);
470 in_class = (range.from() <= i && i <= range.to()); 470 in_class = (range.from() <= i && i <= range.to());
471 } 471 }
472 CHECK_EQ(pred(i), in_class); 472 CHECK_EQ(pred(i), in_class);
473 } 473 }
(...skipping 25 matching lines...) Expand all
499 RegExpEngine::Compile(&compile_data, false, multiline, pattern, is_ascii); 499 RegExpEngine::Compile(&compile_data, false, multiline, pattern, is_ascii);
500 return compile_data.node; 500 return compile_data.node;
501 } 501 }
502 502
503 503
504 static void Execute(const char* input, 504 static void Execute(const char* input,
505 bool multiline, 505 bool multiline,
506 bool is_ascii, 506 bool is_ascii,
507 bool dot_output = false) { 507 bool dot_output = false) {
508 v8::HandleScope scope; 508 v8::HandleScope scope;
509 ZoneScope zone_scope(DELETE_ON_EXIT); 509 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
510 RegExpNode* node = Compile(input, multiline, is_ascii); 510 RegExpNode* node = Compile(input, multiline, is_ascii);
511 USE(node); 511 USE(node);
512 #ifdef DEBUG 512 #ifdef DEBUG
513 if (dot_output) { 513 if (dot_output) {
514 RegExpEngine::DotPrint(input, node, false); 514 RegExpEngine::DotPrint(input, node, false);
515 exit(0); 515 exit(0);
516 } 516 }
517 #endif // DEBUG 517 #endif // DEBUG
518 } 518 }
519 519
(...skipping 20 matching lines...) Expand all
540 540
541 541
542 static unsigned PseudoRandom(int i, int j) { 542 static unsigned PseudoRandom(int i, int j) {
543 return ~(~((i * 781) ^ (j * 329))); 543 return ~(~((i * 781) ^ (j * 329)));
544 } 544 }
545 545
546 546
547 TEST(SplayTreeSimple) { 547 TEST(SplayTreeSimple) {
548 v8::internal::V8::Initialize(NULL); 548 v8::internal::V8::Initialize(NULL);
549 static const unsigned kLimit = 1000; 549 static const unsigned kLimit = 1000;
550 ZoneScope zone_scope(DELETE_ON_EXIT); 550 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
551 ZoneSplayTree<TestConfig> tree; 551 ZoneSplayTree<TestConfig> tree;
552 bool seen[kLimit]; 552 bool seen[kLimit];
553 for (unsigned i = 0; i < kLimit; i++) seen[i] = false; 553 for (unsigned i = 0; i < kLimit; i++) seen[i] = false;
554 #define CHECK_MAPS_EQUAL() do { \ 554 #define CHECK_MAPS_EQUAL() do { \
555 for (unsigned k = 0; k < kLimit; k++) \ 555 for (unsigned k = 0; k < kLimit; k++) \
556 CHECK_EQ(seen[k], tree.Find(k, &loc)); \ 556 CHECK_EQ(seen[k], tree.Find(k, &loc)); \
557 } while (false) 557 } while (false)
558 for (int i = 0; i < 50; i++) { 558 for (int i = 0; i < 50; i++) {
559 for (int j = 0; j < 50; j++) { 559 for (int j = 0; j < 50; j++) {
560 unsigned next = PseudoRandom(i, j) % kLimit; 560 unsigned next = PseudoRandom(i, j) % kLimit;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 Vector<uc16> range(ranges[i], 2 * kRangeSize); 608 Vector<uc16> range(ranges[i], 2 * kRangeSize);
609 for (int j = 0; j < 2 * kRangeSize; j++) { 609 for (int j = 0; j < 2 * kRangeSize; j++) {
610 range[j] = PseudoRandom(i + 25, j + 87) % kLimit; 610 range[j] = PseudoRandom(i + 25, j + 87) % kLimit;
611 } 611 }
612 range.Sort(); 612 range.Sort();
613 for (int j = 1; j < 2 * kRangeSize; j++) { 613 for (int j = 1; j < 2 * kRangeSize; j++) {
614 CHECK(range[j-1] <= range[j]); 614 CHECK(range[j-1] <= range[j]);
615 } 615 }
616 } 616 }
617 // Enter test data into dispatch table. 617 // Enter test data into dispatch table.
618 ZoneScope zone_scope(DELETE_ON_EXIT); 618 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
619 DispatchTable table; 619 DispatchTable table;
620 for (int i = 0; i < kRangeCount; i++) { 620 for (int i = 0; i < kRangeCount; i++) {
621 uc16* range = ranges[i]; 621 uc16* range = ranges[i];
622 for (int j = 0; j < 2 * kRangeSize; j += 2) 622 for (int j = 0; j < 2 * kRangeSize; j += 2)
623 table.AddRange(CharacterRange(range[j], range[j + 1]), i); 623 table.AddRange(CharacterRange(range[j], range[j + 1]), i);
624 } 624 }
625 // Check that the table looks as we would expect 625 // Check that the table looks as we would expect
626 for (int p = 0; p < kLimit; p++) { 626 for (int p = 0; p < kLimit; p++) {
627 OutSet* outs = table.Get(p); 627 OutSet* outs = table.Get(p);
628 for (int j = 0; j < kRangeCount; j++) { 628 for (int j = 0; j < kRangeCount; j++) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 typedef RegExpMacroAssemblerX64 ArchRegExpMacroAssembler; 675 typedef RegExpMacroAssemblerX64 ArchRegExpMacroAssembler;
676 #elif V8_TARGET_ARCH_ARM 676 #elif V8_TARGET_ARCH_ARM
677 typedef RegExpMacroAssemblerARM ArchRegExpMacroAssembler; 677 typedef RegExpMacroAssemblerARM ArchRegExpMacroAssembler;
678 #elif V8_TARGET_ARCH_MIPS 678 #elif V8_TARGET_ARCH_MIPS
679 typedef RegExpMacroAssemblerMIPS ArchRegExpMacroAssembler; 679 typedef RegExpMacroAssemblerMIPS ArchRegExpMacroAssembler;
680 #endif 680 #endif
681 681
682 class ContextInitializer { 682 class ContextInitializer {
683 public: 683 public:
684 ContextInitializer() 684 ContextInitializer()
685 : env_(), scope_(), zone_(DELETE_ON_EXIT) { 685 : env_(), scope_(), zone_(Isolate::Current(), DELETE_ON_EXIT) {
686 env_ = v8::Context::New(); 686 env_ = v8::Context::New();
687 env_->Enter(); 687 env_->Enter();
688 } 688 }
689 ~ContextInitializer() { 689 ~ContextInitializer() {
690 env_->Exit(); 690 env_->Exit();
691 env_.Dispose(); 691 env_.Dispose();
692 } 692 }
693 private: 693 private:
694 v8::Persistent<v8::Context> env_; 694 v8::Persistent<v8::Context> env_;
695 v8::HandleScope scope_; 695 v8::HandleScope scope_;
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
1370 } 1370 }
1371 1371
1372 #endif // V8_INTERPRETED_REGEXP 1372 #endif // V8_INTERPRETED_REGEXP
1373 1373
1374 1374
1375 TEST(AddInverseToTable) { 1375 TEST(AddInverseToTable) {
1376 v8::internal::V8::Initialize(NULL); 1376 v8::internal::V8::Initialize(NULL);
1377 static const int kLimit = 1000; 1377 static const int kLimit = 1000;
1378 static const int kRangeCount = 16; 1378 static const int kRangeCount = 16;
1379 for (int t = 0; t < 10; t++) { 1379 for (int t = 0; t < 10; t++) {
1380 ZoneScope zone_scope(DELETE_ON_EXIT); 1380 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
1381 ZoneList<CharacterRange>* ranges = 1381 ZoneList<CharacterRange>* ranges =
1382 new ZoneList<CharacterRange>(kRangeCount); 1382 new ZoneList<CharacterRange>(kRangeCount);
1383 for (int i = 0; i < kRangeCount; i++) { 1383 for (int i = 0; i < kRangeCount; i++) {
1384 int from = PseudoRandom(t + 87, i + 25) % kLimit; 1384 int from = PseudoRandom(t + 87, i + 25) % kLimit;
1385 int to = from + (PseudoRandom(i + 87, t + 25) % (kLimit / 20)); 1385 int to = from + (PseudoRandom(i + 87, t + 25) % (kLimit / 20));
1386 if (to > kLimit) to = kLimit; 1386 if (to > kLimit) to = kLimit;
1387 ranges->Add(CharacterRange(from, to)); 1387 ranges->Add(CharacterRange(from, to));
1388 } 1388 }
1389 DispatchTable table; 1389 DispatchTable table;
1390 DispatchTableConstructor cons(&table, false); 1390 DispatchTableConstructor cons(&table, false);
1391 cons.set_choice_index(0); 1391 cons.set_choice_index(0);
1392 cons.AddInverse(ranges); 1392 cons.AddInverse(ranges);
1393 for (int i = 0; i < kLimit; i++) { 1393 for (int i = 0; i < kLimit; i++) {
1394 bool is_on = false; 1394 bool is_on = false;
1395 for (int j = 0; !is_on && j < kRangeCount; j++) 1395 for (int j = 0; !is_on && j < kRangeCount; j++)
1396 is_on = ranges->at(j).Contains(i); 1396 is_on = ranges->at(j).Contains(i);
1397 OutSet* set = table.Get(i); 1397 OutSet* set = table.Get(i);
1398 CHECK_EQ(is_on, set->Get(0) == false); 1398 CHECK_EQ(is_on, set->Get(0) == false);
1399 } 1399 }
1400 } 1400 }
1401 ZoneScope zone_scope(DELETE_ON_EXIT); 1401 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
1402 ZoneList<CharacterRange>* ranges = 1402 ZoneList<CharacterRange>* ranges =
1403 new ZoneList<CharacterRange>(1); 1403 new ZoneList<CharacterRange>(1);
1404 ranges->Add(CharacterRange(0xFFF0, 0xFFFE)); 1404 ranges->Add(CharacterRange(0xFFF0, 0xFFFE));
1405 DispatchTable table; 1405 DispatchTable table;
1406 DispatchTableConstructor cons(&table, false); 1406 DispatchTableConstructor cons(&table, false);
1407 cons.set_choice_index(0); 1407 cons.set_choice_index(0);
1408 cons.AddInverse(ranges); 1408 cons.AddInverse(ranges);
1409 CHECK(!table.Get(0xFFFE)->Get(0)); 1409 CHECK(!table.Get(0xFFFE)->Get(0));
1410 CHECK(table.Get(0xFFFF)->Get(0)); 1410 CHECK(table.Get(0xFFFF)->Get(0));
1411 } 1411 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1504 CHECK_EQ(length, length2); 1504 CHECK_EQ(length, length2);
1505 for (int k = 0; k < length; k++) 1505 for (int k = 0; k < length; k++)
1506 CHECK_EQ(static_cast<int>(chars[k]), static_cast<int>(chars2[k])); 1506 CHECK_EQ(static_cast<int>(chars[k]), static_cast<int>(chars2[k]));
1507 } 1507 }
1508 } 1508 }
1509 } 1509 }
1510 1510
1511 1511
1512 static void TestRangeCaseIndependence(CharacterRange input, 1512 static void TestRangeCaseIndependence(CharacterRange input,
1513 Vector<CharacterRange> expected) { 1513 Vector<CharacterRange> expected) {
1514 ZoneScope zone_scope(DELETE_ON_EXIT); 1514 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
1515 int count = expected.length(); 1515 int count = expected.length();
1516 ZoneList<CharacterRange>* list = new ZoneList<CharacterRange>(count); 1516 ZoneList<CharacterRange>* list = new ZoneList<CharacterRange>(count);
1517 input.AddCaseEquivalents(list, false); 1517 input.AddCaseEquivalents(list, false);
1518 CHECK_EQ(count, list->length()); 1518 CHECK_EQ(count, list->length());
1519 for (int i = 0; i < list->length(); i++) { 1519 for (int i = 0; i < list->length(); i++) {
1520 CHECK_EQ(expected[i].from(), list->at(i).from()); 1520 CHECK_EQ(expected[i].from(), list->at(i).from());
1521 CHECK_EQ(expected[i].to(), list->at(i).to()); 1521 CHECK_EQ(expected[i].to(), list->at(i).to());
1522 } 1522 }
1523 } 1523 }
1524 1524
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1568 CharacterRange range = ranges->at(i); 1568 CharacterRange range = ranges->at(i);
1569 if (range.from() <= c && c <= range.to()) 1569 if (range.from() <= c && c <= range.to())
1570 return true; 1570 return true;
1571 } 1571 }
1572 return false; 1572 return false;
1573 } 1573 }
1574 1574
1575 1575
1576 TEST(CharClassDifference) { 1576 TEST(CharClassDifference) {
1577 v8::internal::V8::Initialize(NULL); 1577 v8::internal::V8::Initialize(NULL);
1578 ZoneScope zone_scope(DELETE_ON_EXIT); 1578 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
1579 ZoneList<CharacterRange>* base = new ZoneList<CharacterRange>(1); 1579 ZoneList<CharacterRange>* base = new ZoneList<CharacterRange>(1);
1580 base->Add(CharacterRange::Everything()); 1580 base->Add(CharacterRange::Everything());
1581 Vector<const uc16> overlay = CharacterRange::GetWordBounds(); 1581 Vector<const uc16> overlay = CharacterRange::GetWordBounds();
1582 ZoneList<CharacterRange>* included = NULL; 1582 ZoneList<CharacterRange>* included = NULL;
1583 ZoneList<CharacterRange>* excluded = NULL; 1583 ZoneList<CharacterRange>* excluded = NULL;
1584 CharacterRange::Split(base, overlay, &included, &excluded); 1584 CharacterRange::Split(base, overlay, &included, &excluded);
1585 for (int i = 0; i < (1 << 16); i++) { 1585 for (int i = 0; i < (1 << 16); i++) {
1586 bool in_base = InClass(i, base); 1586 bool in_base = InClass(i, base);
1587 if (in_base) { 1587 if (in_base) {
1588 bool in_overlay = false; 1588 bool in_overlay = false;
1589 for (int j = 0; !in_overlay && j < overlay.length(); j += 2) { 1589 for (int j = 0; !in_overlay && j < overlay.length(); j += 2) {
1590 if (overlay[j] <= i && i <= overlay[j+1]) 1590 if (overlay[j] <= i && i <= overlay[j+1])
1591 in_overlay = true; 1591 in_overlay = true;
1592 } 1592 }
1593 CHECK_EQ(in_overlay, InClass(i, included)); 1593 CHECK_EQ(in_overlay, InClass(i, included));
1594 CHECK_EQ(!in_overlay, InClass(i, excluded)); 1594 CHECK_EQ(!in_overlay, InClass(i, excluded));
1595 } else { 1595 } else {
1596 CHECK(!InClass(i, included)); 1596 CHECK(!InClass(i, included));
1597 CHECK(!InClass(i, excluded)); 1597 CHECK(!InClass(i, excluded));
1598 } 1598 }
1599 } 1599 }
1600 } 1600 }
1601 1601
1602 1602
1603 TEST(CanonicalizeCharacterSets) { 1603 TEST(CanonicalizeCharacterSets) {
1604 v8::internal::V8::Initialize(NULL); 1604 v8::internal::V8::Initialize(NULL);
1605 ZoneScope scope(DELETE_ON_EXIT); 1605 ZoneScope scope(Isolate::Current(), DELETE_ON_EXIT);
1606 ZoneList<CharacterRange>* list = new ZoneList<CharacterRange>(4); 1606 ZoneList<CharacterRange>* list = new ZoneList<CharacterRange>(4);
1607 CharacterSet set(list); 1607 CharacterSet set(list);
1608 1608
1609 list->Add(CharacterRange(10, 20)); 1609 list->Add(CharacterRange(10, 20));
1610 list->Add(CharacterRange(30, 40)); 1610 list->Add(CharacterRange(30, 40));
1611 list->Add(CharacterRange(50, 60)); 1611 list->Add(CharacterRange(50, 60));
1612 set.Canonicalize(); 1612 set.Canonicalize();
1613 ASSERT_EQ(3, list->length()); 1613 ASSERT_EQ(3, list->length());
1614 ASSERT_EQ(10, list->at(0).from()); 1614 ASSERT_EQ(10, list->at(0).from());
1615 ASSERT_EQ(20, list->at(0).to()); 1615 ASSERT_EQ(20, list->at(0).to());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1666 CharacterRange range = set->at(i); 1666 CharacterRange range = set->at(i);
1667 if (range.from() <= value && value <= range.to()) { 1667 if (range.from() <= value && value <= range.to()) {
1668 return true; 1668 return true;
1669 } 1669 }
1670 } 1670 }
1671 return false; 1671 return false;
1672 } 1672 }
1673 1673
1674 TEST(CharacterRangeMerge) { 1674 TEST(CharacterRangeMerge) {
1675 v8::internal::V8::Initialize(NULL); 1675 v8::internal::V8::Initialize(NULL);
1676 ZoneScope zone_scope(DELETE_ON_EXIT); 1676 ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
1677 ZoneList<CharacterRange> l1(4); 1677 ZoneList<CharacterRange> l1(4);
1678 ZoneList<CharacterRange> l2(4); 1678 ZoneList<CharacterRange> l2(4);
1679 // Create all combinations of intersections of ranges, both singletons and 1679 // Create all combinations of intersections of ranges, both singletons and
1680 // longer. 1680 // longer.
1681 1681
1682 int offset = 0; 1682 int offset = 0;
1683 1683
1684 // The five kinds of singleton intersections: 1684 // The five kinds of singleton intersections:
1685 // X 1685 // X
1686 // Y - outside before 1686 // Y - outside before
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 bool in_second = CharacterInSet(&l2, i); 1817 bool in_second = CharacterInSet(&l2, i);
1818 CHECK((in_first || in_second) == CharacterInSet(&all, i)); 1818 CHECK((in_first || in_second) == CharacterInSet(&all, i));
1819 } 1819 }
1820 } 1820 }
1821 1821
1822 1822
1823 TEST(Graph) { 1823 TEST(Graph) {
1824 V8::Initialize(NULL); 1824 V8::Initialize(NULL);
1825 Execute("\\b\\w+\\b", false, true, true); 1825 Execute("\\b\\w+\\b", false, true, true);
1826 } 1826 }
OLDNEW
« no previous file with comments | « test/cctest/test-liveedit.cc ('k') | test/cctest/test-strings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698