From 041afd58de8525dc0b6f6a9e2b493031dbf4bbee Mon Sep 17 00:00:00 2001 From: Sam Atman Date: Tue, 23 Dec 2025 10:22:06 -0500 Subject: Fix #74: Check for characters before popping in wrap --- src/DisplayWidth.zig | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/DisplayWidth.zig b/src/DisplayWidth.zig index 82b2649..d15dbae 100644 --- a/src/DisplayWidth.zig +++ b/src/DisplayWidth.zig @@ -420,8 +420,10 @@ pub fn wrap( } // Remove trailing space and newline. - _ = result.pop(); - _ = result.pop(); + if (result.items[result.items.len - 1] == '\n') + _ = result.pop(); + if (result.items[result.items.len - 1] == ' ') + _ = result.pop(); return try result.toOwnedSlice(); } @@ -438,6 +440,18 @@ test "wrap" { try testing.expectEqualStrings(want, got); } +test "zg/74" { + var debug_alloc = std.heap.DebugAllocator(.{}).init; + const allocator = debug_alloc.allocator(); + defer _ = debug_alloc.deinit(); + const dw = try DisplayWidth.init(allocator); + defer dw.deinit(allocator); + const wrapped = try dw.wrap(allocator, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam pellentesque pulvinar felis, sit amet commodo ligula feugiat sed. Sed quis malesuada elit, nec eleifend lectus. Sed tincidunt finibus aliquet. Praesent consectetur nibh libero, tempus imperdiet lorem congue eget.", 16, 1); + defer allocator.free(wrapped); + const expected_wrap = "Lorem ipsum dolor \nsit amet, consectetur \nadipiscing elit. \nNullam pellentesque \npulvinar felis, \nsit amet commodo \nligula feugiat \nsed. Sed quis malesuada \nelit, nec eleifend \nlectus. Sed tincidunt \nfinibus aliquet. \nPraesent consectetur \nnibh libero, tempus \nimperdiet lorem \ncongue eget."; + try std.testing.expectEqualStrings(expected_wrap, wrapped); +} + fn testAllocation(allocator: Allocator) !void { { var dw = try DisplayWidth.init(allocator); -- cgit v1.2.3