| // Copyright 2015 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/heap/code-object-registry.h" | 
 |  | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 |  | 
 | TEST(CodeObjectRegistry, RegisterAlreadyExistingObjectsAndContains) { | 
 |   CodeObjectRegistry registry; | 
 |   const int elements = 10; | 
 |   const int offset = 100; | 
 |   for (int i = 0; i < elements; i++) { | 
 |     registry.RegisterAlreadyExistingCodeObject(i * offset); | 
 |   } | 
 |  | 
 |   for (int i = 0; i < elements; i++) { | 
 |     CHECK(registry.Contains(i * offset)); | 
 |   } | 
 | } | 
 |  | 
 | TEST(CodeObjectRegistry, RegisterNewlyAllocatedObjectsAndContains) { | 
 |   CodeObjectRegistry registry; | 
 |   const int elements = 10; | 
 |   const int offset = 100; | 
 |   for (int i = 0; i < elements; i++) { | 
 |     registry.RegisterNewlyAllocatedCodeObject(i * offset); | 
 |   } | 
 |  | 
 |   for (int i = 0; i < elements; i++) { | 
 |     CHECK(registry.Contains(i * offset)); | 
 |   } | 
 | } | 
 |  | 
 | TEST(CodeObjectRegistry, FindAlreadyExistingObjects) { | 
 |   CodeObjectRegistry registry; | 
 |   const int elements = 10; | 
 |   const int offset = 100; | 
 |   const int inner = 2; | 
 |   for (int i = 1; i <= elements; i++) { | 
 |     registry.RegisterAlreadyExistingCodeObject(i * offset); | 
 |   } | 
 |  | 
 |   for (int i = 1; i <= elements; i++) { | 
 |     for (int j = 0; j < inner; j++) { | 
 |       CHECK_EQ(registry.GetCodeObjectStartFromInnerAddress(i * offset + j), | 
 |                i * offset); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | TEST(CodeObjectRegistry, FindNewlyAllocatedObjects) { | 
 |   CodeObjectRegistry registry; | 
 |   const int elements = 10; | 
 |   const int offset = 100; | 
 |   const int inner = 2; | 
 |   for (int i = 1; i <= elements; i++) { | 
 |     registry.RegisterNewlyAllocatedCodeObject(i * offset); | 
 |   } | 
 |  | 
 |   for (int i = 1; i <= elements; i++) { | 
 |     for (int j = 0; j < inner; j++) { | 
 |       CHECK_EQ(registry.GetCodeObjectStartFromInnerAddress(i * offset + j), | 
 |                i * offset); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | TEST(CodeObjectRegistry, FindAlternatingObjects) { | 
 |   CodeObjectRegistry registry; | 
 |   const int elements = 10; | 
 |   const int offset = 100; | 
 |   const int inner = 2; | 
 |   for (int i = 1; i <= elements; i++) { | 
 |     if (i % 2 == 0) { | 
 |       registry.RegisterAlreadyExistingCodeObject(i * offset); | 
 |     } else { | 
 |       registry.RegisterNewlyAllocatedCodeObject(i * offset); | 
 |     } | 
 |   } | 
 |  | 
 |   for (int i = 1; i <= elements; i++) { | 
 |     for (int j = 0; j < inner; j++) { | 
 |       CHECK_EQ(registry.GetCodeObjectStartFromInnerAddress(i * offset + j), | 
 |                i * offset); | 
 |     } | 
 |   } | 
 | } | 
 | }  // namespace internal | 
 | }  // namespace v8 |