| ... | ... | @@ -178,6 +178,24 @@ test Tag { |
| 178 | 178 | try std.testing.expectEqual(Tag.init(@enumFromInt(3), true, .context_specific), t); |
| 179 | 179 | } |
| 180 | 180 | |
| 181 | test "Tag.encode produces the exact bytes from X.690" { |
| 182 | const cases = [_]struct { number: u16, expected: []const u8 }{ |
| 183 | .{ .number = 0, .expected = &.{0x00} }, |
| 184 | .{ .number = 30, .expected = &.{0x1e} }, |
| 185 | .{ .number = 31, .expected = &.{ 0x1f, 0x1f } }, |
| 186 | .{ .number = 127, .expected = &.{ 0x1f, 0x7f } }, |
| 187 | .{ .number = 128, .expected = &.{ 0x1f, 0x81, 0x00 } }, |
| 188 | .{ .number = 16383, .expected = &.{ 0x1f, 0xff, 0x7f } }, |
| 189 | .{ .number = 16384, .expected = &.{ 0x1f, 0x81, 0x80, 0x00 } }, |
| 190 | .{ .number = 65535, .expected = &.{ 0x1f, 0x83, 0xff, 0x7f } }, |
| 191 | }; |
| 192 | for (cases) |c| { |
| 193 | const tag = Tag.init(@enumFromInt(c.number), false, .universal); |
| 194 | var buf: [Tag.max_encoded_len]u8 = undefined; |
| 195 | try std.testing.expectEqualSlices(u8, c.expected, tag.encodeToSlice(&buf)); |
| 196 | } |
| 197 | } |
| 198 | |
| 181 | 199 | test "Tag.encode/decode round trip" { |
| 182 | 200 | for ([_]u16{ 0, 30, 31, 32, 127, 128, 16383, 16384, 65535 }) |n| { |
| 183 | 201 | const tag = Tag.init(@enumFromInt(n), false, .universal); |