| ... | ... | @@ -81,7 +81,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type { |
| 81 | 81 | } |
| 82 | 82 | |
| 83 | 83 | pub fn seekTo(self: *Self, pos: u64) SeekError!void { |
| 84 | | self.pos = if (std.math.cast(usize, pos)) |x| x else |_| self.buffer.len; |
| 84 | self.pos = if (std.math.cast(usize, pos)) |x| std.math.min(self.buffer.len, x) else |_| self.buffer.len; |
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | pub fn seekBy(self: *Self, amt: i64) SeekError!void { |
| ... | ... | @@ -155,6 +155,9 @@ test "FixedBufferStream output 2" { |
| 155 | 155 | |
| 156 | 156 | try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("Hello world!")); |
| 157 | 157 | try testing.expect(mem.eql(u8, fbs.getWritten(), "Hello worl")); |
| 158 | |
| 159 | try fbs.seekTo((try fbs.getEndPos()) + 1); |
| 160 | try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("H")); |
| 158 | 161 | } |
| 159 | 162 | |
| 160 | 163 | test "FixedBufferStream input" { |
| ... | ... | @@ -163,14 +166,18 @@ test "FixedBufferStream input" { |
| 163 | 166 | |
| 164 | 167 | var dest: [4]u8 = undefined; |
| 165 | 168 | |
| 166 | | var read = try fbs.reader().read(dest[0..4]); |
| 169 | var read = try fbs.reader().read(&dest); |
| 167 | 170 | try testing.expect(read == 4); |
| 168 | 171 | try testing.expect(mem.eql(u8, dest[0..4], bytes[0..4])); |
| 169 | 172 | |
| 170 | | read = try fbs.reader().read(dest[0..4]); |
| 173 | read = try fbs.reader().read(&dest); |
| 171 | 174 | try testing.expect(read == 3); |
| 172 | 175 | try testing.expect(mem.eql(u8, dest[0..3], bytes[4..7])); |
| 173 | 176 | |
| 174 | | read = try fbs.reader().read(dest[0..4]); |
| 177 | read = try fbs.reader().read(&dest); |
| 178 | try testing.expect(read == 0); |
| 179 | |
| 180 | try fbs.seekTo((try fbs.getEndPos()) + 1); |
| 181 | read = try fbs.reader().read(&dest); |
| 175 | 182 | try testing.expect(read == 0); |
| 176 | 183 | } |