Index: test/cctest/test-constantpool.cc |
diff --git a/test/cctest/test-constantpool.cc b/test/cctest/test-constantpool.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9f2436c03436325df7ebfd94dd9a230e84593e1d |
--- /dev/null |
+++ b/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); |
+} |