Index: test/compiler-unittests/common-node-cache-unittest.cc |
diff --git a/test/compiler-unittests/common-node-cache-unittest.cc b/test/compiler-unittests/common-node-cache-unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5d5f3fe5863ef80a7086c98549f4480a73790b2f |
--- /dev/null |
+++ b/test/compiler-unittests/common-node-cache-unittest.cc |
@@ -0,0 +1,125 @@ |
+// Copyright 2014 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "src/compiler/common-node-cache.h" |
+#include "src/compiler/common-operator.h" |
+#include "src/compiler/graph.h" |
+#include "test/compiler-unittests/compiler-unittests.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+ |
+using testing::AllOf; |
+using testing::IsNull; |
+using testing::NotNull; |
+using testing::Pointee; |
+ |
+namespace v8 { |
+namespace internal { |
+namespace compiler { |
+ |
+class CommonNodeCacheTest : public CompilerTest { |
+ public: |
+ CommonNodeCacheTest() : cache_(zone()), common_(zone()), graph_(zone()) {} |
+ virtual ~CommonNodeCacheTest() {} |
+ |
+ protected: |
+ Factory* factory() const { return isolate()->factory(); } |
+ CommonNodeCache* cache() { return &cache_; } |
+ CommonOperatorBuilder* common() { return &common_; } |
+ Graph* graph() { return &graph_; } |
+ |
+ private: |
+ CommonNodeCache cache_; |
+ CommonOperatorBuilder common_; |
+ Graph graph_; |
+}; |
+ |
+ |
+TEST_F(CommonNodeCacheTest, FindInt32Constant) { |
+ Node** l42 = cache()->FindInt32Constant(42); |
+ ASSERT_THAT(l42, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* n42 = *l42 = graph()->NewNode(common()->Int32Constant(42)); |
+ |
+ Node** l0 = cache()->FindInt32Constant(0); |
+ ASSERT_THAT(l0, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* n0 = *l0 = graph()->NewNode(common()->Int32Constant(0)); |
+ |
+ EXPECT_THAT(cache()->FindInt32Constant(42), AllOf(l42, Pointee(n42))); |
+ EXPECT_THAT(cache()->FindInt32Constant(0), AllOf(l0, Pointee(n0))); |
+ EXPECT_THAT(cache()->FindInt32Constant(42), AllOf(l42, Pointee(n42))); |
+ EXPECT_THAT(cache()->FindInt32Constant(0), AllOf(l0, Pointee(n0))); |
+} |
+ |
+ |
+TEST_F(CommonNodeCacheTest, FindFloat64Constant) { |
+ Node** l42 = cache()->FindFloat64Constant(42.0); |
+ ASSERT_THAT(l42, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* n42 = *l42 = graph()->NewNode(common()->Float64Constant(42.0)); |
+ |
+ Node** l0 = cache()->FindFloat64Constant(0.0); |
+ ASSERT_THAT(l0, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* n0 = *l0 = graph()->NewNode(common()->Float64Constant(0.0)); |
+ |
+ EXPECT_THAT(cache()->FindFloat64Constant(42.0), AllOf(l42, Pointee(n42))); |
+ EXPECT_THAT(cache()->FindFloat64Constant(0.0), AllOf(l0, Pointee(n0))); |
+ EXPECT_THAT(cache()->FindFloat64Constant(42.0), AllOf(l42, Pointee(n42))); |
+ EXPECT_THAT(cache()->FindFloat64Constant(0.0), AllOf(l0, Pointee(n0))); |
+} |
+ |
+ |
+TEST_F(CommonNodeCacheTest, FindExternalConstant) { |
+ ExternalReference i = ExternalReference::isolate_address(isolate()); |
+ Node** li = cache()->FindExternalConstant(i); |
+ ASSERT_THAT(li, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* ni = *li = graph()->NewNode(common()->ExternalConstant(i)); |
+ |
+ ExternalReference m = ExternalReference::address_of_min_int(); |
+ Node** lm = cache()->FindExternalConstant(m); |
+ ASSERT_THAT(lm, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* nm = *lm = graph()->NewNode(common()->ExternalConstant(m)); |
+ |
+ EXPECT_THAT(cache()->FindExternalConstant(i), AllOf(li, Pointee(ni))); |
+ EXPECT_THAT(cache()->FindExternalConstant(m), AllOf(lm, Pointee(nm))); |
+ EXPECT_THAT(cache()->FindExternalConstant(i), AllOf(li, Pointee(ni))); |
+ EXPECT_THAT(cache()->FindExternalConstant(m), AllOf(lm, Pointee(nm))); |
+} |
+ |
+ |
+TEST_F(CommonNodeCacheTest, FindNumberConstant) { |
+ Node** l42 = cache()->FindNumberConstant(42.0); |
+ ASSERT_THAT(l42, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* n42 = *l42 = graph()->NewNode(common()->NumberConstant(42.0)); |
+ |
+ Node** l0 = cache()->FindNumberConstant(0.0); |
+ ASSERT_THAT(l0, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* n0 = *l0 = graph()->NewNode(common()->NumberConstant(0.0)); |
+ |
+ EXPECT_THAT(cache()->FindNumberConstant(42.0), AllOf(l42, Pointee(n42))); |
+ EXPECT_THAT(cache()->FindNumberConstant(0.0), AllOf(l0, Pointee(n0))); |
+ EXPECT_THAT(cache()->FindNumberConstant(42.0), AllOf(l42, Pointee(n42))); |
+ EXPECT_THAT(cache()->FindNumberConstant(0.0), AllOf(l0, Pointee(n0))); |
+} |
+ |
+ |
+TEST_F(CommonNodeCacheTest, FindHeapConstant) { |
+ PrintableUnique<HeapObject> n = PrintableUnique<HeapObject>::CreateImmovable( |
+ zone(), factory()->null_value()); |
+ Node** ln = cache()->FindHeapConstant(n); |
+ ASSERT_THAT(ln, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* nn = *ln = graph()->NewNode(common()->HeapConstant(n)); |
+ |
+ PrintableUnique<HeapObject> t = PrintableUnique<HeapObject>::CreateImmovable( |
+ zone(), factory()->true_value()); |
+ Node** lt = cache()->FindHeapConstant(t); |
+ ASSERT_THAT(lt, AllOf(NotNull(), Pointee(IsNull()))); |
+ Node* nt = *lt = graph()->NewNode(common()->HeapConstant(t)); |
+ |
+ EXPECT_THAT(cache()->FindHeapConstant(n), AllOf(ln, Pointee(nn))); |
+ EXPECT_THAT(cache()->FindHeapConstant(t), AllOf(lt, Pointee(nt))); |
+ EXPECT_THAT(cache()->FindHeapConstant(n), AllOf(ln, Pointee(nn))); |
+ EXPECT_THAT(cache()->FindHeapConstant(t), AllOf(lt, Pointee(nt))); |
+} |
+ |
+} // namespace compiler |
+} // namespace internal |
+} // namespace v8 |