// 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
