behavior: more test coverage

Closes #12450
Closes #13113
Closes #12051
Closes #12092
Closes #12119
Closes #12142
Closes #12450
Closes #13113
Closes #11995
Closes #12000
This commit is contained in:
r00ster91 2022-12-15 19:02:31 +01:00
parent 90477e5c10
commit 5ecc2b99af
10 changed files with 235 additions and 0 deletions

View File

@ -91,11 +91,19 @@ test {
_ = @import("behavior/bugs/11213.zig");
_ = @import("behavior/bugs/11787.zig");
_ = @import("behavior/bugs/11816.zig");
_ = @import("behavior/bugs/11995.zig");
_ = @import("behavior/bugs/12000.zig");
_ = @import("behavior/bugs/12003.zig");
_ = @import("behavior/bugs/12025.zig");
_ = @import("behavior/bugs/12033.zig");
_ = @import("behavior/bugs/12043.zig");
_ = @import("behavior/bugs/12051.zig");
_ = @import("behavior/bugs/12092.zig");
_ = @import("behavior/bugs/12119.zig");
_ = @import("behavior/bugs/12142.zig");
_ = @import("behavior/bugs/12169.zig");
_ = @import("behavior/bugs/12430.zig");
_ = @import("behavior/bugs/12450.zig");
_ = @import("behavior/bugs/12486.zig");
_ = @import("behavior/bugs/12488.zig");
_ = @import("behavior/bugs/12498.zig");
@ -122,6 +130,7 @@ test {
_ = @import("behavior/bugs/13068.zig");
_ = @import("behavior/bugs/13069.zig");
_ = @import("behavior/bugs/13112.zig");
_ = @import("behavior/bugs/13113.zig");
_ = @import("behavior/bugs/13128.zig");
_ = @import("behavior/bugs/13159.zig");
_ = @import("behavior/bugs/13164.zig");

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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,
};

View File

@ -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,
},
});
}

View File

@ -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));
}

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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);
}

View File

@ -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);
}