parser: port precedence, prefix, functions, values, indexing tests
Port tests: - "precedence" - "prefix operators" - "functions" - "multiline string" - "multiline string with CRLF line endings" - "values" - "indexing" - "struct declaration" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
176
parser_test.zig
176
parser_test.zig
@@ -3249,6 +3249,182 @@ test "zig fmt: test declaration" {
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: precedence" {
|
||||
try testCanonical(
|
||||
\\test "precedence" {
|
||||
\\ a!b();
|
||||
\\ (a!b)();
|
||||
\\ !a!b;
|
||||
\\ !(a!b);
|
||||
\\ !a{};
|
||||
\\ !(a{});
|
||||
\\ a + b{};
|
||||
\\ (a + b){};
|
||||
\\ a << b + c;
|
||||
\\ (a << b) + c;
|
||||
\\ a & b << c;
|
||||
\\ (a & b) << c;
|
||||
\\ a ^ b & c;
|
||||
\\ (a ^ b) & c;
|
||||
\\ a | b ^ c;
|
||||
\\ (a | b) ^ c;
|
||||
\\ a == b | c;
|
||||
\\ (a == b) | c;
|
||||
\\ a and b == c;
|
||||
\\ (a and b) == c;
|
||||
\\ a or b and c;
|
||||
\\ (a or b) and c;
|
||||
\\ (a or b) and c;
|
||||
\\ a == b and c == d;
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: prefix operators" {
|
||||
try testCanonical(
|
||||
\\test "prefix operators" {
|
||||
\\ try return --%~!&0;
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: functions" {
|
||||
try testCanonical(
|
||||
\\extern fn puts(s: *const u8) c_int;
|
||||
\\extern "c" fn puts(s: *const u8) c_int;
|
||||
\\export fn puts(s: *const u8) c_int;
|
||||
\\inline fn puts(s: *const u8) c_int;
|
||||
\\noinline fn puts(s: *const u8) c_int;
|
||||
\\pub extern fn puts(s: *const u8) c_int;
|
||||
\\pub extern "c" fn puts(s: *const u8) c_int;
|
||||
\\pub export fn puts(s: *const u8) c_int;
|
||||
\\pub inline fn puts(s: *const u8) c_int;
|
||||
\\pub noinline fn puts(s: *const u8) c_int;
|
||||
\\pub extern fn puts(s: *const u8) align(2 + 2) c_int;
|
||||
\\pub extern "c" fn puts(s: *const u8) align(2 + 2) c_int;
|
||||
\\pub export fn puts(s: *const u8) align(2 + 2) c_int;
|
||||
\\pub inline fn puts(s: *const u8) align(2 + 2) c_int;
|
||||
\\pub noinline fn puts(s: *const u8) align(2 + 2) c_int;
|
||||
\\pub fn callInlineFn(func: fn () callconv(.@"inline") void) void {
|
||||
\\ func();
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: multiline string" {
|
||||
try testCanonical(
|
||||
\\test "" {
|
||||
\\ const s1 =
|
||||
\\ \\one
|
||||
\\ \\two)
|
||||
\\ \\three
|
||||
\\ ;
|
||||
\\ const s3 = // hi
|
||||
\\ \\one
|
||||
\\ \\two)
|
||||
\\ \\three
|
||||
\\ ;
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: multiline string with CRLF line endings" {
|
||||
try testTransform("" ++
|
||||
"const s =\r\n" ++
|
||||
" \\\\one\r\n" ++
|
||||
" \\\\two)\r\n" ++
|
||||
" \\\\three\r\n" ++
|
||||
";\r\n",
|
||||
\\const s =
|
||||
\\ \\one
|
||||
\\ \\two)
|
||||
\\ \\three
|
||||
\\;
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: values" {
|
||||
try testCanonical(
|
||||
\\test "values" {
|
||||
\\ 1;
|
||||
\\ 1.0;
|
||||
\\ "string";
|
||||
\\ 'c';
|
||||
\\ true;
|
||||
\\ false;
|
||||
\\ null;
|
||||
\\ undefined;
|
||||
\\ anyerror;
|
||||
\\ this;
|
||||
\\ unreachable;
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: indexing" {
|
||||
try testCanonical(
|
||||
\\test "test index" {
|
||||
\\ a[0];
|
||||
\\ a[0 + 5];
|
||||
\\ a[0..];
|
||||
\\ a[0..5];
|
||||
\\ a[a[0]];
|
||||
\\ a[a[0..]];
|
||||
\\ a[a[0..5]];
|
||||
\\ a[a[0]..];
|
||||
\\ a[a[0..5]..];
|
||||
\\ a[a[0]..a[0]];
|
||||
\\ a[a[0..5]..a[0]];
|
||||
\\ a[a[0..5]..a[0..5]];
|
||||
\\}
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: struct declaration" {
|
||||
try testCanonical(
|
||||
\\const S = struct {
|
||||
\\ const Self = @This();
|
||||
\\ f1: u8,
|
||||
\\ f3: u8,
|
||||
\\
|
||||
\\ f2: u8,
|
||||
\\
|
||||
\\ fn method(self: *Self) Self {
|
||||
\\ return self.*;
|
||||
\\ }
|
||||
\\};
|
||||
\\
|
||||
\\const Ps = packed struct {
|
||||
\\ a: u8,
|
||||
\\ b: u8,
|
||||
\\
|
||||
\\ c: u8,
|
||||
\\};
|
||||
\\
|
||||
\\const Ps = packed struct(u32) {
|
||||
\\ a: u1,
|
||||
\\ b: u2,
|
||||
\\
|
||||
\\ c: u29,
|
||||
\\};
|
||||
\\
|
||||
\\const Es = extern struct {
|
||||
\\ a: u8,
|
||||
\\ b: u8,
|
||||
\\
|
||||
\\ c: u8,
|
||||
\\};
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: error set declaration" {
|
||||
try testCanonical(
|
||||
\\const E = error{
|
||||
|
||||
Reference in New Issue
Block a user