std: fix bug in fifo.unget if rewinding doesn't wrap around

This commit is contained in:
daurnimator
2019-11-11 03:03:57 +11:00
parent 61179a4d52
commit c393969a20

View File

@@ -311,9 +311,13 @@ pub fn LinearFifo(
self.rewind(src.len);
const slice = self.readableSliceMut(0);
mem.copy(T, slice, src[0..slice.len]);
const slice2 = self.readableSliceMut(slice.len);
mem.copy(T, slice2, src[slice.len..]);
if (src.len < slice.len) {
mem.copy(T, slice, src);
} else {
mem.copy(T, slice, src[0..slice.len]);
const slice2 = self.readableSliceMut(slice.len);
mem.copy(T, slice2, src[slice.len..]);
}
}
/// Peek at the item at `offset`
@@ -385,6 +389,9 @@ test "LinearFifo(u8, .Dynamic)" {
try fifo.unget("prependedstring");
var result: [30]u8 = undefined;
testing.expectEqualSlices(u8, "prependedstringabcdefghij", result[0..fifo.read(&result)]);
try fifo.unget("b");
try fifo.unget("a");
testing.expectEqualSlices(u8, "ab", result[0..fifo.read(&result)]);
}
fifo.shrink(0);