aboutsummaryrefslogtreecommitdiff
path: root/test/cases.txt
diff options
context:
space:
mode:
Diffstat (limited to 'test/cases.txt')
-rw-r--r--test/cases.txt397
1 files changed, 397 insertions, 0 deletions
diff --git a/test/cases.txt b/test/cases.txt
new file mode 100644
index 0000000..c3bf5ad
--- /dev/null
+++ b/test/cases.txt
@@ -0,0 +1,397 @@
+# Hello World
+
+YOU WON'T WANT TO MISS 'Hello, World!'
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ ExprStatement(PrintStatement(StringLiteral)),
+ ProgramEnd
+)
+
+# Number literals
+
+123
+45.67
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ ExprStatement(NumberLiteral),
+ ExprStatement(NumberLiteral),
+ ProgramEnd
+)
+
+# String literals
+
+"hello"
+'world'
+"escaped \"quote\""
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ ExprStatement(StringLiteral),
+ ExprStatement(StringLiteral),
+ ExprStatement(StringLiteral),
+ ProgramEnd
+)
+
+# Booleans
+
+TOTALLY RIGHT
+COMPLETELY WRONG
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ ExprStatement(BooleanLiteral),
+ ExprStatement(BooleanLiteral),
+ ProgramEnd
+)
+
+# Identifiers
+
+FOO
+BAR-BAZ
+TEST_123
+FOO'S
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ ExprStatement(Identifier),
+ ExprStatement(Identifier),
+ ExprStatement(Identifier),
+ ExprStatement(Identifier),
+ ProgramEnd
+)
+
+# Assignment
+
+EXPERTS CLAIM X TO BE 42
+EXPERTS CLAIM NAME TO BE "John"
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(Identifier, NumberLiteral),
+ Assignment(Identifier, StringLiteral),
+ ProgramEnd
+)
+
+# Binary operations - arithmetic
+
+EXPERTS CLAIM SUM TO BE 1 PLUS 2
+EXPERTS CLAIM DIFF TO BE 10 MINUS 5
+EXPERTS CLAIM PRODUCT TO BE 3 TIMES 4
+EXPERTS CLAIM QUOTIENT TO BE 20 DIVIDED BY 5
+EXPERTS CLAIM REMAINDER TO BE 10 MODULO 3
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ ProgramEnd
+)
+
+# Binary operations - comparison
+
+EXPERTS CLAIM EQ TO BE 1 IS ACTUALLY 1
+EXPERTS CLAIM GT TO BE 5 BEATS 3
+EXPERTS CLAIM LT TO BE 2 SMALLER THAN 10
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ Assignment(Identifier, BinaryExpression(NumberLiteral, NumberLiteral)),
+ ProgramEnd
+)
+
+# Binary operations - logical
+
+EXPERTS CLAIM BOTH TO BE TOTALLY RIGHT AND TOTALLY RIGHT
+EXPERTS CLAIM EITHER TO BE TOTALLY RIGHT OR COMPLETELY WRONG
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(Identifier, BinaryExpression(BooleanLiteral, BooleanLiteral)),
+ Assignment(Identifier, BinaryExpression(BooleanLiteral, BooleanLiteral)),
+ ProgramEnd
+)
+
+# Function declaration without arguments
+
+DISCOVER HOW TO GREET
+ YOU WON'T WANT TO MISS "Hello!"
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ FunctionDecl(
+ Identifier,
+ ExprStatement(PrintStatement(StringLiteral))
+ ),
+ ProgramEnd
+)
+
+# Function declaration with arguments
+
+DISCOVER HOW TO ADD WITH A, B
+ SHOCKING DEVELOPMENT A PLUS B
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ FunctionDecl(
+ Identifier,
+ ArgumentList(Identifier, Identifier),
+ ReturnStatement(BinaryExpression(Identifier, Identifier))
+ ),
+ ProgramEnd
+)
+
+# Function call
+
+EXPERTS CLAIM RESULT TO BE ADD OF 1, 2
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(
+ Identifier,
+ FunctionCall(Identifier, ArgumentExpression(NumberLiteral), ArgumentExpression(NumberLiteral))
+ ),
+ ProgramEnd
+)
+
+# Block with RUMOR HAS IT
+
+RUMOR HAS IT
+ EXPERTS CLAIM X TO BE 1
+ EXPERTS CLAIM Y TO BE 2
+ YOU WON'T WANT TO MISS X PLUS Y
+END OF STORY
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Block(
+ Assignment(Identifier, NumberLiteral),
+ Assignment(Identifier, NumberLiteral),
+ ExprStatement(PrintStatement(BinaryExpression(Identifier, Identifier)))
+ ),
+ ProgramEnd
+)
+
+# If statement without else
+
+WHAT IF X BEATS 0
+ YOU WON'T WANT TO MISS "positive"
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ IfStatement(
+ BinaryExpression(Identifier, NumberLiteral),
+ ExprStatement(PrintStatement(StringLiteral))
+ ),
+ ProgramEnd
+)
+
+# If statement with else
+
+WHAT IF X IS ACTUALLY 0
+ YOU WON'T WANT TO MISS "zero"
+LIES!
+ YOU WON'T WANT TO MISS "not zero"
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ IfStatement(
+ BinaryExpression(Identifier, NumberLiteral),
+ ExprStatement(PrintStatement(StringLiteral)),
+ ExprStatement(PrintStatement(StringLiteral))
+ ),
+ ProgramEnd
+)
+
+# Input statement
+
+EXPERTS CLAIM NAME TO BE LATEST NEWS ON "Enter your name"
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(
+ Identifier,
+ InputStatement(StringLiteral)
+ ),
+ ProgramEnd
+)
+
+# Factorial function
+
+DISCOVER HOW TO FACTORIAL WITH N
+RUMOR HAS IT
+ WHAT IF N IS ACTUALLY 0
+ SHOCKING DEVELOPMENT 1
+ LIES!
+ SHOCKING DEVELOPMENT
+ N TIMES FACTORIAL OF N MINUS 1
+END OF STORY
+
+EXPERTS CLAIM RESULT TO BE FACTORIAL OF 10
+YOU WON'T WANT TO MISS 'Result is'
+YOU WON'T WANT TO MISS RESULT
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ FunctionDecl(
+ Identifier,
+ ArgumentList(Identifier),
+ Block(
+ IfStatement(
+ BinaryExpression(Identifier, NumberLiteral),
+ ReturnStatement(NumberLiteral),
+ ReturnStatement(
+ BinaryExpression(
+ Identifier,
+ FunctionCall(
+ Identifier,
+ ArgumentExpression(BinaryExpression(Identifier, NumberLiteral))
+ )
+ )
+ )
+ )
+ )
+ ),
+ Assignment(Identifier, FunctionCall(Identifier, ArgumentExpression(NumberLiteral))),
+ ExprStatement(PrintStatement(StringLiteral)),
+ ExprStatement(PrintStatement(Identifier)),
+ ProgramEnd
+)
+
+# Fibonacci function
+
+DISCOVER HOW TO FIBONACCI WITH A, B, N
+RUMOR HAS IT
+ WHAT IF N SMALLER THAN 1
+ SHOCKING DEVELOPMENT B
+ LIES! RUMOR HAS IT
+ YOU WON'T WANT TO MISS B
+ SHOCKING DEVELOPMENT
+ FIBONACCI OF B, A PLUS B, N MINUS 1
+ END OF STORY
+END OF STORY
+
+EXPERTS CLAIM LIMIT TO BE 10
+YOU WON'T WANT TO MISS 'First 10 Fibonacci numbers'
+EXPERTS CLAIM NOTHING TO BE FIBONACCI OF 0, 1, LIMIT
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ FunctionDecl(
+ Identifier,
+ ArgumentList(Identifier, Identifier, Identifier),
+ Block(
+ IfStatement(
+ BinaryExpression(Identifier, NumberLiteral),
+ ReturnStatement(Identifier),
+ Block(
+ ExprStatement(PrintStatement(Identifier)),
+ ReturnStatement(
+ FunctionCall(
+ Identifier,
+ ArgumentExpression(Identifier),
+ ArgumentExpression(BinaryExpression(Identifier, Identifier)),
+ ArgumentExpression(BinaryExpression(Identifier, NumberLiteral))
+ )
+ )
+ )
+ )
+ )
+ ),
+ Assignment(Identifier, NumberLiteral),
+ ExprStatement(PrintStatement(StringLiteral)),
+ Assignment(
+ Identifier,
+ FunctionCall(
+ Identifier,
+ ArgumentExpression(NumberLiteral),
+ ArgumentExpression(NumberLiteral),
+ ArgumentExpression(Identifier)
+ )
+ ),
+ ProgramEnd
+)
+
+# Parenthesized expression
+
+EXPERTS CLAIM X TO BE (RUMOR HAS IT
+ EXPERTS CLAIM A TO BE 1
+ SHOCKING DEVELOPMENT A PLUS 2
+END OF STORY)
+
+PLEASE LIKE AND SUBSCRIBE
+
+==>
+
+Program(
+ Assignment(
+ Identifier,
+ ParenBlock(
+ Block(
+ Assignment(Identifier, NumberLiteral),
+ ReturnStatement(BinaryExpression(Identifier, NumberLiteral))
+ )
+ )
+ ),
+ ProgramEnd
+)