blob: a821acfa312be8488820703a636ef6e9b6d7468c [file] [log] [blame]
// Copyright 2019 The Fuchsia 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/developer/debug/shared/address_range.h"
#include <gtest/gtest.h>
namespace debug {
TEST(AddressRange, InRange) {
constexpr AddressRange range(1, 5);
EXPECT_FALSE(range.InRange(0));
EXPECT_TRUE(range.InRange(1));
EXPECT_TRUE(range.InRange(4));
EXPECT_FALSE(range.InRange(5));
}
TEST(AddressRange, Contains) {
constexpr AddressRange range(100, 105);
// A range can contain itself.
EXPECT_TRUE(range.Contains(range));
// Completely inside.
EXPECT_TRUE(range.Contains(AddressRange(102, 104)));
// Completely outside.
EXPECT_FALSE(range.Contains(AddressRange(1, 99)));
EXPECT_FALSE(range.Contains(AddressRange(200, 205)));
// Partially overlapping.
EXPECT_FALSE(range.Contains(AddressRange(0, 102)));
EXPECT_FALSE(range.Contains(AddressRange(102, 200)));
}
TEST(AddressRange, Overlaps) {
constexpr AddressRange range(100, 105);
// A range can contain itself.
EXPECT_TRUE(range.Overlaps(range));
// Completely inside.
EXPECT_TRUE(range.Overlaps(AddressRange(102, 104)));
// Completely outside.
EXPECT_FALSE(range.Overlaps(AddressRange(1, 99)));
EXPECT_FALSE(range.Overlaps(AddressRange(200, 205)));
// Partially overlapping.
EXPECT_TRUE(range.Overlaps(AddressRange(0, 102)));
EXPECT_TRUE(range.Overlaps(AddressRange(102, 200)));
}
TEST(AddressRange, Union) {
constexpr AddressRange range(100, 105);
constexpr AddressRange empty;
// Union with itself.
EXPECT_EQ(range, range.Union(range));
// Union with empty. Shouldn't matter where the empty range is. Check both sides being empty.
EXPECT_EQ(range, range.Union(empty));
EXPECT_EQ(range, empty.Union(range));
EXPECT_EQ(range, range.Union(AddressRange(1000, 1000)));
EXPECT_EQ(range, AddressRange(1000, 1000).Union(range));
// Completely inside.
EXPECT_EQ(range, range.Union(AddressRange(102, 104)));
// Completely outside.
EXPECT_EQ(AddressRange(1, 105), range.Union(AddressRange(1, 99)));
EXPECT_EQ(AddressRange(100, 205), range.Union(AddressRange(200, 205)));
// Partially overlapping.
EXPECT_EQ(AddressRange(0, 105), range.Union(AddressRange(0, 102)));
EXPECT_EQ(AddressRange(100, 200), range.Union(AddressRange(102, 200)));
}
} // namespace debug