brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · bacd58c Raw
98 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// <set>12 13// class set14 15// set& operator=(set&& s);16 17#include <set>18#include <cassert>19 20#include "test_macros.h"21#include "MoveOnly.h"22#include "../../../test_compare.h"23#include "test_allocator.h"24#include "min_allocator.h"25 26int main(int, char**) {27  {28    typedef MoveOnly V;29    typedef test_less<MoveOnly> C;30    typedef test_allocator<V> A;31    typedef std::set<MoveOnly, C, A> M;32    typedef std::move_iterator<V*> I;33    V a1[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};34    M m1(I(a1), I(a1 + sizeof(a1) / sizeof(a1[0])), C(5), A(7));35    V a2[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};36    M m2(I(a2), I(a2 + sizeof(a2) / sizeof(a2[0])), C(5), A(7));37    M m3(C(3), A(7));38    m3 = std::move(m1);39    assert(m3 == m2);40    assert(m3.get_allocator() == A(7));41    assert(m3.key_comp() == C(5));42    assert(m1.empty());43  }44  {45    typedef MoveOnly V;46    typedef test_less<MoveOnly> C;47    typedef test_allocator<V> A;48    typedef std::set<MoveOnly, C, A> M;49    typedef std::move_iterator<V*> I;50    V a1[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};51    M m1(I(a1), I(a1 + sizeof(a1) / sizeof(a1[0])), C(5), A(7));52    V a2[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};53    M m2(I(a2), I(a2 + sizeof(a2) / sizeof(a2[0])), C(5), A(7));54    M m3(C(3), A(5));55    m3 = std::move(m1);56    assert(m3 == m2);57    assert(m3.get_allocator() == A(5));58    assert(m3.key_comp() == C(5));59    LIBCPP_ASSERT(m1.empty());60  }61  {62    typedef MoveOnly V;63    typedef test_less<MoveOnly> C;64    typedef other_allocator<V> A;65    typedef std::set<MoveOnly, C, A> M;66    typedef std::move_iterator<V*> I;67    V a1[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};68    M m1(I(a1), I(a1 + sizeof(a1) / sizeof(a1[0])), C(5), A(7));69    V a2[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};70    M m2(I(a2), I(a2 + sizeof(a2) / sizeof(a2[0])), C(5), A(7));71    M m3(C(3), A(5));72    m3 = std::move(m1);73    assert(m3 == m2);74    assert(m3.get_allocator() == A(7));75    assert(m3.key_comp() == C(5));76    assert(m1.empty());77  }78  {79    typedef MoveOnly V;80    typedef test_less<MoveOnly> C;81    typedef min_allocator<V> A;82    typedef std::set<MoveOnly, C, A> M;83    typedef std::move_iterator<V*> I;84    V a1[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};85    M m1(I(a1), I(a1 + sizeof(a1) / sizeof(a1[0])), C(5), A());86    V a2[] = {V(1), V(1), V(1), V(2), V(2), V(2), V(3), V(3), V(3)};87    M m2(I(a2), I(a2 + sizeof(a2) / sizeof(a2[0])), C(5), A());88    M m3(C(3), A());89    m3 = std::move(m1);90    assert(m3 == m2);91    assert(m3.get_allocator() == A());92    assert(m3.key_comp() == C(5));93    assert(m1.empty());94  }95 96  return 0;97}98