behavior: add test coverage for corrupted slice in release

Closes #7325
This commit is contained in:
r00ster91 2022-12-07 20:08:28 +01:00
parent 01947bfe92
commit 7a8f7dcb8c
2 changed files with 114 additions and 0 deletions

View File

@ -68,6 +68,7 @@ test {
_ = @import("behavior/bugs/7003.zig");
_ = @import("behavior/bugs/7047.zig");
_ = @import("behavior/bugs/7187.zig");
_ = @import("behavior/bugs/7325.zig");
_ = @import("behavior/bugs/9584.zig");
_ = @import("behavior/bugs/10138.zig");
_ = @import("behavior/bugs/10147.zig");

113
test/behavior/bugs/7325.zig Normal file
View File

@ -0,0 +1,113 @@
const std = @import("std");
const builtin = @import("builtin");
const testing = std.testing;
const string = "hello world";
const TempRef = struct {
index: usize,
is_weak: bool,
};
const BuiltinEnum = struct {
name: []const u8,
};
const ParamType = union(enum) {
boolean,
buffer,
one_of: BuiltinEnum,
};
const CallArg = struct {
value: Expression,
};
const Expression = union(enum) {
literal_boolean: bool,
literal_enum_value: EnumLiteral,
};
const EnumLiteral = struct {
label: []const u8,
};
const ExpressionResult = union(enum) {
temp_buffer: TempRef,
literal_boolean: bool,
literal_enum_value: []const u8,
};
fn commitCalleeParam(result: ExpressionResult, callee_param_type: ParamType) ExpressionResult {
switch (callee_param_type) {
.boolean => {
return result;
},
.buffer => {
return ExpressionResult{
.temp_buffer = .{ .index = 0, .is_weak = false },
};
},
.one_of => {
return result;
},
}
}
fn genExpression(expr: Expression) !ExpressionResult {
switch (expr) {
.literal_boolean => |value| {
return ExpressionResult{
.literal_boolean = value,
};
},
.literal_enum_value => |v| {
try testing.expectEqualStrings(string, v.label);
const result: ExpressionResult = .{
.literal_enum_value = v.label,
};
switch (result) {
.literal_enum_value => |w| {
try testing.expectEqualStrings(string, w);
},
else => {},
}
return result;
},
}
}
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 param: ParamType = .{
.one_of = .{ .name = "name" },
};
var arg: CallArg = .{
.value = .{
.literal_enum_value = .{
.label = string,
},
},
};
const result = try genExpression(arg.value);
switch (result) {
.literal_enum_value => |w| {
try testing.expectEqualStrings(string, w);
},
else => {},
}
const derp = commitCalleeParam(result, param);
switch (derp) {
.literal_enum_value => |w| {
try testing.expectEqualStrings(string, w);
},
else => {},
}
}