From b4444d04c3427912d517f01dcb07608f6447dc41 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Mon, 3 Jun 2024 19:09:03 -0400 Subject: [PATCH] Pass test for `decodeChunksVectored` --- src/root.zig | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/root.zig b/src/root.zig index 3ff4c26..88d9948 100644 --- a/src/root.zig +++ b/src/root.zig @@ -116,12 +116,13 @@ pub const b64Alphabet = struct { var numvec: @Vector(4, u24) = @splat(0); const shlvec: @Vector(4, usize) = @splat(6); for (0..4) |i| { + const idx: u8 = @truncate(i); numvec <<= shlvec; var inarr: [4]u6 = undefined; - inarr[0] = try self.getIdx(i); - inarr[1] = try self.getIdx(in[i + 4]); - inarr[2] = try self.getIdx(in[i + 8]); - inarr[3] = try self.getIdx(in[i + 12]); + inarr[0] = try self.getIdx(in[idx]); + inarr[1] = try self.getIdx(in[idx + 4]); + inarr[2] = try self.getIdx(in[idx + 8]); + inarr[3] = try self.getIdx(in[idx + 12]); const invec: @Vector(4, u6) = inarr; numvec |= invec; } @@ -133,10 +134,10 @@ pub const b64Alphabet = struct { numvec >>= shrvec; }) { const cvec = numvec & maskvec; - outbuf[idx - 1] = cvec[0]; - outbuf[idx + 2] = cvec[1]; - outbuf[idx + 5] = cvec[2]; - outbuf[idx + 8] = cvec[3]; + outbuf[idx - 1] = @truncate(cvec[0]); + outbuf[idx + 2] = @truncate(cvec[1]); + outbuf[idx + 5] = @truncate(cvec[2]); + outbuf[idx + 8] = @truncate(cvec[3]); } return outbuf; } @@ -177,6 +178,13 @@ test "encode chunks vectored" { try testing.expect(std.mem.eql(u8, obuf[0..], "SGVsbG8sIFdvcmxk")); } +test "decode chunks vectored" { + const chunk = [16]u8{ 'S', 'G', 'V', 's', 'b', 'G', '8', 's', 'I', 'F', 'd', 'v', 'c', 'm', 'x', 'k' }; + var out: [12]u8 = undefined; + const obuf = try rfc4648B64Alphabet.decodeChunksVectored(chunk, &out); + try testing.expect(std.mem.eql(u8, obuf[0..], "Hello, World")); +} + test "decode chunk" { const chunk = [4]u8{ 'S', 'G', 'V', 's' }; var out: [3]u8 = undefined;