diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-10-23 17:06:44 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-10-23 17:28:10 -0700 |
| commit | d4911794ae8f43745b2d98a725acf440954f8d90 (patch) | |
| tree | 83a30dd7b139139e86a9d53f69136b43732a9b74 /test/behavior/string_literals.zig | |
| parent | 3667489051db56637de71d537436a20431a8e184 (diff) | |
| download | zig-d4911794ae8f43745b2d98a725acf440954f8d90.tar.gz zig-d4911794ae8f43745b2d98a725acf440954f8d90.zip | |
rename behavior test to better describe what it does
In general, let's not lean on GitHub issue numbers as having meaning.
The goal of behavior tests is to produce a minimum set of tests that
test 100% of the language.
Diffstat (limited to 'test/behavior/string_literals.zig')
| -rw-r--r-- | test/behavior/string_literals.zig | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/test/behavior/string_literals.zig b/test/behavior/string_literals.zig new file mode 100644 index 0000000000..51ca7e997c --- /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 +} |
