| ... | @@ -299,19 +299,18 @@ test "io.BufferedTee io.BufferedReader Block" { | ... | @@ -299,19 +299,18 @@ test "io.BufferedTee io.BufferedReader Block" { |
| 299 | } | 299 | } |
| 300 | | 300 | |
| 301 | test "io.BufferedTee with zero lookahead" { | 301 | test "io.BufferedTee with zero lookahead" { |
| 302 | // output is has same bytes as reader | 302 | // output has same bytes as consumer |
| 303 | const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 12; | 303 | const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 12; |
| 304 | var in = io.fixedBufferStream(&data); | 304 | var in = io.fixedBufferStream(&data); |
| 305 | var out = std.ArrayList(u8).init(testing.allocator); | 305 | var out = std.ArrayList(u8).init(testing.allocator); |
| 306 | defer out.deinit(); | 306 | defer out.deinit(); |
| 307 | | 307 | |
| 308 | var lbr = bufferedTee(8, 0, in.reader(), out.writer()); | 308 | var bt = bufferedTee(8, 0, in.reader(), out.writer()); |
| 309 | | 309 | |
| 310 | var buf: [16]u8 = undefined; | 310 | var buf: [16]u8 = undefined; |
| 311 | | | |
| 312 | var read_len: usize = 0; | 311 | var read_len: usize = 0; |
| 313 | for (0..buf.len) |i| { | 312 | for (0..buf.len) |i| { |
| 314 | const n = try lbr.read(buf[0..i]); | 313 | const n = try bt.read(buf[0..i]); |
| 315 | try testing.expectEqual(i, n); | 314 | try testing.expectEqual(i, n); |
| 316 | read_len += i; | 315 | read_len += i; |
| 317 | try testing.expectEqual(read_len, out.items.len); | 316 | try testing.expectEqual(read_len, out.items.len); |
| ... | @@ -319,72 +318,71 @@ test "io.BufferedTee with zero lookahead" { | ... | @@ -319,72 +318,71 @@ test "io.BufferedTee with zero lookahead" { |
| 319 | } | 318 | } |
| 320 | | 319 | |
| 321 | test "io.BufferedTee with lookahead" { | 320 | test "io.BufferedTee with lookahead" { |
| 322 | // output is lookahead bytes behind reader | 321 | // output is lookahead bytes behind consumer |
| 323 | inline for (1..8) |lookahead| { | 322 | inline for (1..8) |lookahead| { |
| 324 | const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 12; | 323 | const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 12; |
| 325 | var in = io.fixedBufferStream(&data); | 324 | var in = io.fixedBufferStream(&data); |
| 326 | var out = std.ArrayList(u8).init(testing.allocator); | 325 | var out = std.ArrayList(u8).init(testing.allocator); |
| 327 | defer out.deinit(); | 326 | defer out.deinit(); |
| 328 | | 327 | |
| 329 | var lbr = bufferedTee(8, lookahead, in.reader(), out.writer()); | 328 | var bt = bufferedTee(8, lookahead, in.reader(), out.writer()); |
| 330 | var buf: [16]u8 = undefined; | 329 | var buf: [16]u8 = undefined; |
| 331 | | 330 | |
| 332 | var read_len: usize = 0; | 331 | var read_len: usize = 0; |
| 333 | for (1..buf.len) |i| { | 332 | for (1..buf.len) |i| { |
| 334 | const n = try lbr.read(buf[0..i]); | 333 | const n = try bt.read(buf[0..i]); |
| 335 | try testing.expectEqual(i, n); | 334 | try testing.expectEqual(i, n); |
| 336 | read_len += i; | 335 | read_len += i; |
| 337 | const out_len = if (read_len < lookahead) 0 else read_len - lookahead; | 336 | const out_len = if (read_len < lookahead) 0 else read_len - lookahead; |
| 338 | try testing.expectEqual(out_len, out.items.len); | 337 | try testing.expectEqual(out_len, out.items.len); |
| 339 | // std.debug.print("{d} {d} {d}\n", .{ lookahead, read_len, out_len }); | | |
| 340 | } | 338 | } |
| 341 | try testing.expectEqual(read_len, out.items.len + lookahead); | 339 | try testing.expectEqual(read_len, out.items.len + lookahead); |
| 342 | try lbr.flush(); | 340 | try bt.flush(); |
| 343 | try testing.expectEqual(read_len, out.items.len); | 341 | try testing.expectEqual(read_len, out.items.len); |
| 344 | } | 342 | } |
| 345 | } | 343 | } |
| 346 | | 344 | |
| 347 | test "io.BufferedTee internal state" { | 345 | test "io.BufferedTee internal state" { |
| 348 | const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 10; | 346 | const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 2; |
| 349 | var in = io.fixedBufferStream(&data); | 347 | var in = io.fixedBufferStream(&data); |
| 350 | var out = std.ArrayList(u8).init(testing.allocator); | 348 | var out = std.ArrayList(u8).init(testing.allocator); |
| 351 | defer out.deinit(); | 349 | defer out.deinit(); |
| 352 | | 350 | |
| 353 | var lbr = bufferedTee(8, 4, in.reader(), out.writer()); | 351 | var bt = bufferedTee(8, 4, in.reader(), out.writer()); |
| 354 | | 352 | |
| 355 | var buf: [16]u8 = undefined; | 353 | var buf: [16]u8 = undefined; |
| 356 | var n = try lbr.read(buf[0..3]); | 354 | var n = try bt.read(buf[0..3]); |
| 357 | try testing.expectEqual(3, n); | 355 | try testing.expectEqual(3, n); |
| 358 | try testing.expectEqualSlices(u8, data[0..3], buf[0..n]); | 356 | try testing.expectEqualSlices(u8, data[0..3], buf[0..n]); |
| 359 | try testing.expectEqual(8, lbr.tail); | 357 | try testing.expectEqual(8, bt.tail); |
| 360 | try testing.expectEqual(3, lbr.rp); | 358 | try testing.expectEqual(3, bt.rp); |
| 361 | try testing.expectEqual(0, out.items.len); | 359 | try testing.expectEqual(0, out.items.len); |
| 362 | | 360 | |
| 363 | n = try lbr.read(buf[0..6]); | 361 | n = try bt.read(buf[0..6]); |
| 364 | try testing.expectEqual(6, n); | 362 | try testing.expectEqual(6, n); |
| 365 | try testing.expectEqualSlices(u8, data[3..9], buf[0..n]); | 363 | try testing.expectEqualSlices(u8, data[3..9], buf[0..n]); |
| 366 | try testing.expectEqual(8, lbr.tail); | 364 | try testing.expectEqual(8, bt.tail); |
| 367 | try testing.expectEqual(5, lbr.rp); | 365 | try testing.expectEqual(5, bt.rp); |
| 368 | try testing.expectEqualSlices(u8, data[4..12], &lbr.buf); | 366 | try testing.expectEqualSlices(u8, data[4..12], &bt.buf); |
| 369 | try testing.expectEqual(5, out.items.len); | 367 | try testing.expectEqual(5, out.items.len); |
| 370 | | 368 | |
| 371 | n = try lbr.read(buf[0..9]); | 369 | n = try bt.read(buf[0..9]); |
| 372 | try testing.expectEqual(9, n); | 370 | try testing.expectEqual(9, n); |
| 373 | try testing.expectEqualSlices(u8, data[9..18], buf[0..n]); | 371 | try testing.expectEqualSlices(u8, data[9..18], buf[0..n]); |
| 374 | try testing.expectEqual(8, lbr.tail); | 372 | try testing.expectEqual(8, bt.tail); |
| 375 | try testing.expectEqual(6, lbr.rp); | 373 | try testing.expectEqual(6, bt.rp); |
| 376 | try testing.expectEqualSlices(u8, data[12..20], &lbr.buf); | 374 | try testing.expectEqualSlices(u8, data[12..20], &bt.buf); |
| 377 | try testing.expectEqual(14, out.items.len); | 375 | try testing.expectEqual(14, out.items.len); |
| 378 | | 376 | |
| 379 | try lbr.flush(); | 377 | try bt.flush(); |
| 380 | try testing.expectEqual(18, out.items.len); | 378 | try testing.expectEqual(18, out.items.len); |
| 381 | | 379 | |
| 382 | lbr.putBack(4); | 380 | bt.putBack(4); |
| 383 | n = try lbr.read(buf[0..4]); | 381 | n = try bt.read(buf[0..4]); |
| 384 | try testing.expectEqual(4, n); | 382 | try testing.expectEqual(4, n); |
| 385 | try testing.expectEqualSlices(u8, data[14..18], buf[0..n]); | 383 | try testing.expectEqualSlices(u8, data[14..18], buf[0..n]); |
| 386 | | 384 | |
| 387 | try testing.expectEqual(18, out.items.len); | 385 | try testing.expectEqual(18, out.items.len); |
| 388 | try lbr.flush(); | 386 | try bt.flush(); |
| 389 | try testing.expectEqual(18, out.items.len); | 387 | try testing.expectEqual(18, out.items.len); |
| 390 | } | 388 | } |