97 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// template <class P>16// iterator insert(const_iterator position, P&& p);17 18#include <map>19#include <cassert>20 21#include "MoveOnly.h"22#include "min_allocator.h"23#include "test_macros.h"24 25template <class Container, class Pair>26void do_insert_iter_rv_test() {27 typedef Container M;28 typedef Pair P;29 typedef typename M::iterator R;30 M m;31 R r = m.insert(m.end(), P(2, 2));32 assert(r == m.begin());33 assert(m.size() == 1);34 assert(r->first == 2);35 assert(r->second == 2);36 37 r = m.insert(m.end(), P(1, 1));38 assert(r == m.begin());39 assert(m.size() == 2);40 assert(r->first == 1);41 assert(r->second == 1);42 43 r = m.insert(m.end(), P(3, 3));44 assert(r == std::prev(m.end()));45 assert(m.size() == 3);46 assert(r->first == 3);47 assert(r->second == 3);48 49 r = m.insert(m.end(), P(3, 4));50 assert(r == std::prev(m.end()));51 assert(m.size() == 3);52 assert(r->first == 3);53 assert(r->second == 3);54}55int main(int, char**) {56 do_insert_iter_rv_test<std::map<int, MoveOnly>, std::pair<int, MoveOnly>>();57 do_insert_iter_rv_test<std::map<int, MoveOnly>, std::pair<const int, MoveOnly>>();58 59 {60 typedef std::map<int, MoveOnly, std::less<int>, min_allocator<std::pair<const int, MoveOnly>>> M;61 typedef std::pair<int, MoveOnly> P;62 typedef std::pair<const int, MoveOnly> CP;63 do_insert_iter_rv_test<M, P>();64 do_insert_iter_rv_test<M, CP>();65 }66 {67 typedef std::map<int, MoveOnly> M;68 typedef M::iterator R;69 M m;70 R r = m.insert(m.end(), {2, MoveOnly(2)});71 assert(r == m.begin());72 assert(m.size() == 1);73 assert(r->first == 2);74 assert(r->second == 2);75 76 r = m.insert(m.end(), {1, MoveOnly(1)});77 assert(r == m.begin());78 assert(m.size() == 2);79 assert(r->first == 1);80 assert(r->second == 1);81 82 r = m.insert(m.end(), {3, MoveOnly(3)});83 assert(r == std::prev(m.end()));84 assert(m.size() == 3);85 assert(r->first == 3);86 assert(r->second == 3);87 88 r = m.insert(m.end(), {3, MoveOnly(3)});89 assert(r == std::prev(m.end()));90 assert(m.size() == 3);91 assert(r->first == 3);92 assert(r->second == 3);93 }94 95 return 0;96}97