1
+ package test
2
+
3
+ import " core:fmt"
4
+
5
+ // @note(zh): Unit testing for the Odin programming language
6
+ // Contains procs for checking of equality / non-equaility
7
+ // as well as checking bools and checking for nil / non-nil.
8
+ // Supported types for equal / not equal:
9
+ // string
10
+ // cstring
11
+ // int
12
+ // uint
13
+ // rune
14
+ // u8
15
+ // u16
16
+ // u32
17
+ // u64
18
+ // u128
19
+ // i8
20
+ // i16
21
+ // i32
22
+ // i64
23
+ // i128
24
+ // f32
25
+ // f64
26
+ // u16le
27
+ // u32le
28
+ // u64le
29
+ // u128le
30
+ // i16le
31
+ // i32le
32
+ // i64le
33
+ // i128le
34
+ // u16be
35
+ // u32be
36
+ // u64be
37
+ // u128be
38
+ // i16be
39
+ // i32be
40
+ // i64be
41
+ // i128be
42
+ // complex64
43
+ // complex128
44
+ // bool
45
+ // Useage example can be found in /example
46
+
47
+ // /////////////////////////////////////////////
48
+ // Equal
49
+ // /////////////////////////////////////////////
50
+ is_equal :: proc {
51
+ test_equal_string, test_equal_cstring,
52
+ test_equal_int, test_equal_uint, test_equal_rune,
53
+ test_equal_u8, test_equal_u16, test_equal_u32, test_equal_u64, test_equal_u128,
54
+ test_equal_i8, test_equal_i16, test_equal_i32, test_equal_i64, test_equal_i128,
55
+ test_equal_f32, test_equal_f64,
56
+ test_equal_u16le, test_equal_u32le, test_equal_u64le, test_equal_u128le,
57
+ test_equal_i16le, test_equal_i32le, test_equal_i64le, test_equal_i128le,
58
+ test_equal_u16be, test_equal_u32be, test_equal_u64be, test_equal_u128be,
59
+ test_equal_i16be, test_equal_i32be, test_equal_i64be, test_equal_i128be,
60
+ test_equal_complex64, test_equal_complex128,
61
+ test_equal_bool,
62
+ };
63
+
64
+ @private test_equal_string :: inline proc (expected, actual: string , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
65
+ @private test_equal_cstring :: inline proc (expected, actual: cstring , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
66
+
67
+ @private test_equal_int :: inline proc (expected, actual: int , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
68
+ @private test_equal_uint :: inline proc (expected, actual: uint , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
69
+ @private test_equal_rune :: inline proc (expected, actual: rune , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
70
+
71
+ @private test_equal_u8 :: inline proc (expected, actual: u8 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
72
+ @private test_equal_u16 :: inline proc (expected, actual: u16 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
73
+ @private test_equal_u32 :: inline proc (expected, actual: u32 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
74
+ @private test_equal_u64 :: inline proc (expected, actual: u64 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
75
+ @private test_equal_u128 :: inline proc (expected, actual: u128 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
76
+
77
+ @private test_equal_i8 :: inline proc (expected, actual: i8 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
78
+ @private test_equal_i16 :: inline proc (expected, actual: i16 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
79
+ @private test_equal_i32 :: inline proc (expected, actual: i32 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
80
+ @private test_equal_i64 :: inline proc (expected, actual: i64 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
81
+ @private test_equal_i128 :: inline proc (expected, actual: i128 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
82
+
83
+ @private test_equal_f32 :: inline proc (expected, actual: f32 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
84
+ @private test_equal_f64 :: inline proc (expected, actual: f64 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
85
+
86
+ @private test_equal_u16le :: inline proc (expected, actual: u16le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
87
+ @private test_equal_u32le :: inline proc (expected, actual: u32le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
88
+ @private test_equal_u64le :: inline proc (expected, actual: u64le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
89
+ @private test_equal_u128le :: inline proc (expected, actual: u128le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
90
+
91
+ @private test_equal_i16le :: inline proc (expected, actual: i16le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
92
+ @private test_equal_i32le :: inline proc (expected, actual: i32le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
93
+ @private test_equal_i64le :: inline proc (expected, actual: i64le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
94
+ @private test_equal_i128le :: inline proc (expected, actual: i128le , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
95
+
96
+ @private test_equal_u16be :: inline proc (expected, actual: u16be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
97
+ @private test_equal_u32be :: inline proc (expected, actual: u32be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
98
+ @private test_equal_u64be :: inline proc (expected, actual: u64be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
99
+ @private test_equal_u128be :: inline proc (expected, actual: u128be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
100
+
101
+ @private test_equal_i16be :: inline proc (expected, actual: i16be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
102
+ @private test_equal_i32be :: inline proc (expected, actual: i32be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
103
+ @private test_equal_i64be :: inline proc (expected, actual: i64be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
104
+ @private test_equal_i128be :: inline proc (expected, actual: i128be , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
105
+
106
+ @private test_equal_complex64 :: inline proc (expected, actual: complex64 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
107
+ @private test_equal_complex128 :: inline proc (expected, actual: complex128 , loc := #caller_location ) do equal (expected == actual, expected, actual, loc);
108
+
109
+ @private test_equal_bool :: inline proc (expected, actual: bool , loc := #caller_location ) do equal (expected != actual, expected, actual, loc);
110
+
111
+ // /////////////////////////////////////////////
112
+ // Not equal
113
+ // /////////////////////////////////////////////
114
+ is_not_equal :: proc {
115
+ test_not_equal_string, test_not_equal_cstring,
116
+ test_not_equal_int, test_not_equal_uint, test_not_equal_rune,
117
+ test_not_equal_u8, test_not_equal_u16, test_not_equal_u32, test_not_equal_u64, test_not_equal_u128,
118
+ test_not_equal_i8, test_not_equal_i16, test_not_equal_i32, test_not_equal_i64, test_not_equal_i128,
119
+ test_not_equal_f32, test_not_equal_f64,
120
+ test_not_equal_u16le, test_not_equal_u32le, test_not_equal_u64le, test_not_equal_u128le,
121
+ test_not_equal_i16le, test_not_equal_i32le, test_not_equal_i64le, test_not_equal_i128le,
122
+ test_not_equal_u16be, test_not_equal_u32be, test_not_equal_u64be, test_not_equal_u128be,
123
+ test_not_equal_i16be, test_not_equal_i32be, test_not_equal_i64be, test_not_equal_i128be,
124
+ test_not_equal_complex64, test_not_equal_complex128,
125
+ test_not_equal_bool,
126
+ };
127
+
128
+ @private test_not_equal_string :: inline proc (expected, actual: string , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
129
+ @private test_not_equal_cstring :: inline proc (expected, actual: cstring , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
130
+
131
+ @private test_not_equal_int :: inline proc (expected, actual: int , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
132
+ @private test_not_equal_uint :: inline proc (expected, actual: uint , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
133
+ @private test_not_equal_rune :: inline proc (expected, actual: rune , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
134
+
135
+ @private test_not_equal_u8 :: inline proc (expected, actual: u8 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
136
+ @private test_not_equal_u16 :: inline proc (expected, actual: u16 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
137
+ @private test_not_equal_u32 :: inline proc (expected, actual: u32 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
138
+ @private test_not_equal_u64 :: inline proc (expected, actual: u64 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
139
+ @private test_not_equal_u128 :: inline proc (expected, actual: u128 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
140
+
141
+ @private test_not_equal_i8 :: inline proc (expected, actual: i8 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
142
+ @private test_not_equal_i16 :: inline proc (expected, actual: i16 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
143
+ @private test_not_equal_i32 :: inline proc (expected, actual: i32 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
144
+ @private test_not_equal_i64 :: inline proc (expected, actual: i64 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
145
+ @private test_not_equal_i128 :: inline proc (expected, actual: i128 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
146
+
147
+ @private test_not_equal_f32 :: inline proc (expected, actual: f32 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
148
+ @private test_not_equal_f64 :: inline proc (expected, actual: f64 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
149
+
150
+ @private test_not_equal_u16le :: inline proc (expected, actual: u16le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
151
+ @private test_not_equal_u32le :: inline proc (expected, actual: u32le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
152
+ @private test_not_equal_u64le :: inline proc (expected, actual: u64le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
153
+ @private test_not_equal_u128le :: inline proc (expected, actual: u128le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
154
+
155
+ @private test_not_equal_i16le :: inline proc (expected, actual: i16le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
156
+ @private test_not_equal_i32le :: inline proc (expected, actual: i32le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
157
+ @private test_not_equal_i64le :: inline proc (expected, actual: i64le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
158
+ @private test_not_equal_i128le :: inline proc (expected, actual: i128le , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
159
+
160
+ @private test_not_equal_u16be :: inline proc (expected, actual: u16be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
161
+ @private test_not_equal_u32be :: inline proc (expected, actual: u32be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
162
+ @private test_not_equal_u64be :: inline proc (expected, actual: u64be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
163
+ @private test_not_equal_u128be :: inline proc (expected, actual: u128be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
164
+
165
+ @private test_not_equal_i16be :: inline proc (expected, actual: i16be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
166
+ @private test_not_equal_i32be :: inline proc (expected, actual: i32be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
167
+ @private test_not_equal_i64be :: inline proc (expected, actual: i64be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
168
+ @private test_not_equal_i128be :: inline proc (expected, actual: i128be , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
169
+
170
+ @private test_not_equal_complex64 :: inline proc (expected, actual: complex64 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
171
+ @private test_not_equal_complex128 :: inline proc (expected, actual: complex128 , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
172
+
173
+ @private test_not_equal_bool :: inline proc (expected, actual: bool , loc := #caller_location ) do not_equal (expected != actual, expected, actual, loc);
174
+
175
+ // /////////////////////////////////////////////
176
+ // true / false
177
+ // /////////////////////////////////////////////
178
+
179
+ is_true :: inline proc (condition: bool , loc := #caller_location ) do if !condition do fmt.printf (" %v %v:%v Expected: \" true\" Actual: \" false\"\n " , loc.file_path, loc.line, loc.column);
180
+ is_false :: inline proc (condition: bool , loc := #caller_location ) do if condition do fmt.printf (" %v %v:%v Expected: \" false\" Actual: \" true\"\n " , loc.file_path, loc.line, loc.column);
181
+
182
+ // /////////////////////////////////////////////
183
+ // nil / not-nil
184
+ // /////////////////////////////////////////////
185
+
186
+ is_nil :: inline proc (t: $T , loc := #caller_location ) do if t != nil do fmt.printf (" %v %v:%v Expected: \" nil\" Actual: \" %v\"\n " , loc.file_path, loc.line, loc.column, t);
187
+ is_not_nil :: inline proc (t: $T , loc := #caller_location ) do if t == nil do fmt.printf (" %v %v:%v Expected not: \" nil\" Actual: \" %v\"\n " , loc.file_path, loc.line, loc.column, t);
188
+
189
+ // /////////////////////////////////////////////
190
+ // Utility procs
191
+ // /////////////////////////////////////////////
192
+
193
+ @private equal :: inline proc (condition: bool , expected, actual: any ,loc := #caller_location ) {
194
+ if !condition do fmt.printf (" %v %v:%v Expected: \" %v\" Actual: \" %v\"\n " ,loc.file_path, loc.line, loc.column, expected, actual);
195
+ }
196
+
197
+
198
+ @private not_equal :: inline proc (condition: bool , expected, actual: any ,loc := #caller_location ) {
199
+ if !condition do fmt.printf (" %v %v:%v Expected not: \" %v\" Actual: \" %v\"\n " ,loc.file_path, loc.line, loc.column, expected, actual);
200
+ }
0 commit comments