summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2010-12-16 19:46:09 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2010-12-16 19:46:09 +0000
commit460ee0fd19b13ba4c1410e43d8d253bf34673817 (patch)
tree1bc29300e4f4c4021d517ba477d43e8584bc8419
parent8a28f2137978d141402883815a3550b02ea5b1c8 (diff)
downloadllvm-460ee0fd19b13ba4c1410e43d8d253bf34673817.tar.gz
llvm-460ee0fd19b13ba4c1410e43d8d253bf34673817.tar.bz2
llvm-460ee0fd19b13ba4c1410e43d8d253bf34673817.tar.xz
Add basic test exposing many bugs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121995 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/ADT/IntervalMap.h12
-rw-r--r--unittests/ADT/IntervalMapTest.cpp15
2 files changed, 21 insertions, 6 deletions
diff --git a/include/llvm/ADT/IntervalMap.h b/include/llvm/ADT/IntervalMap.h
index ae79e84508..86652f5673 100644
--- a/include/llvm/ADT/IntervalMap.h
+++ b/include/llvm/ADT/IntervalMap.h
@@ -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();
diff --git a/unittests/ADT/IntervalMapTest.cpp b/unittests/ADT/IntervalMapTest.cpp
index fc16a32798..a84cca8dd7 100644
--- a/unittests/ADT/IntervalMapTest.cpp
+++ b/unittests/ADT/IntervalMapTest.cpp
@@ -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