From 66eed1699e21ad7a3c6e2ab361fb3d19a0f1d180 Mon Sep 17 00:00:00 2001 From: nullstyle Date: Wed, 18 Mar 2026 15:59:43 -0700 Subject: [PATCH 1/2] chore: ignore local worktrees --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c95a1a8..06064b8 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ examples/kvstore/go-client/kvstore-client test_* e2e_runner .tmp/ +.worktrees/ # Dolt database files (added by bd init) .dolt/ From 2c5c01f7a4e424f59cffc96fb39ac9f0e0efb7f8 Mon Sep 17 00:00:00 2001 From: nullstyle Date: Wed, 18 Mar 2026 19:52:25 -0700 Subject: [PATCH 2/2] fix: restore Zig master compatibility --- bench/packed_unpacked.zig | 11 +---- bench/ping_pong.zig | 11 +---- src/capnpc-zig/generator.zig | 18 ++++---- src/capnpc-zig/struct_gen.zig | 2 +- src/capnpc-zig/types.zig | 2 +- src/rpc/integration/host_peer.zig | 4 +- src/rpc/level0/cap_table.zig | 6 +-- src/rpc/level0/framing.zig | 2 +- src/rpc/level1/peer_promises.zig | 2 +- src/rpc/level2/connection.zig | 6 +-- src/rpc/level2/transport.zig | 6 +-- src/rpc/level3/peer.zig | 2 +- src/rpc/level3/peer/peer_cap_lifecycle.zig | 2 +- src/rpc/level3/peer/peer_embargo_accepts.zig | 12 ++--- .../level3/peer/provide/peer_join_state.zig | 4 +- src/serialization/message.zig | 12 ++--- src/serialization/reader.zig | 2 +- tests/e2e/zig/main_client.zig | 4 +- tests/e2e/zig/main_server.zig | 30 ++++++------- .../rpc_peer_return_send_helpers_test.zig | 2 +- tests/rpc/level2/rpc_peer_cleanup_test.zig | 6 +-- .../level3/rpc_peer_from_peer_zig_test.zig | 44 +++++++++---------- tests/rpc/level3/rpc_peer_test.zig | 42 +++++++++--------- .../level3/rpc_release_and_failure_test.zig | 32 +++++++------- .../serialization/capnp_test_vendor_test.zig | 9 ++++ .../codegen_generated_runtime_test.zig | 2 +- tests/serialization/codegen_golden_test.zig | 2 +- .../serialization/codegen_streaming_test.zig | 14 +++++- tests/serialization/integration_test.zig | 14 +++++- .../serialization/interop_roundtrip_test.zig | 2 +- tests/serialization/message_test.zig | 18 ++++---- tools/bench_check.zig | 4 +- tools/e2e_runner.zig | 8 ++-- 33 files changed, 178 insertions(+), 159 deletions(-) diff --git a/bench/packed_unpacked.zig b/bench/packed_unpacked.zig index 9a2c141..93c8205 100644 --- a/bench/packed_unpacked.zig +++ b/bench/packed_unpacked.zig @@ -270,15 +270,8 @@ fn measureAllocationSample( } pub fn main(init: std.process.Init) !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer { - const deinit_status = gpa.deinit(); - if (deinit_status == .leak) { - std.debug.print("warning: allocator reported leaks\n", .{}); - } - } - - const allocator = gpa.allocator(); + // Keep benchmark timings close to release behavior rather than debug allocator overhead. + const allocator = std.heap.smp_allocator; const io = init.io; const cfg = (parseArgs(init.minimal.args, io) catch |err| { diff --git a/bench/ping_pong.zig b/bench/ping_pong.zig index 6f34ebf..03dcb1c 100644 --- a/bench/ping_pong.zig +++ b/bench/ping_pong.zig @@ -219,15 +219,8 @@ fn measureAllocationSample( } pub fn main(init: std.process.Init) !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer { - const deinit_status = gpa.deinit(); - if (deinit_status == .leak) { - std.debug.print("warning: allocator reported leaks\n", .{}); - } - } - - const allocator = gpa.allocator(); + // Keep benchmark timings close to release behavior rather than debug allocator overhead. + const allocator = std.heap.smp_allocator; const io = init.io; const cfg = (parseArgs(init.minimal.args, io) catch |err| { diff --git a/src/capnpc-zig/generator.zig b/src/capnpc-zig/generator.zig index b7c33c2..28f0598 100644 --- a/src/capnpc-zig/generator.zig +++ b/src/capnpc-zig/generator.zig @@ -157,7 +157,7 @@ pub const Generator = struct { // Generate declarations into a body buffer first, then emit only imports // that are actually referenced by generated declarations. - var body = std.ArrayList(u8){}; + var body = std.ArrayList(u8).empty; defer body.deinit(self.allocator); const body_writer = ArrayListWriter{ .list = &body, .allocator = self.allocator }; @@ -173,7 +173,7 @@ pub const Generator = struct { try self.generateNodeRecursive(nested.id, &generated, &body); } - var output = std.ArrayList(u8){}; + var output = std.ArrayList(u8).empty; errdefer output.deinit(self.allocator); const writer = ArrayListWriter{ .list = &output, .allocator = self.allocator }; @@ -235,7 +235,7 @@ pub const Generator = struct { var seen = std.AutoHashMap(schema.Id, void).init(self.allocator); defer seen.deinit(); - var entries = std.ArrayList(ManifestSerdeEntry){}; + var entries = std.ArrayList(ManifestSerdeEntry).empty; defer { for (entries.items) |entry| { self.allocator.free(entry.type_name); @@ -503,7 +503,7 @@ pub const Generator = struct { /// Reuses the first declaration for identical struct bodies by emitting a /// type alias for later occurrences. fn generateStructWithShapeSharing(self: *Generator, node: *const schema.Node, writer: anytype) !void { - var struct_buf = std.ArrayList(u8){}; + var struct_buf = std.ArrayList(u8).empty; defer struct_buf.deinit(self.allocator); { @@ -560,7 +560,7 @@ pub const Generator = struct { /// Walk superclasses recursively to collect all ancestor interfaces (not including self). /// Deduplicates by interface_id to handle diamond inheritance. fn collectAncestors(self: *Generator, node: *const schema.Node) ![]AncestorInfo { - var result = std.ArrayList(AncestorInfo){}; + var result = std.ArrayList(AncestorInfo).empty; errdefer { for (result.items) |a| self.allocator.free(a.name); result.deinit(self.allocator); @@ -1386,7 +1386,7 @@ pub const Generator = struct { const node = self.getNode(struct_id) orelse return try self.allocator.alloc(InterfaceFieldInfo, 0); const struct_info = node.struct_node orelse return try self.allocator.alloc(InterfaceFieldInfo, 0); - var result = std.ArrayList(InterfaceFieldInfo){}; + var result = std.ArrayList(InterfaceFieldInfo).empty; errdefer { for (result.items) |item| { self.allocator.free(item.name); @@ -1521,7 +1521,7 @@ pub const Generator = struct { } fn toSnakeCaseLower(self: *Generator, name: []const u8) ![]u8 { - var out = std.ArrayList(u8){}; + var out = std.ArrayList(u8).empty; errdefer out.deinit(self.allocator); var prev_was_sep = false; @@ -2685,7 +2685,7 @@ test "Generator.writeByteArrayLiteral formats bytes" { var gen = Generator.init(alloc, &.{}) catch unreachable; defer gen.deinit(); - var buf = std.ArrayList(u8){}; + var buf = std.ArrayList(u8).empty; defer buf.deinit(alloc); const writer = ArrayListWriter{ .list = &buf, .allocator = alloc }; @@ -2698,7 +2698,7 @@ test "Generator.writeByteArrayLiteral handles empty data" { var gen = Generator.init(alloc, &.{}) catch unreachable; defer gen.deinit(); - var buf = std.ArrayList(u8){}; + var buf = std.ArrayList(u8).empty; defer buf.deinit(alloc); const writer = ArrayListWriter{ .list = &buf, .allocator = alloc }; diff --git a/src/capnpc-zig/struct_gen.zig b/src/capnpc-zig/struct_gen.zig index 724d23a..1aac278 100644 --- a/src/capnpc-zig/struct_gen.zig +++ b/src/capnpc-zig/struct_gen.zig @@ -2185,7 +2185,7 @@ test "StructGenerator.writeByteArrayLiteral formats bytes" { const alloc = std.testing.allocator; var sg = StructGenerator.init(alloc); - var buf = std.ArrayList(u8){}; + var buf = std.ArrayList(u8).empty; defer buf.deinit(alloc); const writer = ArrayListWriter{ .list = &buf, .allocator = alloc }; diff --git a/src/capnpc-zig/types.zig b/src/capnpc-zig/types.zig index 55ac1fa..22d07ab 100644 --- a/src/capnpc-zig/types.zig +++ b/src/capnpc-zig/types.zig @@ -32,7 +32,7 @@ pub fn escapeZigKeyword(allocator: std.mem.Allocator, name: []const u8) ![]const } fn normalizeIdentifier(allocator: std.mem.Allocator, name: []const u8, capitalize_first: bool) ![]u8 { - var result = std.ArrayList(u8){}; + var result = std.ArrayList(u8).empty; errdefer result.deinit(allocator); var capitalize_next = capitalize_first; diff --git a/src/rpc/integration/host_peer.zig b/src/rpc/integration/host_peer.zig index 13c7cf6..104fd7a 100644 --- a/src/rpc/integration/host_peer.zig +++ b/src/rpc/integration/host_peer.zig @@ -46,8 +46,8 @@ pub const HostPeer = struct { .allocator = allocator, .outgoing_allocator = outgoing_allocator, .peer = peer_mod.Peer.initDetached(allocator), - .outgoing = std.ArrayList([]u8){}, - .host_calls = std.ArrayList(HostCall){}, + .outgoing = std.ArrayList([]u8).empty, + .host_calls = std.ArrayList(HostCall).empty, .pending_host_call_questions = std.AutoHashMap(u32, void).init(allocator), }; } diff --git a/src/rpc/level0/cap_table.zig b/src/rpc/level0/cap_table.zig index 94c3b7c..1301e3b 100644 --- a/src/rpc/level0/cap_table.zig +++ b/src/rpc/level0/cap_table.zig @@ -348,8 +348,8 @@ pub const OutboundCapEffects = struct { .allocator = allocator, .ctx = ctx, .on_entry_rollback = on_entry_rollback, - .callback_applied = std.ArrayList(OutboundEntry){}, - .consumed_receiver_answer_ids = std.ArrayList(u32){}, + .callback_applied = std.ArrayList(OutboundEntry).empty, + .consumed_receiver_answer_ids = std.ArrayList(u32).empty, }; } @@ -390,7 +390,7 @@ const OutboundCapTable = struct { fn init(allocator: std.mem.Allocator) OutboundCapTable { return .{ .allocator = allocator, - .entries = std.ArrayList(OutboundEntry){}, + .entries = std.ArrayList(OutboundEntry).empty, .index_map = std.AutoHashMap(u64, u32).init(allocator), }; } diff --git a/src/rpc/level0/framing.zig b/src/rpc/level0/framing.zig index 0fcfbf9..5a3c479 100644 --- a/src/rpc/level0/framing.zig +++ b/src/rpc/level0/framing.zig @@ -14,7 +14,7 @@ pub const Framer = struct { pub fn init(allocator: std.mem.Allocator) Framer { return .{ .allocator = allocator, - .buffer = std.ArrayList(u8){}, + .buffer = std.ArrayList(u8).empty, .expected_total = null, }; } diff --git a/src/rpc/level1/peer_promises.zig b/src/rpc/level1/peer_promises.zig index 5a30be9..e182e8d 100644 --- a/src/rpc/level1/peer_promises.zig +++ b/src/rpc/level1/peer_promises.zig @@ -22,7 +22,7 @@ pub fn queuePendingCall( var entry = try pending_calls.getOrPut(key); const inserted = !entry.found_existing; if (!entry.found_existing) { - entry.value_ptr.* = std.ArrayList(PendingCallType){}; + entry.value_ptr.* = std.ArrayList(PendingCallType).empty; } errdefer if (inserted and entry.value_ptr.items.len == 0) { _ = pending_calls.remove(key); diff --git a/src/rpc/level2/connection.zig b/src/rpc/level2/connection.zig index 3b552d5..7c90de7 100644 --- a/src/rpc/level2/connection.zig +++ b/src/rpc/level2/connection.zig @@ -406,7 +406,7 @@ test "connection handleRead assembles fragmented frame and dispatches once compl var state = Harness.State{ .allocator = allocator, - .received = std.ArrayList(u32){}, + .received = std.ArrayList(u32).empty, }; defer state.received.deinit(allocator); @@ -467,7 +467,7 @@ test "connection handleRead dispatches coalesced frames in order" { var state = Harness.State{ .allocator = allocator, - .received = std.ArrayList(u32){}, + .received = std.ArrayList(u32).empty, }; defer state.received.deinit(allocator); @@ -527,7 +527,7 @@ test "connection handleRead stops draining when message handler errors" { var state = Harness.State{ .allocator = allocator, - .received = std.ArrayList(u32){}, + .received = std.ArrayList(u32).empty, }; defer state.received.deinit(allocator); diff --git a/src/rpc/level2/transport.zig b/src/rpc/level2/transport.zig index 9995ca9..064da59 100644 --- a/src/rpc/level2/transport.zig +++ b/src/rpc/level2/transport.zig @@ -59,7 +59,7 @@ pub const Transport = struct { /// a socketpair for blocking/waking the writer thread. const WriteQueue = struct { mu: std.atomic.Mutex = .unlocked, - items: std.ArrayListUnmanaged([]u8) = .{}, + items: std.ArrayListUnmanaged([]u8) = .empty, closed: bool = false, /// Notification socketpair. [0]=read (writer thread), [1]=write (enqueue). /// Set to -1 when not initialized or after close. @@ -129,7 +129,7 @@ pub const Transport = struct { defer self.mu.unlock(); if (self.items.items.len == 0) return null; const result = self.items; - self.items = .{}; + self.items = .empty; return result; } @@ -158,7 +158,7 @@ pub const Transport = struct { // Reinitialize to valid empty state. ArrayListUnmanaged.deinit // sets self.* = undefined, so a second drain would crash without // this reset. - self.items = .{}; + self.items = .empty; } }; diff --git a/src/rpc/level3/peer.zig b/src/rpc/level3/peer.zig index 9ebc173..23fedd6 100644 --- a/src/rpc/level3/peer.zig +++ b/src/rpc/level3/peer.zig @@ -1787,7 +1787,7 @@ pub const Peer = struct { question_id: u32, ) !bool { var canceled = false; - var empty_keys = std.ArrayList(u32){}; + var empty_keys = std.ArrayList(u32).empty; defer empty_keys.deinit(self.allocator); var pending_it = pending_map.iterator(); diff --git a/src/rpc/level3/peer/peer_cap_lifecycle.zig b/src/rpc/level3/peer/peer_cap_lifecycle.zig index 5f0a584..559a755 100644 --- a/src/rpc/level3/peer/peer_cap_lifecycle.zig +++ b/src/rpc/level3/peer/peer_cap_lifecycle.zig @@ -345,7 +345,7 @@ test "peer_cap_lifecycle releaseResultCaps releases sender-hosted and sender-pro releases: std.ArrayList(u32), fn init() @This() { - return .{ .releases = std.ArrayList(u32){} }; + return .{ .releases = std.ArrayList(u32).empty }; } fn deinit(state: *@This(), allocator: std.mem.Allocator) void { diff --git a/src/rpc/level3/peer/peer_embargo_accepts.zig b/src/rpc/level3/peer/peer_embargo_accepts.zig index b0a12d1..d5a23b7 100644 --- a/src/rpc/level3/peer/peer_embargo_accepts.zig +++ b/src/rpc/level3/peer/peer_embargo_accepts.zig @@ -31,7 +31,7 @@ pub fn queueEmbargoedAccept( const key = try allocator.dupe(u8, embargo); errdefer allocator.free(key); - var pending = std.ArrayList(PendingAcceptType){}; + var pending = std.ArrayList(PendingAcceptType).empty; errdefer pending.deinit(allocator); try pending.append(allocator, .{ .answer_id = answer_id, @@ -335,8 +335,8 @@ test "peer_embargo_accepts release routes to provided target and exception for m fn init(allocator: std.mem.Allocator) @This() { return .{ .allocator = allocator, - .provided = std.ArrayList(SentResult){}, - .exceptions = std.ArrayList(SentException){}, + .provided = std.ArrayList(SentResult).empty, + .exceptions = std.ArrayList(SentException).empty, }; } @@ -437,7 +437,7 @@ test "peer_embargo_accepts release converts provided-send errors to return excep fn init(allocator: std.mem.Allocator) @This() { return .{ .allocator = allocator, - .exceptions = std.ArrayList(SentException){}, + .exceptions = std.ArrayList(SentException).empty, }; } @@ -563,8 +563,8 @@ test "peer_embargo_accepts peer helper factories queue and release through peer .pending_accepts_by_embargo = std.StringHashMap(std.ArrayList(TestPendingAccept)).init(std.testing.allocator), .pending_accept_embargo_by_question = std.AutoHashMap(u32, []u8).init(std.testing.allocator), .provides_by_question = std.AutoHashMap(u32, ProvideEntry).init(std.testing.allocator), - .provided = std.ArrayList(SentProvided){}, - .exceptions = std.ArrayList(SentException){}, + .provided = std.ArrayList(SentProvided).empty, + .exceptions = std.ArrayList(SentException).empty, }; defer peer.deinit(); diff --git a/src/rpc/level3/peer/provide/peer_join_state.zig b/src/rpc/level3/peer/provide/peer_join_state.zig index 5f15a48..9a2e1f2 100644 --- a/src/rpc/level3/peer/provide/peer_join_state.zig +++ b/src/rpc/level3/peer/provide/peer_join_state.zig @@ -321,8 +321,8 @@ const SendState = struct { fn init(allocator: std.mem.Allocator) @This() { return .{ .allocator = allocator, - .provided = std.ArrayList(SentProvided){}, - .exceptions = std.ArrayList(SentException){}, + .provided = std.ArrayList(SentProvided).empty, + .exceptions = std.ArrayList(SentException).empty, }; } diff --git a/src/serialization/message.zig b/src/serialization/message.zig index f5571ab..a07694e 100644 --- a/src/serialization/message.zig +++ b/src/serialization/message.zig @@ -89,7 +89,7 @@ fn unpackPacked(allocator: std.mem.Allocator, packed_bytes: []const u8) ![]u8 { // Size-estimation pass: scan packed bytes to calculate exact output size. const total_size = try estimateUnpackedSize(packed_bytes); - var out = std.ArrayList(u8){}; + var out = std.ArrayList(u8).empty; errdefer out.deinit(allocator); try out.ensureTotalCapacity(allocator, total_size); @@ -200,7 +200,7 @@ inline fn wordHasZeroByte(v: u64) bool { fn packPacked(allocator: std.mem.Allocator, bytes: []const u8) ![]u8 { if (bytes.len % 8 != 0) return error.InvalidMessageSize; - var out = std.ArrayList(u8){}; + var out = std.ArrayList(u8).empty; errdefer out.deinit(allocator); var index: usize = 0; @@ -1599,7 +1599,7 @@ pub const MessageBuilder = struct { pub fn init(allocator: std.mem.Allocator) MessageBuilder { return .{ .allocator = allocator, - .segments = std.ArrayList(std.ArrayList(u8)){}, + .segments = std.ArrayList(std.ArrayList(u8)).empty, }; } @@ -1614,7 +1614,7 @@ pub const MessageBuilder = struct { fn createSegmentWithCapacity(self: *MessageBuilder, min_capacity: usize) !u32 { if (self.segments.items.len > std.math.maxInt(u32)) return error.TooManySegments; const id: u32 = @intCast(self.segments.items.len); - try self.segments.append(self.allocator, std.ArrayList(u8){}); + try self.segments.append(self.allocator, std.ArrayList(u8).empty); errdefer _ = self.segments.pop(); if (min_capacity > 0) { try self.segments.items[id].ensureTotalCapacity(self.allocator, min_capacity); @@ -2073,7 +2073,7 @@ pub const MessageBuilder = struct { /// header followed by all segment data. The caller must free the returned /// slice. pub fn toBytes(self: *MessageBuilder) ![]const u8 { - var result = std.ArrayList(u8){}; + var result = std.ArrayList(u8).empty; errdefer result.deinit(self.allocator); // Ensure we have at least one segment @@ -2133,7 +2133,7 @@ pub const MessageBuilder = struct { /// Stream the framed wire format directly to `writer` without intermediate allocation. pub fn writeTo(self: *MessageBuilder, writer: anytype) !void { if (self.segments.items.len == 0) { - try self.segments.append(self.allocator, std.ArrayList(u8){}); + try self.segments.append(self.allocator, std.ArrayList(u8).empty); } const segment_count_usize = self.segments.items.len; diff --git a/src/serialization/reader.zig b/src/serialization/reader.zig index d412be6..36d26d6 100644 --- a/src/serialization/reader.zig +++ b/src/serialization/reader.zig @@ -128,7 +128,7 @@ pub const Reader = struct { /// segment_count is checked, so amplification from a malicious packed /// stream is limited to the header region. pub fn readPackedMessage(allocator: std.mem.Allocator, reader: anytype) ![]const u8 { - var out = std.ArrayList(u8){}; + var out = std.ArrayList(u8).empty; errdefer out.deinit(allocator); var total_needed: ?usize = null; diff --git a/tests/e2e/zig/main_client.zig b/tests/e2e/zig/main_client.zig index 9728427..fd47dbe 100644 --- a/tests/e2e/zig/main_client.zig +++ b/tests/e2e/zig/main_client.zig @@ -365,8 +365,8 @@ fn usage() void { } pub fn main(init: std.process.Init.Minimal) !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); + var gpa: std.heap.DebugAllocator(.{}) = .init; + defer std.debug.assert(gpa.deinit() == .ok); const allocator = gpa.allocator(); const args = parseArgs(allocator, init.args) catch |err| switch (err) { diff --git a/tests/e2e/zig/main_server.zig b/tests/e2e/zig/main_server.zig index 98ad2d0..47dc5ef 100644 --- a/tests/e2e/zig/main_server.zig +++ b/tests/e2e/zig/main_server.zig @@ -157,7 +157,7 @@ const ChatService = struct { return .{ .allocator = allocator, .rooms = std.StringHashMap(*ChatRoomState).init(allocator), - .room_sessions = std.ArrayList(*ChatRoomSession){}, + .room_sessions = std.ArrayList(*ChatRoomSession).empty, .server = .{ .ctx = undefined, .vtable = .{ @@ -278,7 +278,7 @@ const InventoryService = struct { return .{ .allocator = allocator, .inventories = std.AutoHashMap(u64, *PlayerInventory).init(allocator), - .trade_sessions = std.ArrayList(*TradeSessionServerState){}, + .trade_sessions = std.ArrayList(*TradeSessionServerState).empty, .server = .{ .ctx = undefined, .vtable = .{ @@ -325,7 +325,7 @@ const InventoryService = struct { const inv = try self.allocator.create(PlayerInventory); inv.* = .{ - .slots = std.ArrayList(InventorySlotState){}, + .slots = std.ArrayList(InventorySlotState).empty, .capacity = 20, }; try self.inventories.put(player_id, inv); @@ -401,7 +401,7 @@ const MatchmakingService = struct { .queue = std.AutoHashMap(u64, QueueEntry).init(allocator), .matches = std.AutoHashMap(u64, *MatchStateData).init(allocator), .results = std.AutoHashMap(u64, *MatchResultData).init(allocator), - .controllers = std.ArrayList(*MatchControllerServerState){}, + .controllers = std.ArrayList(*MatchControllerServerState).empty, .server = .{ .ctx = undefined, .vtable = .{ @@ -721,7 +721,7 @@ fn onQueryArea( const filter = parseGameWorldFilter(query); - var matched_ids = std.ArrayList(u64){}; + var matched_ids = std.ArrayList(u64).empty; defer matched_ids.deinit(service.allocator); var it = service.entities.iterator(); @@ -811,7 +811,7 @@ fn onCreateRoom( .name = try service.allocator.dupe(u8, room_name), .topic = try service.allocator.dupe(u8, room_topic), .member_count = 0, - .messages = std.ArrayList(ChatMsg){}, + .messages = std.ArrayList(ChatMsg).empty, }; service.next_room_id += 1; @@ -1092,7 +1092,7 @@ fn onAddItem( const item_level = try item.getLevel(); const stack_size = try item.getStackSize(); - var attrs = std.ArrayList(ItemAttr){}; + var attrs = std.ArrayList(ItemAttr).empty; if (!item._reader.isPointerNull(2)) { const in_attrs = try item.getAttributes(); var i: u32 = 0; @@ -1179,7 +1179,7 @@ fn onStartTrade( .initiator_id = try initiator.getId(), .target_id = try target.getId(), .state = .Proposing, - .my_offer_slots = std.ArrayList(u16){}, + .my_offer_slots = std.ArrayList(u16).empty, }; const server_state = try service.allocator.create(TradeSessionServerState); @@ -1222,7 +1222,7 @@ fn onFilterByRarity( const inv = try service.getOrCreateInventory(player_id); - var matches = std.ArrayList(usize){}; + var matches = std.ArrayList(usize).empty; defer matches.deinit(service.allocator); for (inv.slots.items, 0..) |slot, idx| { @@ -1245,7 +1245,7 @@ fn buildTradeOffer( ) !void { const inv = try service.getOrCreateInventory(trade.initiator_id); - var offered_indices = std.ArrayList(usize){}; + var offered_indices = std.ArrayList(usize).empty; defer offered_indices.deinit(service.allocator); for (trade.my_offer_slots.items) |slot_index| { @@ -1483,8 +1483,8 @@ fn onFindMatch( .id = match_id, .mode = try params.getMode(), .state = .Waiting, - .team_a = std.ArrayList(MatchPlayer){}, - .team_b = std.ArrayList(MatchPlayer){}, + .team_a = std.ArrayList(MatchPlayer).empty, + .team_b = std.ArrayList(MatchPlayer).empty, .created_at = nowMillis(), .ready_set = std.AutoHashMap(u64, bool).init(service.allocator), }; @@ -1646,7 +1646,7 @@ fn onControllerReportResult( .match_id = incoming_match_id, .winning_team = try incoming.getWinningTeam(), .duration = try incoming.getDuration(), - .player_stats = std.ArrayList(PlayerStat){}, + .player_stats = std.ArrayList(PlayerStat).empty, }; const stats = try incoming.getPlayerStats(); @@ -1764,8 +1764,8 @@ fn usage() void { } pub fn main(init: std.process.Init.Minimal) !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); + var gpa: std.heap.DebugAllocator(.{}) = .init; + defer std.debug.assert(gpa.deinit() == .ok); const allocator = gpa.allocator(); const args = parseArgs(allocator, init.args) catch |err| switch (err) { diff --git a/tests/rpc/level1/rpc_peer_return_send_helpers_test.zig b/tests/rpc/level1/rpc_peer_return_send_helpers_test.zig index 56ee388..cb2cfc9 100644 --- a/tests/rpc/level1/rpc_peer_return_send_helpers_test.zig +++ b/tests/rpc/level1/rpc_peer_return_send_helpers_test.zig @@ -115,7 +115,7 @@ test "peer_return_send_helpers noteOutboundReturnCapRefsForPeer tracks sender re fn init(allocator: std.mem.Allocator) @This() { return .{ .allocator = allocator, - .noted = std.ArrayList(u32){}, + .noted = std.ArrayList(u32).empty, }; } diff --git a/tests/rpc/level2/rpc_peer_cleanup_test.zig b/tests/rpc/level2/rpc_peer_cleanup_test.zig index 2beefa0..80f009b 100644 --- a/tests/rpc/level2/rpc_peer_cleanup_test.zig +++ b/tests/rpc/level2/rpc_peer_cleanup_test.zig @@ -21,14 +21,14 @@ test "peer_cleanup deinitPendingCallMapOwned releases frames and calls caps dein var pending_map = std.AutoHashMap(u32, std.ArrayList(Pending)).init(std.testing.allocator); - var list_a = std.ArrayList(Pending){}; + var list_a = std.ArrayList(Pending).empty; try list_a.append(std.testing.allocator, .{ .caps = .{ .count = &caps_deinit_count }, .frame = try std.testing.allocator.alloc(u8, 3), }); try pending_map.put(1, list_a); - var list_b = std.ArrayList(Pending){}; + var list_b = std.ArrayList(Pending).empty; try list_b.append(std.testing.allocator, .{ .caps = .{ .count = &caps_deinit_count }, .frame = try std.testing.allocator.alloc(u8, 4), @@ -111,7 +111,7 @@ test "peer_cleanup deinitOwnedStringKeyMap and deinitOwnedStringKeyListMap free var list_map = std.StringHashMap(std.ArrayList(u32)).init(std.testing.allocator); const list_key = try std.testing.allocator.dupe(u8, "list"); - var values = std.ArrayList(u32){}; + var values = std.ArrayList(u32).empty; try values.append(std.testing.allocator, 1); try values.append(std.testing.allocator, 2); try list_map.put(list_key, values); diff --git a/tests/rpc/level3/rpc_peer_from_peer_zig_test.zig b/tests/rpc/level3/rpc_peer_from_peer_zig_test.zig index 99d6054..e39be36 100644 --- a/tests/rpc/level3/rpc_peer_from_peer_zig_test.zig +++ b/tests/rpc/level3/rpc_peer_from_peer_zig_test.zig @@ -1052,7 +1052,7 @@ test "forwarded return forwards awaitFromThirdParty to caller" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -1249,7 +1249,7 @@ test "handleResolvedCall forwards sendResultsTo.yourself when forwarding importe var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -1322,7 +1322,7 @@ test "handleResolvedCall forwards sendResultsTo.thirdParty when forwarding promi var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -1585,7 +1585,7 @@ test "handleReturn adopts thirdPartyAnswer when await arrives first" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -1709,7 +1709,7 @@ test "handleReturn replays buffered thirdPartyAnswer return when await arrives l var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -1823,7 +1823,7 @@ test "thirdPartyAnswer stress race keeps pending state empty" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2012,7 +2012,7 @@ test "handleFinish forwards mapped tail finish question id" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2201,7 +2201,7 @@ test "forwarded caller tail call emits yourself call, takeFromOtherQuestion, and var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2304,7 +2304,7 @@ test "forwarded tail finish before forwarded return still emits single finish an var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2385,7 +2385,7 @@ test "forwarded tail cleanup stays stable under repeated finish/return ordering var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2507,7 +2507,7 @@ test "promisedAnswer target queues when resolved cap is unresolved promise expor var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2649,7 +2649,7 @@ test "bootstrap return is recorded for promisedAnswer pipelined calls" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2732,7 +2732,7 @@ test "bootstrap promisedAnswer call still resolves after bootstrap export releas var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |frame| allocator.free(frame); @@ -2900,7 +2900,7 @@ test "handleFrame provide stores provision without immediate return" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -2979,7 +2979,7 @@ test "handleFrame duplicate provide recipient sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3077,7 +3077,7 @@ test "handleFrame accept returns provided capability" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3154,7 +3154,7 @@ test "handleFrame accept unknown provision returns exception" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3221,7 +3221,7 @@ test "handleFrame finish clears stored provide entry" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3320,7 +3320,7 @@ test "handleFrame join returns capability" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3417,7 +3417,7 @@ test "handleFrame join returns exceptions when targets mismatch across parts" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3526,7 +3526,7 @@ test "handleFrame thirdPartyAnswer rejects missing completion" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); @@ -3570,7 +3570,7 @@ test "handleFrame unknown message tag sends unimplemented" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer { for (capture.frames.items) |out_frame| allocator.free(out_frame); diff --git a/tests/rpc/level3/rpc_peer_test.zig b/tests/rpc/level3/rpc_peer_test.zig index 4b331ca..f889d8b 100644 --- a/tests/rpc/level3/rpc_peer_test.zig +++ b/tests/rpc/level3/rpc_peer_test.zig @@ -131,7 +131,7 @@ test "peer sendReleaseForHost emits release frame" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -156,7 +156,7 @@ test "peer sendFinishForHost emits finish frame with explicit flags" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -214,7 +214,7 @@ test "peer provide+accept returns provided capability" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -275,7 +275,7 @@ test "peer finish clears stored provide entry" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -338,7 +338,7 @@ test "peer accept with embargo waits for disembargo.accept" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -413,7 +413,7 @@ test "peer finish cancels pending embargoed accept" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -496,7 +496,7 @@ test "peer pipelined call to embargoed accept answer waits for disembargo.accept var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -608,7 +608,7 @@ test "peer handleFrame embargoed accept + promised calls preserve ordering under var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -729,7 +729,7 @@ test "peer duplicate provide recipient sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -790,7 +790,7 @@ test "peer duplicate provide question sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -854,7 +854,7 @@ test "peer join returns provided capability" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -917,7 +917,7 @@ test "peer handleFrame join aggregates parts and returns capability for each par var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1003,7 +1003,7 @@ test "peer duplicate join question sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1066,7 +1066,7 @@ test "peer join part count mismatch returns exception" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1132,7 +1132,7 @@ test "peer duplicate join part returns exception" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1194,7 +1194,7 @@ test "peer provide with unresolved promise target sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1235,7 +1235,7 @@ test "peer thirdPartyAnswer rejects invalid answer id" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1265,7 +1265,7 @@ test "peer thirdPartyAnswer conflicting completion sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1305,7 +1305,7 @@ test "peer thirdPartyAnswer duplicate completion with same answer id is ignored" var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1339,7 +1339,7 @@ test "peer duplicate third-party return before await errors" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -1374,7 +1374,7 @@ test "peer duplicate awaitFromThirdParty completion sends abort" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); diff --git a/tests/rpc/level3/rpc_release_and_failure_test.zig b/tests/rpc/level3/rpc_release_and_failure_test.zig index 3fe557e..48259e3 100644 --- a/tests/rpc/level3/rpc_release_and_failure_test.zig +++ b/tests/rpc/level3/rpc_release_and_failure_test.zig @@ -61,7 +61,7 @@ test "peer release message removes exported capability" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -97,7 +97,7 @@ test "peer release with ref_count > 1 only decrements, does not remove" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -125,7 +125,7 @@ test "peer release for unknown export id is handled gracefully" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -160,7 +160,7 @@ test "peer release for already-released export is handled gracefully" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -206,7 +206,7 @@ test "peer release with zero reference count is a no-op" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -243,7 +243,7 @@ test "peer bootstrap export is not removed by release" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -294,7 +294,7 @@ test "peer call to exported capability returns exception" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -356,7 +356,7 @@ test "peer call handler error is reported as exception return" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -393,7 +393,7 @@ test "peer handleFrame with invalid message tag sends unimplemented" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -423,7 +423,7 @@ test "peer handleFrame with obsolete_save tag sends unimplemented" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -503,7 +503,7 @@ test "peer call to unknown export returns exception" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -542,7 +542,7 @@ test "peer bootstrap without configured bootstrap returns exception" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -582,7 +582,7 @@ test "peer shutdown rejects new outbound calls" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -608,7 +608,7 @@ test "peer shutdown rejects new bootstrap requests" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -634,7 +634,7 @@ test "peer finish for never-sent question does not crash" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); @@ -661,7 +661,7 @@ test "peer sendReturnException for answer creates and sends frame" { var capture = Capture{ .allocator = allocator, - .frames = std.ArrayList([]u8){}, + .frames = std.ArrayList([]u8).empty, }; defer capture.deinit(); peer.setSendFrameOverride(&capture, Capture.onFrame); diff --git a/tests/serialization/capnp_test_vendor_test.zig b/tests/serialization/capnp_test_vendor_test.zig index 80acdcf..60e32d5 100644 --- a/tests/serialization/capnp_test_vendor_test.zig +++ b/tests/serialization/capnp_test_vendor_test.zig @@ -7,6 +7,13 @@ const schema = capnpc.schema; const request_reader = capnpc.request; const json = std.json; +fn requirePath(path: []const u8) !void { + std.Io.Dir.cwd().access(std.testing.io, path, .{}) catch |err| switch (err) { + error.FileNotFound => return error.SkipZigTest, + else => return err, + }; +} + fn runCapnp(allocator: std.mem.Allocator, argv: []const []const u8) ![]u8 { const result = std.process.run(allocator, std.testing.io, .{ .argv = argv, @@ -131,6 +138,8 @@ fn expectJsonString(value: json.Value) ![]const u8 { test "capnp_test vendor suite" { const allocator = std.testing.allocator; + try requirePath("vendor/ext/capnp_test/test.capnp"); + const request = try loadCodeGeneratorRequest(allocator); defer request_reader.freeCodeGeneratorRequest(allocator, request); diff --git a/tests/serialization/codegen_generated_runtime_test.zig b/tests/serialization/codegen_generated_runtime_test.zig index 4f075b8..2607566 100644 --- a/tests/serialization/codegen_generated_runtime_test.zig +++ b/tests/serialization/codegen_generated_runtime_test.zig @@ -58,7 +58,7 @@ fn runGeneratedHarness( const root_arg = try std.fmt.allocPrint(allocator, "-Mroot={s}", .{harness_path}); defer allocator.free(root_arg); - var zig_argv = std.ArrayList([]const u8){}; + var zig_argv = std.ArrayList([]const u8).empty; defer zig_argv.deinit(allocator); try zig_argv.append(allocator, "zig"); try zig_argv.append(allocator, "test"); diff --git a/tests/serialization/codegen_golden_test.zig b/tests/serialization/codegen_golden_test.zig index 8fea24d..28c41a4 100644 --- a/tests/serialization/codegen_golden_test.zig +++ b/tests/serialization/codegen_golden_test.zig @@ -48,7 +48,7 @@ fn expectGolden(actual: []const u8, golden_path: []const u8) !void { } fn normalizeLineEndings(allocator: std.mem.Allocator, input: []const u8) ![]u8 { - var out = std.ArrayList(u8){}; + var out = std.ArrayList(u8).empty; defer out.deinit(allocator); var i: usize = 0; diff --git a/tests/serialization/codegen_streaming_test.zig b/tests/serialization/codegen_streaming_test.zig index 93818e2..5de227c 100644 --- a/tests/serialization/codegen_streaming_test.zig +++ b/tests/serialization/codegen_streaming_test.zig @@ -16,6 +16,13 @@ fn expectNotContains(haystack: []const u8, needle: []const u8) !void { } } +fn requirePath(path: []const u8) !void { + std.Io.Dir.cwd().access(std.testing.io, path, .{}) catch |err| switch (err) { + error.FileNotFound => return error.SkipZigTest, + else => return err, + }; +} + test "Codegen emits streaming method types and handlers" { const allocator = std.testing.allocator; @@ -156,6 +163,8 @@ test "Codegen omits unused annotation-only imports from rpc.capnp" { const allocator = std.testing.allocator; const io = std.testing.io; + try requirePath("vendor/ext/capnproto/c++/src"); + const schema_path = blk: { if (std.Io.Dir.cwd().access(io, "src/rpc/rpc.capnp", .{})) { break :blk "src/rpc/rpc.capnp"; @@ -187,7 +196,10 @@ test "Codegen omits unused annotation-only imports from rpc.capnp" { defer allocator.free(result.stdout); defer allocator.free(result.stderr); - try std.testing.expect(result.term == .exited and result.term.exited == 0); + if (!(result.term == .exited and result.term.exited == 0)) { + std.debug.print("capnp compile failed: {s}\n", .{result.stderr}); + return error.TestUnexpectedResult; + } const request = try request_reader.parseCodeGeneratorRequest(allocator, result.stdout); defer request_reader.freeCodeGeneratorRequest(allocator, request); diff --git a/tests/serialization/integration_test.zig b/tests/serialization/integration_test.zig index d599a91..1d76ad6 100644 --- a/tests/serialization/integration_test.zig +++ b/tests/serialization/integration_test.zig @@ -44,6 +44,13 @@ fn fieldDiscriminant(fields: []const capnpc.schema.Field, name: []const u8) ?u16 return null; } +fn requirePath(path: []const u8) !void { + std.Io.Dir.cwd().access(std.testing.io, path, .{}) catch |err| switch (err) { + error.FileNotFound => return error.SkipZigTest, + else => return err, + }; +} + test "CodeGeneratorRequest parsing from capnp compile" { const allocator = std.testing.allocator; @@ -109,6 +116,8 @@ test "CodeGeneratorRequest parsing from capnp compile" { test "CodeGeneratorRequest parsing preserves rpc union discriminants" { const allocator = std.testing.allocator; + try requirePath("vendor/ext/capnproto/c++/src"); + const argv = &[_][]const u8{ "capnp", "compile", @@ -127,7 +136,10 @@ test "CodeGeneratorRequest parsing preserves rpc union discriminants" { defer allocator.free(result.stdout); defer allocator.free(result.stderr); - try std.testing.expect(result.term == .exited and result.term.exited == 0); + if (!(result.term == .exited and result.term.exited == 0)) { + std.debug.print("capnp compile failed: {s}\n", .{result.stderr}); + return error.TestUnexpectedResult; + } const request = try request_reader.parseCodeGeneratorRequest(allocator, result.stdout); defer request_reader.freeCodeGeneratorRequest(allocator, request); diff --git a/tests/serialization/interop_roundtrip_test.zig b/tests/serialization/interop_roundtrip_test.zig index d709d19..1146504 100644 --- a/tests/serialization/interop_roundtrip_test.zig +++ b/tests/serialization/interop_roundtrip_test.zig @@ -389,7 +389,7 @@ fn runRandomFixture(use_packed: bool) !void { const json_path = try std.fs.path.join(allocator, &.{ tmp_root, json_name }); defer allocator.free(json_path); - var argv = std.ArrayList([]const u8){}; + var argv = std.ArrayList([]const u8).empty; defer argv.deinit(allocator); try argv.append(allocator, python_path); try argv.append(allocator, script_path); diff --git a/tests/serialization/message_test.zig b/tests/serialization/message_test.zig index 264b5f9..a3b1438 100644 --- a/tests/serialization/message_test.zig +++ b/tests/serialization/message_test.zig @@ -331,7 +331,7 @@ test "Message: negative list pointer offset" { const list_ptr = makeListPointer(-2, 2, 3); std.mem.writeInt(u64, segment[16..24], list_ptr, .little); - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [8]u8 = undefined; @@ -363,7 +363,7 @@ test "Message: far pointer root struct in another segment" { std.mem.writeInt(u64, segment1[0..8], struct_ptr, .little); std.mem.writeInt(u32, segment1[8..12], 123, .little); - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -403,7 +403,7 @@ test "Message: far pointer list in another segment" { segment1[9] = 'i'; segment1[10] = 0; - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -442,7 +442,7 @@ test "Message: double-far pointer root struct" { std.mem.writeInt(u32, segment1[16..20], 77, .little); - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -1373,7 +1373,7 @@ test "Message: far pointer to inline-composite list (raw bytes)" { // Segment 1, word 5: element 1, pointer word (null = 0) // Frame the message: 2 segments - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -1434,7 +1434,7 @@ test "Message: double-far pointer Layout A inline-composite list (raw bytes)" { std.mem.writeInt(u32, segment2[8..12], 20, .little); // Frame the message: 3 segments - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -1504,7 +1504,7 @@ test "Message: double-far pointer Layout B inline-composite list (raw bytes)" { // Segment 2, word 4: element 1 pointer (null = 0, already zeroed) // Frame the message: 3 segments (odd count -> padding word in header) - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -1566,7 +1566,7 @@ test "Message: double-far pointer Layout B with multi-word struct elements" { std.mem.writeInt(u32, segment2[32..36], 400, .little); // Frame - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; @@ -1638,7 +1638,7 @@ test "Message: far pointer inline-composite list at nonzero offset in target seg // word 6: element 1 pointer (null) // Frame - var framed = std.ArrayList(u8){}; + var framed = std.ArrayList(u8).empty; defer framed.deinit(allocator); var header: [16]u8 = undefined; diff --git a/tools/bench_check.zig b/tools/bench_check.zig index 40679b2..6d12224 100644 --- a/tools/bench_check.zig +++ b/tools/bench_check.zig @@ -118,8 +118,8 @@ fn runCase( } pub fn main(init: std.process.Init) !void { - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); + var gpa: std.heap.DebugAllocator(.{}) = .init; + defer std.debug.assert(gpa.deinit() == .ok); const allocator = gpa.allocator(); const io = init.io; diff --git a/tools/e2e_runner.zig b/tools/e2e_runner.zig index 7dafc32..4437089 100644 --- a/tools/e2e_runner.zig +++ b/tools/e2e_runner.zig @@ -472,7 +472,7 @@ fn termFromWaitStatus(status: u32) std.process.Child.Term { const PipeReaderCtx = struct { fd: i32, allocator: Allocator, - buf: std.ArrayList(u8) = .{}, + buf: std.ArrayList(u8) = .empty, }; fn pipeReaderThread(ctx: *PipeReaderCtx) void { @@ -643,7 +643,7 @@ fn waitForPort(port: u16, timeout_ms: i64) !bool { } fn composeBaseArgs(allocator: Allocator, paths: Paths) !std.ArrayList([]const u8) { - var args = std.ArrayList([]const u8){}; + var args = std.ArrayList([]const u8).empty; try args.appendSlice(allocator, &.{ "docker", "compose", @@ -1095,7 +1095,7 @@ fn writeSummary(allocator: Allocator, io: std.Io, paths: Paths, results: []const } // Build summary JSON in memory - var content = std.ArrayList(u8){}; + var content = std.ArrayList(u8).empty; defer content.deinit(allocator); try appendFmt(allocator, &content, "{{\n", .{}); @@ -1199,7 +1199,7 @@ pub fn main(init: std.process.Init) !void { } } - var results = std.ArrayList(CaseResult){}; + var results = std.ArrayList(CaseResult).empty; defer { for (results.items) |item| { allocator.free(item.key);