forked from rm4n0s/hello_from_odin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhello_test.odin
More file actions
222 lines (192 loc) · 5.25 KB
/
hello_test.odin
File metadata and controls
222 lines (192 loc) · 5.25 KB
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
package main
import "core:fmt"
import "core:mem/virtual"
import "core:testing"
import "core:time"
import "trace"
@(test)
test_hello_from :: proc(_: ^testing.T) {
arena: virtual.Arena
arena_allocator := virtual.arena_allocator(&arena)
context.allocator = arena_allocator
storage := storage_init()
defer storage_destroy(storage)
options := Options {
spammers_len = 2,
friends_len = 2,
name_len = 5,
friend_until_repeat_in_sec = 1,
}
manosHello, manosErr := hello_from(storage, options, "manos")
fmt.println(manosHello)
fmt.println(trace.trace(manosErr))
assert(manosHello == "Hello, nice to meet you manos")
passedUnknownStackTrace := false
#partial switch friendError in manosErr {
case Verify_Friend_Error:
#partial switch checkErr in friendError {
case Check_Name_Error:
#partial switch checkErr {
case .Unknown:
passedUnknownStackTrace = true
}
}
}
assert(passedUnknownStackTrace)
// wait little longer than one second to test friendship
time.sleep(time.Second)
manosHello, manosErr = hello_from(storage, options, "manos")
fmt.println(trace.trace(manosHello))
assert(manosHello == "Hello my friend")
assert(manosErr == nil)
// break his nerves with one more hello, to become new spammer
manosHello, manosErr = hello_from(storage, options, "manos")
fmt.println(trace.trace(manosHello))
assert(manosHello == "Get away from me")
passedNewSpammerStackTrace := false
#partial switch friendError in manosErr {
case Verify_Friend_Error:
#partial switch checkErr in friendError {
case Check_Name_Error:
#partial switch checkErr {
case .New_Spammer:
passedNewSpammerStackTrace = true
}
}
}
assert(passedNewSpammerStackTrace)
// one more time as regular spammer
manosHello, manosErr = hello_from(storage, options, "manos")
fmt.println(trace.trace(manosErr))
assert(manosHello == "Get away from me")
passedSpammerStackTrace := false
#partial switch friendError in manosErr {
case Verify_Friend_Error:
#partial switch checkErr in friendError {
case Check_Name_Error:
#partial switch checkErr {
case .Spammer:
passedSpammerStackTrace = true
}
}
}
assert(passedSpammerStackTrace)
}
@(test)
test_storage :: proc(_: ^testing.T) {
arena: virtual.Arena
arena_allocator := virtual.arena_allocator(&arena)
context.allocator = arena_allocator
storage := storage_init()
defer storage_destroy(storage)
options := Options {
spammers_len = 2,
friends_len = 3,
name_len = 5,
friend_until_repeat_in_sec = 1,
}
// test friend storage length
hello_from(storage, options, "manos")
hello_from(storage, options, "nikos")
hello_from(storage, options, "panos")
_, xeniaErr := hello_from(storage, options, "xenia")
fmt.println(trace.trace(xeniaErr))
fmt.println(storage.friends)
passedFriendStorageStackTrace := false
#partial switch friendError in xeniaErr {
case Verify_Friend_Error:
#partial switch checkErr in friendError {
case Add_Friend_Error:
#partial switch checkErr {
case .Not_Enough_Space:
passedFriendStorageStackTrace = true
}
}
}
assert(passedFriendStorageStackTrace)
// test spammer storage length
hello_from(storage, options, "manos")
hello_from(storage, options, "nikos")
_, panosErr := hello_from(storage, options, "panos")
fmt.println(trace.trace(panosErr))
fmt.println(storage.spammers)
passedSpammerStorageStackTrace := false
#partial switch friendError in panosErr {
case Verify_Friend_Error:
#partial switch checkErr in friendError {
case Add_Spammer_Error:
#partial switch checkErr {
case .Not_Enough_Space:
passedSpammerStorageStackTrace = true
}
}
}
assert(passedSpammerStorageStackTrace)
}
@(test)
test_name :: proc(_: ^testing.T) {
arena: virtual.Arena
arena_allocator := virtual.arena_allocator(&arena)
context.allocator = arena_allocator
storage := storage_init()
defer storage_destroy(storage)
options := Options {
spammers_len = 2,
friends_len = 3,
name_len = 5,
friend_until_repeat_in_sec = 1,
}
_, helloErr := hello_from(storage, options, "bigname")
passedNoLongStackTrace := false
#partial switch err in helloErr {
case Verify_Name_Error:
#partial switch err {
case .Name_To_Long:
passedNoLongStackTrace = true
}
}
assert(passedNoLongStackTrace)
}
@(test)
lock_stack_traces :: proc(_: ^testing.T) {
arena: virtual.Arena
arena_allocator := virtual.arena_allocator(&arena)
context.allocator = arena_allocator
storage := storage_init()
defer storage_destroy(storage)
options := Options {
spammers_len = 2,
friends_len = 3,
name_len = 5,
friend_until_repeat_in_sec = 1,
}
// lock stack traces
_, helloErr := hello_from(storage, options, "manos")
switch err in helloErr {
case Verify_Name_Error:
switch err {
case .Name_To_Long:
case .None:
}
case Verify_Friend_Error:
switch errFriend in err {
case Check_Name_Error:
switch errFriend {
case .None:
case .New_Spammer:
case .Spammer:
case .Unknown:
}
case Add_Friend_Error:
switch errFriend {
case .None:
case .Not_Enough_Space:
}
case Add_Spammer_Error:
switch errFriend {
case .None:
case .Not_Enough_Space:
}
}
}
}