@@ -2140,20 +2140,58 @@ 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+ try testing .expectEqual (0 , reader .interface .seek );
2159+ try testing .expectEqual (0 , reader .interface .end );
2160+
2161+ const n2 = try reader .interface .readSliceShort (& buffer );
2162+ try testing .expectEqual (5 , n2 );
2163+ try testing .expectEqualStrings ("eekBy" , buffer [0.. 5]);
2164+ }
2165+
2166+ test "seekBy streaming basic" {
2167+ var tmp_dir = testing .tmpDir (.{});
2168+ defer tmp_dir .cleanup ();
21522169
2170+ try tmp_dir .dir .writeFile (.{ .sub_path = "blah.txt" , .data = "let's test seekBy" });
2171+ const f = try tmp_dir .dir .openFile ("blah.txt" , .{ .mode = .read_only });
2172+ defer f .close ();
2173+ var read_buf : [10 ]u8 = undefined ;
2174+ var reader = f .readerStreaming (& read_buf );
21532175 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]);
2176+ const n1 = try reader .interface .readSliceShort (buffer [0.. 2]);
2177+ try testing .expectEqual (2 , n1 );
2178+ try testing .expectEqualStrings ("le" , buffer [0.. 2]);
2179+ // seek within bufferedLen
2180+ const pos_within = reader .pos ;
2181+ try reader .seekBy (2 );
2182+ if (builtin .target .os .tag != .wasi ) {
2183+ try testing .expectEqual (pos_within , reader .pos );
2184+ }
2185+ try reader .interface .readSliceAll (buffer [0.. 2]);
2186+ try testing .expectEqualStrings ("s " , buffer [0.. 2]);
2187+ // seek past bufferedLen: causing discard
2188+ const pos_past = reader .pos ;
2189+ try reader .seekBy (10 );
2190+ try testing .expect (pos_past != reader .pos );
2191+
2192+ const n2 = try reader .interface .readSliceShort (& buffer );
2193+ try testing .expectEqual (1 , n2 );
2194+ try testing .expectEqualStrings ("y" , buffer [0.. 1]);
21572195}
21582196
21592197test "seekBy positional" {
0 commit comments