diff options
Diffstat (limited to 'deps/v8/test/cctest/test-constantpool.cc')
-rw-r--r-- | deps/v8/test/cctest/test-constantpool.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/test-constantpool.cc b/deps/v8/test/cctest/test-constantpool.cc new file mode 100644 index 0000000000..9f2436c034 --- /dev/null +++ b/deps/v8/test/cctest/test-constantpool.cc @@ -0,0 +1,50 @@ +// Copyright 2013 the V8 project authors. All rights reserved. + +// Test constant pool array code. + +#include "v8.h" + +#include "factory.h" +#include "objects.h" +#include "cctest.h" + +using namespace v8::internal; + + +TEST(ConstantPool) { + LocalContext context; + Isolate* isolate = CcTest::i_isolate(); + Heap* heap = isolate->heap(); + Factory* factory = isolate->factory(); + v8::HandleScope scope(context->GetIsolate()); + + // Check construction. + Handle<ConstantPoolArray> array = factory->NewConstantPoolArray(3, 2, 1); + CHECK_EQ(array->count_of_int64_entries(), 3); + CHECK_EQ(array->count_of_ptr_entries(), 2); + CHECK_EQ(array->count_of_int32_entries(), 1); + CHECK_EQ(array->length(), 6); + CHECK_EQ(array->first_int64_index(), 0); + CHECK_EQ(array->first_ptr_index(), 3); + CHECK_EQ(array->first_int32_index(), 5); + + // Check getters and setters. + int64_t big_number = V8_2PART_UINT64_C(0x12345678, 9ABCDEF0); + Handle<Object> object = factory->NewHeapNumber(4.0); + array->set(0, big_number); + array->set(1, 0.5); + array->set(3, *object); + array->set(5, 50); + CHECK_EQ(array->get_int64_entry(0), big_number); + CHECK_EQ(array->get_int64_entry_as_double(1), 0.5); + CHECK_EQ(array->get_ptr_entry(3), *object); + CHECK_EQ(array->get_int32_entry(5), 50); + + // Check pointers are updated on GC. + Object* old_ptr = array->get_ptr_entry(3); + CHECK_EQ(*object, old_ptr); + heap->CollectGarbage(NEW_SPACE); + Object* new_ptr = array->get_ptr_entry(3); + CHECK_NE(*object, old_ptr); + CHECK_EQ(*object, new_ptr); +} |