authorgravatar for red.black.liquorice@gmail.comHila Friedman <red.black.liquorice@gmail.com> 2026-06-24 13:42:58+03:00
committergravatar for red.black.liquorice@gmail.comHila Friedman <red.black.liquorice@gmail.com> 2026-06-24 13:42:58+03:00
log4cb608e92143b00c46eb5dd479a92ab6763a6a05
treec85693bc1bbf5e60b8eefae2bdf88ddb7d40ebac
parentf26cdb2771a4bb4d5f1d5acc446ec51c3e177f75

add test coverage for overlapping assignment


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

test/behavior.zig+1
...@@ -60,6 +60,7 @@ test {...@@ -60,6 +60,7 @@ test {
60 _ = @import("behavior/nan.zig");60 _ = @import("behavior/nan.zig");
61 _ = @import("behavior/null.zig");61 _ = @import("behavior/null.zig");
62 _ = @import("behavior/optional.zig");62 _ = @import("behavior/optional.zig");
63 _ = @import("behavior/overlapping_assign.zig");
63 _ = @import("behavior/packed-struct.zig");64 _ = @import("behavior/packed-struct.zig");
64 _ = @import("behavior/packed_struct_explicit_backing_int.zig");65 _ = @import("behavior/packed_struct_explicit_backing_int.zig");
65 _ = @import("behavior/packed-union.zig");66 _ = @import("behavior/packed-union.zig");
test/behavior/overlapping_assign.zig created+37
...@@ -0,0 +1,37 @@
1const std = @import("std");
2const expectEqualSlices = std.testing.expectEqualSlices;
3
4test "assignment to overlapping memory" {
5 try theTest();
6 try comptime theTest();
7}
8
9fn theTest() !void {
10 var a1: [3]usize = .{ 0, 1, 2 };
11 a1[1..3].* = a1[0..2].*;
12 try expectEqualSlices(usize, &.{ 0, 0, 1 }, &a1);
13
14 var a2: [3]usize = .{ 0, 1, 2 };
15 a2[0..2].* = a2[1..3].*;
16 try expectEqualSlices(usize, &.{ 1, 2, 2 }, &a2);
17
18 var a3: [16]u8 = .{
19 0, 1, 2, 3, 4, 5, 6, 7,
20 8, 9, 10, 11, 12, 13, 14, 15,
21 };
22 a3[1..16].* = a3[0..15].*;
23 try expectEqualSlices(u8, &.{
24 0, 0, 1, 2, 3, 4, 5, 6,
25 7, 8, 9, 10, 11, 12, 13, 14,
26 }, &a3);
27
28 var a4: [16]u8 = .{
29 0, 1, 2, 3, 4, 5, 6, 7,
30 8, 9, 10, 11, 12, 13, 14, 15,
31 };
32 a4[0..15].* = a4[1..16].*;
33 try expectEqualSlices(u8, &.{
34 1, 2, 3, 4, 5, 6, 7, 8,
35 9, 10, 11, 12, 13, 14, 15, 15,
36 }, &a4);
37}