* make it always return a fully qualified name. stage1 is inconsistent about this. * AstGen: fix anon_name_strategy to correctly be `func` when anon type creation happens in the operand of the return expression. * Sema: implement type names for the "function" naming strategy. * Put "enum", "union", "opaque", or "struct" in place of "anon" when creating respective anonymous Decl names. * std.testing: add `expectStringStartsWith`. Didn't end up using it after all. Also this enables the real test runner for stage2 LLVM backend (sans wasm32) since it works now.
65 lines
2.8 KiB
Zig
65 lines
2.8 KiB
Zig
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
|
|
const TestEnum = enum { TestEnumValue };
|
|
const tag_name = @tagName(TestEnum.TestEnumValue);
|
|
const ptr_tag_name: [*:0]const u8 = tag_name;
|
|
|
|
test "@tagName() returns a string literal" {
|
|
if (builtin.zig_backend == .stage1) return error.SkipZigTest; // stage1 gets the type wrong
|
|
try std.testing.expectEqual(*const [13:0]u8, @TypeOf(tag_name));
|
|
try std.testing.expectEqualStrings("TestEnumValue", tag_name);
|
|
try std.testing.expectEqualStrings("TestEnumValue", ptr_tag_name[0..tag_name.len]);
|
|
}
|
|
|
|
const TestError = error{TestErrorCode};
|
|
const error_name = @errorName(TestError.TestErrorCode);
|
|
const ptr_error_name: [*:0]const u8 = error_name;
|
|
|
|
test "@errorName() returns a string literal" {
|
|
if (builtin.zig_backend == .stage1) return error.SkipZigTest; // stage1 gets the type wrong
|
|
try std.testing.expectEqual(*const [13:0]u8, @TypeOf(error_name));
|
|
try std.testing.expectEqualStrings("TestErrorCode", error_name);
|
|
try std.testing.expectEqualStrings("TestErrorCode", ptr_error_name[0..error_name.len]);
|
|
}
|
|
|
|
const TestType = struct {};
|
|
const type_name = @typeName(TestType);
|
|
const ptr_type_name: [*:0]const u8 = type_name;
|
|
|
|
test "@typeName() returns a string literal" {
|
|
if (builtin.zig_backend == .stage1) return error.SkipZigTest; // stage1 gets the type wrong
|
|
try std.testing.expectEqual(*const [type_name.len:0]u8, @TypeOf(type_name));
|
|
try std.testing.expectEqualStrings("behavior.bugs.3779.TestType", type_name);
|
|
try std.testing.expectEqualStrings("behavior.bugs.3779.TestType", ptr_type_name[0..type_name.len]);
|
|
}
|
|
|
|
const actual_contents = @embedFile("3779_file_to_embed.txt");
|
|
const ptr_actual_contents: [*:0]const u8 = actual_contents;
|
|
const expected_contents = "hello zig\n";
|
|
|
|
test "@embedFile() returns a string literal" {
|
|
try std.testing.expectEqual(*const [expected_contents.len:0]u8, @TypeOf(actual_contents));
|
|
try std.testing.expect(std.mem.eql(u8, expected_contents, actual_contents));
|
|
try std.testing.expectEqualStrings(expected_contents, actual_contents);
|
|
try std.testing.expectEqualStrings(expected_contents, ptr_actual_contents[0..actual_contents.len]);
|
|
}
|
|
|
|
fn testFnForSrc() std.builtin.SourceLocation {
|
|
return @src();
|
|
}
|
|
|
|
test "@src() returns a struct containing 0-terminated string slices" {
|
|
const src = testFnForSrc();
|
|
try std.testing.expectEqual([:0]const u8, @TypeOf(src.file));
|
|
try std.testing.expect(std.mem.endsWith(u8, src.file, "3779.zig"));
|
|
try std.testing.expectEqual([:0]const u8, @TypeOf(src.fn_name));
|
|
try std.testing.expect(std.mem.endsWith(u8, src.fn_name, "testFnForSrc"));
|
|
|
|
const ptr_src_file: [*:0]const u8 = src.file;
|
|
_ = ptr_src_file; // unused
|
|
|
|
const ptr_src_fn_name: [*:0]const u8 = src.fn_name;
|
|
_ = ptr_src_fn_name; // unused
|
|
}
|