|  | // Copyright 2018 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/base/address-region.h" | 
|  |  | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace v8 { | 
|  | namespace base { | 
|  |  | 
|  | using Address = AddressRegion::Address; | 
|  |  | 
|  | TEST(AddressRegionTest, Contains) { | 
|  | struct { | 
|  | Address start; | 
|  | size_t size; | 
|  | } test_cases[] = {{153, 771}, {0, 227}, {-447, 447}}; | 
|  |  | 
|  | for (size_t i = 0; i < arraysize(test_cases); i++) { | 
|  | Address start = test_cases[i].start; | 
|  | size_t size = test_cases[i].size; | 
|  | Address end = start + size;  // exclusive | 
|  |  | 
|  | AddressRegion region(start, size); | 
|  |  | 
|  | // Test single-argument contains(). | 
|  | CHECK(!region.contains(start - 1041)); | 
|  | CHECK(!region.contains(start - 1)); | 
|  | CHECK(!region.contains(end)); | 
|  | CHECK(!region.contains(end + 1)); | 
|  | CHECK(!region.contains(end + 113)); | 
|  |  | 
|  | CHECK(region.contains(start)); | 
|  | CHECK(region.contains(start + 1)); | 
|  | CHECK(region.contains(start + size / 2)); | 
|  | CHECK(region.contains(end - 1)); | 
|  |  | 
|  | // Test two-arguments contains(). | 
|  | CHECK(!region.contains(start - 1, size)); | 
|  | CHECK(!region.contains(start, size + 1)); | 
|  | CHECK(!region.contains(start - 17, 17)); | 
|  | CHECK(!region.contains(start - 17, size * 2)); | 
|  | CHECK(!region.contains(end, 1)); | 
|  | CHECK(!region.contains(end, static_cast<size_t>(0 - end))); | 
|  |  | 
|  | CHECK(region.contains(start, size)); | 
|  | CHECK(region.contains(start, 10)); | 
|  | CHECK(region.contains(start + 11, 120)); | 
|  | CHECK(region.contains(end - 13, 13)); | 
|  | CHECK(!region.contains(end, 0)); | 
|  |  | 
|  | // Zero-size queries. | 
|  | CHECK(!region.contains(start - 10, 0)); | 
|  | CHECK(!region.contains(start - 1, 0)); | 
|  | CHECK(!region.contains(end, 0)); | 
|  | CHECK(!region.contains(end + 10, 0)); | 
|  |  | 
|  | CHECK(region.contains(start, 0)); | 
|  | CHECK(region.contains(start + 10, 0)); | 
|  | CHECK(region.contains(end - 1, 0)); | 
|  | } | 
|  | } | 
|  |  | 
|  | }  // namespace base | 
|  | }  // namespace v8 |