[libcxx-commits] [libcxx] 2e106d5 - [libc++][test][NFC] Rewrite map count test and add test case for "final" compare

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Tue Sep 12 10:53:07 PDT 2023


Author: Konstantin Boyarinov
Date: 2023-09-12T13:52:58-04:00
New Revision: 2e106d55203a2467bccfe7cf39360830c27c67e4

URL: https://github.com/llvm/llvm-project/commit/2e106d55203a2467bccfe7cf39360830c27c67e4
DIFF: https://github.com/llvm/llvm-project/commit/2e106d55203a2467bccfe7cf39360830c27c67e4.diff

LOG: [libc++][test][NFC] Rewrite map count test and add test case for "final" compare

Was part of D118114. Unify test cases for `std::map::count` method and
add test case for the comparator that marked `final`

Differential Revision: https://reviews.llvm.org/D118232

Added: 
    

Modified: 
    libcxx/test/std/containers/associative/map/map.ops/count.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/containers/associative/map/map.ops/count.pass.cpp b/libcxx/test/std/containers/associative/map/map.ops/count.pass.cpp
index 138c5fd5c9e6be5..9fa53ca05026c4a 100644
--- a/libcxx/test/std/containers/associative/map/map.ops/count.pass.cpp
+++ b/libcxx/test/std/containers/associative/map/map.ops/count.pass.cpp
@@ -20,176 +20,70 @@
 #include "private_constructor.h"
 #include "is_transparent.h"
 
