From 7572de875c56fc8e5f7eab67188f24672986e95c Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Tue, 22 Nov 2022 15:38:41 -0800 Subject: [PATCH] Add transparent insert tests for set containers --- test/unordered/transparent_tests.cpp | 90 ++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/test/unordered/transparent_tests.cpp b/test/unordered/transparent_tests.cpp index aaa9b78f..8d1f781b 100644 --- a/test/unordered/transparent_tests.cpp +++ b/test/unordered/transparent_tests.cpp @@ -1974,6 +1974,92 @@ template void test_set_non_transparent_bucket() #endif } +template void test_set_transparent_insert() +{ + count_reset(); + + typedef typename UnorderedSet::iterator iterator; + + UnorderedSet set; + + set.insert(0); + set.insert(1); + set.insert(2); + set.insert(0); + set.insert(0); + set.insert(0); + + int key_count = key::count_; + + std::pair p = set.insert(0); + BOOST_TEST(p.first == set.find(0)); + BOOST_TEST_NOT(p.second); + BOOST_TEST_EQ(key::count_, key_count); + + key_count = key::count_; + p = set.insert(4); + BOOST_TEST(p.first == set.find(4)); + BOOST_TEST(p.second); + BOOST_TEST_EQ(key::count_, key_count + 1); + + key_count = key::count_; + iterator pos = set.insert(set.begin(), 0); + BOOST_TEST(pos == set.find(0)); + BOOST_TEST_EQ(key::count_, key_count); + + key_count = key::count_; + pos = set.insert(set.begin(), 5); + BOOST_TEST(pos == set.find(5)); + BOOST_TEST_EQ(key::count_, key_count + 1); + + // check for collisions with insert(iterator, iterator) + // note: this precludes Key from being convertible to an iterator which isn't + // explicitly stated by p2363r3 + // + set.insert(set.begin(), set.end()); +} + +template void test_set_non_transparent_insert() +{ + count_reset(); + + typedef typename UnorderedSet::iterator iterator; + + UnorderedSet set; + + set.insert(0); + set.insert(1); + set.insert(2); + set.insert(0); + set.insert(0); + set.insert(0); + + int key_count = key::count_; + + std::pair p = set.insert(0); + BOOST_TEST_EQ(key::count_, key_count + 1); + BOOST_TEST(p.first == set.find(0)); + BOOST_TEST_NOT(p.second); + + key_count = key::count_; + p = set.insert(4); + BOOST_TEST_EQ(key::count_, key_count + 2); + BOOST_TEST(p.first == set.find(4)); + BOOST_TEST(p.second); + + key_count = key::count_; + iterator pos = set.insert(set.begin(), 0); + BOOST_TEST_EQ(key::count_, key_count + 1); + BOOST_TEST(pos == set.find(0)); + + key_count = key::count_; + pos = set.insert(set.begin(), 5); + BOOST_TEST_EQ(key::count_, key_count + 2); + BOOST_TEST(pos == set.find(5)); + + set.insert(set.begin(), set.end()); +} + template struct map_type { #ifdef BOOST_UNORDERED_FOA_TESTS @@ -2136,6 +2222,7 @@ void test_unordered_set() test_set_transparent_equal_range(); test_set_transparent_extract(); test_set_transparent_bucket(); + test_set_transparent_insert(); } { @@ -2149,6 +2236,7 @@ void test_unordered_set() test_set_non_transparent_equal_range(); test_set_non_transparent_extract(); test_set_non_transparent_bucket(); + test_set_non_transparent_insert(); } { @@ -2162,6 +2250,7 @@ void test_unordered_set() test_set_non_transparent_equal_range(); test_set_non_transparent_extract(); test_set_non_transparent_bucket(); + test_set_non_transparent_insert(); } { @@ -2175,6 +2264,7 @@ void test_unordered_set() test_set_non_transparent_equal_range(); test_set_non_transparent_extract(); test_set_non_transparent_bucket(); + test_set_non_transparent_insert(); } }