1 /*
2 * Copyright (C) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://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,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <memory>
18
19 #include "functionalext.h"
20 #include "a.h"
21 #include "b.h"
22
ApiTests_ClassAFlagsAPI()23 static void ApiTests_ClassAFlagsAPI() {
24 int initA = 0b01;
25 auto sp_a = std::make_unique<liba::ClassA>(initA);
26 EXPECT_EQ(__func__, sp_a->Value(), 0b01);
27 sp_a->SetFlag(1);
28 auto ret = sp_a->Value();
29 sp_a.reset();
30 EXPECT_EQ(__func__, ret, 0b11);
31 }
32
ApiTests_ClassBFlagsAPI()33 static void ApiTests_ClassBFlagsAPI() {
34 int initB = 0b10;
35 auto sp_b = std::make_unique<libb::ClassB>(initB);
36 EXPECT_EQ(__func__, sp_b->Value(), 0b10);
37 sp_b->SetFlag(0);
38 auto ret = sp_b->Value();
39 EXPECT_EQ(__func__, ret, 0b11);
40 }
41
CtorTests_TestACtors()42 static void CtorTests_TestACtors() {
43 const auto& so_a_data = liba::ClassA::Instance();
44 so_a_data.Log("CtorTests::TestACtors");
45 EXPECT_TRUE(__func__, so_a_data.HasFlag(liba::INIT_0));
46 EXPECT_TRUE(__func__, so_a_data.HasFlag(liba::INIT_1));
47 EXPECT_FALSE(__func__, so_a_data.HasFlag(liba::INIT_2));
48 EXPECT_FALSE(__func__, so_a_data.HasFlag(liba::INIT_3));
49 EXPECT_FALSE(__func__, so_a_data.HasFlag(liba::FINI_0));
50 EXPECT_FALSE(__func__, so_a_data.HasFlag(liba::FINI_1));
51 EXPECT_FALSE(__func__, so_a_data.HasFlag(liba::FINI_2));
52 EXPECT_FALSE(__func__, so_a_data.HasFlag(liba::FINI_3));
53 }
54
CtorTests_TestBCtors()55 static void CtorTests_TestBCtors() {
56 const auto& so_b_data = libb::ClassB::Instance();
57 so_b_data.Log("CtorTests::TestBCtors");
58 EXPECT_TRUE(__func__, so_b_data.HasFlag(liba::INIT_0));
59 EXPECT_TRUE(__func__, so_b_data.HasFlag(liba::INIT_1));
60 EXPECT_TRUE(__func__, so_b_data.HasFlag(liba::INIT_2));
61 EXPECT_FALSE(__func__, so_b_data.HasFlag(liba::INIT_3));
62 EXPECT_FALSE(__func__, so_b_data.HasFlag(liba::FINI_0));
63 EXPECT_FALSE(__func__, so_b_data.HasFlag(liba::FINI_1));
64 EXPECT_FALSE(__func__, so_b_data.HasFlag(liba::FINI_2));
65 EXPECT_FALSE(__func__, so_b_data.HasFlag(liba::FINI_3));
66 }
67
CtorTests_TestAExternStaticInit()68 static void CtorTests_TestAExternStaticInit() {
69 EXPECT_EQ(__func__, liba::class_a_instance_0.Value(), 42+0);
70 EXPECT_EQ(__func__, liba::class_a_instance_1.Value(), 42+1);
71 }
72
CtorTests_TestBExternStaticInit()73 static void CtorTests_TestBExternStaticInit() {
74 EXPECT_EQ(__func__, libb::class_b_instance_0.Value(), 42+0);
75 EXPECT_EQ(__func__, libb::class_b_instance_1.Value(), 42+1);
76 EXPECT_EQ(__func__, libb::class_b_instance_2.Value(), 42+2);
77 }
78
main(int argc,char ** argv)79 int main(int argc, char **argv) {
80 ApiTests_ClassAFlagsAPI();
81 ApiTests_ClassBFlagsAPI();
82 CtorTests_TestACtors();
83 CtorTests_TestBCtors();
84 CtorTests_TestAExternStaticInit();
85 CtorTests_TestBExternStaticInit();
86 return t_status;
87 }
88