// Copyright 2021 The Pigweed Authors // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. #include "pw_containers/to_array.h" #include "gtest/gtest.h" namespace pw::containers { namespace { TEST(Array, ToArray_StringLiteral) { std::array array = to_array("literally!"); EXPECT_EQ(std::strcmp(array.data(), "literally!"), 0); } TEST(Array, ToArray_Inline) { constexpr std::array kArray = to_array({1, 2, 3}); static_assert(kArray.size() == 3); EXPECT_EQ(kArray[0], 1); } TEST(Array, ToArray_Array) { char c_array[] = "array!"; std::array array = to_array(c_array); EXPECT_EQ(std::strcmp(array.data(), "array!"), 0); } struct MoveOnly { MoveOnly(char ch) : value(ch) {} MoveOnly(const MoveOnly&) = delete; MoveOnly& operator=(const MoveOnly&) = delete; MoveOnly(MoveOnly&&) = default; MoveOnly& operator=(MoveOnly&&) = default; char value; }; TEST(Array, ToArray_MoveOnly) { MoveOnly c_array[]{MoveOnly('a'), MoveOnly('b')}; std::array array = to_array(std::move(c_array)); EXPECT_EQ(array[0].value, 'a'); EXPECT_EQ(array[1].value, 'b'); } } // namespace } // namespace pw::containers