xref: /aosp_15_r20/external/pigweed/pw_polyfill/test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1 // Copyright 2020 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14 
15 #include "pw_polyfill/language_feature_macros.h"
16 #include "pw_polyfill/standard.h"
17 #include "pw_unit_test/framework.h"
18 
19 namespace pw {
20 namespace polyfill {
21 namespace {
22 
TEST(CppStandardMacro,MacroIsTrueUpToCpp14SincePigweedRequiresCpp14)23 TEST(CppStandardMacro, MacroIsTrueUpToCpp14SincePigweedRequiresCpp14) {
24   static_assert(PW_CXX_STANDARD_IS_SUPPORTED(98),
25                 "Macro must be true since Pigweed requires support for C++98");
26   static_assert(PW_CXX_STANDARD_IS_SUPPORTED(11),
27                 "Macro must be true since Pigweed requires support for C++11");
28   static_assert(PW_CXX_STANDARD_IS_SUPPORTED(14),
29                 "Macro must be true since Pigweed requires support for C++14");
30 }
31 
TEST(CppStandardMacro,MacroIsTrueIfSpecifiedStandardIsSupported)32 TEST(CppStandardMacro, MacroIsTrueIfSpecifiedStandardIsSupported) {
33   static_assert(PW_CXX_STANDARD_IS_SUPPORTED(17) == (__cplusplus >= 201703L),
34                 "PW_CXX_STANDARD_IS_SUPPORTED() should match __cplusplus");
35   static_assert(PW_CXX_STANDARD_IS_SUPPORTED(20) == (__cplusplus >= 202002L),
36                 "PW_CXX_STANDARD_IS_SUPPORTED() should match __cplusplus");
37   static_assert(PW_CXX_STANDARD_IS_SUPPORTED(23) == (__cplusplus >= 202302L),
38                 "PW_CXX_STANDARD_IS_SUPPORTED() should match __cplusplus");
39 }
40 
TEST(CStandardMacro,MacroIsFalseSinceThisIsACppFile)41 TEST(CStandardMacro, MacroIsFalseSinceThisIsACppFile) {
42   static_assert(!PW_C_STANDARD_IS_SUPPORTED(89),
43                 "PW_C_STANDARD_IS_SUPPORTED() must always be false in C++");
44   static_assert(!PW_C_STANDARD_IS_SUPPORTED(99),
45                 "PW_C_STANDARD_IS_SUPPORTED() must always be false in C++");
46   static_assert(!PW_C_STANDARD_IS_SUPPORTED(11),
47                 "PW_C_STANDARD_IS_SUPPORTED() must always be false in C++");
48   static_assert(!PW_C_STANDARD_IS_SUPPORTED(17),
49                 "PW_C_STANDARD_IS_SUPPORTED() must always be false in C++");
50   static_assert(!PW_C_STANDARD_IS_SUPPORTED(23),
51                 "PW_C_STANDARD_IS_SUPPORTED() must always be false in C++");
52 }
53 
54 // Check that consteval is at least equivalent to constexpr.
ConstevalFunction()55 PW_CONSTEVAL int ConstevalFunction() { return 123; }
56 static_assert(ConstevalFunction() == 123,
57               "Function should work in static_assert");
58 
59 PW_CONSTINIT bool mutable_value = true;
60 
TEST(Constinit,ValueIsMutable)61 TEST(Constinit, ValueIsMutable) {
62   ASSERT_TRUE(mutable_value);
63   mutable_value = false;
64   ASSERT_FALSE(mutable_value);
65   mutable_value = true;
66 }
67 
68 }  // namespace
69 }  // namespace polyfill
70 }  // namespace pw
71