diff --git a/lib/std/io/stream/buffer.c3 b/lib/std/io/stream/buffer.c3 index eb44bc3c8..c158e2b5e 100644 --- a/lib/std/io/stream/buffer.c3 +++ b/lib/std/io/stream/buffer.c3 @@ -120,7 +120,7 @@ fn usz! WriteBuffer.write(&self, char[] bytes) @dynamic fn void! WriteBuffer.write_byte(&self, char c) @dynamic { - usz n = self.bytes.len - self.index - 1; + usz n = self.bytes.len - self.index; if (n == 0) { self.write_pending()!; diff --git a/test/unit/stdlib/io/bufferstream.c3 b/test/unit/stdlib/io/bufferstream.c3 index a40234c20..1443279bf 100644 --- a/test/unit/stdlib/io/bufferstream.c3 +++ b/test/unit/stdlib/io/bufferstream.c3 @@ -66,4 +66,29 @@ fn void! writebuffer() assert(n == DATA.len, "got %d; want %d", n, DATA.len); String got = out.str_view(); assert(got == DATA, "got %s; want %s", got, DATA); -} \ No newline at end of file +} + +fn void! writebuffer_write_byte() +{ + ByteWriter out; + out.temp_init(); + char[2] buf; + WriteBuffer write_buf; + write_buf.init(&out, buf[..]); + + write_buf.write_byte('a')!; + assert(write_buf.str_view() == "a"); + assert(out.str_view() == ""); + + write_buf.write_byte('b')!; + assert(write_buf.str_view() == "ab"); + assert(out.str_view() == ""); + + write_buf.write_byte('c')!; + assert(write_buf.str_view() == "c"); + assert(out.str_view() == "ab"); + + write_buf.flush()!; + assert(write_buf.str_view() == ""); + assert(out.str_view() == "abc"); +}