From fd5af311141bf533407eb3a019f8d6a5b3deb4a2 Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Mon, 29 Jun 2026 21:26:15 -0700 Subject: [PATCH] add test for arena dupe --- src/PortfolioData.zig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/PortfolioData.zig b/src/PortfolioData.zig index da5b1e2..c4ea16f 100644 --- a/src/PortfolioData.zig +++ b/src/PortfolioData.zig @@ -1622,3 +1622,23 @@ test "PortfolioData.revalue: returns false when the recompute yields no allocati defer overlay.deinit(); try testing.expect(!pd.revalue(Date.fromYmd(2026, 5, 8), &overlay)); } + +test "dupePricesArena: copies entries with arena-owned keys" { + var arena = std.heap.ArenaAllocator.init(testing.allocator); + defer arena.deinit(); + const a = arena.allocator(); + + var src = std.StringHashMap(f64).init(testing.allocator); + defer src.deinit(); + try src.put("AAPL", 1.5); + try src.put("SPY", 2.5); + + // Copy lives in the arena (keys duped there), so it survives `src` + // being freed; reaped wholesale by arena.deinit (no out.deinit). + var out = dupePricesArena(a, &src); + src.clearAndFree(); // drop the source + its keys + + try testing.expectEqual(@as(usize, 2), out.count()); + try testing.expectApproxEqAbs(@as(f64, 1.5), out.get("AAPL").?, 0.0001); + try testing.expectApproxEqAbs(@as(f64, 2.5), out.get("SPY").?, 0.0001); +}