Skip to content

Commit 5da2654

Browse files
committed
Add more test case
1 parent 45c7ac8 commit 5da2654

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

tests/patmat/i8922c.scala

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
case class Token(tokenType: TokenType, lexeme: String, line: Int)
2+
3+
enum TokenType:
4+
// Single-character tokens.
5+
case MINUS, PLUS, SLASH, STAR,
6+
7+
// One or two character tokens.
8+
BANG, BANG_EQUAL,
9+
EQUAL, EQUAL_EQUAL,
10+
GREATER, GREATER_EQUAL,
11+
LESS, LESS_EQUAL
12+
13+
enum Expr {
14+
case Binary(left: Expr, operator: Token, right: Expr)
15+
}
16+
17+
object Interpreter:
18+
import Expr._
19+
import TokenType._
20+
21+
def eval(expr: Expr): String | Int | Double | Boolean | Unit =
22+
expr match
23+
case Binary(left, op, right) =>
24+
val l = eval(left)
25+
val r = eval(right)
26+
(l, r, op.tokenType) match
27+
case (l: Double, r: Double, PLUS) => l + r
28+
case (l: Int, r: Int, PLUS) => l + r
29+
case (l: Double, r: Int, PLUS) => l + r
30+
case (l: Int, r: Double, PLUS) => l + r
31+
case (l: String, r: String, PLUS) => l + r
32+
case (l: Double, r: Double, MINUS) => l - r
33+
case (l: Int, r: Int, MINUS) => l - r
34+
case (l: Double, r: Int, MINUS) => l - r
35+
case (l: Int, r: Double, MINUS) => l - r
36+
case (l: Double, r: Double, STAR) => l * r
37+
case (l: Int, r: Int, STAR) => l * r
38+
case (l: Double, r: Int, STAR) => l * r
39+
case (l: Int, r: Double, STAR) => l * r
40+
case (l: Double, r: Double, SLASH) => l / r
41+
case (l: Int, r: Int, SLASH) => l / r
42+
case (l: Double, r: Int, SLASH) => l / r
43+
case (l: Int, r: Double, SLASH) => l / r
44+
case (l: Double, r: Double, GREATER) => l > r
45+
case (l: Int, r: Int, GREATER) => l > r
46+
case (l: Double, r: Int, GREATER) => l > r
47+
case (l: Int, r: Double, GREATER) => l > r
48+
case (l: String, r: String, GREATER) => l > r
49+
case (l: Double, r: Double, LESS) => l < r
50+
case (l: Int, r: Int, LESS) => l < r
51+
case (l: Double, r: Int, LESS) => l < r
52+
case (l: Int, r: Double, LESS) => l < r
53+
case (l: String, r: String, LESS) => l < r
54+
case (l: Double, r: Double, LESS_EQUAL) => l <= r
55+
case (l: Int, r: Int, LESS_EQUAL) => l <= r
56+
case (l: Double, r: Int, LESS_EQUAL) => l <= r
57+
case (l: Int, r: Double, LESS_EQUAL) => l <= r
58+
case (l: String, r: String, LESS_EQUAL) => l <= r
59+
case (l: Double, r: Double, GREATER_EQUAL) => l >= r
60+
case (l: Int, r: Int, GREATER_EQUAL) => l >= r
61+
case (l: Double, r: Int, GREATER_EQUAL) => l >= r
62+
case (l: Int, r: Double, GREATER_EQUAL) => l >= r
63+
case (l: String, r: String, GREATER_EQUAL) => l >= r

0 commit comments

Comments
 (0)