authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-09-23 17:08:40-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-09-24 15:49:56-07:00
logcc69315f032239d15496326f79ceec488f188ea9
treeee6e53ce9812b805265f7ba9be6da3b775e6333f
parentdf5f0517b33b5f7bc2a508cf6a0ee62246f02d21

std.MultiArrayList: add test coverage for 0-bit structs

closes #10618 solved by #17172

2 files changed, 78 insertions(+), 0 deletions(-)

lib/std/array_hash_map.zig+29
......@@ -2336,6 +2336,35 @@ test "sort" {
23362336 }
23372337}
23382338
2339test "0 sized key" {
2340 var map = AutoArrayHashMap(u0, i32).init(std.testing.allocator);
2341 defer map.deinit();
2342
2343 try testing.expectEqual(map.get(0), null);
2344
2345 try map.put(0, 5);
2346 try testing.expectEqual(map.get(0), 5);
2347
2348 try map.put(0, 10);
2349 try testing.expectEqual(map.get(0), 10);
2350
2351 try testing.expectEqual(map.swapRemove(0), true);
2352 try testing.expectEqual(map.get(0), null);
2353}
2354
2355test "0 sized key and 0 sized value" {
2356 var map = AutoArrayHashMap(u0, u0).init(std.testing.allocator);
2357 defer map.deinit();
2358
2359 try testing.expectEqual(map.get(0), null);
2360
2361 try map.put(0, 0);
2362 try testing.expectEqual(map.get(0), 0);
2363
2364 try testing.expectEqual(map.swapRemove(0), true);
2365 try testing.expectEqual(map.get(0), null);
2366}
2367
23392368pub fn getHashPtrAddrFn(comptime K: type, comptime Context: type) (fn (Context, K) u32) {
23402369 return struct {
23412370 fn hash(ctx: Context, key: K) u32 {
lib/std/multi_array_list.zig+49
......@@ -901,3 +901,52 @@ test "sorting a span" {
901901 c += 1;
902902 }
903903}
904
905test "0 sized struct field" {
906 const ally = testing.allocator;
907
908 const Foo = struct {
909 a: u0,
910 b: f32,
911 };
912
913 var list = MultiArrayList(Foo){};
914 defer list.deinit(ally);
915
916 try testing.expectEqualSlices(u0, &[_]u0{}, list.items(.a));
917 try testing.expectEqualSlices(f32, &[_]f32{}, list.items(.b));
918
919 try list.append(ally, .{ .a = 0, .b = 42.0 });
920 try testing.expectEqualSlices(u0, &[_]u0{0}, list.items(.a));
921 try testing.expectEqualSlices(f32, &[_]f32{42.0}, list.items(.b));
922
923 try list.insert(ally, 0, .{ .a = 0, .b = -1.0 });
924 try testing.expectEqualSlices(u0, &[_]u0{ 0, 0 }, list.items(.a));
925 try testing.expectEqualSlices(f32, &[_]f32{ -1.0, 42.0 }, list.items(.b));
926
927 list.swapRemove(list.len - 1);
928 try testing.expectEqualSlices(u0, &[_]u0{0}, list.items(.a));
929 try testing.expectEqualSlices(f32, &[_]f32{-1.0}, list.items(.b));
930}
931
932test "0 sized struct" {
933 const ally = testing.allocator;
934
935 const Foo = struct {
936 a: u0,
937 };
938
939 var list = MultiArrayList(Foo){};
940 defer list.deinit(ally);
941
942 try testing.expectEqualSlices(u0, &[_]u0{}, list.items(.a));
943
944 try list.append(ally, .{ .a = 0 });
945 try testing.expectEqualSlices(u0, &[_]u0{0}, list.items(.a));
946
947 try list.insert(ally, 0, .{ .a = 0 });
948 try testing.expectEqualSlices(u0, &[_]u0{ 0, 0 }, list.items(.a));
949
950 list.swapRemove(list.len - 1);
951 try testing.expectEqualSlices(u0, &[_]u0{0}, list.items(.a));
952}