-int main(int, char**)
-{
-    {
-    typedef std::pair<const int, double> V;
-    typedef std::map<int, double> M;
-    {
-        typedef M::size_type R;
-        V ar[] =
-        {
-            V(5, 5),
-            V(6, 6),
-            V(7, 7),
-            V(8, 8),
-            V(9, 9),
-            V(10, 10),
-            V(11, 11),
-            V(12, 12)
-        };
-        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
-        R r = m.count(5);
-        assert(r == 1);
-        r = m.count(6);
-        assert(r == 1);
-        r = m.count(7);
-        assert(r == 1);
-        r = m.count(8);
-        assert(r == 1);
-        r = m.count(9);
-        assert(r == 1);
-        r = m.count(10);
-        assert(r == 1);
-        r = m.count(11);
-        assert(r == 1);
-        r = m.count(12);
-        assert(r == 1);
-        r = m.count(4);
-        assert(r == 0);
-    }
-    }
 #if TEST_STD_VER >= 11
-    {
-    typedef std::pair<const int, double> V;
-    typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
-    {
-        typedef M::size_type R;
-        V ar[] =
-        {
-            V(5, 5),
-            V(6, 6),
-            V(7, 7),
-            V(8, 8),
-            V(9, 9),
-            V(10, 10),
-            V(11, 11),
-            V(12, 12)
-        };
-        const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
-        R r = m.count(5);
-        assert(r == 1);
-        r = m.count(6);
-        assert(r == 1);
-        r = m.count(7);
-        assert(r == 1);
-        r = m.count(8);
-        assert(r == 1);
-        r = m.count(9);
-        assert(r == 1);
-        r = m.count(10);
-        assert(r == 1);
-        r = m.count(11);
-        assert(r == 1);
-        r = m.count(12);
-        assert(r == 1);
-        r = m.count(4);
-        assert(r == 0);
-    }
-    }
+template <class T>
+struct FinalCompare final {
+  bool operator()(const T& x, const T& y) const { return x < y; }
+};
 #endif
-#if TEST_STD_VER > 11
-    {
-    typedef std::pair<const int, double> V;
-    typedef std::map<int, double, std::less <>> M;
-    typedef M::size_type R;
 
-    V ar[] =
-    {
-        V(5, 5),
-        V(6, 6),
-        V(7, 7),
-        V(8, 8),
-        V(9, 9),
-        V(10, 10),
-        V(11, 11),
-        V(12, 12)
-    };
-    const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
-    R r = m.count(5);
-    assert(r == 1);
-    r = m.count(6);
-    assert(r == 1);
-    r = m.count(7);
-    assert(r == 1);
-    r = m.count(8);
-    assert(r == 1);
-    r = m.count(9);
-    assert(r == 1);
-    r = m.count(10);
-    assert(r == 1);
-    r = m.count(11);
-    assert(r == 1);
-    r = m.count(12);
-    assert(r == 1);
-    r = m.count(4);
+template <class Map, class ArgType = typename Map::key_type>
+void test() {
+  typedef typename Map::value_type V;
+  typedef typename Map::size_type R;
+
+  V ar[] = {V(5, 5), V(6, 6), V(7, 7), V(8, 8), V(9, 9), V(10, 10), V(11, 11), V(12, 12)};
+
+  const Map m(ar, ar + sizeof(ar) / sizeof(ar[0]));
+
+  for (int i = 0; i < 5; ++i) {
+    R r = m.count(ArgType(i));
     assert(r == 0);
+  }
 
-    r = m.count(C2Int(5));
-    assert(r == 1);
-    r = m.count(C2Int(6));
-    assert(r == 1);
-    r = m.count(C2Int(7));
-    assert(r == 1);
-    r = m.count(C2Int(8));
-    assert(r == 1);
-    r = m.count(C2Int(9));
-    assert(r == 1);
-    r = m.count(C2Int(10));
+  for (int i = 5; i < 13; ++i) {
+    R r = m.count(ArgType(i));
     assert(r == 1);
-    r = m.count(C2Int(11));
-    assert(r == 1);
-    r = m.count(C2Int(12));
-    assert(r == 1);
-    r = m.count(C2Int(4));
-    assert(r == 0);
-    }
+  }
+}
 
-    {
+int main(int, char**) {
+  test<std::map<int, double> >();
+#if TEST_STD_VER >= 11
+  typedef std::pair<const int, double> V;
+  test<std::map<int, double, std::less<int>, min_allocator<V>>>();
+  test<std::map<int, double, FinalCompare<int>>>();
+#endif
+#if TEST_STD_VER >= 14
+  typedef std::map<int, double, std::less<>> TM;
+  test<TM>();
+  test<TM, C2Int>();
+
+  {
     typedef PrivateConstructor PC;
-    typedef std::map<PC, double, std::less<>> M;
+    typedef std::map<PC, double, std::less<> > M;
     typedef M::size_type R;
 
     M m;
-    m [ PC::make(5)  ] = 5;
-    m [ PC::make(6)  ] = 6;
-    m [ PC::make(7)  ] = 7;
-    m [ PC::make(8)  ] = 8;
-    m [ PC::make(9)  ] = 9;
-    m [ PC::make(10) ] = 10;
-    m [ PC::make(11) ] = 11;
-    m [ PC::make(12) ] = 12;
-
-    R r = m.count(5);
-    assert(r == 1);
-    r = m.count(6);
-    assert(r == 1);
-    r = m.count(7);
-    assert(r == 1);
-    r = m.count(8);
-    assert(r == 1);
-    r = m.count(9);
-    assert(r == 1);
-    r = m.count(10);
-    assert(r == 1);
-    r = m.count(11);
-    assert(r == 1);
-    r = m.count(12);
-    assert(r == 1);
-    r = m.count(4);
-    assert(r == 0);
+    m[PC::make(5)]  = 5;
+    m[PC::make(6)]  = 6;
+    m[PC::make(7)]  = 7;
+    m[PC::make(8)]  = 8;
+    m[PC::make(9)]  = 9;
+    m[PC::make(10)] = 10;
+    m[PC::make(11)] = 11;
+    m[PC::make(12)] = 12;
+
+    for (int i = 0; i < 5; ++i) {
+      R r = m.count(i);
+      assert(r == 0);
     }
-#endif
 
+    for (int i = 5; i < 13; ++i) {
+      R r = m.count(i);
+      assert(r == 1);
+    }
+  }
+#endif // TEST_STD_VER >= 14
   return 0;
 }


        


More information about the libcxx-commits mailing list