Skip to content

Commit dcadb62

Browse files
committed
Eksami põhiosa harjutuse täielikud testid
1 parent 10b679e commit dcadb62

1 file changed

Lines changed: 189 additions & 0 deletions

File tree

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
package proovieksam;
2+
3+
import org.junit.FixMethodOrder;
4+
import org.junit.Test;
5+
import org.junit.runners.MethodSorters;
6+
import proovieksam.ast.EstologNode;
7+
8+
import static org.junit.Assert.assertEquals;
9+
import static org.junit.Assert.fail;
10+
import static proovieksam.ast.EstologNode.*;
11+
12+
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
13+
public class EstologAstTest {
14+
15+
@Test
16+
public void test01_literals_variables() {
17+
legal("0", prog(lit(false))); // 0
18+
legal("1", prog(lit(true))); // 1
19+
legal("x", prog(var("x"))); // x
20+
legal("X", prog(var("X"))); // X
21+
legal("kala", prog(var("kala"))); // kala
22+
legal("abcdefgrstu", prog(var("abcdefgrstu"))); // abcdefgrstu
23+
24+
illegal("2");
25+
illegal("-1");
26+
illegal("00");
27+
illegal("0x");
28+
illegal("0 0");
29+
illegal("x y");
30+
illegal("_");
31+
}
32+
33+
@Test
34+
public void test02_operators() {
35+
legal("0 JA 0", prog(ja(lit(false), lit(false)))); // (0 JA 0)
36+
legal("0 VOI 1", prog(voi(lit(false), lit(true)))); // (0 VOI 1)
37+
legal("x VOI 1", prog(voi(var("x"), lit(true)))); // (x VOI 1)
38+
legal("x JA kalad", prog(ja(var("x"), var("kalad")))); // (x JA kalad)
39+
legal("x NING kalad", prog(ja(var("x"), var("kalad")))); // (x JA kalad)
40+
legal("x = 1", prog(vordus(var("x"), lit(true)))); // (x = 1)
41+
legal("x = z", prog(vordus(var("x"), var("z")))); // (x = z)
42+
legal("(x = z) JA (0 VOI z)", prog(ja(vordus(var("x"), var("z")), voi(lit(false), var("z"))))); // ((x = z) JA (0 VOI z))
43+
legal("(((x = z) JA (0 VOI z)) NING y)", prog(ja(ja(vordus(var("x"), var("z")), voi(lit(false), var("z"))), var("y")))); // (((x = z) JA (0 VOI z)) JA y)
44+
45+
illegal("0 JA 3");
46+
illegal("0 JA 00");
47+
illegal("0 JA");
48+
illegal("JA 0");
49+
illegal("x == y");
50+
illegal("x == y");
51+
illegal("x =(= y)");
52+
illegal("(((x JA 0)");
53+
illegal("(((x JA 0)))))");
54+
illegal("x JA NING y");
55+
illegal("x ja y");
56+
illegal("x ning y");
57+
illegal("x voi y");
58+
}
59+
60+
@Test
61+
public void test03_kui() {
62+
legal("KUI 0 SIIS 1 MUIDU 0", prog(kui(lit(false), lit(true), lit(false)))); // (KUI 0 SIIS 1 MUIDU 0)
63+
legal("KUI x SIIS y MUIDU maja", prog(kui(var("x"), var("y"), var("maja")))); // (KUI x SIIS y MUIDU maja)
64+
legal("KUI (x = 1) SIIS (z VOI y) MUIDU maja", prog(kui(vordus(var("x"), lit(true)), voi(var("z"), var("y")), var("maja")))); // (KUI (x = 1) SIIS (z VOI y) MUIDU maja)
65+
66+
illegal("KUI 0 MUIDU 1");
67+
illegal("SIIS 0 MUIDU 1");
68+
illegal("KUI SIIS 0 MUIDU 1");
69+
illegal("KUI y SIIS MUIDU 1");
70+
illegal("KUI y SIIS a MUIDU");
71+
illegal("KUI y SIIS a MUIDU b MUIDU x");
72+
illegal("KUI y KUI x SIIS a MUIDU b");
73+
illegal("KUI y SIIS JA a MUIDU b");
74+
illegal("KUI y SIIS ((a) MUIDU b");
75+
}
76+
77+
@Test
78+
public void test04_priority() {
79+
legal("a VOI b JA c", prog(voi(var("a"), ja(var("b"), var("c"))))); // (a VOI (b JA c))
80+
legal("a VOI b NING c", prog(ja(voi(var("a"), var("b")), var("c")))); // ((a VOI b) JA c)
81+
legal("a JA b NING c", prog(ja(ja(var("a"), var("b")), var("c")))); // ((a JA b) JA c)
82+
legal("a JA (b NING c)", prog(ja(var("a"), ja(var("b"), var("c"))))); // (a JA (b JA c))
83+
legal("a NING b JA c", prog(ja(var("a"), ja(var("b"), var("c"))))); // (a JA (b JA c))
84+
legal("a JA b JA c NING x VOI e", prog(ja(ja(ja(var("a"), var("b")), var("c")), voi(var("x"), var("e"))))); // (((a JA b) JA c) JA (x VOI e))
85+
legal("a JA b JA c NING x VOI e JA x JA u VOI k NING l VOI a", prog(ja(ja(ja(ja(var("a"), var("b")), var("c")), voi(voi(var("x"), ja(ja(var("e"), var("x")), var("u"))), var("k"))), voi(var("l"), var("a"))))); // ((((a JA b) JA c) JA ((x VOI ((e JA x) JA u)) VOI k)) JA (l VOI a))
86+
legal("a = b JA c = x VOI 1", prog(voi(ja(vordus(var("a"), var("b")), vordus(var("c"), var("x"))), lit(true)))); // (((a = b) JA (c = x)) VOI 1)
87+
legal("KUI 1 SIIS y MUIDU o", prog(kui(lit(true), var("y"), var("o")))); // (KUI 1 SIIS y MUIDU o)
88+
legal("KUI (x = y) = 0 SIIS a NING b VOI x MUIDU g VOI h NING a NING f", prog(kui(vordus(vordus(var("x"), var("y")), lit(false)), ja(var("a"), voi(var("b"), var("x"))), ja(ja(voi(var("g"), var("h")), var("a")), var("f"))))); // (KUI ((x = y) = 0) SIIS (a JA (b VOI x)) MUIDU (((g VOI h) JA a) JA f))
89+
}
90+
91+
@Test
92+
public void test05_defines() {
93+
legal("a := 0; a", prog(var("a"), def("a", lit(false))));
94+
legal("a := 0; b := 0; a", prog(var("a"), def("a", lit(false)), def("b", lit(false))));
95+
legal("a:=0 ;b := 0;a", prog(var("a"), def("a", lit(false)), def("b", lit(false))));
96+
legal("a:=0 ;b := a = a;b", prog(var("b"), def("a", lit(false)), def("b", vordus(var("a"), var("a")))));
97+
98+
illegal("a := 0");
99+
illegal("a = 0; a");
100+
illegal("a : = 0; a");
101+
illegal("a := 0; a; b := 0");
102+
illegal("; a");
103+
illegal("a := 0;");
104+
illegal("a;");
105+
}
106+
107+
@Test
108+
public void test06_examples() {
109+
legal("""
110+
x := 0;
111+
y := 1;
112+
a := (x JA y);
113+
b := (x VOI y);
114+
115+
(KUI (x = y) SIIS a MUIDU b)""",
116+
prog(
117+
kui(vordus(var("x"), var("y")), var("a"), var("b")),
118+
119+
def("x", lit(false)),
120+
def("y", lit(true)),
121+
def("a", ja(var("x"), var("y"))),
122+
def("b", voi(var("x"), var("y")))
123+
));
124+
125+
legal("""
126+
a := kala JA lind; \s
127+
b := 0 = (kass VOI a NING kala);\s
128+
c := KUI a = b SIIS 1 MUIDU b JA c;
129+
KUI a SIIS KUI c SIIS kala MUIDU hiir""",
130+
prog(
131+
kui(var("a"), kui(var("c"), var("kala"), var("hiir"))),
132+
133+
def("a", ja(var("kala"), var("lind"))),
134+
def("b", vordus(lit(false), ja(voi(var("kass"), var("a")), var("kala")))),
135+
def("c", kui(vordus(var("a"), var("b")), lit(true), ja(var("b"), var("c"))))
136+
));
137+
}
138+
139+
@Test
140+
public void test07_kui_without_muidu() {
141+
// kui
142+
legal("KUI (x = 1) SIIS y", prog(kui(vordus(var("x"), lit(true)), var("y"), null))); // (KUI (x = 1) SIIS y)
143+
legal("KUI (x = y) SIIS (KUI a SIIS b MUIDU c)", prog(kui(vordus(var("x"), var("y")), kui(var("a"), var("b"), var("c")), null))); // (KUI (x = y) SIIS (KUI a SIIS b MUIDU c))
144+
legal("KUI (x = y) SIIS (KUI a SIIS b MUIDU c) MUIDU (KUI a SIIS b)", prog(kui(vordus(var("x"), var("y")), kui(var("a"), var("b"), var("c")), kui(var("a"), var("b"), null)))); // (KUI (x = y) SIIS (KUI a SIIS b MUIDU c) MUIDU (KUI a SIIS b))
145+
146+
// associativity
147+
legal("KUI 1 SIIS KUI u SIIS b MUIDU o", prog(kui(lit(true), kui(var("u"), var("b"), var("o")), null))); // (KUI 1 SIIS (KUI u SIIS b MUIDU o))
148+
legal("KUI 1 SIIS (KUI u SIIS b) MUIDU o", prog(kui(lit(true), kui(var("u"), var("b"), null), var("o")))); // (KUI 1 SIIS (KUI u SIIS b) MUIDU o)
149+
legal("KUI x = y SIIS KUI a SIIS b MUIDU c MUIDU KUI a SIIS b", prog(kui(vordus(var("x"), var("y")), kui(var("a"), var("b"), var("c")), kui(var("a"), var("b"), null)))); // (KUI (x = y) SIIS (KUI a SIIS b MUIDU c) MUIDU (KUI a SIIS b))
150+
151+
illegal("KUI 0 SIIS 1 0");
152+
}
153+
154+
@Test
155+
public void test08_associativity() {
156+
legal("a JA 1 JA b JA c ", prog(ja(ja(ja(var("a"), lit(true)), var("b")), var("c")))); // (((a JA 1) JA b) JA c)
157+
legal("a VOI 1 VOI b VOI c", prog(voi(voi(voi(var("a"), lit(true)), var("b")), var("c")))); // (((a VOI 1) VOI b) VOI c)
158+
legal("a NING 1 NING b NING c", prog(ja(ja(ja(var("a"), lit(true)), var("b")), var("c")))); // (((a JA 1) JA b) JA c)
159+
legal("((a NING 1 NING b NING c)) VOI e VOI (j NING k)", prog(voi(voi(ja(ja(ja(var("a"), lit(true)), var("b")), var("c")), var("e")), ja(var("j"), var("k"))))); // (((((a JA 1) JA b) JA c) VOI e) VOI (j JA k))
160+
legal("((1 = 0) JA (a = 0) JA (b = c)) VOI (1 JA x)", prog(voi(ja(ja(vordus(lit(true), lit(false)), vordus(var("a"), lit(false))), vordus(var("b"), var("c"))), ja(lit(true), var("x"))))); // ((((1 = 0) JA (a = 0)) JA (b = c)) VOI (1 JA x))
161+
legal("KUI x SIIS y MUIDU maja", prog(kui(var("x"), var("y"), var("maja")))); // (KUI x SIIS y MUIDU maja)
162+
legal("KUI x SIIS KUI a SIIS b MUIDU c MUIDU KUI a SIIS b MUIDU e", prog(kui(var("x"), kui(var("a"), var("b"), var("c")), kui(var("a"), var("b"), var("e"))))); // (KUI x SIIS (KUI a SIIS b MUIDU c) MUIDU (KUI a SIIS b MUIDU e))
163+
legal("KUI KUI y SIIS d MUIDU c SIIS KUI a SIIS b MUIDU c MUIDU a", prog(kui(kui(var("y"), var("d"), var("c")), kui(var("a"), var("b"), var("c")), var("a")))); // (KUI (KUI y SIIS d MUIDU c) SIIS (KUI a SIIS b MUIDU c) MUIDU a)
164+
165+
illegal("a = b = c");
166+
illegal("1 = 1 = 1");
167+
illegal("1 JA JA 1");
168+
illegal("1 VOI");
169+
illegal("0 0");
170+
illegal("2");
171+
illegal("KUI y SIIS a MUIDU b MUIDU x");
172+
illegal("KUI y KUI x SIIS a MUIDU b");
173+
illegal("KUI y SIIS ((a) MUIDU b");
174+
}
175+
176+
private void legal(String input, EstologNode expectedAst) {
177+
EstologNode actualAst = EstologAst.makeEstologAst(input);
178+
assertEquals(expectedAst, actualAst);
179+
}
180+
181+
private void illegal(String input) {
182+
try {
183+
EstologAst.makeEstologAst(input);
184+
fail("expected parse error: " + input);
185+
} catch (Exception _) {
186+
187+
}
188+
}
189+
}

0 commit comments

Comments
 (0)