v / vlib / time / operator_test.v
391 lines · 379 sloc · 6.52 KB · e2db6c70fc975f501b1fc8544aab5f00156a60a5
Raw
1module time
2
3fn assert_greater_time(ms int, t1 Time) {
4 sleep(ms * millisecond)
5 t2 := now()
6 assert t2 > t1
7}
8
9// Tests the now in all platform and the gt operator function with at least ms resolution
10fn test_now_always_results_in_greater_time() {
11 t1 := now()
12 $if macos {
13 assert_greater_time(1, t1)
14 return
15 }
16 $if windows {
17 // Lower resolution of time for windows
18 assert_greater_time(15, t1)
19 return
20 }
21 $if linux {
22 assert_greater_time(1, t1)
23 return
24 }
25 $if solaris {
26 assert_greater_time(1, t1)
27 return
28 }
29 // other platforms may have more accurate resolution,
30 // but we do not know that ... so wait at least 1s:
31 assert_greater_time(1001, t1)
32}
33
34fn test_time1_should_be_same_as_time2() {
35 t1 := new(Time{
36 year: 2000
37 month: 5
38 day: 10
39 hour: 22
40 minute: 11
41 second: 3
42 nanosecond: 100
43 })
44 t2 := new(Time{
45 year: 2000
46 month: 5
47 day: 10
48 hour: 22
49 minute: 11
50 second: 3
51 nanosecond: 100
52 })
53 assert t1 == t2
54}
55
56fn test_time1_should_not_be_same_as_time2() {
57 t1 := new(Time{
58 year: 2000
59 month: 5
60 day: 10
61 hour: 22
62 minute: 11
63 second: 3
64 nanosecond: 100
65 })
66 // Difference is one nanosecond
67 t2 := new(Time{
68 year: 2000
69 month: 5
70 day: 10
71 hour: 22
72 minute: 11
73 second: 3
74 nanosecond: 101
75 })
76 t3 := new(Time{
77 year: 2000
78 month: 5
79 day: 10
80 hour: 22
81 minute: 11
82 second: 3
83 nanosecond: 0
84 })
85 // Difference is one second
86 t4 := new(Time{
87 year: 2000
88 month: 5
89 day: 10
90 hour: 22
91 minute: 11
92 second: 4
93 nanosecond: 0
94 })
95 assert t1 != t2
96 assert t3 != t4
97}
98
99fn test_time1_should_be_greater_than_time2() {
100 t1 := new(Time{
101 year: 2000
102 month: 5
103 day: 10
104 hour: 22
105 minute: 11
106 second: 3
107 nanosecond: 102
108 })
109 // Difference is one nanosecond
110 t2 := new(Time{
111 year: 2000
112 month: 5
113 day: 10
114 hour: 22
115 minute: 11
116 second: 3
117 nanosecond: 101
118 })
119 t3 := new(Time{
120 year: 2000
121 month: 5
122 day: 10
123 hour: 22
124 minute: 11
125 second: 5
126 nanosecond: 0
127 })
128 // Difference is one second
129 t4 := new(Time{
130 year: 2000
131 month: 5
132 day: 10
133 hour: 22
134 minute: 11
135 second: 4
136 nanosecond: 0
137 })
138 assert t1 > t2
139 assert t3 > t4
140}
141
142fn test_time2_should_be_less_than_time1() {
143 t1 := new(Time{
144 year: 2000
145 month: 5
146 day: 10
147 hour: 22
148 minute: 11
149 second: 3
150 nanosecond: 102
151 })
152 // Difference is one nanosecond
153 t2 := new(Time{
154 year: 2000
155 month: 5
156 day: 10
157 hour: 22
158 minute: 11
159 second: 3
160 nanosecond: 101
161 })
162 t3 := new(Time{
163 year: 2000
164 month: 5
165 day: 10
166 hour: 22
167 minute: 11
168 second: 3
169 nanosecond: 0
170 })
171 // Difference is one second
172 t4 := new(Time{
173 year: 2000
174 month: 5
175 day: 10
176 hour: 22
177 minute: 11
178 second: 2
179 nanosecond: 0
180 })
181 assert t2 < t1
182 assert t4 < t3
183}
184
185fn test_time1_should_be_greater_or_equal_to_time2_when_gt() {
186 t1 := new(Time{
187 year: 2000
188 month: 5
189 day: 10
190 hour: 22
191 minute: 11
192 second: 3
193 nanosecond: 102
194 })
195 // Difference is one nanosecond
196 t2 := new(Time{
197 year: 2000
198 month: 5
199 day: 10
200 hour: 22
201 minute: 11
202 second: 3
203 nanosecond: 101
204 })
205 t3 := new(Time{
206 year: 2000
207 month: 5
208 day: 10
209 hour: 22
210 minute: 11
211 second: 5
212 nanosecond: 0
213 })
214 // Difference is one second
215 t4 := new(Time{
216 year: 2000
217 month: 5
218 day: 10
219 hour: 22
220 minute: 11
221 second: 4
222 nanosecond: 0
223 })
224 assert t1 >= t2
225 assert t3 >= t4
226}
227
228fn test_time1_should_be_greater_or_equal_to_time2_when_eq() {
229 t1 := new(Time{
230 year: 2000
231 month: 5
232 day: 10
233 hour: 22
234 minute: 11
235 second: 3
236 nanosecond: 100
237 })
238 // Difference is one nanosecond
239 t2 := new(Time{
240 year: 2000
241 month: 5
242 day: 10
243 hour: 22
244 minute: 11
245 second: 3
246 nanosecond: 100
247 })
248 t3 := new(Time{
249 year: 2000
250 month: 5
251 day: 10
252 hour: 22
253 minute: 11
254 second: 3
255 nanosecond: 0
256 })
257 // Difference is one second
258 t4 := new(Time{
259 year: 2000
260 month: 5
261 day: 10
262 hour: 22
263 minute: 11
264 second: 3
265 nanosecond: 0
266 })
267 assert t1 >= t2
268 assert t3 >= t4
269}
270
271fn test_time1_should_be_less_or_equal_to_time2_when_lt() {
272 t1 := new(Time{
273 year: 2000
274 month: 5
275 day: 10
276 hour: 22
277 minute: 11
278 second: 3
279 nanosecond: 100
280 })
281 // Difference is one nanosecond
282 t2 := new(Time{
283 year: 2000
284 month: 5
285 day: 10
286 hour: 22
287 minute: 11
288 second: 3
289 nanosecond: 101
290 })
291 t3 := new(Time{
292 year: 2000
293 month: 5
294 day: 10
295 hour: 22
296 minute: 11
297 second: 3
298 nanosecond: 0
299 })
300 // Difference is one second
301 t4 := new(Time{
302 year: 2000
303 month: 5
304 day: 10
305 hour: 22
306 minute: 11
307 second: 4
308 nanosecond: 0
309 })
310 assert t1 <= t2
311 assert t3 <= t4
312}
313
314fn test_time1_should_be_less_or_equal_to_time2_when_eq() {
315 t1 := new(Time{
316 year: 2000
317 month: 5
318 day: 10
319 hour: 22
320 minute: 11
321 second: 3
322 nanosecond: 100
323 })
324 // Difference is one nanosecond
325 t2 := new(Time{
326 year: 2000
327 month: 5
328 day: 10
329 hour: 22
330 minute: 11
331 second: 3
332 nanosecond: 100
333 })
334 t3 := new(Time{
335 year: 2000
336 month: 5
337 day: 10
338 hour: 22
339 minute: 11
340 second: 3
341 nanosecond: 0
342 })
343 // Difference is one second
344 t4 := new(Time{
345 year: 2000
346 month: 5
347 day: 10
348 hour: 22
349 minute: 11
350 second: 3
351 nanosecond: 0
352 })
353 assert t1 <= t2
354 assert t3 <= t4
355}
356
357fn test_time2_copied_from_time1_should_be_equal() {
358 t1 := new(Time{
359 year: 2000
360 month: 5
361 day: 10
362 hour: 22
363 minute: 11
364 second: 3
365 nanosecond: 100
366 })
367 t2 := new(t1)
368 assert t2 == t1
369}
370
371fn test_subtract() {
372 d_seconds := 3
373 d_nanoseconds := 13
374 duration := i64(d_seconds) * second + d_nanoseconds * nanosecond
375 t1 := new(Time{
376 year: 2000
377 month: 5
378 day: 10
379 hour: 22
380 minute: 11
381 second: 3
382 nanosecond: 100
383 })
384 t2 := unix_nanosecond(i64(t1.unix) + d_seconds, t1.nanosecond + d_nanoseconds)
385 d1 := t2 - t1
386 d2 := t1 - t2
387 assert d1 > 0
388 assert d1 == duration
389 assert d2 < 0
390 assert d2 == -duration
391}
392