brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 9b29a24 Raw
108 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// <vector>10// vector<bool>11 12// void swap(vector& x);13 14#include <vector>15#include <cassert>16#include "test_macros.h"17#include "test_allocator.h"18#include "min_allocator.h"19 20TEST_CONSTEXPR_CXX20 bool tests() {21  {22    std::vector<bool> v1(100);23    std::vector<bool> v2(200);24    v1.swap(v2);25    assert(v1.size() == 200);26    assert(v1.capacity() >= 200);27    assert(v2.size() == 100);28    assert(v2.capacity() >= 100);29  }30  {31    typedef test_allocator<bool> A;32    std::vector<bool, A> v1(100, true, A(1, 1));33    std::vector<bool, A> v2(200, false, A(1, 2));34    swap(v1, v2);35    assert(v1.size() == 200);36    assert(v1.capacity() >= 200);37    assert(v2.size() == 100);38    assert(v2.capacity() >= 100);39    assert(v1.get_allocator().get_id() == 1);40    assert(v2.get_allocator().get_id() == 2);41  }42  {43    typedef other_allocator<bool> A;44    std::vector<bool, A> v1(100, true, A(1));45    std::vector<bool, A> v2(200, false, A(2));46    swap(v1, v2);47    assert(v1.size() == 200);48    assert(v1.capacity() >= 200);49    assert(v2.size() == 100);50    assert(v2.capacity() >= 100);51    assert(v1.get_allocator() == A(2));52    assert(v2.get_allocator() == A(1));53  }54  {55    std::vector<bool> v(2);56    std::vector<bool>::reference r1 = v[0];57    std::vector<bool>::reference r2 = v[1];58    r1                              = true;59    using std::swap;60    swap(r1, r2);61    assert(v[0] == false);62    assert(v[1] == true);63  }64#if TEST_STD_VER >= 1165  {66    std::vector<bool, min_allocator<bool>> v1(100);67    std::vector<bool, min_allocator<bool>> v2(200);68    v1.swap(v2);69    assert(v1.size() == 200);70    assert(v1.capacity() >= 200);71    assert(v2.size() == 100);72    assert(v2.capacity() >= 100);73  }74  {75    typedef min_allocator<bool> A;76    std::vector<bool, A> v1(100, true, A());77    std::vector<bool, A> v2(200, false, A());78    swap(v1, v2);79    assert(v1.size() == 200);80    assert(v1.capacity() >= 200);81    assert(v2.size() == 100);82    assert(v2.capacity() >= 100);83    assert(v1.get_allocator() == A());84    assert(v2.get_allocator() == A());85  }86  {87    std::vector<bool, min_allocator<bool>> v(2);88    std::vector<bool, min_allocator<bool>>::reference r1 = v[0];89    std::vector<bool, min_allocator<bool>>::reference r2 = v[1];90    r1                                                   = true;91    using std::swap;92    swap(r1, r2);93    assert(v[0] == false);94    assert(v[1] == true);95  }96#endif97 98  return true;99}100 101int main(int, char**) {102  tests();103#if TEST_STD_VER > 17104  static_assert(tests());105#endif106  return 0;107}108