SimpleKernel 1.17.0
Loading...
Searching...
No Matches
ctor_dtor_test.cpp File Reference
#include <cpu_io.h>
#include <cstdint>
#include "arch.h"
#include "basic_info.hpp"
#include "kernel.h"
#include "kstd_cstring"
#include "kstd_libcxx.h"
#include "system_test.h"
Include dependency graph for ctor_dtor_test.cpp:

Go to the source code of this file.

Classes

class  TestStaticConstructDestruct< V >
 
class  AbsClass
 
class  InsClass
 

Functions

auto ctor_dtor_test () -> bool
 

Variables

static int global_value_with_init = 42
 
static uint32_t global_u32_value_with_init {0xa1a2a3a4UL}
 
static uint64_t global_u64_value_with_init {0xb1b2b3b4b5b6b7b8ULL}
 
static uint16_t global_u16_value_with_init {0x1234}
 
static uint8_t global_u8a_value_with_init {0x42}
 
static uint8_t global_u8b_value_with_init {0x43}
 
static uint8_t global_u8c_value_with_init {0x44}
 
static uint8_t global_u8d_value_with_init {0x45}
 
static volatile bool global_bool_keep_running {true}
 
static unsigned int global_value1_with_constructor = 1
 
static unsigned int global_value2_with_constructor = 2
 
static TestStaticConstructDestruct< 0x200 > constructor_destructor_1 (global_value1_with_constructor)
 
static TestStaticConstructDestruct< 0x200 > constructor_destructor_2 (global_value2_with_constructor)
 
static TestStaticConstructDestruct< 0x100000 > constructor_destructor_3
 
static TestStaticConstructDestruct< 0x100000 > constructor_destructor_4
 
static int g_dtor_count = 0
 

Function Documentation

◆ ctor_dtor_test()

auto ctor_dtor_test ( ) -> bool

Definition at line 63 of file ctor_dtor_test.cpp.

63 {
64#ifdef __aarch64__
65 cpu_io::SetupFpu();
66#endif
67
68 klog::Info("Running C++ Runtime Tests...");
69
70 // 1. Verify Global Initialization
71 EXPECT_EQ(global_value_with_init, 42, "Global int init");
72 EXPECT_EQ(global_u32_value_with_init, 0xa1a2a3a4UL, "Global uint32 init");
73 EXPECT_EQ(global_u64_value_with_init, 0xb1b2b3b4b5b6b7b8ULL,
74 "Global uint64 init");
75 EXPECT_EQ(global_u16_value_with_init, 0x1234, "Global uint16 init");
76 EXPECT_EQ(global_u8a_value_with_init, 0x42, "Global uint8 a init");
77 EXPECT_EQ(global_u8b_value_with_init, 0x43, "Global uint8 b init");
78 EXPECT_EQ(global_u8c_value_with_init, 0x44, "Global uint8 c init");
79 EXPECT_EQ(global_u8d_value_with_init, 0x45, "Global uint8 d init");
80
81 // 2. Verify Global Constructors
82 // global_value1_with_constructor was initialized to 1
83 // constructor_destructor_1 adds 0x200
84 // constructor_destructor_4 adds 0x100000
85 // Expected: 1 | 0x200 | 0x100000 = 0x100201 (1049089)
86 unsigned int expected_v1 = 1 | 0x200 | 0x100000;
88 "Global constructor execution 1");
89
90 unsigned int expected_v2 = 2 | 0x200 | 0x100000;
92 "Global constructor execution 2");
93
94 // 3. Verify Class Member, Virtual Function, and Stack Object Destructor
95 int start_dtor = g_dtor_count;
96 {
97 auto inst_class = InsClass();
98 EXPECT_EQ(inst_class.val, 'B', "Class constructor body");
99 inst_class.Func();
100 EXPECT_EQ(inst_class.val, 'C', "Virtual function dispatch");
101 }
102 EXPECT_EQ(g_dtor_count, start_dtor + 1,
103 "Stack object destructor verification");
104
105 // 4. Verify Static Local Variable
106 static InsClass inst_class_static;
107 EXPECT_TRUE(inst_class_static.val == 'B' || inst_class_static.val == 'C',
108 "Static local object constructor/persistence");
109 inst_class_static.Func();
110 EXPECT_EQ(inst_class_static.val, 'C', "Static local object virtual func");
111
112 klog::Info("PASS: All C++ Runtime Tests passed.");
113
114 return true;
115}
void Func() override
static uint8_t global_u8d_value_with_init
static uint16_t global_u16_value_with_init
static unsigned int global_value2_with_constructor
static unsigned int global_value1_with_constructor
static uint64_t global_u64_value_with_init
static int global_value_with_init
static uint8_t global_u8b_value_with_init
static uint32_t global_u32_value_with_init
static uint8_t global_u8c_value_with_init
static uint8_t global_u8a_value_with_init
static int g_dtor_count
auto Info(etl::format_string< Args... > fmt, Args &&... args) -> void
以 INFO 级别记录日志
#define EXPECT_TRUE(cond, msg)
#define EXPECT_EQ(val1, val2, msg)
Here is the call graph for this function:

Variable Documentation

◆ constructor_destructor_1

◆ constructor_destructor_2

◆ constructor_destructor_3

TestStaticConstructDestruct<0x100000> constructor_destructor_3
static
Initial value:

Definition at line 43 of file ctor_dtor_test.cpp.

◆ constructor_destructor_4

TestStaticConstructDestruct<0x100000> constructor_destructor_4
static
Initial value:

Definition at line 45 of file ctor_dtor_test.cpp.

◆ g_dtor_count

int g_dtor_count = 0
static

Definition at line 48 of file ctor_dtor_test.cpp.

◆ global_bool_keep_running

volatile bool global_bool_keep_running {true}
static

Definition at line 34 of file ctor_dtor_test.cpp.

34{true};

◆ global_u16_value_with_init

uint16_t global_u16_value_with_init {0x1234}
static

Definition at line 29 of file ctor_dtor_test.cpp.

29{0x1234};

◆ global_u32_value_with_init

uint32_t global_u32_value_with_init {0xa1a2a3a4UL}
static

Definition at line 27 of file ctor_dtor_test.cpp.

27{0xa1a2a3a4UL};

◆ global_u64_value_with_init

uint64_t global_u64_value_with_init {0xb1b2b3b4b5b6b7b8ULL}
static

Definition at line 28 of file ctor_dtor_test.cpp.

28{0xb1b2b3b4b5b6b7b8ULL};

◆ global_u8a_value_with_init

uint8_t global_u8a_value_with_init {0x42}
static

Definition at line 30 of file ctor_dtor_test.cpp.

30{0x42};

◆ global_u8b_value_with_init

uint8_t global_u8b_value_with_init {0x43}
static

Definition at line 31 of file ctor_dtor_test.cpp.

31{0x43};

◆ global_u8c_value_with_init

uint8_t global_u8c_value_with_init {0x44}
static

Definition at line 32 of file ctor_dtor_test.cpp.

32{0x44};

◆ global_u8d_value_with_init

uint8_t global_u8d_value_with_init {0x45}
static

Definition at line 33 of file ctor_dtor_test.cpp.

33{0x45};

◆ global_value1_with_constructor

unsigned int global_value1_with_constructor = 1
static

Definition at line 36 of file ctor_dtor_test.cpp.

◆ global_value2_with_constructor

unsigned int global_value2_with_constructor = 2
static

Definition at line 37 of file ctor_dtor_test.cpp.

◆ global_value_with_init

int global_value_with_init = 42
static

Definition at line 26 of file ctor_dtor_test.cpp.