Add basic test exposing many bugs.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 16 Dec 2010 19:46:09 +0000 (19:46 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 16 Dec 2010 19:46:09 +0000 (19:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121995 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/IntervalMap.h
unittests/ADT/IntervalMapTest.cpp

index ae79e845088d3e0d1f6d944b34c789a36374863f..86652f5673a5e14e5d52f82b738d07e0a4823072 100644 (file)
@@ -2036,11 +2036,11 @@ class IntervalMapOverlaps {
     for (;;) {
       // Make a.end > b.start.
       posA.advanceTo(posB.start());
-      if (!posA.valid() || !Traits::stopLess(posB.end(), posA.start()))
+      if (!posA.valid() || !Traits::stopLess(posB.stop(), posA.start()))
         return;
       // Make b.end > a.start.
       posB.advanceTo(posA.start());
-      if (!posB.valid() || !Traits::stopLess(posA.end(), posB.start()))
+      if (!posB.valid() || !Traits::stopLess(posA.stop(), posB.start()))
         return;
     }
   }
@@ -2068,11 +2068,11 @@ public:
   /// skipA - Move to the next overlap that doesn't involve a().
   void skipA() {
     ++posA;
-    if (!posA.valid() || !Traits::stopLess(posB.end(), posA.start()))
+    if (!posA.valid() || !Traits::stopLess(posB.stop(), posA.start()))
       return;
     // Second half-loop of advance().
     posB.advanceTo(posA.start());
-    if (!posB.valid() || !Traits::stopLess(posA.end(), posB.start()))
+    if (!posB.valid() || !Traits::stopLess(posA.stop(), posB.start()))
       return ;
     advance();
   }
@@ -2080,7 +2080,7 @@ public:
   /// skipB - Move to the next overlap that doesn't involve b().
   void skipB() {
     ++posB;
-    if (!posB.valid() || !Traits::stopLess(posA.end(), posB.start()))
+    if (!posB.valid() || !Traits::stopLess(posA.stop(), posB.start()))
         return;
     advance();
   }
@@ -2088,7 +2088,7 @@ public:
   /// Preincrement - Move to the next overlap.
   IntervalMapOverlaps &operator++() {
     // Bump the iterator that ends first. The other one may have more overlaps.
-    if (Traits::startLess(posB.end(), posA.end()))
+    if (Traits::startLess(posB.stop(), posA.stop()))
       skipB();
     else
       skipA();
index fc16a3279823003941f3f912ac833cd9cb8fab0b..a84cca8dd76490f8fc6832db945c21b7d2f27239 100644 (file)
@@ -550,4 +550,19 @@ TEST(IntervalMapTest, RandomCoalescing) {
 
 }
 
+TEST(IntervalMapOverlapsTest, EmptyMaps) {
+  typedef IntervalMapOverlaps<UUMap,UUMap> UUOverlaps;
+  UUMap::Allocator allocator;
+  UUMap mapA(allocator);
+  UUMap mapB(allocator);
+
+  // empty, empty.
+  EXPECT_FALSE(UUOverlaps(mapA, mapB).valid());
+
+  mapA.insert(1, 2, 3);
+  // full, empty
+  EXPECT_FALSE(UUOverlaps(mapA, mapB).valid());
+  // empty, full
+  EXPECT_FALSE(UUOverlaps(mapB, mapA).valid());
+}
 } // namespace