diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_allocator.pass.cpp @@ -0,0 +1,76 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_map + +// unordered_map(initializer_list il, size_type n, const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) { + typedef std::unordered_map, + test_equal_to, + Allocator + > C; + typedef std::pair P; + + C c({ + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four"), + }, + 7, + alloc); + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 4); + assert(c.at(1) == "one"); + assert(c.at(2) == "two"); + assert(c.at(3) == "three"); + assert(c.at(4) == "four"); + assert(c.hash_function() == test_hash()); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(!c.empty()); + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair P; + + test(test_allocator

(10)); + test(min_allocator

()); + test(explicit_allocator

()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/init_size_hash_allocator.pass.cpp @@ -0,0 +1,78 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_map + +// unordered_map(initializer_list il, size_type n, +// const hasher& hash, const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) { + typedef std::unordered_map, + test_equal_to, + Allocator + > C; + typedef std::pair P; + + C c({ + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four"), + }, + 7, + test_hash(5), + alloc); + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 4); + assert(c.at(1) == "one"); + assert(c.at(2) == "two"); + assert(c.at(3) == "three"); + assert(c.at(4) == "four"); + assert(c.hash_function() == test_hash(5)); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(!c.empty()); + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair P; + + test(test_allocator

(10)); + test(min_allocator

()); + test(explicit_allocator

()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter.pass.cpp rename from libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range.pass.cpp rename to libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size.pass.cpp rename from libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size.pass.cpp rename to libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_allocator.pass.cpp @@ -0,0 +1,81 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_map + +// template +// unordered_map(InputIt first, InputIt last, size_type n, const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "test_iterators.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_map, + test_equal_to, + Allocator + > C; + typedef std::pair P; + P a[] = + { + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four"), + }; + + C c(cpp17_input_iterator(a), cpp17_input_iterator(a + sizeof(a) / sizeof(a[0])), + 7, + alloc); + + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 4); + assert(c.at(1) == "one"); + assert(c.at(2) == "two"); + assert(c.at(3) == "three"); + assert(c.at(4) == "four"); + assert(c.hash_function() == test_hash()); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(!c.empty()); + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair P; + test(test_allocator

(10)); + test(min_allocator

()); + test(explicit_allocator

()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash.pass.cpp rename from libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash.pass.cpp rename to libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_allocator.pass.cpp @@ -0,0 +1,83 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_map + +// template +// unordered_map(InputIt first, InputIt last, size_type n, +// const hasher& hash, const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "test_iterators.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_map, + test_equal_to, + Allocator + > C; + typedef std::pair P; + P a[] = + { + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four"), + }; + + C c(cpp17_input_iterator(a), cpp17_input_iterator(a + sizeof(a) / sizeof(a[0])), + 7, + test_hash(5), + alloc); + + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 4); + assert(c.at(1) == "one"); + assert(c.at(2) == "two"); + assert(c.at(3) == "three"); + assert(c.at(4) == "four"); + assert(c.hash_function() == test_hash(5)); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(!c.empty()); + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair P; + test(test_allocator

(10)); + test(min_allocator

()); + test(explicit_allocator

()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_equal.pass.cpp rename from libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal.pass.cpp rename to libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_equal.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_equal_allocator.pass.cpp rename from libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/range_size_hash_equal_allocator.pass.cpp rename to libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/iter_iter_size_hash_equal_allocator.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_allocator.pass.cpp @@ -0,0 +1,59 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_map + +// unordered_map(size_type n, const allocator_type& alloc); + +#include +#include +#include + +#include "test_macros.h" +#include "../../../NotConstructible.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) { + typedef std::unordered_map, + test_equal_to, + Allocator + > C; + + C c(7, alloc); + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.hash_function() == test_hash()); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(c.size() == 0); + assert(c.empty()); + assert(std::distance(c.begin(), c.end()) == 0); + assert(c.load_factor() == 0); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair V; + + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.cnstr/size_hash_allocator.pass.cpp @@ -0,0 +1,59 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_map + +// unordered_map(size_type n, const hasher& hash, const allocator_type& alloc); + +#include +#include +#include + +#include "test_macros.h" +#include "../../../NotConstructible.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) { + typedef std::unordered_map, + test_equal_to, + Allocator + > C; + + C c(7, test_hash(8), alloc); + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.hash_function() == test_hash(8)); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(c.size() == 0); + assert(c.empty()); + assert(std::distance(c.begin(), c.end()) == 0); + assert(c.load_factor() == 0); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair V; + + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_allocator.pass.cpp @@ -0,0 +1,100 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_multimap + +// unordered_multimap(initializer_list il, size_type n, +// const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "../../../check_consecutive.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_multimap, + test_equal_to, + Allocator> C; + typedef std::pair P; + C c({ + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four") + }, + 7, + alloc); + + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 6); + + typedef std::pair Eq; + Eq eq = c.equal_range(1); + assert(std::distance(eq.first, eq.second) == 2); + std::multiset s; + s.insert("one"); + s.insert("four"); + CheckConsecutiveKeys(c.find(1), c.end(), 1, s); + + eq = c.equal_range(2); + assert(std::distance(eq.first, eq.second) == 2); + s.insert("two"); + s.insert("four"); + CheckConsecutiveKeys(c.find(2), c.end(), 2, s); + + eq = c.equal_range(3); + assert(std::distance(eq.first, eq.second) == 1); + typename C::const_iterator i = eq.first; + assert(i->first == 3); + assert(i->second == "three"); + + eq = c.equal_range(4); + assert(std::distance(eq.first, eq.second) == 1); + i = eq.first; + assert(i->first == 4); + assert(i->second == "four"); + + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); + assert(c.hash_function() == test_hash()); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); +} + +int main(int, char**) +{ + typedef std::pair V; + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/init_size_hash_allocator.pass.cpp @@ -0,0 +1,101 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_multimap + +// unordered_multimap(initializer_list il, size_type n, +// const hasher& hash, const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "../../../check_consecutive.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_multimap, + test_equal_to, + Allocator> C; + typedef std::pair P; + C c({ + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four") + }, + 7, + test_hash(5), + alloc); + + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 6); + + typedef std::pair Eq; + Eq eq = c.equal_range(1); + assert(std::distance(eq.first, eq.second) == 2); + std::multiset s; + s.insert("one"); + s.insert("four"); + CheckConsecutiveKeys(c.find(1), c.end(), 1, s); + + eq = c.equal_range(2); + assert(std::distance(eq.first, eq.second) == 2); + s.insert("two"); + s.insert("four"); + CheckConsecutiveKeys(c.find(2), c.end(), 2, s); + + eq = c.equal_range(3); + assert(std::distance(eq.first, eq.second) == 1); + typename C::const_iterator i = eq.first; + assert(i->first == 3); + assert(i->second == "three"); + + eq = c.equal_range(4); + assert(std::distance(eq.first, eq.second) == 1); + i = eq.first; + assert(i->first == 4); + assert(i->second == "four"); + + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); + assert(c.hash_function() == test_hash(5)); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); +} + +int main(int, char**) +{ + typedef std::pair V; + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter.pass.cpp rename from libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range.pass.cpp rename to libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size.pass.cpp rename from libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size.pass.cpp rename to libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_allocator.pass.cpp @@ -0,0 +1,105 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_multimap + +// template +// unordered_multimap(InputIterator first, InputIterator last, size_type n, +// const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "test_iterators.h" +#include "../../../check_consecutive.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_multimap, + test_equal_to, + Allocator> C; + typedef std::pair P; + P a[] = + { + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four") + }; + + C c(cpp17_input_iterator(a), cpp17_input_iterator(a + sizeof(a) / sizeof(a[0])), + 7, + alloc); + + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 6); + + typedef std::pair Eq; + Eq eq = c.equal_range(1); + assert(std::distance(eq.first, eq.second) == 2); + std::multiset s; + s.insert("one"); + s.insert("four"); + CheckConsecutiveKeys(c.find(1), c.end(), 1, s); + + eq = c.equal_range(2); + assert(std::distance(eq.first, eq.second) == 2); + s.insert("two"); + s.insert("four"); + CheckConsecutiveKeys(c.find(2), c.end(), 2, s); + + eq = c.equal_range(3); + assert(std::distance(eq.first, eq.second) == 1); + typename C::const_iterator i = eq.first; + assert(i->first == 3); + assert(i->second == "three"); + + eq = c.equal_range(4); + assert(std::distance(eq.first, eq.second) == 1); + i = eq.first; + assert(i->first == 4); + assert(i->second == "four"); + + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); + assert(c.hash_function() == test_hash()); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); +} + +int main(int, char**) +{ + typedef std::pair V; + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash.pass.cpp rename from libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash.pass.cpp rename to libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_allocator.pass.cpp @@ -0,0 +1,106 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_multimap + +// template +// unordered_multimap(InputIterator first, InputIterator last, size_type n, +// const hasher& hash, const allocator_type& alloc); + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test_macros.h" +#include "test_iterators.h" +#include "../../../check_consecutive.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_multimap, + test_equal_to, + Allocator> C; + typedef std::pair P; + P a[] = + { + P(1, "one"), + P(2, "two"), + P(3, "three"), + P(4, "four"), + P(1, "four"), + P(2, "four") + }; + + C c(cpp17_input_iterator(a), cpp17_input_iterator(a + sizeof(a) / sizeof(a[0])), + 7, + test_hash(5), + alloc); + + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.size() == 6); + + typedef std::pair Eq; + Eq eq = c.equal_range(1); + assert(std::distance(eq.first, eq.second) == 2); + std::multiset s; + s.insert("one"); + s.insert("four"); + CheckConsecutiveKeys(c.find(1), c.end(), 1, s); + + eq = c.equal_range(2); + assert(std::distance(eq.first, eq.second) == 2); + s.insert("two"); + s.insert("four"); + CheckConsecutiveKeys(c.find(2), c.end(), 2, s); + + eq = c.equal_range(3); + assert(std::distance(eq.first, eq.second) == 1); + typename C::const_iterator i = eq.first; + assert(i->first == 3); + assert(i->second == "three"); + + eq = c.equal_range(4); + assert(std::distance(eq.first, eq.second) == 1); + i = eq.first; + assert(i->first == 4); + assert(i->second == "four"); + + assert(static_cast(std::distance(c.begin(), c.end())) == c.size()); + assert(std::fabs(c.load_factor() - (float)c.size() / c.bucket_count()) < FLT_EPSILON); + assert(c.max_load_factor() == 1); + assert(c.hash_function() == test_hash(5)); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); +} + +int main(int, char**) +{ + typedef std::pair V; + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_equal.pass.cpp rename from libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal.pass.cpp rename to libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_equal.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_equal_allocator.pass.cpp rename from libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/range_size_hash_equal_allocator.pass.cpp rename to libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/iter_iter_size_hash_equal_allocator.pass.cpp diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_allocator.pass.cpp @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_multimap + +// unordered_multimap(size_type n, const allocator_type& alloc); + +#include +#include +#include + +#include "test_macros.h" +#include "../../../NotConstructible.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_multimap, + test_equal_to, + Allocator> C; + C c(7, + alloc); + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.hash_function() == test_hash()); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(c.size() == 0); + assert(c.empty()); + assert(std::distance(c.begin(), c.end()) == 0); + assert(c.load_factor() == 0); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair V; + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +} diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/size_hash_allocator.pass.cpp @@ -0,0 +1,59 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11 + +// + +// template , class Pred = equal_to, +// class Alloc = allocator>> +// class unordered_multimap + +// unordered_multimap(size_type n, const hasher& hash, const allocator_type& alloc); + +#include +#include +#include + +#include "test_macros.h" +#include "../../../NotConstructible.h" +#include "../../../test_compare.h" +#include "../../../test_hash.h" +#include "test_allocator.h" +#include "min_allocator.h" + +template +void test(const Allocator& alloc) +{ + typedef std::unordered_multimap, + test_equal_to, + Allocator> C; + C c(7, + test_hash(8), + alloc); + LIBCPP_ASSERT(c.bucket_count() == 7); + assert(c.hash_function() == test_hash(8)); + assert(c.key_eq() == test_equal_to()); + assert(c.get_allocator() == alloc); + assert(c.size() == 0); + assert(c.empty()); + assert(std::distance(c.begin(), c.end()) == 0); + assert(c.load_factor() == 0); + assert(c.max_load_factor() == 1); +} + +int main(int, char**) +{ + typedef std::pair V; + test(test_allocator(10)); + test(min_allocator()); + test(explicit_allocator()); + + return 0; +}