aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/array.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2024-01-02 17:33:41 +0200
committerAndrew Kelley <andrew@ziglang.org>2024-01-06 16:49:41 -0800
commit804cee3b93cb7084c16ee61d3bcb57f7d3c9f0bc (patch)
tree3d8c534b1adc352b248255ef2906ef2bdf11dffc /test/behavior/array.zig
parent282ff8d3bd4a0d870a98f145aa87039e0409b745 (diff)
downloadzig-804cee3b93cb7084c16ee61d3bcb57f7d3c9f0bc.tar.gz
zig-804cee3b93cb7084c16ee61d3bcb57f7d3c9f0bc.zip
categorize `behavior/bugs/<issueno>.zig` tests
Diffstat (limited to 'test/behavior/array.zig')
-rw-r--r--test/behavior/array.zig118
1 files changed, 118 insertions, 0 deletions
diff --git a/test/behavior/array.zig b/test/behavior/array.zig
index e9a7f4b9c0..8204453de6 100644
--- a/test/behavior/array.zig
+++ b/test/behavior/array.zig
@@ -827,3 +827,121 @@ test "tuple initialized through reference to anonymous array init provides resul
try expect(foo[0] == 12345);
try expect(@intFromPtr(foo[1]) == 0x1000);
}
+
+test "copied array element doesn't alias source" {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ var x: [10][10]u32 = undefined;
+
+ x[0][1] = 0;
+ const a = x[0];
+ x[0][1] = 15;
+
+ try expect(a[1] == 0);
+}
+
+test "array initialized with string literal" {
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ a: u32,
+ c: [5]u8,
+ };
+ const U = union {
+ s: S,
+ };
+ const s_1 = S{
+ .a = undefined,
+ .c = "12345".*, // this caused problems
+ };
+
+ var u_2 = U{ .s = s_1 };
+ _ = &u_2;
+ try std.testing.expectEqualStrings("12345", &u_2.s.c);
+}
+
+test "array initialized with array with sentinel" {
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ a: u32,
+ c: [5]u8,
+ };
+ const U = union {
+ s: S,
+ };
+ const c = [5:0]u8{ 1, 2, 3, 4, 5 };
+ const s_1 = S{
+ .a = undefined,
+ .c = c, // this caused problems
+ };
+ var u_2 = U{ .s = s_1 };
+ _ = &u_2;
+ try std.testing.expectEqualSlices(u8, &.{ 1, 2, 3, 4, 5 }, &u_2.s.c);
+}
+
+test "store array of array of structs at comptime" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ fn storeArrayOfArrayOfStructs() u8 {
+ const S = struct {
+ x: u8,
+ };
+
+ var cases = [_][1]S{
+ [_]S{
+ S{ .x = 15 },
+ },
+ };
+ _ = &cases;
+ return cases[0][0].x;
+ }
+ };
+
+ try expect(S.storeArrayOfArrayOfStructs() == 15);
+ try comptime expect(S.storeArrayOfArrayOfStructs() == 15);
+}
+
+test "accessing multidimensional global array at comptime" {
+ if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ const array = [_][]const []const u8{
+ &.{"hello"},
+ &.{ "world", "hello" },
+ };
+ };
+
+ try std.testing.expect(S.array[0].len == 1);
+ try std.testing.expectEqualStrings("hello", S.array[0][0]);
+}
+
+test "union that needs padding bytes inside an array" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+
+ const B = union(enum) {
+ D: u8,
+ E: u16,
+ };
+ const A = union(enum) {
+ B: B,
+ C: u8,
+ };
+ var as = [_]A{
+ A{ .B = B{ .D = 1 } },
+ A{ .B = B{ .D = 1 } },
+ };
+ _ = &as;
+
+ const a = as[0].B;
+ try std.testing.expect(a.D == 1);
+}