diff options
Diffstat (limited to 'deps/v8/test/cctest/test-symbols.cc')
-rw-r--r-- | deps/v8/test/cctest/test-symbols.cc | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/test-symbols.cc b/deps/v8/test/cctest/test-symbols.cc new file mode 100644 index 000000000..e95345742 --- /dev/null +++ b/deps/v8/test/cctest/test-symbols.cc @@ -0,0 +1,61 @@ +// Copyright 2013 the V8 project authors. All rights reserved. + +// Check that we can traverse very deep stacks of ConsStrings using +// StringCharacterStram. Check that Get(int) works on very deep stacks +// of ConsStrings. These operations may not be very fast, but they +// should be possible without getting errors due to too deep recursion. + +#include "v8.h" + +#include "cctest.h" +#include "objects.h" + +using namespace v8::internal; + +static v8::Persistent<v8::Context> env; + +static void InitializeVM() { + if (env.IsEmpty()) { + const char* extensions[] = { "v8/print" }; + v8::ExtensionConfiguration config(1, extensions); + env = v8::Context::New(&config); + } + env->Enter(); +} + + +TEST(Create) { + InitializeVM(); + Isolate* isolate = Isolate::Current(); + HandleScope scope(isolate); + + const int kNumSymbols = 30; + Handle<Symbol> symbols[kNumSymbols]; + + for (int i = 0; i < kNumSymbols; ++i) { + symbols[i] = isolate->factory()->NewSymbol(); + CHECK(symbols[i]->IsName()); + CHECK(symbols[i]->IsSymbol()); + CHECK(symbols[i]->HasHashCode()); + CHECK_GT(symbols[i]->Hash(), 0); + symbols[i]->ShortPrint(); + PrintF("\n"); +#if OBJECT_PRINT + symbols[i]->Print(); +#endif +#if VERIFY_HEAP + symbols[i]->Verify(); +#endif + } + + HEAP->PerformScavenge(); + HEAP->CollectAllGarbage(Heap::kNoGCFlags); + + // All symbols should be distinct. + for (int i = 0; i < kNumSymbols; ++i) { + CHECK(symbols[i]->SameValue(*symbols[i])); + for (int j = i + 1; j < kNumSymbols; ++j) { + CHECK(!symbols[i]->SameValue(*symbols[j])); + } + } +} |