Skip to content
This repository was archived by the owner on Oct 3, 2022. It is now read-only.

Commit 01168d8

Browse files
author
zhibog
committed
Basic unit testing procs + example useage
1 parent 3ffe05b commit 01168d8

File tree

2 files changed

+263
-0
lines changed

2 files changed

+263
-0
lines changed

example/test_example.odin

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package test_example
2+
3+
import "../test"
4+
5+
// @note(zh): Example useage of the unit tests.
6+
// Failed tests will be printed out to the console. This is
7+
// done to make sure all tests run for a given package and
8+
// why they are not simply asserted.
9+
10+
main :: proc() {
11+
12+
// strings
13+
str1 := "Hello";
14+
str2 := "Hello";
15+
str3 := "Hellope";
16+
str4 := cstring("hello");
17+
str5 := cstring("hellope");
18+
19+
test.is_equal(str1, str2); // Will succeed
20+
test.is_equal(str1, str3); // Will fail
21+
test.is_not_equal(str1, str3); // Will succeed
22+
test.is_not_equal(str1, str2); // Will fail
23+
test.is_equal(str4, str5); // Will fail
24+
test.is_not_equal(str4, str5); // Will succeed
25+
26+
// numbers
27+
num1 := 5;
28+
num2 := 6;
29+
num3 := u32be(5);
30+
num4 := u32be(5);
31+
num5 := u32be(4);
32+
33+
test.is_equal(num1, num2); // Will fail
34+
test.is_not_equal(num1, num2); // Will succeed
35+
test.is_equal(num3, num3); // Will succeed
36+
test.is_not_equal(num3, num4); // Will fail
37+
test.is_equal(num3, num5); // Will fail
38+
test.is_not_equal(num3, num5); // Will succeed
39+
40+
// nil, not nil
41+
A :: union {
42+
uint, u32,
43+
};
44+
45+
a: A = nil;
46+
b: A = u32(32);
47+
48+
test.is_nil(a); // Will succeed
49+
test.is_nil(b); // Will fail
50+
test.is_not_nil(a); // Will fail
51+
test.is_not_nil(b); // Will succeed
52+
53+
// boolean
54+
bool1 := true;
55+
bool2 := false;
56+
57+
test.is_true(bool1); // Will succeed
58+
test.is_true(bool2); // Will fail
59+
test.is_false(bool1); // Will fail
60+
test.is_false(bool2); // Will succeed
61+
test.is_true(1 == 1); // Will succeed
62+
test.is_false(1 == 2); // Will succeed
63+
}

test/test.odin

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
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

Comments
 (0)