@@ -2140,20 +2140,50 @@ test "seek keeping partial buffer" {
2140
2140
try testing .expectEqualStrings ("6789" , & buf );
2141
2141
}
2142
2142
2143
+ test "seekBy streaming edge case" {
2144
+ var tmp_dir = testing .tmpDir (.{});
2145
+ defer tmp_dir .cleanup ();
2146
+
2147
+ try tmp_dir .dir .writeFile (.{ .sub_path = "blah.txt" , .data = "let's test seekBy" });
2148
+ const f = try tmp_dir .dir .openFile ("blah.txt" , .{ .mode = .read_only });
2149
+ defer f .close ();
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
+
2143
2164
test "seekBy streaming" {
2144
2165
var tmp_dir = testing .tmpDir (.{});
2145
2166
defer tmp_dir .cleanup ();
2146
2167
2147
2168
try tmp_dir .dir .writeFile (.{ .sub_path = "blah.txt" , .data = "let's test seekBy" });
2148
2169
const f = try tmp_dir .dir .openFile ("blah.txt" , .{ .mode = .read_only });
2149
2170
defer f .close ();
2150
- var reader = f .readerStreaming (&.{});
2171
+ var read_buf : [10 ]u8 = undefined ;
2172
+ var reader = f .readerStreaming (& read_buf );
2173
+ var buffer : [20 ]u8 = undefined ;
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
2151
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 (12 );
2152
2183
2153
- 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]);
2184
+ const n2 = try reader .interface .readSliceShort (& buffer );
2185
+ try testing .expectEqual (1 , n2 );
2186
+ try testing .expectEqualStrings ("y" , buffer [0.. 1]);
2157
2187
}
2158
2188
2159
2189
test "seekBy positional" {
0 commit comments