Add basic test exposing many bugs.

llvm-svn: 121995
This commit is contained in:
Jakob Stoklund Olesen 2010-12-16 19:46:09 +00:00
parent 266f4092d7
commit af49e9774a
2 changed files with 21 additions and 6 deletions

View 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();

View 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