120 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 map14 15// map(map&& 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::map<int, double, C, A> mo(C(5), A(7));31 std::map<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::map<int, double, C, A> mo(ar, ar + sizeof(ar) / sizeof(ar[0]), C(5), A(7));58 std::map<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() == 3);62 assert(std::distance(m.begin(), m.end()) == 3);63 assert(*m.begin() == V(1, 1));64 assert(*std::next(m.begin()) == V(2, 1));65 assert(*std::next(m.begin(), 2) == V(3, 1));66 67 assert(mo.get_allocator() == A(7));68 assert(mo.get_allocator().get_id() == test_alloc_base::moved_value);69 assert(mo.key_comp() == C(5));70 assert(mo.size() == 0);71 assert(std::distance(mo.begin(), mo.end()) == 0);72 }73 {74 typedef test_less<int> C;75 typedef min_allocator<V> A;76 std::map<int, double, C, A> mo(C(5), A());77 std::map<int, double, C, A> m = std::move(mo);78 assert(m.get_allocator() == A());79 assert(m.key_comp() == C(5));80 assert(m.size() == 0);81 assert(std::distance(m.begin(), m.end()) == 0);82 83 assert(mo.get_allocator() == A());84 assert(mo.key_comp() == C(5));85 assert(mo.size() == 0);86 assert(std::distance(mo.begin(), mo.end()) == 0);87 }88 {89 V ar[] = {90 V(1, 1),91 V(1, 1.5),92 V(1, 2),93 V(2, 1),94 V(2, 1.5),95 V(2, 2),96 V(3, 1),97 V(3, 1.5),98 V(3, 2),99 };100 typedef test_less<int> C;101 typedef min_allocator<V> A;102 std::map<int, double, C, A> mo(ar, ar + sizeof(ar) / sizeof(ar[0]), C(5), A());103 std::map<int, double, C, A> m = std::move(mo);104 assert(m.get_allocator() == A());105 assert(m.key_comp() == C(5));106 assert(m.size() == 3);107 assert(std::distance(m.begin(), m.end()) == 3);108 assert(*m.begin() == V(1, 1));109 assert(*std::next(m.begin()) == V(2, 1));110 assert(*std::next(m.begin(), 2) == V(3, 1));111 112 assert(mo.get_allocator() == A());113 assert(mo.key_comp() == C(5));114 assert(mo.size() == 0);115 assert(std::distance(mo.begin(), mo.end()) == 0);116 }117 118 return 0;119}120