xref: /llvm-project/libc/test/src/__support/CPP/array_test.cpp (revision c63a291c64852a086cb447c7078e5312aac1a05c)
1*c63a291cSNick Desaulniers //===-- Unittests for Array -----------------------------------------------===//
2*c63a291cSNick Desaulniers //
3*c63a291cSNick Desaulniers // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*c63a291cSNick Desaulniers // See https://llvm.org/LICENSE.txt for license information.
5*c63a291cSNick Desaulniers // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*c63a291cSNick Desaulniers //
7*c63a291cSNick Desaulniers //===----------------------------------------------------------------------===//
8*c63a291cSNick Desaulniers 
9*c63a291cSNick Desaulniers #include "src/__support/CPP/array.h"
10*c63a291cSNick Desaulniers #include "test/UnitTest/Test.h"
11*c63a291cSNick Desaulniers 
12*c63a291cSNick Desaulniers using LIBC_NAMESPACE::cpp::array;
13*c63a291cSNick Desaulniers 
TEST(LlvmLibcArrayTest,Basic)14*c63a291cSNick Desaulniers TEST(LlvmLibcArrayTest, Basic) {
15*c63a291cSNick Desaulniers   array<int, 3> a = {0, 1, 2};
16*c63a291cSNick Desaulniers 
17*c63a291cSNick Desaulniers   ASSERT_EQ(a.data(), &a.front());
18*c63a291cSNick Desaulniers   ASSERT_EQ(a.front(), 0);
19*c63a291cSNick Desaulniers   ASSERT_EQ(a.back(), 2);
20*c63a291cSNick Desaulniers   ASSERT_EQ(a.size(), size_t{3});
21*c63a291cSNick Desaulniers   ASSERT_EQ(a[1], 1);
22*c63a291cSNick Desaulniers   ASSERT_FALSE(a.empty());
23*c63a291cSNick Desaulniers   ASSERT_NE(a.begin(), a.end());
24*c63a291cSNick Desaulniers   ASSERT_EQ(*a.begin(), a.front());
25*c63a291cSNick Desaulniers 
26*c63a291cSNick Desaulniers   auto it = a.rbegin();
27*c63a291cSNick Desaulniers   ASSERT_EQ(*it, 2);
28*c63a291cSNick Desaulniers   ASSERT_EQ(*(++it), 1);
29*c63a291cSNick Desaulniers   ASSERT_EQ(*(++it), 0);
30*c63a291cSNick Desaulniers 
31*c63a291cSNick Desaulniers   for (int &x : a)
32*c63a291cSNick Desaulniers     ASSERT_GE(x, 0);
33*c63a291cSNick Desaulniers }
34*c63a291cSNick Desaulniers 
35*c63a291cSNick Desaulniers // Test const_iterator and const variant methods.
TEST(LlvmLibcArrayTest,Const)36*c63a291cSNick Desaulniers TEST(LlvmLibcArrayTest, Const) {
37*c63a291cSNick Desaulniers   const array<int, 3> z = {3, 4, 5};
38*c63a291cSNick Desaulniers 
39*c63a291cSNick Desaulniers   ASSERT_EQ(3, z.front());
40*c63a291cSNick Desaulniers   ASSERT_EQ(4, z[1]);
41*c63a291cSNick Desaulniers   ASSERT_EQ(5, z.back());
42*c63a291cSNick Desaulniers   ASSERT_EQ(3, *z.data());
43*c63a291cSNick Desaulniers 
44*c63a291cSNick Desaulniers   // begin, cbegin, end, cend
45*c63a291cSNick Desaulniers   array<int, 3>::const_iterator it2 = z.begin();
46*c63a291cSNick Desaulniers   ASSERT_EQ(*it2, z.front());
47*c63a291cSNick Desaulniers   it2 = z.cbegin();
48*c63a291cSNick Desaulniers   ASSERT_EQ(*it2, z.front());
49*c63a291cSNick Desaulniers   it2 = z.end();
50*c63a291cSNick Desaulniers   ASSERT_NE(it2, z.begin());
51*c63a291cSNick Desaulniers   it2 = z.cend();
52*c63a291cSNick Desaulniers   ASSERT_NE(it2, z.begin());
53*c63a291cSNick Desaulniers 
54*c63a291cSNick Desaulniers   // rbegin, crbegin, rend, crend
55*c63a291cSNick Desaulniers   array<int, 3>::const_reverse_iterator it = z.rbegin();
56*c63a291cSNick Desaulniers   ASSERT_EQ(*it, z.back());
57*c63a291cSNick Desaulniers   it = z.crbegin();
58*c63a291cSNick Desaulniers   ASSERT_EQ(*it, z.back());
59*c63a291cSNick Desaulniers   it = z.rend();
60*c63a291cSNick Desaulniers   ASSERT_EQ(*--it, z.front());
61*c63a291cSNick Desaulniers   it = z.crend();
62*c63a291cSNick Desaulniers   ASSERT_EQ(*--it, z.front());
63*c63a291cSNick Desaulniers 
64*c63a291cSNick Desaulniers   for (const int &x : z)
65*c63a291cSNick Desaulniers     ASSERT_GE(x, 0);
66*c63a291cSNick Desaulniers }
67