blob: c040ca0f197f0ec9743f44bfd8a85472bdf73fb9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/* ========================================
Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
======================================== */
#pragma once
#include <KernelTest.fwrk/headers/SourceLocation.h>
/// ================================================================================
/// @brief Kernel Test Framework main header.
/// @file TestCase.h
/// ================================================================================
#define KT_RUN_TEST(OBJECT) {KTTestCase##OBJECT{}.Run();}
#define KT_MUST_PASS(MSG, LEFT_COND, RIGHT_COND) \
if (LEFT_COND != RIGHT_COND) { \
(Kernel::Void)(Kernel::kout << "[KERNEL-TEST] BREAK: LEFT_COND: " << #LEFT_COND \
<< " RIGHT_COND: " << #RIGHT_COND << Kernel::kendl); \
(Kernel::Void)(Kernel::kout << "[KERNEL-TEST] BREAK: MSG: " << MSG << Kernel::kendl); \
MUST_PASS(NO); \
} else { \
(Kernel::Void)(Kernel::kout << "[KERNEL-TEST] PASS: MSG: " << MSG << Kernel::kendl); \
}
#define KT_DECL_TEST(NAME, FN) \
class KTTestCase##NAME final { \
public: \
explicit KTTestCase##NAME() = default; \
~KTTestCase##NAME() = default; \
LIBSYS_COPY_DELETE(KTTestCase##NAME); \
Kernel::Void Run(); \
const Kernel::Char* ToString(); \
}; \
inline Kernel::Void KTTestCase##NAME::Run() { \
auto ret = FN() == YES; \
if (!ret) { \
Kernel::kout << "[KERNEL-TEST] TEST FAILED!" << Kernel::kendl; \
MUST_PASS(ret); \
} \
} \
inline const Kernel::Char* KTTestCase##NAME::ToString() { \
return #FN; \
}
KT_DECL_TEST(AlwaysBreak, []() -> bool {
KT_MUST_PASS("AlwaysBreak", YES, NO);
return NO;
});
KT_DECL_TEST(AlwaysPass, []() -> bool {
KT_MUST_PASS("AlwaysPass", YES, YES);
return YES;
});
|