[libcxx][test] Construct non-empty containers in iterator's debug mode tests
authorKristina Bessonova <kbessonova@accesssoftek.com>
Tue, 20 Apr 2021 17:50:29 +0000 (19:50 +0200)
committerKristina Bessonova <kbessonova@accesssoftek.com>
Tue, 20 Apr 2021 17:51:55 +0000 (19:51 +0200)
The debug mode tests for map/set's iterators construct empty
containers, making the code after the first increment meaningless.
It's never executed since the tests exit earlier.

It doesn't seem to be intentional, so the patch makes the tests
to construct containers that include at least one element.

Reviewed By: curdeius, Quuxplusone

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

12 files changed:
libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_7.pass.cpp
libcxx/test/libcxx/containers/unord/unord.map/db_local_iterators_9.pass.cpp
libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_7.pass.cpp
libcxx/test/libcxx/containers/unord/unord.multimap/db_local_iterators_9.pass.cpp
libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_7.pass.cpp
libcxx/test/libcxx/containers/unord/unord.multiset/db_iterators_9.pass.cpp
libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_7.pass.cpp
libcxx/test/libcxx/containers/unord/unord.multiset/db_local_iterators_9.pass.cpp
libcxx/test/libcxx/containers/unord/unord.set/db_iterators_7.pass.cpp
libcxx/test/libcxx/containers/unord/unord.set/db_iterators_9.pass.cpp
libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_7.pass.cpp
libcxx/test/libcxx/containers/unord/unord.set/db_local_iterators_9.pass.cpp

index 29b0636..762551d 100644 (file)
 
 int main(int, char**) {
     typedef std::unordered_map<int, std::string> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c;
+    c.insert(std::make_pair(42, std::string()));
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index 85e72b5..e0d3eac 100644 (file)
 int main(int, char**) {
     typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
                         min_allocator<std::pair<const int, std::string>>> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c({{42, std::string()}});
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index d90ccc3..4f48b6c 100644 (file)
 
 int main(int, char**) {
     typedef std::unordered_multimap<int, std::string> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c;
+    c.insert(std::make_pair(42, std::string()));
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index ded9504..dede94c 100644 (file)
 int main(int, char**) {
     typedef std::unordered_multimap<int, std::string, std::hash<int>, std::equal_to<int>,
                         min_allocator<std::pair<const int, std::string>>> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c({{1, std::string()}});
+    c.insert(std::make_pair(42, std::string()));
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index 20cf082..2fc397a 100644 (file)
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_multiset<T> C;
-    C c(1);
+    C c;
+    c.insert(42);
     C::iterator i = c.begin();
+    assert(i != c.end());
     ++i;
     assert(i == c.end());
     ++i;
index 60027c4..29ca4a6 100644 (file)
@@ -26,8 +26,9 @@
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_multiset<T, std::hash<T>, std::equal_to<T>, min_allocator<T>> C;
-    C c(1);
+    C c({42});
     C::iterator i = c.begin();
+    assert(i != c.end());
     ++i;
     assert(i == c.end());
     ++i;
index d4748a5..bef45d4 100644 (file)
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_multiset<T> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c;
+    c.insert(42);
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index 24e2949..9fbc69a 100644 (file)
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_multiset<T, std::hash<T>, std::equal_to<T>, min_allocator<T>> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c({42});
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index fea8d1f..03d1727 100644 (file)
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_set<T> C;
-    C c(1);
+    C c;
+    c.insert(42);
     C::iterator i = c.begin();
+    assert(i != c.end());
     ++i;
     assert(i == c.end());
     ++i;
index 18617d2..7ea8a06 100644 (file)
@@ -26,8 +26,9 @@
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_set<T, std::hash<T>, std::equal_to<T>, min_allocator<T>> C;
-    C c(1);
+    C c({42});
     C::iterator i = c.begin();
+    assert(i != c.end());
     ++i;
     assert(i == c.end());
     ++i;
index 44da897..5fa9983 100644 (file)
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_set<T> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c;
+    c.insert(42);
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);
 
index 98d5a2e..89fc71a 100644 (file)
 int main(int, char**) {
     typedef int T;
     typedef std::unordered_set<T, std::hash<T>, std::equal_to<T>, min_allocator<T>> C;
-    C c(1);
-    C::local_iterator i = c.begin(0);
+    C c({42});
+    C::size_type b = c.bucket(42);
+    C::local_iterator i = c.begin(b);
+    assert(i != c.end(b));
     ++i;
+    assert(i == c.end(b));
     ++i;
     assert(false);