1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/gc/core/page_memory.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7 
8 namespace gc {
9 namespace internal {
10 namespace test {
11 
TEST(MemoryRegionTest,Construct)12 TEST(MemoryRegionTest, Construct) {
13   uint8_t dummy;
14   constexpr size_t kSize = 17;
15   const MemoryRegion region(&dummy, kSize);
16   EXPECT_EQ(&dummy, region.base());
17   EXPECT_EQ(kSize, region.size());
18   EXPECT_EQ(&dummy + kSize, region.end());
19 }
20 
TEST(MemoryRegionTest,ContainsAddress)21 TEST(MemoryRegionTest, ContainsAddress) {
22   uint8_t dummy;
23   constexpr size_t kSize = 7;
24   const MemoryRegion region(&dummy, kSize);
25   EXPECT_FALSE(region.Contains(&dummy - 1));
26   EXPECT_TRUE(region.Contains(&dummy));
27   EXPECT_TRUE(region.Contains(&dummy + kSize - 1));
28   EXPECT_FALSE(region.Contains(&dummy + kSize));
29 }
30 
TEST(MemoryRegionTest,ContainsMemoryRegion)31 TEST(MemoryRegionTest, ContainsMemoryRegion) {
32   uint8_t dummy;
33   constexpr size_t kSize = 7;
34   const MemoryRegion region(&dummy, kSize);
35   const MemoryRegion contained_region1(&dummy, kSize - 1);
36   EXPECT_TRUE(region.Contains(contained_region1));
37   const MemoryRegion contained_region2(&dummy + 1, kSize - 1);
38   EXPECT_TRUE(region.Contains(contained_region2));
39   const MemoryRegion not_contained_region1(&dummy - 1, kSize);
40   EXPECT_FALSE(region.Contains(not_contained_region1));
41   const MemoryRegion not_contained_region2(&dummy + kSize, 1);
42   EXPECT_FALSE(region.Contains(not_contained_region2));
43 }
44 
TEST(PageMemoryTest,Construct)45 TEST(PageMemoryTest, Construct) {
46   uint8_t dummy;
47   constexpr size_t kOverallSize = 17;
48   const MemoryRegion overall_region(&dummy, kOverallSize);
49   const MemoryRegion writeable_region(&dummy + 1, kOverallSize - 2);
50   const PageMemory page_memory(overall_region, writeable_region);
51   EXPECT_EQ(&dummy, page_memory.overall_region().base());
52   EXPECT_EQ(&dummy + kOverallSize, page_memory.overall_region().end());
53   EXPECT_EQ(&dummy + 1, page_memory.writeable_region().base());
54   EXPECT_EQ(&dummy + kOverallSize - 1, page_memory.writeable_region().end());
55 }
56 
57 #if DCHECK_IS_ON()
58 
TEST(PageMemoryDeathTest,ConstructNonContainedRegions)59 TEST(PageMemoryDeathTest, ConstructNonContainedRegions) {
60   uint8_t dummy;
61   constexpr size_t kOverallSize = 17;
62   const MemoryRegion overall_region(&dummy, kOverallSize);
63   const MemoryRegion writeable_region(&dummy + 1, kOverallSize);
64   EXPECT_DEATH_IF_SUPPORTED(PageMemory(overall_region, writeable_region), "");
65 }
66 
67 #endif  // DCHECK_IS_ON()
68 
69 }  // namespace test
70 }  // namespace internal
71 }  // namespace gc
72