xref: /aosp_15_r20/external/pigweed/pw_containers/to_array_test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker // Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker 
15*61c4878aSAndroid Build Coastguard Worker #include "pw_containers/to_array.h"
16*61c4878aSAndroid Build Coastguard Worker 
17*61c4878aSAndroid Build Coastguard Worker #include <cstring>
18*61c4878aSAndroid Build Coastguard Worker 
19*61c4878aSAndroid Build Coastguard Worker #include "pw_unit_test/framework.h"
20*61c4878aSAndroid Build Coastguard Worker 
21*61c4878aSAndroid Build Coastguard Worker namespace pw {
22*61c4878aSAndroid Build Coastguard Worker namespace containers {
23*61c4878aSAndroid Build Coastguard Worker namespace {
24*61c4878aSAndroid Build Coastguard Worker 
TEST(Array,ToArray_StringLiteral)25*61c4878aSAndroid Build Coastguard Worker TEST(Array, ToArray_StringLiteral) {
26*61c4878aSAndroid Build Coastguard Worker   std::array<char, sizeof("literally!")> array = to_array("literally!");
27*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(std::strcmp(array.data(), "literally!"), 0);
28*61c4878aSAndroid Build Coastguard Worker }
29*61c4878aSAndroid Build Coastguard Worker 
TEST(Array,ToArray_Inline)30*61c4878aSAndroid Build Coastguard Worker TEST(Array, ToArray_Inline) {
31*61c4878aSAndroid Build Coastguard Worker   constexpr std::array<int, 3> kArray = to_array({1, 2, 3});
32*61c4878aSAndroid Build Coastguard Worker   static_assert(kArray.size() == 3, "Size should be 3 as initialized");
33*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(kArray[0], 1);
34*61c4878aSAndroid Build Coastguard Worker }
35*61c4878aSAndroid Build Coastguard Worker 
TEST(Array,ToArray_Array)36*61c4878aSAndroid Build Coastguard Worker TEST(Array, ToArray_Array) {
37*61c4878aSAndroid Build Coastguard Worker   char c_array[] = "array!";
38*61c4878aSAndroid Build Coastguard Worker   std::array<char, sizeof("array!")> array = to_array(c_array);
39*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(std::strcmp(array.data(), "array!"), 0);
40*61c4878aSAndroid Build Coastguard Worker }
41*61c4878aSAndroid Build Coastguard Worker 
42*61c4878aSAndroid Build Coastguard Worker struct MoveOnly {
MoveOnlypw::containers::__anondac98afa0111::MoveOnly43*61c4878aSAndroid Build Coastguard Worker   MoveOnly(char ch) : value(ch) {}
44*61c4878aSAndroid Build Coastguard Worker 
45*61c4878aSAndroid Build Coastguard Worker   MoveOnly(const MoveOnly&) = delete;
46*61c4878aSAndroid Build Coastguard Worker   MoveOnly& operator=(const MoveOnly&) = delete;
47*61c4878aSAndroid Build Coastguard Worker 
48*61c4878aSAndroid Build Coastguard Worker   MoveOnly(MoveOnly&&) = default;
49*61c4878aSAndroid Build Coastguard Worker   MoveOnly& operator=(MoveOnly&&) = default;
50*61c4878aSAndroid Build Coastguard Worker 
51*61c4878aSAndroid Build Coastguard Worker   char value;
52*61c4878aSAndroid Build Coastguard Worker };
53*61c4878aSAndroid Build Coastguard Worker 
TEST(Array,ToArray_MoveOnly)54*61c4878aSAndroid Build Coastguard Worker TEST(Array, ToArray_MoveOnly) {
55*61c4878aSAndroid Build Coastguard Worker   MoveOnly c_array[]{MoveOnly('a'), MoveOnly('b')};
56*61c4878aSAndroid Build Coastguard Worker   std::array<MoveOnly, 2> array = to_array(std::move(c_array));
57*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(array[0].value, 'a');
58*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(array[1].value, 'b');
59*61c4878aSAndroid Build Coastguard Worker }
60*61c4878aSAndroid Build Coastguard Worker 
61*61c4878aSAndroid Build Coastguard Worker }  // namespace
62*61c4878aSAndroid Build Coastguard Worker }  // namespace containers
63*61c4878aSAndroid Build Coastguard Worker }  // namespace pw
64