diff --git a/echo-core-zig/src/data/hashmap.zig b/echo-core-zig/src/data/hashmap.zig index b12e8db..133b758 100644 --- a/echo-core-zig/src/data/hashmap.zig +++ b/echo-core-zig/src/data/hashmap.zig @@ -294,3 +294,58 @@ test "HashMap multiple resizes and collisions" { // 1000 / 0.75 = 1333.33 -> next power of 2 is 2048 try std.testing.expect(map.entries.len >= 2048); } + +test "HashMap resize load factor boundary" { + var map = try HashMap([]const u8, i32).init(std.testing.allocator, 8); + defer map.deinit(); + + // Initial length should be 8. + try std.testing.expectEqual(@as(usize, 8), map.entries.len); + + var keys = try std.ArrayList([]const u8).initCapacity(std.testing.allocator, 8); + defer { + for (keys.items) |key| { + std.testing.allocator.free(key); + } + keys.deinit(); + } + + // Insert 5 items. The threshold is 8 * 3 / 4 = 6. + // So 5 items should not trigger a resize. + var i: i32 = 0; + while (i < 5) : (i += 1) { + const key = try std.fmt.allocPrint(std.testing.allocator, "item{d}", .{i}); + try keys.append(key); + try map.put(key, i * 10); + } + try std.testing.expectEqual(@as(usize, 5), map.count); + try std.testing.expectEqual(@as(usize, 8), map.entries.len); + + // Insert 1 more item. This brings count to 6. + // The next put will evaluate the threshold before adding. + // At count 5, 5 >= 6 is false. The 6th item is added without resize. + const key_6 = try std.fmt.allocPrint(std.testing.allocator, "item5", .{}); + try keys.append(key_6); + try map.put(key_6, 50); + + try std.testing.expectEqual(@as(usize, 6), map.count); + try std.testing.expectEqual(@as(usize, 8), map.entries.len); + + // Inserting the 7th item. Before adding, count (6) >= threshold (6) is true. + // This triggers resize. Length becomes 16. + const key_7 = try std.fmt.allocPrint(std.testing.allocator, "item6", .{}); + try keys.append(key_7); + try map.put(key_7, 60); + + try std.testing.expectEqual(@as(usize, 7), map.count); + try std.testing.expectEqual(@as(usize, 16), map.entries.len); + + // Verify all items are intact + i = 0; + while (i < 7) : (i += 1) { + const key = keys.items[@as(usize, @intCast(i))]; + const val = map.get(key); + try std.testing.expect(val != null); + try std.testing.expectEqual(i * 10, val.?.*); + } +} diff --git a/echo-core-zig/zig-cache/h/5cfbd864a34f6fc310abf60d62e95f99.txt b/echo-core-zig/zig-cache/h/5cfbd864a34f6fc310abf60d62e95f99.txt new file mode 100644 index 0000000..e69de29 diff --git a/echo-core-zig/zig-cache/h/timestamp b/echo-core-zig/zig-cache/h/timestamp new file mode 100644 index 0000000..e69de29 diff --git a/echo-core-zig/zig-cache/o/20f8f8362ac39302905d03992fa818bc/dependencies.zig b/echo-core-zig/zig-cache/o/20f8f8362ac39302905d03992fa818bc/dependencies.zig new file mode 100644 index 0000000..72e4e83 --- /dev/null +++ b/echo-core-zig/zig-cache/o/20f8f8362ac39302905d03992fa818bc/dependencies.zig @@ -0,0 +1,2 @@ +pub const packages = struct {}; +pub const root_deps: []const struct { []const u8, []const u8 } = &.{}; diff --git a/echo-core-zig/zig-cache/o/24ed9a839aaf11bb63172b8d227acf48/test b/echo-core-zig/zig-cache/o/24ed9a839aaf11bb63172b8d227acf48/test index c516446..5e4709e 100755 Binary files a/echo-core-zig/zig-cache/o/24ed9a839aaf11bb63172b8d227acf48/test and b/echo-core-zig/zig-cache/o/24ed9a839aaf11bb63172b8d227acf48/test differ diff --git a/echo-core-zig/zig-cache/o/7a083595c37b951d048cd9b7ffc46f0a/test b/echo-core-zig/zig-cache/o/7a083595c37b951d048cd9b7ffc46f0a/test new file mode 100755 index 0000000..f05362f Binary files /dev/null and b/echo-core-zig/zig-cache/o/7a083595c37b951d048cd9b7ffc46f0a/test differ diff --git a/echo-core-zig/zig-cache/o/b82e229ecaf60f27ebfa49ceaacd3f07/test b/echo-core-zig/zig-cache/o/b82e229ecaf60f27ebfa49ceaacd3f07/test new file mode 100755 index 0000000..3b94aca Binary files /dev/null and b/echo-core-zig/zig-cache/o/b82e229ecaf60f27ebfa49ceaacd3f07/test differ diff --git a/echo-core-zig/zig-cache/z/0fe4ee79a5f079bb208b60e7e999830b b/echo-core-zig/zig-cache/z/0fe4ee79a5f079bb208b60e7e999830b new file mode 100644 index 0000000..762ca03 Binary files /dev/null and b/echo-core-zig/zig-cache/z/0fe4ee79a5f079bb208b60e7e999830b differ diff --git a/echo-core-zig/zig-cache/z/206b48edd608422183f11b0010473344 b/echo-core-zig/zig-cache/z/206b48edd608422183f11b0010473344 new file mode 100644 index 0000000..bffbe60 Binary files /dev/null and b/echo-core-zig/zig-cache/z/206b48edd608422183f11b0010473344 differ diff --git a/echo-core-zig/zig-cache/z/a8dc24f744af6b9218ecf7b33b43de53 b/echo-core-zig/zig-cache/z/a8dc24f744af6b9218ecf7b33b43de53 index 3793df6..8a4b48f 100644 Binary files a/echo-core-zig/zig-cache/z/a8dc24f744af6b9218ecf7b33b43de53 and b/echo-core-zig/zig-cache/z/a8dc24f744af6b9218ecf7b33b43de53 differ diff --git a/echo-core-zig/zig-cache/z/dbb021b974e7153aefd58d524d194817 b/echo-core-zig/zig-cache/z/dbb021b974e7153aefd58d524d194817 new file mode 100644 index 0000000..d479b7d Binary files /dev/null and b/echo-core-zig/zig-cache/z/dbb021b974e7153aefd58d524d194817 differ