• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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