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
|
package tests_nbio
import "core:nbio"
import "core:testing"
import "core:time"
import "core:os"
@(test)
close_invalid_handle :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
nbio.close(max(nbio.Handle))
ev(t, nbio.run(), nil)
}
}
@(test)
write_read_close :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
@static content := [20]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
@static result: [20]byte
FILENAME :: "test_write_read_close"
nbio.open_poly(FILENAME, t, on_open, mode={.Read, .Write, .Create, .Trunc})
on_open :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.open.err, nil)
nbio.write_poly(op.open.handle, 0, content[:], t, on_write)
}
on_write :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.write.err, nil)
ev(t, op.write.written, len(content))
nbio.read_poly(op.write.handle, 0, result[:], t, on_read, all=true)
}
on_read :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.read.err, nil)
ev(t, op.read.read, len(result))
ev(t, result, content)
nbio.close_poly(op.read.handle, t, on_close)
}
on_close :: proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.close.err, nil)
os.remove(FILENAME)
}
ev(t, nbio.run(), nil)
}
}
@(test)
read_empty_file :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
FILENAME :: "test_read_empty_file"
handle, err := nbio.open_sync(FILENAME, mode={.Read, .Write, .Create, .Trunc})
ev(t, err, nil)
buf: [128]byte
nbio.read_poly(handle, 0, buf[:], t, proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.read.err, nbio.FS_Error.EOF)
ev(t, op.read.read, 0)
nbio.close_poly(op.read.handle, t, proc(op: ^nbio.Operation, t: ^testing.T) {
ev(t, op.close.err, nil)
os.remove(FILENAME)
})
})
ev(t, nbio.run(), nil)
}
}
@(test)
read_entire_file :: proc(t: ^testing.T) {
if event_loop_guard(t) {
testing.set_fail_timeout(t, time.Minute)
nbio.read_entire_file(#file, t, on_read)
on_read :: proc(t: rawptr, data: []byte, err: nbio.Read_Entire_File_Error) {
t := (^testing.T)(t)
ev(t, err.value, nil)
ev(t, string(data), #load(#file, string))
delete(data)
}
}
}
|