[ADT] Add a 'find_as' operation to DenseSet.
[oota-llvm.git] / unittests / ADT / IntervalMapTest.cpp
index eb1f1a4b033ee4d31752704c32a225d5ee4df0d8..b5556d265ae49bb5cb433deb67615a63f808c9cb 100644 (file)
@@ -247,6 +247,12 @@ TEST(IntervalMapTest, RootMultiCoalescing) {
   EXPECT_EQ(140u, I.start());
   EXPECT_EQ(150u, I.stop());
 
+  I.advanceTo(200);
+  EXPECT_FALSE(I.valid());
+
+  I.advanceTo(300);
+  EXPECT_FALSE(I.valid());
+
   // Coalesce left with followers.
   // [100;110] [120;130] [140;150] [160;170]
   map.insert(111, 115, 1);
@@ -520,6 +526,14 @@ TEST(IntervalMapTest, Branched2) {
   EXPECT_EQ(2000u, I.start());
   EXPECT_EQ(2005u, I.stop());
 
+  // advanceTo beyond end()
+  I.advanceTo(20000);
+  EXPECT_FALSE(I.valid());
+
+  // end().advanceTo() is valid as long as x > map.stop()
+  I.advanceTo(30000);
+  EXPECT_FALSE(I.valid());
+
   // Test clear() on branched map.
   map.clear();
   EXPECT_TRUE(map.empty());
@@ -645,6 +659,19 @@ TEST(IntervalMapOverlapsTest, BigMaps) {
   ++AB;
   EXPECT_FALSE(AB.valid());
 
+  // Test advanceTo.
+  UUOverlaps AB2(mapA, mapB);
+  AB2.advanceTo(410);
+  ASSERT_TRUE(AB2.valid());
+  EXPECT_EQ(410u, AB2.a().start());
+  EXPECT_EQ(402u, AB2.b().start());
+
+  // It is valid to advanceTo with any monotonic sequence.
+  AB2.advanceTo(411);
+  ASSERT_TRUE(AB2.valid());
+  EXPECT_EQ(410u, AB2.a().start());
+  EXPECT_EQ(402u, AB2.b().start());
+
   // Check reversed maps.
   UUOverlaps BA(mapB, mapA);
   ASSERT_TRUE(BA.valid());
@@ -672,6 +699,18 @@ TEST(IntervalMapOverlapsTest, BigMaps) {
   EXPECT_EQ(600u, BA.a().start());
   ++BA;
   EXPECT_FALSE(BA.valid());
+
+  // Test advanceTo.
+  UUOverlaps BA2(mapB, mapA);
+  BA2.advanceTo(410);
+  ASSERT_TRUE(BA2.valid());
+  EXPECT_EQ(410u, BA2.b().start());
+  EXPECT_EQ(402u, BA2.a().start());
+
+  BA2.advanceTo(411);
+  ASSERT_TRUE(BA2.valid());
+  EXPECT_EQ(410u, BA2.b().start());
+  EXPECT_EQ(402u, BA2.a().start());
 }
 
 } // namespace