123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- //===----------------------------------------------------------------------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is dual licensed under the MIT and the University of Illinois Open
- // Source Licenses. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- // <map>
- // class multimap
- // iterator begin();
- // const_iterator begin() const;
- // iterator end();
- // const_iterator end() const;
- //
- // reverse_iterator rbegin();
- // const_reverse_iterator rbegin() const;
- // reverse_iterator rend();
- // const_reverse_iterator rend() const;
- //
- // const_iterator cbegin() const;
- // const_iterator cend() const;
- // const_reverse_iterator crbegin() const;
- // const_reverse_iterator crend() const;
- #include <map>
- #include <cassert>
- #include "min_allocator.h"
- int main()
- {
- {
- typedef std::pair<const int, double> V;
- V ar[] =
- {
- V(1, 1),
- V(1, 1.5),
- V(1, 2),
- V(2, 1),
- V(2, 1.5),
- V(2, 2),
- V(3, 1),
- V(3, 1.5),
- V(3, 2),
- V(4, 1),
- V(4, 1.5),
- V(4, 2),
- V(5, 1),
- V(5, 1.5),
- V(5, 2),
- V(6, 1),
- V(6, 1.5),
- V(6, 2),
- V(7, 1),
- V(7, 1.5),
- V(7, 2),
- V(8, 1),
- V(8, 1.5),
- V(8, 2)
- };
- std::multimap<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
- assert(std::distance(m.begin(), m.end()) == m.size());
- assert(std::distance(m.rbegin(), m.rend()) == m.size());
- std::multimap<int, double>::iterator i;
- i = m.begin();
- std::multimap<int, double>::const_iterator k = i;
- assert(i == k);
- for (int j = 1; j <= 8; ++j)
- for (double d = 1; d <= 2; d += .5, ++i)
- {
- assert(i->first == j);
- assert(i->second == d);
- i->second = 2.5;
- assert(i->second == 2.5);
- }
- }
- {
- typedef std::pair<const int, double> V;
- V ar[] =
- {
- V(1, 1),
- V(1, 1.5),
- V(1, 2),
- V(2, 1),
- V(2, 1.5),
- V(2, 2),
- V(3, 1),
- V(3, 1.5),
- V(3, 2),
- V(4, 1),
- V(4, 1.5),
- V(4, 2),
- V(5, 1),
- V(5, 1.5),
- V(5, 2),
- V(6, 1),
- V(6, 1.5),
- V(6, 2),
- V(7, 1),
- V(7, 1.5),
- V(7, 2),
- V(8, 1),
- V(8, 1.5),
- V(8, 2)
- };
- const std::multimap<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
- assert(std::distance(m.begin(), m.end()) == m.size());
- assert(std::distance(m.cbegin(), m.cend()) == m.size());
- assert(std::distance(m.rbegin(), m.rend()) == m.size());
- assert(std::distance(m.crbegin(), m.crend()) == m.size());
- std::multimap<int, double>::const_iterator i;
- i = m.begin();
- for (int j = 1; j <= 8; ++j)
- for (double d = 1; d <= 2; d += .5, ++i)
- {
- assert(i->first == j);
- assert(i->second == d);
- }
- }
- #if TEST_STD_VER >= 11
- {
- typedef std::pair<const int, double> V;
- V ar[] =
- {
- V(1, 1),
- V(1, 1.5),
- V(1, 2),
- V(2, 1),
- V(2, 1.5),
- V(2, 2),
- V(3, 1),
- V(3, 1.5),
- V(3, 2),
- V(4, 1),
- V(4, 1.5),
- V(4, 2),
- V(5, 1),
- V(5, 1.5),
- V(5, 2),
- V(6, 1),
- V(6, 1.5),
- V(6, 2),
- V(7, 1),
- V(7, 1.5),
- V(7, 2),
- V(8, 1),
- V(8, 1.5),
- V(8, 2)
- };
- std::multimap<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
- assert(std::distance(m.begin(), m.end()) == m.size());
- assert(std::distance(m.rbegin(), m.rend()) == m.size());
- std::multimap<int, double, std::less<int>, min_allocator<V>>::iterator i;
- i = m.begin();
- std::multimap<int, double, std::less<int>, min_allocator<V>>::const_iterator k = i;
- assert(i == k);
- for (int j = 1; j <= 8; ++j)
- for (double d = 1; d <= 2; d += .5, ++i)
- {
- assert(i->first == j);
- assert(i->second == d);
- i->second = 2.5;
- assert(i->second == 2.5);
- }
- }
- {
- typedef std::pair<const int, double> V;
- V ar[] =
- {
- V(1, 1),
- V(1, 1.5),
- V(1, 2),
- V(2, 1),
- V(2, 1.5),
- V(2, 2),
- V(3, 1),
- V(3, 1.5),
- V(3, 2),
- V(4, 1),
- V(4, 1.5),
- V(4, 2),
- V(5, 1),
- V(5, 1.5),
- V(5, 2),
- V(6, 1),
- V(6, 1.5),
- V(6, 2),
- V(7, 1),
- V(7, 1.5),
- V(7, 2),
- V(8, 1),
- V(8, 1.5),
- V(8, 2)
- };
- const std::multimap<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
- assert(std::distance(m.begin(), m.end()) == m.size());
- assert(std::distance(m.cbegin(), m.cend()) == m.size());
- assert(std::distance(m.rbegin(), m.rend()) == m.size());
- assert(std::distance(m.crbegin(), m.crend()) == m.size());
- std::multimap<int, double, std::less<int>, min_allocator<V>>::const_iterator i;
- i = m.begin();
- for (int j = 1; j <= 8; ++j)
- for (double d = 1; d <= 2; d += .5, ++i)
- {
- assert(i->first == j);
- assert(i->second == d);
- }
- }
- #endif
- #if _LIBCPP_STD_VER > 11
- { // N3644 testing
- typedef std::multimap<int, double> C;
- C::iterator ii1{}, ii2{};
- C::iterator ii4 = ii1;
- C::const_iterator cii{};
- assert ( ii1 == ii2 );
- assert ( ii1 == ii4 );
- assert (!(ii1 != ii2 ));
- assert ( (ii1 == cii ));
- assert ( (cii == ii1 ));
- assert (!(ii1 != cii ));
- assert (!(cii != ii1 ));
- }
- #endif
- }
|