Skip to content

Commit

Permalink
[libcxx][test][NFC] noexcept tests for std::array
Browse files Browse the repository at this point in the history
Minor change - add tests that std::array methods (data, (c/r)begin,
(c/r)end) are noexcept

Reviewed By: ldionne, rarutyun, #libc

Differential Revision: https://reviews.llvm.org/D115717
  • Loading branch information
kboyarinov authored and rarutyun committed Dec 18, 2021
1 parent 936a67f commit ff94bd1
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
Expand Up @@ -35,6 +35,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
typedef double T;
typedef std::array<T, 3> C;
C c = {1, 2, 3.5};
ASSERT_NOEXCEPT(c.data());
T* p = c.data();
assert(p[0] == 1);
assert(p[1] == 2);
Expand All @@ -44,13 +45,15 @@ TEST_CONSTEXPR_CXX17 bool tests()
typedef double T;
typedef std::array<T, 0> C;
C c = {};
ASSERT_NOEXCEPT(c.data());
T* p = c.data();
(void)p;
}
{
typedef double T;
typedef std::array<const T, 0> C;
C c = {{}};
ASSERT_NOEXCEPT(c.data());
const T* p = c.data();
(void)p;
static_assert((std::is_same<decltype(c.data()), const T*>::value), "");
Expand All @@ -59,6 +62,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
typedef NoDefault T;
typedef std::array<T, 0> C;
C c = {};
ASSERT_NOEXCEPT(c.data());
T* p = c.data();
(void)p;
}
Expand Down
Expand Up @@ -35,6 +35,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
typedef double T;
typedef std::array<T, 3> C;
const C c = {1, 2, 3.5};
ASSERT_NOEXCEPT(c.data());
const T* p = c.data();
assert(p[0] == 1);
assert(p[1] == 2);
Expand All @@ -44,13 +45,15 @@ TEST_CONSTEXPR_CXX17 bool tests()
typedef double T;
typedef std::array<T, 0> C;
const C c = {};
ASSERT_NOEXCEPT(c.data());
const T* p = c.data();
(void)p;
}
{
typedef NoDefault T;
typedef std::array<T, 0> C;
const C c = {};
ASSERT_NOEXCEPT(c.data());
const T* p = c.data();
(void)p;
}
Expand Down
26 changes: 26 additions & 0 deletions libcxx/test/std/containers/sequences/array/iterators.pass.cpp
Expand Up @@ -33,18 +33,38 @@ struct NoDefault {
TEST_CONSTEXPR NoDefault(int) { }
};

template <class T>
TEST_CONSTEXPR_CXX17 void check_noexcept(T& c) {
ASSERT_NOEXCEPT(c.begin());
ASSERT_NOEXCEPT(c.end());
ASSERT_NOEXCEPT(c.cbegin());
ASSERT_NOEXCEPT(c.cend());
ASSERT_NOEXCEPT(c.rbegin());
ASSERT_NOEXCEPT(c.rend());
ASSERT_NOEXCEPT(c.crbegin());
ASSERT_NOEXCEPT(c.crend());

const T& cc = c; (void)cc;
ASSERT_NOEXCEPT(cc.begin());
ASSERT_NOEXCEPT(cc.end());
ASSERT_NOEXCEPT(cc.rbegin());
ASSERT_NOEXCEPT(cc.rend());
}

TEST_CONSTEXPR_CXX17 bool tests()
{
{
typedef std::array<int, 5> C;
C array = {};
check_noexcept(array);
typename C::iterator i = array.begin();
typename C::const_iterator j = array.cbegin();
assert(i == j);
}
{
typedef std::array<int, 0> C;
C array = {};
check_noexcept(array);
typename C::iterator i = array.begin();
typename C::const_iterator j = array.cbegin();
assert(i == j);
Expand All @@ -53,6 +73,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
{
typedef std::array<int, 0> C;
C array = {};
check_noexcept(array);
typename C::iterator i = array.begin();
typename C::const_iterator j = array.cbegin();
assert(i == array.end());
Expand All @@ -61,6 +82,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
{
typedef std::array<int, 1> C;
C array = {1};
check_noexcept(array);
typename C::iterator i = array.begin();
assert(*i == 1);
assert(&*i == array.data());
Expand All @@ -70,6 +92,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
{
typedef std::array<int, 2> C;
C array = {1, 2};
check_noexcept(array);
typename C::iterator i = array.begin();
assert(*i == 1);
assert(&*i == array.data());
Expand All @@ -80,6 +103,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
{
typedef std::array<double, 3> C;
C array = {1, 2, 3.5};
check_noexcept(array);
typename C::iterator i = array.begin();
assert(*i == 1);
assert(&*i == array.data());
Expand Down Expand Up @@ -110,6 +134,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
assert(!(ii1 != cii));

C c = {};
check_noexcept(c);
assert(c.begin() == std::begin(c));
assert(c.cbegin() == std::cbegin(c));
assert(c.rbegin() == std::rbegin(c));
Expand Down Expand Up @@ -150,6 +175,7 @@ TEST_CONSTEXPR_CXX17 bool tests()
assert(ii1 - cii == 0);

C c = {};
check_noexcept(c);
assert(c.begin() == std::begin(c));
assert(c.cbegin() == std::cbegin(c));
assert(c.rbegin() == std::rbegin(c));
Expand Down

0 comments on commit ff94bd1

Please sign in to comment.