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