forked from JuliaLang/julia
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathiobuffer.jl
125 lines (117 loc) · 3.35 KB
/
iobuffer.jl
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
ioslength(io::IOBuffer) = (io.seekable ? io.size : nb_available(io))
let io = IOBuffer()
@assert eof(io)
@assert try read(io,Uint8); false; catch e; isa(e,EOFError); end
@assert write(io,"abc") == 3
@assert ioslength(io) == 3
@assert position(io) == 3
@assert eof(io)
@assert seek(io, 0)
@assert read(io, Uint8) == 'a'
a = Array(Uint8, 2)
@assert read(io, a) == a
@assert a == ['b','c']
@assert bytestring(io) == "abc"
@assert seek(io, 1)
@assert truncate(io, 2)
@assert position(io) == 1
@assert !eof(io)
@assert seekend(io)
@assert position(io) == 2
@assert truncate(io, 0)
@assert position(io) == 0
@assert truncate(io, 10)
@assert position(io) == 0
@assert all(io.data .== 0)
@assert write(io,Int16[1,2,3,4,5,6]) == 12
@assert seek(io,2)
@assert truncate(io, 10)
@assert ioslength(io) == 10
io.readable = false
@assert try read(io,Uint8[0]); false; catch e; true; end
@assert truncate(io, 0)
@assert write(io,"boston\ncambridge\n") > 0
@assert takebuf_string(io) == "boston\ncambridge\n"
@assert takebuf_string(io) == ""
close(io)
@assert try write(io,Uint8[0]); false; catch e; true; end
@assert try seek(io,0); false; catch e; true; end
@assert eof(io)
end
let io = IOBuffer("hamster\nguinea pig\nturtle")
@assert position(io) == 0
@assert readline(io) == "hamster\n"
@assert readall(io) == "guinea pig\nturtle"
@assert try read(io,Uint8); false; catch e; isa(e,EOFError); end
@assert seek(io,0)
@assert read(io,Uint8) == 'h'
@assert try truncate(io,0); false; catch e; true; end
@assert try write(io,uint8(0)); false; catch e; true; end
@assert try write(io,Uint8[0]); false; catch e; true; end
@assert takebuf_string(io) == "hamster\nguinea pig\nturtle"
@assert takebuf_string(io) == "hamster\nguinea pig\nturtle" #should be unchanged
close(io)
end
let io = PipeBuffer()
@assert try read(io,Uint8); false; catch e; isa(e,EOFError); end
@assert write(io,"pancakes\nwaffles\nblueberries\n") > 0
@assert position(io) == 0
@assert readline(io) == "pancakes\n"
Base.compact(io)
@assert readline(io) == "waffles\n"
@assert write(io,"whipped cream\n") > 0
@assert readline(io) == "blueberries\n"
@assert try seek(io,0); false; catch e; true; end
@assert try truncate(io,0); false; catch e; true; end
@assert readline(io) == "whipped cream\n"
Base.compact(io)
@assert position(io) == 0
@assert ioslength(io) == 0
Base.ensureroom(io,50)
@assert position(io) == 0
@assert ioslength(io) == 0
@assert length(io.data) == 50
Base.ensureroom(io,10)
@assert ioslength(io) == 0
@assert length(io.data) == 50
io.maxsize = 75
Base.ensureroom(io,100)
@assert ioslength(io) == 0
@assert length(io.data) == 75
@assert seekend(io)
@assert ioslength(io) == 0
@assert position(io) == 0
write(io,zeros(Uint8,200))
@assert ioslength(io) == 75
@assert length(io.data) == 75
write(io,1)
@assert ioslength(io) == 75
@assert length(io.data) == 75
write(io,[1,2,3])
@assert ioslength(io) == 75
@assert length(io.data) == 75
skip(io,1)
@assert write(io,uint8(104)) == 1
skip(io,3)
@assert write(io,"apples".data) == 3
skip(io,71)
@assert write(io,'y') == 1
@assert readall(io) == "happy"
@assert eof(io)
write(io,zeros(Uint8,73))
write(io,'a')
write(io,'b')
write(io,'c')
write(io,'d')
write(io,'e')
@assert ioslength(io) == 75
@assert length(io.data) == 75
@assert position(io) == 0
skip(io,72)
@assert takebuf_string(io) == "\0ab"
@assert takebuf_string(io) == ""
# issues 4021
print(io, true)
close(io)
end
@test isempty(readlines(IOBuffer()))