@@ -28,7 +28,7 @@ fn (mut r TwoByteReader) read(mut buf []u8) !int {
2828 if r.pos > = r.data.len {
2929 return io.Eof{}
3030 }
31- min := int_min (r.data.len - r.pos, 2 )
31+ min := int_min (int_min ( r.data.len - r.pos, 2 ), buf.len )
3232 for i in 0 .. min {
3333 buf[i] = r.data[r.pos]
3434 r.pos++
@@ -158,3 +158,49 @@ fn test_fill_buffer_false() {
158158 assert reader.fill_buffer (false )! == 2
159159 assert reader.get_string () == '12'
160160}
161+
162+ fn test_fill_buffer_until () {
163+ mut two := TwoByteReader{
164+ data: '12345'
165+ }
166+ mut reader := StringReader.new (reader: two)
167+ assert reader.fill_buffer_until (1 )! == 1
168+ assert reader.builder.len == 1
169+ assert reader.fill_buffer_until (2 )! == 2
170+ assert reader.builder.len == 3
171+ assert reader.fill_buffer_until (2 )! == 2
172+ assert reader.builder.len == 5
173+ assert reader.get_string () == '12345'
174+ }
175+
176+ fn test_fill_buffer_until_one () {
177+ mut two := TwoByteReader{
178+ data: '12345'
179+ }
180+ mut reader := StringReader.new (reader: two)
181+ assert reader.fill_buffer_until (1 )! == 1
182+ assert reader.builder.len == 1
183+ assert reader.fill_buffer_until (1 )! == 1
184+ assert reader.builder.len == 2
185+ assert reader.fill_buffer_until (1 )! == 1
186+ assert reader.builder.len == 3
187+ assert reader.fill_buffer_until (1 )! == 1
188+ assert reader.builder.len == 4
189+ assert reader.fill_buffer_until (1 )! == 1
190+ assert reader.builder.len == 5
191+ assert reader.get_string () == '12345'
192+ }
193+
194+ fn test_fill_buffer_until_many () {
195+ mut two := TwoByteReader{
196+ data: '12345'
197+ }
198+ mut reader := StringReader.new (reader: two)
199+ assert reader.fill_buffer_until (1 )! == 1
200+ assert reader.builder.len == 1
201+ assert reader.fill_buffer_until (12 )! == 4
202+ assert reader.builder.len == 5
203+ assert reader.fill_buffer_until (123 ) or { - 1 } == - 1
204+ assert reader.builder.len == 5
205+ assert reader.get_string () == '12345'
206+ }
0 commit comments