1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <unordered_set> 11 12 // template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>, 13 // class Alloc = allocator<Value>> 14 // class unordered_set 15 16 // iterator begin() {return __table_.begin();} 17 // iterator end() {return __table_.end();} 18 // const_iterator begin() const {return __table_.begin();} 19 // const_iterator end() const {return __table_.end();} 20 // const_iterator cbegin() const {return __table_.begin();} 21 // const_iterator cend() const {return __table_.end();} 22 23 #include <unordered_set> 24 #include <cassert> 25 26 #include "min_allocator.h" 27 28 int main() 29 { 30 { 31 typedef std::unordered_set<int> C; 32 typedef int P; 33 P a[] = 34 { 35 P(1), 36 P(2), 37 P(3), 38 P(4), 39 P(1), 40 P(2) 41 }; 42 C c(a, a + sizeof(a)/sizeof(a[0])); 43 assert(c.bucket_count() >= 5); 44 assert(c.size() == 4); 45 assert(std::distance(c.begin(), c.end()) == c.size()); 46 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 47 C::iterator i; 48 } 49 { 50 typedef std::unordered_set<int> C; 51 typedef int P; 52 P a[] = 53 { 54 P(1), 55 P(2), 56 P(3), 57 P(4), 58 P(1), 59 P(2) 60 }; 61 const C c(a, a + sizeof(a)/sizeof(a[0])); 62 assert(c.bucket_count() >= 5); 63 assert(c.size() == 4); 64 assert(std::distance(c.begin(), c.end()) == c.size()); 65 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 66 C::const_iterator i; 67 } 68 #if __cplusplus >= 201103L 69 { 70 typedef std::unordered_set<int, std::hash<int>, 71 std::equal_to<int>, min_allocator<int>> C; 72 typedef int P; 73 P a[] = 74 { 75 P(1), 76 P(2), 77 P(3), 78 P(4), 79 P(1), 80 P(2) 81 }; 82 C c(a, a + sizeof(a)/sizeof(a[0])); 83 assert(c.bucket_count() >= 5); 84 assert(c.size() == 4); 85 assert(std::distance(c.begin(), c.end()) == c.size()); 86 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 87 C::iterator i; 88 } 89 { 90 typedef std::unordered_set<int, std::hash<int>, 91 std::equal_to<int>, min_allocator<int>> C; 92 typedef int P; 93 P a[] = 94 { 95 P(1), 96 P(2), 97 P(3), 98 P(4), 99 P(1), 100 P(2) 101 }; 102 const C c(a, a + sizeof(a)/sizeof(a[0])); 103 assert(c.bucket_count() >= 5); 104 assert(c.size() == 4); 105 assert(std::distance(c.begin(), c.end()) == c.size()); 106 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 107 C::const_iterator i; 108 } 109 #endif 110 #if _LIBCPP_STD_VER > 11 111 { // N3644 testing 112 typedef std::unordered_set<int> C; 113 C::iterator ii1{}, ii2{}; 114 C::iterator ii4 = ii1; 115 C::const_iterator cii{}; 116 assert ( ii1 == ii2 ); 117 assert ( ii1 == ii4 ); 118 119 assert (!(ii1 != ii2 )); 120 121 assert ( (ii1 == cii )); 122 assert ( (cii == ii1 )); 123 assert (!(ii1 != cii )); 124 assert (!(cii != ii1 )); 125 } 126 #endif 127 } 128