132 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++0310 11// <map>12 13// class multimap14 15// multimap(multimap&& m);16 17#include <map>18#include <cassert>19 20#include "test_macros.h"21#include "../../../test_compare.h"22#include "test_allocator.h"23#include "min_allocator.h"24 25int main(int, char**) {26 typedef std::pair<const int, double> V;27 {28 typedef test_less<int> C;29 typedef test_allocator<V> A;30 std::multimap<int, double, C, A> mo(C(5), A(7));31 std::multimap<int, double, C, A> m = std::move(mo);32 assert(m.get_allocator() == A(7));33 assert(m.key_comp() == C(5));34 assert(m.size() == 0);35 assert(std::distance(m.begin(), m.end()) == 0);36 37 assert(mo.get_allocator() == A(7));38 assert(mo.get_allocator().get_id() == test_alloc_base::moved_value);39 assert(mo.key_comp() == C(5));40 assert(mo.size() == 0);41 assert(std::distance(mo.begin(), mo.end()) == 0);42 }43 {44 V ar[] = {45 V(1, 1),46 V(1, 1.5),47 V(1, 2),48 V(2, 1),49 V(2, 1.5),50 V(2, 2),51 V(3, 1),52 V(3, 1.5),53 V(3, 2),54 };55 typedef test_less<int> C;56 typedef test_allocator<V> A;57 std::multimap<int, double, C, A> mo(ar, ar + sizeof(ar) / sizeof(ar[0]), C(5), A(7));58 std::multimap<int, double, C, A> m = std::move(mo);59 assert(m.get_allocator() == A(7));60 assert(m.key_comp() == C(5));61 assert(m.size() == 9);62 assert(std::distance(m.begin(), m.end()) == 9);63 assert(*m.begin() == V(1, 1));64 assert(*std::next(m.begin()) == V(1, 1.5));65 assert(*std::next(m.begin(), 2) == V(1, 2));66 assert(*std::next(m.begin(), 3) == V(2, 1));67 assert(*std::next(m.begin(), 4) == V(2, 1.5));68 assert(*std::next(m.begin(), 5) == V(2, 2));69 assert(*std::next(m.begin(), 6) == V(3, 1));70 assert(*std::next(m.begin(), 7) == V(3, 1.5));71 assert(*std::next(m.begin(), 8) == V(3, 2));72 73 assert(mo.get_allocator() == A(7));74 assert(mo.get_allocator().get_id() == test_alloc_base::moved_value);75 assert(mo.key_comp() == C(5));76 assert(mo.size() == 0);77 assert(std::distance(mo.begin(), mo.end()) == 0);78 }79 {80 typedef test_less<int> C;81 typedef min_allocator<V> A;82 std::multimap<int, double, C, A> mo(C(5), A());83 std::multimap<int, double, C, A> m = std::move(mo);84 assert(m.get_allocator() == A());85 assert(m.key_comp() == C(5));86 assert(m.size() == 0);87 assert(std::distance(m.begin(), m.end()) == 0);88 89 assert(mo.get_allocator() == A());90 assert(mo.key_comp() == C(5));91 assert(mo.size() == 0);92 assert(std::distance(mo.begin(), mo.end()) == 0);93 }94 {95 V ar[] = {96 V(1, 1),97 V(1, 1.5),98 V(1, 2),99 V(2, 1),100 V(2, 1.5),101 V(2, 2),102 V(3, 1),103 V(3, 1.5),104 V(3, 2),105 };106 typedef test_less<int> C;107 typedef min_allocator<V> A;108 std::multimap<int, double, C, A> mo(ar, ar + sizeof(ar) / sizeof(ar[0]), C(5), A());109 std::multimap<int, double, C, A> m = std::move(mo);110 assert(m.get_allocator() == A());111 assert(m.key_comp() == C(5));112 assert(m.size() == 9);113 assert(std::distance(m.begin(), m.end()) == 9);114 assert(*m.begin() == V(1, 1));115 assert(*std::next(m.begin()) == V(1, 1.5));116 assert(*std::next(m.begin(), 2) == V(1, 2));117 assert(*std::next(m.begin(), 3) == V(2, 1));118 assert(*std::next(m.begin(), 4) == V(2, 1.5));119 assert(*std::next(m.begin(), 5) == V(2, 2));120 assert(*std::next(m.begin(), 6) == V(3, 1));121 assert(*std::next(m.begin(), 7) == V(3, 1.5));122 assert(*std::next(m.begin(), 8) == V(3, 2));123 124 assert(mo.get_allocator() == A());125 assert(mo.key_comp() == C(5));126 assert(mo.size() == 0);127 assert(std::distance(mo.begin(), mo.end()) == 0);128 }129 130 return 0;131}132