@@ -2140,20 +2140,50 @@ test "seek keeping partial buffer" {
21402140 try testing .expectEqualStrings ("6789" , & buf );
21412141}
21422142
2143- test "seekBy streaming" {
2143+ test "seekBy streaming edge case " {
21442144 var tmp_dir = testing .tmpDir (.{});
21452145 defer tmp_dir .cleanup ();
21462146
21472147 try tmp_dir .dir .writeFile (.{ .sub_path = "blah.txt" , .data = "let's test seekBy" });
21482148 const f = try tmp_dir .dir .openFile ("blah.txt" , .{ .mode = .read_only });
21492149 defer f .close ();
2150- var reader = f .readerStreaming (&.{});
2151- try reader .seekBy (2 );
2150+ var read_buf : [10 ]u8 = undefined ;
2151+ var reader = f .readerStreaming (& read_buf );
2152+ var buffer : [20 ]u8 = undefined ;
2153+ const n1 = try reader .interface .readSliceShort (buffer [0.. 2]);
2154+ try testing .expectEqual (2 , n1 );
2155+ try testing .expectEqualStrings ("le" , buffer [0.. 2]);
2156+ // edge case seek: exactly up to buffer size
2157+ try reader .seekBy (10 );
2158+
2159+ const n2 = try reader .interface .readSliceShort (& buffer );
2160+ try testing .expectEqual (5 , n2 );
2161+ try testing .expectEqualStrings ("eekBy" , buffer [0.. 5]);
2162+ }
2163+
2164+ test "seekBy streaming basic" {
2165+ var tmp_dir = testing .tmpDir (.{});
2166+ defer tmp_dir .cleanup ();
21522167
2168+ try tmp_dir .dir .writeFile (.{ .sub_path = "blah.txt" , .data = "let's test seekBy" });
2169+ const f = try tmp_dir .dir .openFile ("blah.txt" , .{ .mode = .read_only });
2170+ defer f .close ();
2171+ var read_buf : [10 ]u8 = undefined ;
2172+ var reader = f .readerStreaming (& read_buf );
21532173 var buffer : [20 ]u8 = undefined ;
2154- const n = try reader .interface .readSliceShort (& buffer );
2155- try testing .expectEqual (15 , n );
2156- try testing .expectEqualStrings ("t's test seekBy" , buffer [0.. 15]);
2174+ const n1 = try reader .interface .readSliceShort (buffer [0.. 2]);
2175+ try testing .expectEqual (2 , n1 );
2176+ try testing .expectEqualStrings ("le" , buffer [0.. 2]);
2177+ // seek within bufferedLen
2178+ try reader .seekBy (2 );
2179+ try reader .interface .readSliceAll (buffer [0.. 2]);
2180+ try testing .expectEqualStrings ("s " , buffer [0.. 2]);
2181+ // seek past bufferedLen: causing discard
2182+ try reader .seekBy (10 );
2183+
2184+ const n2 = try reader .interface .readSliceShort (& buffer );
2185+ try testing .expectEqual (1 , n2 );
2186+ try testing .expectEqualStrings ("y" , buffer [0.. 1]);
21572187}
21582188
21592189test "seekBy positional" {
0 commit comments