aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/string_literals.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-10-23 17:06:44 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-10-23 17:28:10 -0700
commitd4911794ae8f43745b2d98a725acf440954f8d90 (patch)
tree83a30dd7b139139e86a9d53f69136b43732a9b74 /test/behavior/string_literals.zig
parent3667489051db56637de71d537436a20431a8e184 (diff)
downloadzig-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.zig76
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
+}