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 // <set> 11 12 // class multiset 13 14 // iterator begin(); 15 // const_iterator begin() const; 16 // iterator end(); 17 // const_iterator end() const; 18 // 19 // reverse_iterator rbegin(); 20 // const_reverse_iterator rbegin() const; 21 // reverse_iterator rend(); 22 // const_reverse_iterator rend() const; 23 // 24 // const_iterator cbegin() const; 25 // const_iterator cend() const; 26 // const_reverse_iterator crbegin() const; 27 // const_reverse_iterator crend() const; 28 29 #include <set> 30 #include <cassert> 31 32 #include "min_allocator.h" 33 34 int main() 35 { 36 { 37 typedef int V; 38 V ar[] = 39 { 40 1, 41 1, 42 1, 43 2, 44 2, 45 2, 46 3, 47 3, 48 3, 49 4, 50 4, 51 4, 52 5, 53 5, 54 5, 55 6, 56 6, 57 6, 58 7, 59 7, 60 7, 61 8, 62 8, 63 8 64 }; 65 std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 66 assert(std::distance(m.begin(), m.end()) == m.size()); 67 assert(std::distance(m.rbegin(), m.rend()) == m.size()); 68 std::multiset<int>::iterator i; 69 i = m.begin(); 70 std::multiset<int>::const_iterator k = i; 71 assert(i == k); 72 for (int j = 1; j <= 8; ++j) 73 for (int k = 0; k < 3; ++k, ++i) 74 assert(*i == j); 75 } 76 { 77 typedef int V; 78 V ar[] = 79 { 80 1, 81 1, 82 1, 83 2, 84 2, 85 2, 86 3, 87 3, 88 3, 89 4, 90 4, 91 4, 92 5, 93 5, 94 5, 95 6, 96 6, 97 6, 98 7, 99 7, 100 7, 101 8, 102 8, 103 8 104 }; 105 const std::multiset<int> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 106 assert(std::distance(m.begin(), m.end()) == m.size()); 107 assert(std::distance(m.cbegin(), m.cend()) == m.size()); 108 assert(std::distance(m.rbegin(), m.rend()) == m.size()); 109 assert(std::distance(m.crbegin(), m.crend()) == m.size()); 110 std::multiset<int>::const_iterator i; 111 i = m.begin(); 112 for (int j = 1; j <= 8; ++j) 113 for (int k = 0; k < 3; ++k, ++i) 114 assert(*i == j); 115 } 116 #if __cplusplus >= 201103L 117 { 118 typedef int V; 119 V ar[] = 120 { 121 1, 122 1, 123 1, 124 2, 125 2, 126 2, 127 3, 128 3, 129 3, 130 4, 131 4, 132 4, 133 5, 134 5, 135 5, 136 6, 137 6, 138 6, 139 7, 140 7, 141 7, 142 8, 143 8, 144 8 145 }; 146 std::multiset<int, std::less<int>, min_allocator<int>> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 147 assert(std::distance(m.begin(), m.end()) == m.size()); 148 assert(std::distance(m.rbegin(), m.rend()) == m.size()); 149 std::multiset<int, std::less<int>, min_allocator<int>>::iterator i; 150 i = m.begin(); 151 std::multiset<int, std::less<int>, min_allocator<int>>::const_iterator k = i; 152 assert(i == k); 153 for (int j = 1; j <= 8; ++j) 154 for (int k = 0; k < 3; ++k, ++i) 155 assert(*i == j); 156 } 157 { 158 typedef int V; 159 V ar[] = 160 { 161 1, 162 1, 163 1, 164 2, 165 2, 166 2, 167 3, 168 3, 169 3, 170 4, 171 4, 172 4, 173 5, 174 5, 175 5, 176 6, 177 6, 178 6, 179 7, 180 7, 181 7, 182 8, 183 8, 184 8 185 }; 186 const std::multiset<int, std::less<int>, min_allocator<int>> m(ar, ar+sizeof(ar)/sizeof(ar[0])); 187 assert(std::distance(m.begin(), m.end()) == m.size()); 188 assert(std::distance(m.cbegin(), m.cend()) == m.size()); 189 assert(std::distance(m.rbegin(), m.rend()) == m.size()); 190 assert(std::distance(m.crbegin(), m.crend()) == m.size()); 191 std::multiset<int, std::less<int>, min_allocator<int>>::const_iterator i; 192 i = m.begin(); 193 for (int j = 1; j <= 8; ++j) 194 for (int k = 0; k < 3; ++k, ++i) 195 assert(*i == j); 196 } 197 #endif 198 #if _LIBCPP_STD_VER > 11 199 { // N3644 testing 200 typedef std::multiset<int> C; 201 C::iterator ii1{}, ii2{}; 202 C::iterator ii4 = ii1; 203 C::const_iterator cii{}; 204 assert ( ii1 == ii2 ); 205 assert ( ii1 == ii4 ); 206 207 assert (!(ii1 != ii2 )); 208 209 assert ( (ii1 == cii )); 210 assert ( (cii == ii1 )); 211 assert (!(ii1 != cii )); 212 assert (!(cii != ii1 )); 213 } 214 #endif 215 } 216