| ... | @@ -81,7 +81,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type { | ... | @@ -81,7 +81,7 @@ pub fn FixedBufferStream(comptime Buffer: type) type { |
| 81 | } | 81 | } |
| 82 | | 82 | |
| 83 | pub fn seekTo(self: *Self, pos: u64) SeekError!void { | 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 | pub fn seekBy(self: *Self, amt: i64) SeekError!void { | 87 | pub fn seekBy(self: *Self, amt: i64) SeekError!void { |
| ... | @@ -155,6 +155,9 @@ test "FixedBufferStream output 2" { | ... | @@ -155,6 +155,9 @@ test "FixedBufferStream output 2" { |
| 155 | | 155 | |
| 156 | try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("Hello world!")); | 156 | try testing.expectError(error.NoSpaceLeft, fbs.writer().writeAll("Hello world!")); |
| 157 | try testing.expect(mem.eql(u8, fbs.getWritten(), "Hello worl")); | 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 | test "FixedBufferStream input" { | 163 | test "FixedBufferStream input" { |
| ... | @@ -163,14 +166,18 @@ test "FixedBufferStream input" { | ... | @@ -163,14 +166,18 @@ test "FixedBufferStream input" { |
| 163 | | 166 | |
| 164 | var dest: [4]u8 = undefined; | 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 | try testing.expect(read == 4); | 170 | try testing.expect(read == 4); |
| 168 | try testing.expect(mem.eql(u8, dest[0..4], bytes[0..4])); | 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 | try testing.expect(read == 3); | 174 | try testing.expect(read == 3); |
| 172 | try testing.expect(mem.eql(u8, dest[0..3], bytes[4..7])); | 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 | try testing.expect(read == 0); | 182 | try testing.expect(read == 0); |
| 176 | } | 183 | } |