diff --git a/test/behavior.zig b/test/behavior.zig index 9e03a8f000d13c9996d67ddeb316ad1922fd9804..1579a97cbcf06868b6dece94a892ed4112e0b664 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -55,7 +55,6 @@ test { _ = @import("behavior/bugs/3384.zig"); _ = @import("behavior/bugs/3586.zig"); _ = @import("behavior/bugs/3742.zig"); - _ = @import("behavior/bugs/3779.zig"); _ = @import("behavior/bugs/4328.zig"); _ = @import("behavior/bugs/4560.zig"); _ = @import("behavior/bugs/4769_a.zig"); @@ -209,6 +208,7 @@ test { _ = @import("behavior/slice.zig"); _ = @import("behavior/slice_sentinel_comptime.zig"); _ = @import("behavior/src.zig"); + _ = @import("behavior/string_literals.zig"); _ = @import("behavior/struct.zig"); _ = @import("behavior/struct_contains_null_ptr_itself.zig"); _ = @import("behavior/struct_contains_slice_of_itself.zig"); diff --git a/test/behavior/bugs/3779.zig b/test/behavior/bugs/3779.zig deleted file mode 100644 index c2bd1031188f851f60ba1f361e0f34a0249cabe9..0000000000000000000000000000000000000000 --- a/test/behavior/bugs/3779.zig +++ /dev/null @@ -1,76 +0,0 @@ -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 == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - - try std.testing.expect(*const [13:0]u8 == @TypeOf(tag_name)); - try std.testing.expect(std.mem.eql(u8, "TestEnumValue", tag_name)); - try std.testing.expect(std.mem.eql(u8, "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 == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - - try std.testing.expect(*const [13:0]u8 == @TypeOf(error_name)); - try std.testing.expect(std.mem.eql(u8, "TestErrorCode", error_name)); - try std.testing.expect(std.mem.eql(u8, "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 == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - - try std.testing.expect(*const [type_name.len:0]u8 == @TypeOf(type_name)); - try std.testing.expect(std.mem.eql(u8, "behavior.bugs.3779.TestType", type_name)); - try std.testing.expect(std.mem.eql(u8, "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" { - if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - - try std.testing.expect(*const [expected_contents.len:0]u8 == @TypeOf(actual_contents)); - try std.testing.expect(std.mem.eql(u8, expected_contents, actual_contents)); - try std.testing.expect(std.mem.eql(u8, expected_contents, actual_contents)); - try std.testing.expect(std.mem.eql(u8, 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" { - if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - - const src = testFnForSrc(); - try std.testing.expect([:0]const u8 == @TypeOf(src.file)); - try std.testing.expect(std.mem.endsWith(u8, src.file, "3779.zig")); - try std.testing.expect([: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 -} diff --git a/test/behavior/bugs/3779_file_to_embed.txt b/test/behavior/bugs/3779_file_to_embed.txt deleted file mode 100644 index 0436280ed352a221998783ca5008374003a60d15..0000000000000000000000000000000000000000 --- a/test/behavior/bugs/3779_file_to_embed.txt +++ /dev/null @@ -1 +0,0 @@ -hello zig diff --git a/test/behavior/file_to_embed.txt b/test/behavior/file_to_embed.txt new file mode 100644 index 0000000000000000000000000000000000000000..0436280ed352a221998783ca5008374003a60d15 --- /dev/null +++ b/test/behavior/file_to_embed.txt @@ -0,0 +1 @@ +hello zig diff --git a/test/behavior/string_literals.zig b/test/behavior/string_literals.zig new file mode 100644 index 0000000000000000000000000000000000000000..51ca7e997c30f79774afc7a9b4fd78c77782a3e5 --- /dev/null +++ b/test/behavior/string_literals.zig @@ -0,0 +1,76 @@ +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 == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + try std.testing.expect(*const [13:0]u8 == @TypeOf(tag_name)); + try std.testing.expect(std.mem.eql(u8, "TestEnumValue", tag_name)); + try std.testing.expect(std.mem.eql(u8, "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 == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + try std.testing.expect(*const [13:0]u8 == @TypeOf(error_name)); + try std.testing.expect(std.mem.eql(u8, "TestErrorCode", error_name)); + try std.testing.expect(std.mem.eql(u8, "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 == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + try std.testing.expect(*const [type_name.len:0]u8 == @TypeOf(type_name)); + try std.testing.expect(std.mem.eql(u8, "behavior.string_literals.TestType", type_name)); + try std.testing.expect(std.mem.eql(u8, "behavior.string_literals.TestType", ptr_type_name[0..type_name.len])); +} + +const actual_contents = @embedFile("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" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + try std.testing.expect(*const [expected_contents.len:0]u8 == @TypeOf(actual_contents)); + try std.testing.expect(std.mem.eql(u8, expected_contents, actual_contents)); + try std.testing.expect(std.mem.eql(u8, expected_contents, actual_contents)); + try std.testing.expect(std.mem.eql(u8, 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" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + const src = testFnForSrc(); + try std.testing.expect([:0]const u8 == @TypeOf(src.file)); + try std.testing.expect(std.mem.endsWith(u8, src.file, "string_literals.zig")); + try std.testing.expect([: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 +}