Line data Source code
1 : // Copyright 2018 the V8 project 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 "src/base/address-region.h"
6 :
7 : #include "testing/gtest/include/gtest/gtest.h"
8 :
9 : namespace v8 {
10 : namespace base {
11 :
12 : using Address = AddressRegion::Address;
13 :
14 15188 : TEST(AddressRegionTest, Contains) {
15 : struct {
16 : Address start;
17 : size_t size;
18 1 : } test_cases[] = {{153, 771}, {0, 227}, {-447, 447}};
19 :
20 4 : for (size_t i = 0; i < arraysize(test_cases); i++) {
21 3 : Address start = test_cases[i].start;
22 3 : size_t size = test_cases[i].size;
23 3 : Address end = start + size; // exclusive
24 :
25 : AddressRegion region(start, size);
26 :
27 : // Test single-argument contains().
28 3 : CHECK(!region.contains(start - 1041));
29 3 : CHECK(!region.contains(start - 1));
30 3 : CHECK(!region.contains(end));
31 6 : CHECK(!region.contains(end + 1));
32 6 : CHECK(!region.contains(end + 113));
33 :
34 3 : CHECK(region.contains(start));
35 3 : CHECK(region.contains(start + 1));
36 6 : CHECK(region.contains(start + size / 2));
37 6 : CHECK(region.contains(end - 1));
38 :
39 : // Test two-arguments contains().
40 3 : CHECK(!region.contains(start - 1, size));
41 6 : CHECK(!region.contains(start, size + 1));
42 3 : CHECK(!region.contains(start - 17, 17));
43 6 : CHECK(!region.contains(start - 17, size * 2));
44 3 : CHECK(!region.contains(end, 1));
45 3 : CHECK(!region.contains(end, static_cast<size_t>(0 - end)));
46 :
47 3 : CHECK(region.contains(start, size));
48 3 : CHECK(region.contains(start, 10));
49 3 : CHECK(region.contains(start + 11, 120));
50 6 : CHECK(region.contains(end - 13, 13));
51 3 : CHECK(!region.contains(end, 0));
52 :
53 : // Zero-size queries.
54 3 : CHECK(!region.contains(start - 10, 0));
55 3 : CHECK(!region.contains(start - 1, 0));
56 3 : CHECK(!region.contains(end, 0));
57 6 : CHECK(!region.contains(end + 10, 0));
58 :
59 3 : CHECK(region.contains(start, 0));
60 3 : CHECK(region.contains(start + 10, 0));
61 3 : CHECK(region.contains(end - 1, 0));
62 : }
63 1 : }
64 :
65 : } // namespace base
66 9111 : } // namespace v8
|