From 2f1052a313cb09f87f04cef56805c33be62eb169 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Tue, 10 Mar 2020 23:50:04 +0100 Subject: [PATCH] std: Fix broken tests --- lib/std/io.zig | 10 ++++++++-- lib/std/mem.zig | 8 +++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/std/io.zig b/lib/std/io.zig index 99e9391f1d..f823eb8115 100644 --- a/lib/std/io.zig +++ b/lib/std/io.zig @@ -350,12 +350,18 @@ pub fn BitInStream(endian: builtin.Endian, comptime Error: type) type { switch (endian) { .Big => { out_buffer = @as(Buf, self.bit_buffer >> shift); - self.bit_buffer <<= n; + if (n >= u7_bit_count) + self.bit_buffer = 0 + else + self.bit_buffer <<= n; }, .Little => { const value = (self.bit_buffer << shift) >> shift; out_buffer = @as(Buf, value); - self.bit_buffer >>= n; + if (n >= u7_bit_count) + self.bit_buffer = 0 + else + self.bit_buffer >>= n; }, } self.bit_count -= n; diff --git a/lib/std/mem.zig b/lib/std/mem.zig index 4da7829570..bee38a30f6 100644 --- a/lib/std/mem.zig +++ b/lib/std/mem.zig @@ -921,6 +921,9 @@ pub fn writeInt(comptime T: type, buffer: *[@divExact(T.bit_count, 8)]u8, value: pub fn writeIntSliceLittle(comptime T: type, buffer: []u8, value: T) void { assert(buffer.len >= @divExact(T.bit_count, 8)); + if (T.bit_count == 0) + return set(u8, buffer, 0); + // TODO I want to call writeIntLittle here but comptime eval facilities aren't good enough const uint = std.meta.IntType(false, T.bit_count); var bits = @truncate(uint, value); @@ -938,6 +941,9 @@ pub fn writeIntSliceLittle(comptime T: type, buffer: []u8, value: T) void { pub fn writeIntSliceBig(comptime T: type, buffer: []u8, value: T) void { assert(buffer.len >= @divExact(T.bit_count, 8)); + if (T.bit_count == 0) + return set(u8, buffer, 0); + // TODO I want to call writeIntBig here but comptime eval facilities aren't good enough const uint = std.meta.IntType(false, T.bit_count); var bits = @truncate(uint, value); @@ -1807,7 +1813,7 @@ test "sliceAsBytes" { } test "sliceAsBytes with sentinel slice" { - const empty_string:[:0]const u8 = ""; + const empty_string: [:0]const u8 = ""; const bytes = sliceAsBytes(empty_string); testing.expect(bytes.len == 0); }