commit 5118caf5ab2599ca61b57f68a89aa2d094f51981 (tree)
parent 24071c6803ccc0f11b2c4d7c8f22fa8933a98a7c
Author: Jimmi Holst Christensen <jimmiholstchristensen@gmail.com>
Date: Sat, 31 Mar 2018 00:53:00 +0200
Added a lot of test cases
Diffstat:
| M | std/zig/parser.zig | | | 150 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- |
1 file changed, 149 insertions(+), 1 deletion(-)
diff --git a/std/zig/parser.zig b/std/zig/parser.zig
@@ -1649,6 +1649,13 @@ test "zig fmt" {
);
try testCanonical(
+ \\extern fn f1(s: [][]align(1) []const []volatile u8) c_int;
+ \\extern fn f2(s: []align(1) const []align(1) volatile []const volatile u8) c_int;
+ \\extern fn f3(s: []align(1) const volatile u8) c_int;
+ \\
+ );
+
+ try testCanonical(
\\fn f1(a: bool, b: bool) bool {
\\ a != b;
\\ return a == b;
@@ -1716,7 +1723,7 @@ test "zig fmt" {
try testCanonical(
\\test "prefix operators" {
- \\ --%~??!*&0;
+ \\ try return --%~??!*&0;
\\}
\\
);
@@ -1730,4 +1737,145 @@ test "zig fmt" {
\\}
\\
);
+
+ try testCanonical(
+ \\test "test index" {
+ \\ a[0];
+ \\ a[0 + 5];
+ \\ a[0..];
+ \\ a[0..5];
+ \\}
+ \\
+ );
+
+ try testCanonical(
+ \\test "test array" {
+ \\ const a : [2]u8 = [2]u8{ 1, 2 };
+ \\ const a : [2]u8 = []u8{ 1, 2 };
+ \\ const a : [0]u8 = []u8{};
+ \\}
+ \\
+ );
+
+// PrimaryExpression = Integer | Float | String | CharLiteral | KeywordLiteral | GroupedExpression | BlockExpression(BlockOrExpression) | Symbol | ("@" Symbol FnCallExpression) | ArrayType | FnProto | AsmExpression | ContainerDecl | ("continue" option(":" Symbol)) | ErrorSetDecl | PromiseType
+ try testCanonical(
+ \\test "values" {
+ \\ 1;
+ \\ 1.0;
+ \\ "string";
+ \\ c"cstring";
+ \\ \\ Multi
+ \\ \\ line
+ \\ \\ string
+ \\ ;
+ \\ 'c';
+ \\ true;
+ \\ false;
+ \\ null;
+ \\ undefined;
+ \\ error;
+ \\ this;
+ \\ unreachable;
+ \\ suspend;
+ \\}
+ \\
+ );
+
+ try testCanonical(
+ \\test "percendence" {
+ \\ 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 or c;
+ \\ (a = b) or c;
+ \\}
+ \\
+ );
+
+ try testCanonical(
+ \\const S = struct {
+ \\ const Self = this;
+ \\ f1: u8,
+ \\
+ \\ fn method(self: &Self) Self {
+ \\ return *self;
+ \\ }
+ \\
+ \\ f2: u8,
+ \\};
+ \\
+ \\const Ps = packed struct {
+ \\ a: u8,
+ \\ b: u8,
+ \\
+ \\ c: u8,
+ \\};
+ \\
+ \\const Es = extern struct {
+ \\ a: u8,
+ \\ b: u8,
+ \\
+ \\ c: u8,
+ \\};
+ \\
+ );
+
+ try testCanonical(
+ \\const E = enum {
+ \\ Ok,
+ \\ SomethingElse = 0,
+ \\};
+ \\
+ \\const E2 = enum(u8) {
+ \\ Ok,
+ \\ SomethingElse = 255,
+ \\ SomethingThird,
+ \\};
+ \\
+ \\const Ee = extern enum {
+ \\ Ok,
+ \\ SomethingElse,
+ \\ SomethingThird,
+ \\};
+ \\
+ \\const Ep = packed enum {
+ \\ Ok,
+ \\ SomethingElse,
+ \\ SomethingThird,
+ \\};
+ \\
+ );
+
+ try testCanonical(
+ \\const a1 = []u8{ };
+ \\const a2 = []u8{ 1, 2, 3, 4 };
+ \\const s1 = S{ };
+ \\const s2 = S{ .a = 1, .b = 2, };
+ \\
+ );
+
+ try testCanonical(@embedFile("ast.zig"));
+ try testCanonical(@embedFile("index.zig"));
+ try testCanonical(@embedFile("parser.zig"));
+ try testCanonical(@embedFile("tokenizer.zig"));
}