Skip to content

Commit 19f8b18

Browse files
committed
refactor(bench): optimize performance benchmarking implementation
- consolidate benchmark functions with consistent structure - remove redundant code and improve readability - standardize buffer initialization and payload generation - enhance test coverage for various payload types
1 parent 1e7069f commit 19f8b18

File tree

4 files changed

+153
-156
lines changed

4 files changed

+153
-156
lines changed

build.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub fn build(b: *std.Build) void {
1717

1818
const test_step = b.step("test", "Run unit tests");
1919

20-
const bench_step = b.step("bench", "Run benchmarks");
20+
const bench_step = b.step("bench", "Run benchmarks");
2121

2222
const msgpack_unit_tests = if (builtin.zig_version.minor == 14) b.addTest(.{
2323
.root_source_file = b.path(b.pathJoin(&.{ "src", "test.zig" })),

src/bench.zig

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn benchNilRead(allocator: std.mem.Allocator) !void {
8282
var p = pack.init(&write_buffer, &read_buffer);
8383

8484
try p.write(Payload.nilToPayload());
85-
85+
8686
read_buffer = fixedBufferStream(&arr);
8787
p = pack.init(&write_buffer, &read_buffer);
8888
const val = try p.read(allocator);
@@ -106,7 +106,7 @@ fn benchBoolRead(allocator: std.mem.Allocator) !void {
106106
var p = pack.init(&write_buffer, &read_buffer);
107107

108108
try p.write(Payload.boolToPayload(true));
109-
109+
110110
read_buffer = fixedBufferStream(&arr);
111111
p = pack.init(&write_buffer, &read_buffer);
112112
const val = try p.read(allocator);
@@ -130,7 +130,7 @@ fn benchSmallIntRead(allocator: std.mem.Allocator) !void {
130130
var p = pack.init(&write_buffer, &read_buffer);
131131

132132
try p.write(Payload.intToPayload(42));
133-
133+
134134
read_buffer = fixedBufferStream(&arr);
135135
p = pack.init(&write_buffer, &read_buffer);
136136
const val = try p.read(allocator);
@@ -154,7 +154,7 @@ fn benchLargeIntRead(allocator: std.mem.Allocator) !void {
154154
var p = pack.init(&write_buffer, &read_buffer);
155155

156156
try p.write(Payload.intToPayload(9223372036854775807));
157-
157+
158158
read_buffer = fixedBufferStream(&arr);
159159
p = pack.init(&write_buffer, &read_buffer);
160160
const val = try p.read(allocator);
@@ -178,7 +178,7 @@ fn benchFloatRead(allocator: std.mem.Allocator) !void {
178178
var p = pack.init(&write_buffer, &read_buffer);
179179

180180
try p.write(Payload.floatToPayload(3.14159265359));
181-
181+
182182
read_buffer = fixedBufferStream(&arr);
183183
p = pack.init(&write_buffer, &read_buffer);
184184
const val = try p.read(allocator);
@@ -209,7 +209,7 @@ fn benchShortStrRead(allocator: std.mem.Allocator) !void {
209209
const str = try Payload.strToPayload("hello", allocator);
210210
defer str.free(allocator);
211211
try p.write(str);
212-
212+
213213
read_buffer = fixedBufferStream(&arr);
214214
p = pack.init(&write_buffer, &read_buffer);
215215
const val = try p.read(allocator);
@@ -238,7 +238,7 @@ fn benchMediumStrRead(allocator: std.mem.Allocator) !void {
238238
const str = try Payload.strToPayload(test_str, allocator);
239239
defer str.free(allocator);
240240
try p.write(str);
241-
241+
242242
read_buffer = fixedBufferStream(&arr);
243243
p = pack.init(&write_buffer, &read_buffer);
244244
const val = try p.read(allocator);
@@ -271,7 +271,7 @@ fn benchSmallBinRead(allocator: std.mem.Allocator) !void {
271271
const bin = try Payload.binToPayload(&data, allocator);
272272
defer bin.free(allocator);
273273
try p.write(bin);
274-
274+
275275
read_buffer = fixedBufferStream(&arr);
276276
p = pack.init(&write_buffer, &read_buffer);
277277
const val = try p.read(allocator);
@@ -306,7 +306,7 @@ fn benchLargeBinRead(allocator: std.mem.Allocator) !void {
306306
const bin = try Payload.binToPayload(data, allocator);
307307
defer bin.free(allocator);
308308
try p.write(bin);
309-
309+
310310
read_buffer = fixedBufferStream(&arr);
311311
p = pack.init(&write_buffer, &read_buffer);
312312
const val = try p.read(allocator);
@@ -343,7 +343,7 @@ fn benchSmallArrayRead(allocator: std.mem.Allocator) !void {
343343
try array.setArrElement(i, Payload.intToPayload(@intCast(i)));
344344
}
345345
try p.write(array);
346-
346+
347347
read_buffer = fixedBufferStream(&arr);
348348
p = pack.init(&write_buffer, &read_buffer);
349349
const val = try p.read(allocator);
@@ -376,7 +376,7 @@ fn benchMediumArrayRead(allocator: std.mem.Allocator) !void {
376376
try array.setArrElement(i, Payload.intToPayload(@intCast(i)));
377377
}
378378
try p.write(array);
379-
379+
380380
read_buffer = fixedBufferStream(&arr);
381381
p = pack.init(&write_buffer, &read_buffer);
382382
const val = try p.read(allocator);
@@ -395,13 +395,13 @@ fn benchSmallMapWrite(allocator: std.mem.Allocator) !void {
395395

396396
var map = Payload.mapPayload(allocator);
397397
defer map.free(allocator);
398-
398+
399399
for (0..10) |i| {
400400
const key = try std.fmt.allocPrint(allocator, "key{d}", .{i});
401401
defer allocator.free(key);
402402
try map.mapPut(key, Payload.intToPayload(@intCast(i)));
403403
}
404-
404+
405405
try p.write(map);
406406
}
407407

@@ -413,15 +413,15 @@ fn benchSmallMapRead(allocator: std.mem.Allocator) !void {
413413

414414
var map = Payload.mapPayload(allocator);
415415
defer map.free(allocator);
416-
416+
417417
for (0..10) |i| {
418418
const key = try std.fmt.allocPrint(allocator, "key{d}", .{i});
419419
defer allocator.free(key);
420420
try map.mapPut(key, Payload.intToPayload(@intCast(i)));
421421
}
422-
422+
423423
try p.write(map);
424-
424+
425425
read_buffer = fixedBufferStream(&arr);
426426
p = pack.init(&write_buffer, &read_buffer);
427427
const val = try p.read(allocator);
@@ -436,13 +436,13 @@ fn benchMediumMapWrite(allocator: std.mem.Allocator) !void {
436436

437437
var map = Payload.mapPayload(allocator);
438438
defer map.free(allocator);
439-
439+
440440
for (0..50) |i| {
441441
const key = try std.fmt.allocPrint(allocator, "key{d}", .{i});
442442
defer allocator.free(key);
443443
try map.mapPut(key, Payload.intToPayload(@intCast(i)));
444444
}
445-
445+
446446
try p.write(map);
447447
}
448448

@@ -454,15 +454,15 @@ fn benchMediumMapRead(allocator: std.mem.Allocator) !void {
454454

455455
var map = Payload.mapPayload(allocator);
456456
defer map.free(allocator);
457-
457+
458458
for (0..50) |i| {
459459
const key = try std.fmt.allocPrint(allocator, "key{d}", .{i});
460460
defer allocator.free(key);
461461
try map.mapPut(key, Payload.intToPayload(@intCast(i)));
462462
}
463-
463+
464464
try p.write(map);
465-
465+
466466
read_buffer = fixedBufferStream(&arr);
467467
p = pack.init(&write_buffer, &read_buffer);
468468
const val = try p.read(allocator);
@@ -495,7 +495,7 @@ fn benchExtRead(allocator: std.mem.Allocator) !void {
495495
const ext = try Payload.extToPayload(42, &data, allocator);
496496
defer ext.free(allocator);
497497
try p.write(ext);
498-
498+
499499
read_buffer = fixedBufferStream(&arr);
500500
p = pack.init(&write_buffer, &read_buffer);
501501
const val = try p.read(allocator);
@@ -525,7 +525,7 @@ fn benchTimestamp32Read(allocator: std.mem.Allocator) !void {
525525

526526
const ts = Payload.timestampFromSeconds(1234567890);
527527
try p.write(ts);
528-
528+
529529
read_buffer = fixedBufferStream(&arr);
530530
p = pack.init(&write_buffer, &read_buffer);
531531
const val = try p.read(allocator);
@@ -551,7 +551,7 @@ fn benchTimestamp64Read(allocator: std.mem.Allocator) !void {
551551

552552
const ts = Payload.timestampToPayload(1234567890, 123456789);
553553
try p.write(ts);
554-
554+
555555
read_buffer = fixedBufferStream(&arr);
556556
p = pack.init(&write_buffer, &read_buffer);
557557
const val = try p.read(allocator);
@@ -573,17 +573,17 @@ fn benchNestedStructureWrite(allocator: std.mem.Allocator) !void {
573573
defer root.free(allocator);
574574

575575
var users = try Payload.arrPayload(2, allocator);
576-
576+
577577
var user1 = Payload.mapPayload(allocator);
578578
try user1.mapPut("id", Payload.intToPayload(1));
579579
try user1.mapPut("name", try Payload.strToPayload("Alice", allocator));
580580
try users.setArrElement(0, user1);
581-
581+
582582
var user2 = Payload.mapPayload(allocator);
583583
try user2.mapPut("id", Payload.intToPayload(2));
584584
try user2.mapPut("name", try Payload.strToPayload("Bob", allocator));
585585
try users.setArrElement(1, user2);
586-
586+
587587
try root.mapPut("users", users);
588588
try p.write(root);
589589
}
@@ -598,20 +598,20 @@ fn benchNestedStructureRead(allocator: std.mem.Allocator) !void {
598598
defer root.free(allocator);
599599

600600
var users = try Payload.arrPayload(2, allocator);
601-
601+
602602
var user1 = Payload.mapPayload(allocator);
603603
try user1.mapPut("id", Payload.intToPayload(1));
604604
try user1.mapPut("name", try Payload.strToPayload("Alice", allocator));
605605
try users.setArrElement(0, user1);
606-
606+
607607
var user2 = Payload.mapPayload(allocator);
608608
try user2.mapPut("id", Payload.intToPayload(2));
609609
try user2.mapPut("name", try Payload.strToPayload("Bob", allocator));
610610
try users.setArrElement(1, user2);
611-
611+
612612
try root.mapPut("users", users);
613613
try p.write(root);
614-
614+
615615
read_buffer = fixedBufferStream(&arr);
616616
p = pack.init(&write_buffer, &read_buffer);
617617
const val = try p.read(allocator);
@@ -626,28 +626,28 @@ fn benchMixedTypesWrite(allocator: std.mem.Allocator) !void {
626626

627627
var mixed = try Payload.arrPayload(10, allocator);
628628
defer mixed.free(allocator);
629-
629+
630630
try mixed.setArrElement(0, Payload.nilToPayload());
631631
try mixed.setArrElement(1, Payload.boolToPayload(true));
632632
try mixed.setArrElement(2, Payload.intToPayload(-100));
633633
try mixed.setArrElement(3, Payload.uintToPayload(200));
634634
try mixed.setArrElement(4, Payload.floatToPayload(3.14));
635635
try mixed.setArrElement(5, try Payload.strToPayload("hello", allocator));
636-
636+
637637
var bin_data = [_]u8{1} ** 8;
638638
try mixed.setArrElement(6, try Payload.binToPayload(&bin_data, allocator));
639-
639+
640640
var inner_arr = try Payload.arrPayload(2, allocator);
641641
try inner_arr.setArrElement(0, Payload.intToPayload(1));
642642
try inner_arr.setArrElement(1, Payload.intToPayload(2));
643643
try mixed.setArrElement(7, inner_arr);
644-
644+
645645
var inner_map = Payload.mapPayload(allocator);
646646
try inner_map.mapPut("key", Payload.intToPayload(42));
647647
try mixed.setArrElement(8, inner_map);
648-
648+
649649
try mixed.setArrElement(9, Payload.timestampFromSeconds(1000000));
650-
650+
651651
try p.write(mixed);
652652
}
653653

@@ -659,30 +659,30 @@ fn benchMixedTypesRead(allocator: std.mem.Allocator) !void {
659659

660660
var mixed = try Payload.arrPayload(10, allocator);
661661
defer mixed.free(allocator);
662-
662+
663663
try mixed.setArrElement(0, Payload.nilToPayload());
664664
try mixed.setArrElement(1, Payload.boolToPayload(true));
665665
try mixed.setArrElement(2, Payload.intToPayload(-100));
666666
try mixed.setArrElement(3, Payload.uintToPayload(200));
667667
try mixed.setArrElement(4, Payload.floatToPayload(3.14));
668668
try mixed.setArrElement(5, try Payload.strToPayload("hello", allocator));
669-
669+
670670
var bin_data = [_]u8{1} ** 8;
671671
try mixed.setArrElement(6, try Payload.binToPayload(&bin_data, allocator));
672-
672+
673673
var inner_arr = try Payload.arrPayload(2, allocator);
674674
try inner_arr.setArrElement(0, Payload.intToPayload(1));
675675
try inner_arr.setArrElement(1, Payload.intToPayload(2));
676676
try mixed.setArrElement(7, inner_arr);
677-
677+
678678
var inner_map = Payload.mapPayload(allocator);
679679
try inner_map.mapPut("key", Payload.intToPayload(42));
680680
try mixed.setArrElement(8, inner_map);
681-
681+
682682
try mixed.setArrElement(9, Payload.timestampFromSeconds(1000000));
683-
683+
684684
try p.write(mixed);
685-
685+
686686
read_buffer = fixedBufferStream(&arr);
687687
p = pack.init(&write_buffer, &read_buffer);
688688
const val = try p.read(allocator);

src/msgpack.zig

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -590,11 +590,11 @@ pub const MsgPackError = error{
590590
Internal,
591591

592592
// New safety errors for iterative parser
593-
MaxDepthExceeded, // Nesting depth exceeded limit
594-
ArrayTooLarge, // Array has too many elements
595-
MapTooLarge, // Map has too many key-value pairs
596-
StringTooLong, // String exceeds length limit
597-
ExtDataTooLarge, // Extension data exceeds length limit
593+
MaxDepthExceeded, // Nesting depth exceeded limit
594+
ArrayTooLarge, // Array has too many elements
595+
MapTooLarge, // Map has too many key-value pairs
596+
StringTooLong, // String exceeds length limit
597+
ExtDataTooLarge, // Extension data exceeds length limit
598598
};
599599

600600
/// Create an instance of msgpack_pack with custom limits
@@ -1632,22 +1632,22 @@ pub fn PackWithLimits(
16321632
// Handle EXT8 special case (need to read length first)
16331633
if (marker == .EXT8) {
16341634
const len_info = try self.readExt8Length();
1635-
1635+
16361636
// If not timestamp length, read as regular EXT
16371637
if (!len_info.is_timestamp_candidate) {
16381638
const ext_type = try self.readI8Value();
16391639
return try self.readRegularExt(ext_type, len_info.len, allocator);
16401640
}
16411641
}
1642-
1642+
16431643
// Read extension type to determine if it's a timestamp
16441644
const ext_type = try self.readI8Value();
1645-
1645+
16461646
// Timestamp type: read timestamp data
16471647
if (ext_type == TIMESTAMP_EXT_TYPE) {
16481648
return try self.readTimestampPayload(marker);
16491649
}
1650-
1650+
16511651
// Regular EXT: read remaining data
16521652
const actual_len = if (marker == .EXT8) TIMESTAMP96_DATA_LEN else getExtLength(marker);
16531653
return try self.readRegularExt(ext_type, actual_len, allocator);
@@ -1693,9 +1693,9 @@ pub fn PackWithLimits(
16931693
/// Parse state for iterative parsing
16941694
const ParseState = struct {
16951695
container_type: enum {
1696-
array, // Parsing array elements
1697-
map_key, // Expecting map key (must be string)
1698-
map_value, // Expecting map value
1696+
array, // Parsing array elements
1697+
map_key, // Expecting map key (must be string)
1698+
map_value, // Expecting map value
16991699
},
17001700
data: union(enum) {
17011701
array: ArrayState,

0 commit comments

Comments
 (0)