teemperor created this revision.
Herald added a subscriber: mgorny.
https://reviews.llvm.org/D49415
Files:
unittests/Utility/CMakeLists.txt
unittests/Utility/VMRangeTest.cpp
Index: unittests/Utility/VMRangeTest.cpp
===================================================================
--- /dev/null
+++ unittests/Utility/VMRangeTest.cpp
@@ -0,0 +1,125 @@
+//===-- VMRangeTest.cpp -----------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "gtest/gtest.h"
+
+#include "lldb/Utility/VMRange.h"
+using namespace lldb_private;
+
+TEST(VMRange, IsValid) {
+ VMRange range;
+ ASSERT_FALSE(range.IsValid());
+
+ range.Reset(0x1, 0x100);
+ ASSERT_TRUE(range.IsValid());
+
+ range.Reset(0x1, 0x1);
+ ASSERT_FALSE(range.IsValid());
+}
+
+TEST(VMRange, Clear) {
+ VMRange range(0x100, 0x200);
+ ASSERT_FALSE(VMRange() == range);
+ range.Clear();
+ ASSERT_TRUE(VMRange() == range);
+}
+
+TEST(VMRange, Comparison) {
+ VMRange range1(0x100, 0x200);
+ VMRange range2(0x100, 0x200);
+ ASSERT_FALSE(range1 != range2);
+ range2.Clear();
+ ASSERT_TRUE(range1 != range2);
+}
+
+TEST(VMRange, Reset) {
+ VMRange range(0x100, 0x200);
+ ASSERT_FALSE(VMRange(0x200, 0x200) == range);
+ range.Reset(0x200, 0x200);
+ ASSERT_TRUE(VMRange(0x200, 0x200) == range);
+}
+
+TEST(VMRange, SetEndAddress) {
+ VMRange range(0x100, 0x200);
+
+ range.SetEndAddress(0xFF);
+ ASSERT_EQ(0U, range.GetByteSize());
+ ASSERT_FALSE(range.IsValid());
+
+ range.SetEndAddress(0x101);
+ ASSERT_EQ(1U, range.GetByteSize());
+ ASSERT_TRUE(range.IsValid());
+}
+
+TEST(VMRange, ContainsAddr) {
+ VMRange range(0x100, 0x200);
+
+ ASSERT_FALSE(range.Contains(0x00));
+ ASSERT_FALSE(range.Contains(0xFE));
+ ASSERT_FALSE(range.Contains(0xFF));
+ ASSERT_TRUE(range.Contains(0x100));
+ ASSERT_TRUE(range.Contains(0x101));
+ ASSERT_TRUE(range.Contains(0x1FF));
+ ASSERT_FALSE(range.Contains(0x200));
+ ASSERT_FALSE(range.Contains(0x201));
+ ASSERT_FALSE(range.Contains(0xFFF));
+}
+
+TEST(VMRange, ContainsRange) {
+ VMRange range(0x100, 0x200);
+
+ ASSERT_FALSE(range.Contains(VMRange(0x0, 0x0)));
+
+ ASSERT_FALSE(range.Contains(VMRange(0x0, 0x100)));
+ ASSERT_FALSE(range.Contains(VMRange(0x0, 0x101)));
+ ASSERT_TRUE(range.Contains(VMRange(0x100, 0x105)));
+ ASSERT_TRUE(range.Contains(VMRange(0x101, 0x105)));
+ ASSERT_TRUE(range.Contains(VMRange(0x100, 0x1FF)));
+ ASSERT_TRUE(range.Contains(VMRange(0x105, 0x200)));
+ ASSERT_FALSE(range.Contains(VMRange(0x105, 0x208)));
+ ASSERT_FALSE(range.Contains(VMRange(0x200, 0x201)));
+
+ range.Clear();
+ ASSERT_FALSE(range.Contains(VMRange(0x0, 0x0)));
+}
+
+TEST(VMRange, Ordering) {
+ VMRange range1(0x44, 0x200);
+ VMRange range2(0x100, 0x1FF);
+ VMRange range3(0x100, 0x200);
+ VMRange range4(0xFFF, 0x100);
+
+ ASSERT_TRUE(range1 <= range1);
+ ASSERT_TRUE(range1 >= range1);
+
+ ASSERT_TRUE(range1 < range2);
+ ASSERT_TRUE(range2 < range3);
+ ASSERT_TRUE(range3 < range4);
+
+ ASSERT_FALSE(range1 > range2);
+ ASSERT_FALSE(range2 > range3);
+ ASSERT_FALSE(range3 > range4);
+}
+
+TEST(VMRange, CollectionContains) {
+ VMRange::collection collection = {VMRange(0x100, 0x105),
+ VMRange(0x108, 0x110)};
+
+ ASSERT_FALSE(VMRange::ContainsValue(collection, 0xFF));
+ ASSERT_TRUE(VMRange::ContainsValue(collection, 0x100));
+ ASSERT_FALSE(VMRange::ContainsValue(collection, 0x105));
+ ASSERT_TRUE(VMRange::ContainsValue(collection, 0x109));
+
+ ASSERT_TRUE(VMRange::ContainsRange(collection, VMRange(0x100, 0x104)));
+ ASSERT_TRUE(VMRange::ContainsRange(collection, VMRange(0x108, 0x100)));
+ ASSERT_FALSE(VMRange::ContainsRange(collection, VMRange(0xFF, 0x100)));
+
+ // TODO: Implement and test ContainsRange with values that span multiple
+ // ranges in the collection.
+}
Index: unittests/Utility/CMakeLists.txt
===================================================================
--- unittests/Utility/CMakeLists.txt
+++ unittests/Utility/CMakeLists.txt
@@ -20,6 +20,7 @@
UriParserTest.cpp
UUIDTest.cpp
VASprintfTest.cpp
+ VMRangeTest.cpp
LINK_LIBS
lldbUtility
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits