Fixed SmallMap test. The order of items is undefined in DenseMap. So being checking...
authorStepan Dyatkovskiy <stpworld@narod.ru>
Thu, 26 Apr 2012 18:45:24 +0000 (18:45 +0000)
committerStepan Dyatkovskiy <stpworld@narod.ru>
Thu, 26 Apr 2012 18:45:24 +0000 (18:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155651 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/ADT/SmallMapTest.cpp

index 91319dede226bdfc9a6ad85a9e7cca67c593e8bf..b2079243fd5e9e35cb1522cafa50513fcae1dd53 100644 (file)
@@ -45,11 +45,6 @@ TEST(SmallMapTest, GeneralTest) {
   found = a.find(&buf[8]);
   EXPECT_EQ(found, a.end());
 
-  // Check increment for small mode.
-  found = a.begin();
-  ++found;
-  EXPECT_EQ(found->second, 10);
-
   b.insert(std::make_pair(&buf[2], 2));
 
   std::swap(a, b);
@@ -82,11 +77,6 @@ TEST(SmallMapTest, GeneralTest) {
   found = b.find(&buf[8]);
   EXPECT_EQ(found, b.end());
 
-  // Check increment for big mode.
-  found = b.find(&buf[1]);
-  ++found;
-  EXPECT_EQ(found->second, 14);
-
   std::swap(a, b);
   a.swap(b);
   std::swap(a, b);
@@ -130,4 +120,28 @@ TEST(SmallMapTest, GeneralTest) {
   SmallMap<int *, int, 3>::value_type Buf7;
   Buf7 = a.FindAndConstruct(&buf[7]);
   EXPECT_EQ(Buf7.second, 0);
+  
+  // Check increments
+  
+  SmallMap<int *, int, 2> c;
+  c.insert(std::make_pair(&buf[0], 0));
+  c.insert(std::make_pair(&buf[1], 1));
+  
+  // For small mode we know that flat array map is used and we know the
+  // order of items.
+  unsigned ii = 0;
+  for (SmallMap<int *, int, 2>::iterator i = c.begin(), e = c.end();
+       i != e; ++i, ++ii) {
+    EXPECT_TRUE((i->first == &buf[0] && i->second == 0 && ii == 0) ||
+                (i->first == &buf[1] && i->second == 1 && ii == 1));
+  }
+  
+  // For big mode DenseMap is used and final order of items is undefined.
+  c.insert(std::make_pair(&buf[2], 2));
+  for (SmallMap<int *, int, 2>::iterator i = c.begin(), e = c.end();
+       i != e; ++i) {
+    EXPECT_TRUE((i->first == &buf[0] && i->second == 0) ||
+                (i->first == &buf[1] && i->second == 1) ||
+                (i->first == &buf[2] && i->second == 2));
+  }
 }