aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/bugs
diff options
context:
space:
mode:
authorr00ster91 <r00ster91@proton.me>2022-12-15 19:02:31 +0100
committerr00ster91 <r00ster91@proton.me>2022-12-21 23:34:22 +0100
commit5ecc2b99afca8c9a9405d296a1f11d26a3ff2823 (patch)
treefd50f2087d0c6de7e281cd2c737d6cf253173b7a /test/behavior/bugs
parent90477e5c10c9c263a3c0038e1ae7b814d2c5397e (diff)
downloadzig-5ecc2b99afca8c9a9405d296a1f11d26a3ff2823.tar.gz
zig-5ecc2b99afca8c9a9405d296a1f11d26a3ff2823.zip
behavior: more test coverage
Closes #12450 Closes #13113 Closes #12051 Closes #12092 Closes #12119 Closes #12142 Closes #12450 Closes #13113 Closes #11995 Closes #12000
Diffstat (limited to 'test/behavior/bugs')
-rw-r--r--test/behavior/bugs/11995.zig34
-rw-r--r--test/behavior/bugs/12000.zig16
-rw-r--r--test/behavior/bugs/12051.zig39
-rw-r--r--test/behavior/bugs/12092.zig28
-rw-r--r--test/behavior/bugs/12119.zig16
-rw-r--r--test/behavior/bugs/12142.zig37
-rw-r--r--test/behavior/bugs/12169.zig14
-rw-r--r--test/behavior/bugs/12450.zig21
-rw-r--r--test/behavior/bugs/13113.zig21
9 files changed, 226 insertions, 0 deletions
diff --git a/test/behavior/bugs/11995.zig b/test/behavior/bugs/11995.zig
new file mode 100644
index 0000000000..255a366fb2
--- /dev/null
+++ b/test/behavior/bugs/11995.zig
@@ -0,0 +1,34 @@
+const std = @import("std");
+const testing = std.testing;
+const builtin = @import("builtin");
+
+fn wuffs_base__make_io_buffer(arg_data: wuffs_base__slice_u8, arg_meta: *wuffs_base__io_buffer_meta) callconv(.C) void {
+ arg_data.ptr[0] = 'w';
+ arg_meta.closed = false;
+}
+const wuffs_base__io_buffer_meta = extern struct {
+ wi: usize,
+ ri: usize,
+ pos: u64,
+ closed: bool,
+};
+const wuffs_base__slice_u8 = extern struct {
+ ptr: [*c]u8,
+ len: usize,
+};
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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
+ var string: [5]u8 = "hello".*;
+ const arg_data = wuffs_base__slice_u8{ .ptr = @ptrCast([*c]u8, &string), .len = string.len };
+ var arg_meta = wuffs_base__io_buffer_meta{ .wi = 1, .ri = 2, .pos = 3, .closed = true };
+ wuffs_base__make_io_buffer(arg_data, &arg_meta);
+ try std.testing.expectEqualStrings("wello", arg_data.ptr[0..arg_data.len]);
+ try std.testing.expectEqual(@as(usize, 1), arg_meta.wi);
+ try std.testing.expectEqual(@as(usize, 2), arg_meta.ri);
+ try std.testing.expectEqual(@as(u64, 3), arg_meta.pos);
+ try std.testing.expect(!arg_meta.closed);
+}
diff --git a/test/behavior/bugs/12000.zig b/test/behavior/bugs/12000.zig
new file mode 100644
index 0000000000..c29fb84270
--- /dev/null
+++ b/test/behavior/bugs/12000.zig
@@ -0,0 +1,16 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+const T = struct {
+ next: @TypeOf(null, @as(*const T, undefined)),
+};
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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
+ var t: T = .{ .next = null };
+ try std.testing.expect(t.next == null);
+}
diff --git a/test/behavior/bugs/12051.zig b/test/behavior/bugs/12051.zig
new file mode 100644
index 0000000000..efbfc88404
--- /dev/null
+++ b/test/behavior/bugs/12051.zig
@@ -0,0 +1,39 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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 x = X{};
+ try std.testing.expectEqual(@as(u16, 0), x.y.a);
+ try std.testing.expectEqual(false, x.y.b);
+ try std.testing.expectEqual(Z{ .a = 0 }, x.y.c);
+ try std.testing.expectEqual(Z{ .a = 0 }, x.y.d);
+}
+
+const X = struct {
+ y: Y = Y.init(),
+};
+
+const Y = struct {
+ a: u16,
+ b: bool,
+ c: Z,
+ d: Z,
+
+ fn init() Y {
+ return .{
+ .a = 0,
+ .b = false,
+ .c = @bitCast(Z, @as(u32, 0)),
+ .d = @bitCast(Z, @as(u32, 0)),
+ };
+ }
+};
+
+const Z = packed struct {
+ a: u32,
+};
diff --git a/test/behavior/bugs/12092.zig b/test/behavior/bugs/12092.zig
new file mode 100644
index 0000000000..3a7b9766a3
--- /dev/null
+++ b/test/behavior/bugs/12092.zig
@@ -0,0 +1,28 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+const Foo = struct {
+ a: Bar,
+};
+
+const Bar = struct {
+ b: u32,
+};
+
+fn takeFoo(foo: *const Foo) !void {
+ try std.testing.expectEqual(@as(u32, 24), foo.a.b);
+}
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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
+ var baz: u32 = 24;
+ try takeFoo(&.{
+ .a = .{
+ .b = baz,
+ },
+ });
+}
diff --git a/test/behavior/bugs/12119.zig b/test/behavior/bugs/12119.zig
new file mode 100644
index 0000000000..bb12e3565a
--- /dev/null
+++ b/test/behavior/bugs/12119.zig
@@ -0,0 +1,16 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+const u8x32 = @Vector(32, u8);
+const u32x8 = @Vector(8, u32);
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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 zerox32: u8x32 = [_]u8{0} ** 32;
+ const bigsum: u32x8 = @bitCast(u32x8, zerox32);
+ try std.testing.expectEqual(0, @reduce(.Add, bigsum));
+}
diff --git a/test/behavior/bugs/12142.zig b/test/behavior/bugs/12142.zig
new file mode 100644
index 0000000000..db303d617a
--- /dev/null
+++ b/test/behavior/bugs/12142.zig
@@ -0,0 +1,37 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+const Holder = struct {
+ array: []const u8,
+};
+
+const Test = struct {
+ holders: []const Holder,
+};
+
+const Letter = enum(u8) {
+ A = 0x41,
+ B,
+};
+
+fn letter(e: Letter) u8 {
+ return @enumToInt(e);
+}
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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 test_struct = Test{
+ .holders = &.{
+ Holder{
+ .array = &.{
+ letter(.A),
+ },
+ },
+ },
+ };
+ try std.testing.expectEqualStrings("A", test_struct.holders[0].array);
+}
diff --git a/test/behavior/bugs/12169.zig b/test/behavior/bugs/12169.zig
new file mode 100644
index 0000000000..a9a57a0bff
--- /dev/null
+++ b/test/behavior/bugs/12169.zig
@@ -0,0 +1,14 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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 a = @Vector(2, bool){ true, true };
+ const b = @Vector(1, bool){true};
+ try std.testing.expect(@reduce(.And, a));
+ try std.testing.expect(@reduce(.And, b));
+}
diff --git a/test/behavior/bugs/12450.zig b/test/behavior/bugs/12450.zig
new file mode 100644
index 0000000000..5161e3ffd3
--- /dev/null
+++ b/test/behavior/bugs/12450.zig
@@ -0,0 +1,21 @@
+const expect = @import("std").testing.expect;
+const builtin = @import("builtin");
+
+const Foo = packed struct {
+ a: i32,
+ b: u8,
+};
+
+var buffer: [256]u8 = undefined;
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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
+ var f1: *align(16) Foo = @alignCast(16, @ptrCast(*align(1) Foo, &buffer[0]));
+ try expect(@typeInfo(@TypeOf(f1)).Pointer.alignment == 16);
+ try expect(@ptrToInt(f1) == @ptrToInt(&f1.a));
+ try expect(@typeInfo(@TypeOf(&f1.a)).Pointer.alignment == 16);
+}
diff --git a/test/behavior/bugs/13113.zig b/test/behavior/bugs/13113.zig
new file mode 100644
index 0000000000..cfbf7b6650
--- /dev/null
+++ b/test/behavior/bugs/13113.zig
@@ -0,0 +1,21 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+const Foo = extern struct {
+ a: u8 align(1),
+ b: u16 align(1),
+};
+
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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 foo = Foo{
+ .a = 1,
+ .b = 2,
+ };
+ try std.testing.expectEqual(1, foo.a);
+ try std.testing.expectEqual(2, foo.b);
+}