From a696df20f23664f351474a854c392cf2ab2de6c5 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 4 Jan 2026 18:48:29 -0500 Subject: [PATCH 1/2] add some tests for CircularBuffer add bounds test for CircularBuffer --- core/src/utilities.zig | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core/src/utilities.zig b/core/src/utilities.zig index 6fe0b4598..b62b26cdc 100644 --- a/core/src/utilities.zig +++ b/core/src/utilities.zig @@ -639,3 +639,21 @@ pub fn CircularBuffer(comptime T: type, comptime len: usize) type { } }; } + +test "CircularBuffer bounds" { + const expectEqual = std.testing.expectEqual; + const bufsize: usize = 64; + const FIFO = CircularBuffer(u8, bufsize); + var fifo: FIFO = .empty; + try expectEqual(bufsize, fifo.get_writable_len()); + const one_data: [1]u8 = .{42}; + try fifo.write(one_data[0..]); + try expectEqual(bufsize - 1, fifo.get_writable_len()); + + var big_data: [100]u8 = undefined; + @memset(big_data[0..], 42); + + const maybe_err = fifo.write(big_data[0..]); + + try std.testing.expectError(error.Full, maybe_err); +} From 15793ebd07e1f1cd9dad19538aba25e272733cdd Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 4 Jan 2026 19:29:27 -0500 Subject: [PATCH 2/2] set buffer.full in write buffer.full was never set in this function, but it was in write_assume_capacity. --- core/src/utilities.zig | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/src/utilities.zig b/core/src/utilities.zig index b62b26cdc..9bcad56bf 100644 --- a/core/src/utilities.zig +++ b/core/src/utilities.zig @@ -602,13 +602,14 @@ pub fn CircularBuffer(comptime T: type, comptime len: usize) type { pub fn write(buffer: *Self, data: []const u8) error{Full}!void { buffer.assert_valid(); defer buffer.assert_valid(); - for (data) |d| { if (buffer.full) return error.Full; buffer.items[buffer.end] = d; buffer.increment_end(); + if (buffer.start == buffer.end) + buffer.full = true; } } @@ -646,14 +647,17 @@ test "CircularBuffer bounds" { const FIFO = CircularBuffer(u8, bufsize); var fifo: FIFO = .empty; try expectEqual(bufsize, fifo.get_writable_len()); + const one_data: [1]u8 = .{42}; try fifo.write(one_data[0..]); try expectEqual(bufsize - 1, fifo.get_writable_len()); + try expectEqual(1, fifo.get_readable_len()); - var big_data: [100]u8 = undefined; - @memset(big_data[0..], 42); - - const maybe_err = fifo.write(big_data[0..]); + var buf: [100]u8 = undefined; + const big_data = buf[0..]; + @memset(big_data, 42); + try expectEqual(big_data.len, 100); + const maybe_err = fifo.write(big_data); try std.testing.expectError(error.Full, maybe_err); }