Home | History | Annotate | Download | only in cctest
      1 // Copyright 2013 the V8 project authors. All rights reserved.
      2 
      3 // Check that we can traverse very deep stacks of ConsStrings using
      4 // StringCharacterStram.  Check that Get(int) works on very deep stacks
      5 // of ConsStrings.  These operations may not be very fast, but they
      6 // should be possible without getting errors due to too deep recursion.
      7 
      8 #include "v8.h"
      9 
     10 #include "cctest.h"
     11 #include "objects.h"
     12 
     13 using namespace v8::internal;
     14 
     15 
     16 TEST(Create) {
     17   CcTest::InitializeVM();
     18   Isolate* isolate = Isolate::Current();
     19   HandleScope scope(isolate);
     20 
     21   const int kNumSymbols = 30;
     22   Handle<Symbol> symbols[kNumSymbols];
     23 
     24   for (int i = 0; i < kNumSymbols; ++i) {
     25     symbols[i] = isolate->factory()->NewSymbol();
     26     CHECK(symbols[i]->IsName());
     27     CHECK(symbols[i]->IsSymbol());
     28     CHECK(symbols[i]->HasHashCode());
     29     CHECK_GT(symbols[i]->Hash(), 0);
     30     symbols[i]->ShortPrint();
     31     PrintF("\n");
     32 #if OBJECT_PRINT
     33     symbols[i]->Print();
     34 #endif
     35 #if VERIFY_HEAP
     36     symbols[i]->Verify();
     37 #endif
     38   }
     39 
     40   HEAP->PerformScavenge();
     41   HEAP->CollectAllGarbage(Heap::kNoGCFlags);
     42 
     43   // All symbols should be distinct.
     44   for (int i = 0; i < kNumSymbols; ++i) {
     45     CHECK(symbols[i]->SameValue(*symbols[i]));
     46     for (int j = i + 1; j < kNumSymbols; ++j) {
     47       CHECK(!symbols[i]->SameValue(*symbols[j]));
     48     }
     49   }
     50 }
     51