1
Fork 0

fix one-off bugs

main
Motiejus Jakštys 2022-03-18 18:11:45 +01:00 committed by Motiejus Jakštys
parent 0331364da2
commit bb3577f7b3
1 changed files with 15 additions and 5 deletions

View File

@ -394,10 +394,16 @@ fn cmpGroup(_: void, a: Group, b: Group) bool {
}
// nblocks returns how many blocks a particular slice will take.
fn nblocks(arr: []const u8) u32 {
const upper = pad.roundUp(u38, section_length_bits, @intCast(u38, arr.len));
fn nblocks(comptime T: type, arr: []const u8) T {
const B = switch (T) {
u8 => u14,
u32 => u38,
u64 => u70,
else => @compileError("only u8, u32 and u64 are supported"),
};
const upper = pad.roundUp(B, section_length_bits, @intCast(B, arr.len));
assert(upper & (section_length - 1) == 0);
return @truncate(u32, upper >> 6);
return @truncate(T, upper >> 6);
}
pub const AllSections = struct {
@ -780,8 +786,12 @@ test "nblocks" {
.{ 1, &[_]u8{1} ** 63 },
.{ 1, &[_]u8{1} ** 64 },
.{ 2, &[_]u8{1} ** 65 },
.{ 255, &[_]u8{1} ** (255 * 64) },
};
inline for (tests) |tt|
try testing.expectEqual(@as(u32, tt[0]), nblocks(tt[1]));
inline for (tests) |tt| {
try testing.expectEqual(nblocks(u8, tt[1]), tt[0]);
try testing.expectEqual(nblocks(u32, tt[1]), tt[0]);
try testing.expectEqual(nblocks(u64, tt[1]), tt[0]);
}
}