Louis Dionne 2908eb20ba [libc++] Split off debug tests that were missed by ce1365f8f7e into test/libcxx
Also, some tests had multiple death tests in them, so split them into
separate tests instead. The second death test would obviously never
get run, because the first one would kill the program before.
2020-10-14 12:02:37 -04:00

52 lines
1.3 KiB
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <string>
// const charT& back() const;
// charT& back();
#include <string>
#include <cassert>
#include "test_macros.h"
#include "min_allocator.h"
template <class S>
void
test(S s)
{
const S& cs = s;
ASSERT_SAME_TYPE(decltype( s.back()), typename S::reference);
ASSERT_SAME_TYPE(decltype(cs.back()), typename S::const_reference);
LIBCPP_ASSERT_NOEXCEPT( s.back());
LIBCPP_ASSERT_NOEXCEPT( cs.back());
assert(&cs.back() == &cs[cs.size()-1]);
assert(&s.back() == &s[cs.size()-1]);
s.back() = typename S::value_type('z');
assert(s.back() == typename S::value_type('z'));
}
int main(int, char**)
{
{
typedef std::string S;
test(S("1"));
test(S("1234567890123456789012345678901234567890"));
}
#if TEST_STD_VER >= 11
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test(S("1"));
test(S("1234567890123456789012345678901234567890"));
}
#endif
return 0;
}