156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//===----------------------------------------------------------------------===// 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// The LLVM Compiler Infrastructure 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// This file is dual licensed under the MIT and the University of Illinois Open 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// Source Licenses. See LICENSE.TXT for details. 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//===----------------------------------------------------------------------===// 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// <unordered_map> 1156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project// class Alloc = allocator<pair<const Key, T>>> 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project// class unordered_multimap 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project// unordered_multimap(initializer_list<value_type> il, size_type n, const hasher& hf); 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <unordered_map> 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <string> 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <cassert> 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <cfloat> 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "../../../test_compare.h" 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "../../../test_hash.h" 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "test_allocator.h" 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "min_allocator.h" 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksint main() 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks typedef std::unordered_multimap<int, std::string, 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks test_hash<std::hash<int> >, 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks test_compare<std::equal_to<int> >, 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks test_allocator<std::pair<const int, std::string> > 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks > C; 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks typedef std::pair<int, std::string> P; 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks C c({ 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks P(1, "one"), 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks P(2, "two"), 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks P(3, "three"), 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks P(4, "four"), 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks P(1, "four"), 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks P(2, "four"), 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks }, 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7, 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks test_hash<std::hash<int> >(8) 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks ); 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(c.bucket_count() == 7); 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(c.size() == 6); 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks typedef std::pair<C::const_iterator, C::const_iterator> Eq; 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks Eq eq = c.equal_range(1); 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(std::distance(eq.first, eq.second) == 2); 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks C::const_iterator i = eq.first; 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->first == 1); 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->second == "one"); 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks ++i; 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->first == 1); 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->second == "four"); 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eq = c.equal_range(2); 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(std::distance(eq.first, eq.second) == 2); 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks i = eq.first; 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->first == 2); 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->second == "two"); 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks ++i; 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->first == 2); 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->second == "four"); 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eq = c.equal_range(3); 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(std::distance(eq.first, eq.second) == 1); 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks i = eq.first; 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->first == 3); 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->second == "three"); 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks eq = c.equal_range(4); 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(std::distance(eq.first, eq.second) == 1); 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks i = eq.first; 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->first == 4); 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(i->second == "four"); 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(std::distance(c.begin(), c.end()) == c.size()); 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(std::distance(c.cbegin(), c.cend()) == c.size()); 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON); 82 assert(c.max_load_factor() == 1); 83 assert(c.hash_function() == test_hash<std::hash<int> >(8)); 84 assert(c.key_eq() == test_compare<std::equal_to<int> >()); 85 assert((c.get_allocator() == test_allocator<std::pair<const int, std::string> >())); 86 } 87#if __cplusplus >= 201103L 88 { 89 typedef std::unordered_multimap<int, std::string, 90 test_hash<std::hash<int> >, 91 test_compare<std::equal_to<int> >, 92 min_allocator<std::pair<const int, std::string> > 93 > C; 94 typedef std::pair<int, std::string> P; 95 C c({ 96 P(1, "one"), 97 P(2, "two"), 98 P(3, "three"), 99 P(4, "four"), 100 P(1, "four"), 101 P(2, "four"), 102 }, 103 7, 104 test_hash<std::hash<int> >(8) 105 ); 106 assert(c.bucket_count() == 7); 107 assert(c.size() == 6); 108 typedef std::pair<C::const_iterator, C::const_iterator> Eq; 109 Eq eq = c.equal_range(1); 110 assert(std::distance(eq.first, eq.second) == 2); 111 C::const_iterator i = eq.first; 112 assert(i->first == 1); 113 assert(i->second == "one"); 114 ++i; 115 assert(i->first == 1); 116 assert(i->second == "four"); 117 eq = c.equal_range(2); 118 assert(std::distance(eq.first, eq.second) == 2); 119 i = eq.first; 120 assert(i->first == 2); 121 assert(i->second == "two"); 122 ++i; 123 assert(i->first == 2); 124 assert(i->second == "four"); 125 126 eq = c.equal_range(3); 127 assert(std::distance(eq.first, eq.second) == 1); 128 i = eq.first; 129 assert(i->first == 3); 130 assert(i->second == "three"); 131 eq = c.equal_range(4); 132 assert(std::distance(eq.first, eq.second) == 1); 133 i = eq.first; 134 assert(i->first == 4); 135 assert(i->second == "four"); 136 assert(std::distance(c.begin(), c.end()) == c.size()); 137 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 138 assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON); 139 assert(c.max_load_factor() == 1); 140 assert(c.hash_function() == test_hash<std::hash<int> >(8)); 141 assert(c.key_eq() == test_compare<std::equal_to<int> >()); 142 assert((c.get_allocator() == min_allocator<std::pair<const int, std::string> >())); 143 } 144#endif 145#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS 146} 147