brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 87da6fd Raw
100 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++03, c++1110// <vector>11//  vector.bool12 13// template <class... Args> reference emplace_back(Args&&... args);14// return type is 'reference' in C++17; 'void' before15 16#include <vector>17#include <cassert>18#include "test_macros.h"19#include "min_allocator.h"20 21TEST_CONSTEXPR_CXX20 bool tests() {22  {23    typedef std::vector<bool> C;24    C c;25#if TEST_STD_VER > 1426    typedef C::reference Ref;27    Ref r1 = c.emplace_back();28    assert(c.size() == 1);29    assert(c.front() == false);30    r1 = true;31    assert(c.front() == true);32    r1     = false;33    Ref r2 = c.emplace_back(true);34    assert(c.size() == 2);35    assert(c.front() == false);36    assert(c.back() == true);37    r2 = false;38    assert(c.back() == false);39    r2 = true;40#else41    c.emplace_back();42    assert(c.size() == 1);43    assert(c.front() == false);44    c.emplace_back(true);45    assert(c.size() == 2);46    assert(c.front() == false);47    assert(c.back() == true);48#endif49    c.emplace_back(true);50    assert(c.size() == 3);51    assert(c.front() == false);52    assert(c[1] == true);53    assert(c.back() == true);54  }55  {56    typedef std::vector<bool, min_allocator<bool>> C;57    C c;58 59#if TEST_STD_VER > 1460    typedef C::reference Ref;61    Ref r1 = c.emplace_back();62    assert(c.size() == 1);63    assert(c.front() == false);64    r1 = true;65    assert(c.front() == true);66    r1     = false;67    Ref r2 = c.emplace_back(true);68    assert(c.size() == 2);69    assert(c.front() == false);70    assert(c.back() == true);71    r2 = false;72    assert(c.back() == false);73    r2 = true;74#else75    c.emplace_back();76    assert(c.size() == 1);77    assert(c.front() == false);78    c.emplace_back(true);79    assert(c.size() == 2);80    assert(c.front() == false);81    assert(c.back() == true);82#endif83    c.emplace_back(true);84    assert(c.size() == 3);85    assert(c.front() == false);86    assert(c[1] == true);87    assert(c.back() == true);88  }89 90  return true;91}92 93int main(int, char**) {94  tests();95#if TEST_STD_VER > 1796  static_assert(tests());97#endif98  return 0;99}100