diff options
Diffstat (limited to 'src/non-terminal.zig')
| -rw-r--r-- | src/non-terminal.zig | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/src/non-terminal.zig b/src/non-terminal.zig index fdab32a..6eaf068 100644 --- a/src/non-terminal.zig +++ b/src/non-terminal.zig @@ -155,9 +155,10 @@ test "single-non-terminal" { try non_terminal.parse_and_add_variants("main -> one", &names); - try std.testing.expectEqualDeep(&[_][]const Character{ - &[_] Character { Character { .non_terminal = 1 } } - }, non_terminal.rules()); + try std.testing.expectEqualDeep( + &[_] Character { Character { .non_terminal = 1 } }, + non_terminal.rules()[0].items + ); } test "multiple-non-terminal" { @@ -174,11 +175,12 @@ test "multiple-non-terminal" { try non_terminal.parse_and_add_variants("main -> one | two | three", &names); - try std.testing.expectEqualDeep(&[_][]const Character{ - &[_] Character { Character { .non_terminal = 1 } }, - &[_] Character { Character { .non_terminal = 2 } }, - &[_] Character { Character { .non_terminal = 3 } }, - }, non_terminal.rules()); + inline for (0..3) |i| { + try std.testing.expectEqualDeep( + &[_] Character { Character { .non_terminal = i + 1 } }, + non_terminal.rules()[i].items + ); + } } test "multiple-non-terminal-sequence" { @@ -195,11 +197,20 @@ test "multiple-non-terminal-sequence" { try non_terminal.parse_and_add_variants("main -> one two | two | three", &names); - try std.testing.expectEqualDeep(&[_][]const Character{ + try std.testing.expectEqualDeep( &[_] Character { Character { .non_terminal = 1 }, Character { .non_terminal = 2 }, }, + non_terminal.rules()[0].items + ); + + try std.testing.expectEqualDeep( &[_] Character { Character { .non_terminal = 2 } }, + non_terminal.rules()[1].items + ); + + try std.testing.expectEqualDeep( &[_] Character { Character { .non_terminal = 3 } }, - }, non_terminal.rules()); + non_terminal.rules()[2].items + ); } test "single-terminal" { @@ -214,13 +225,14 @@ test "single-terminal" { try non_terminal.parse_and_add_variants("main -> 'one'", &names); - try std.testing.expectEqualDeep(&[_][]const Character{ + try std.testing.expectEqualDeep( &[_] Character { Character { .terminal = 'o' }, Character { .terminal = 'n' }, Character { .terminal = 'e' } }, - }, non_terminal.rules()); + non_terminal.rules()[0].items + ); } test "single-terminal-with-escapes" { @@ -234,7 +246,7 @@ test "single-terminal-with-escapes" { try non_terminal.parse_and_add_variants("main -> 'o\\r\\nn\\'e\\\\'", &names); - try std.testing.expectEqualDeep(&[_][]const Character{ + try std.testing.expectEqualDeep( &[_] Character { Character { .terminal = 'o' }, Character { .terminal = '\r' }, @@ -244,7 +256,8 @@ test "single-terminal-with-escapes" { Character { .terminal = 'e' }, Character { .terminal = '\\' }, }, - }, non_terminal.rules()); + non_terminal.rules()[0].items + ); } test "mix" { @@ -260,19 +273,28 @@ test "mix" { try non_terminal.parse_and_add_variants("main -> 'ab' other | other some 'a' | main", &names); - try std.testing.expectEqualDeep(&[_][]const Character{ + try std.testing.expectEqualDeep( &[_] Character { Character { .terminal = 'a' }, Character { .terminal = 'b' }, Character { .non_terminal = 1 }, }, + non_terminal.rules()[0].items, + ); + + try std.testing.expectEqualDeep( &[_] Character { Character { .non_terminal = 1 }, Character { .non_terminal = 2 }, Character { .terminal = 'a' }, }, + non_terminal.rules()[1].items, + ); + + try std.testing.expectEqualDeep( &[_] Character { Character { .non_terminal = 0 }, }, - }, non_terminal.rules()); + non_terminal.rules()[2].items, + ); } |