Skip to content

Commit b74bd8e

Browse files
committed
Eksami alusosa harjutuse täielikud testid
1 parent 84df91b commit b74bd8e

1 file changed

Lines changed: 118 additions & 0 deletions

File tree

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package proovieksam;
2+
3+
import org.junit.FixMethodOrder;
4+
import org.junit.Test;
5+
import org.junit.runners.MethodSorters;
6+
import proovieksam.ast.EstologDef;
7+
import proovieksam.ast.EstologNode;
8+
import proovieksam.ast.EstologProg;
9+
10+
import java.util.Arrays;
11+
import java.util.List;
12+
import java.util.NoSuchElementException;
13+
14+
import static org.junit.Assert.assertEquals;
15+
import static proovieksam.ast.EstologNode.*;
16+
17+
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
18+
public class EstologEvaluatorTest {
19+
20+
private static final List<EstologDef> allDefs = Arrays.asList(
21+
def("x", lit(false)),
22+
def("y", lit(true)),
23+
def("z", lit(true)),
24+
def("a", lit(true)),
25+
def("b", lit(false)),
26+
def("c", lit(true))
27+
);
28+
29+
@Test
30+
public void test01_literals() {
31+
checkEval(prog(lit(false)), false); // 0
32+
checkEval(prog(lit(true)), true); // 1
33+
}
34+
35+
@Test
36+
public void test02_operators() {
37+
checkEval(prog(ja(lit(false), lit(true))), false); // (0 JA 1)
38+
checkEval(prog(ja(lit(true), lit(true))), true); // (1 JA 1)
39+
checkEval(prog(voi(lit(false), lit(true))), true); // (0 VOI 1)
40+
checkEval(prog(voi(lit(false), lit(false))), false); // (0 VOI 0)
41+
checkEval(prog(vordus(lit(false), lit(true))), false); // (0 = 1)
42+
checkEval(prog(vordus(lit(false), lit(false))), true); // (0 = 0)
43+
}
44+
45+
@Test
46+
public void test03_variables() {
47+
checkEval(prog(var("x"), def("x", lit(false))), false); // x
48+
checkEval(prog(var("y"), def("y", lit(true))), true); // y
49+
checkEval(prog(vordus(var("x"), lit(false)), def("x", lit(false))), true); // (x = 0)
50+
checkEval(prog(vordus(var("x"), var("c")), def("x", lit(false)), def("c", lit(true))), false); // (x = c)
51+
52+
// same with allDefs
53+
checkEvalAllDefsProg(var("x"), false); // x
54+
checkEvalAllDefsProg(var("y"), true); // y
55+
checkEvalAllDefsProg(vordus(var("x"), lit(false)), true); // (x = 0)
56+
checkEvalAllDefsProg(vordus(var("x"), var("c")), false); // (x = c)
57+
}
58+
59+
@Test
60+
public void test04_kui() {
61+
checkEvalAllDefsProg(kui(lit(true), lit(true), lit(false)), true); // (KUI 1 SIIS 1 MUIDU 0)
62+
checkEvalAllDefsProg(kui(lit(false), lit(true), lit(false)), false); // (KUI 0 SIIS 1 MUIDU 0)
63+
checkEvalAllDefsProg(kui(lit(true), var("x"), var("z")), false); // (KUI 1 SIIS x MUIDU z)
64+
65+
// nested
66+
checkEvalAllDefsProg(kui(var("a"), kui(var("a"), lit(true), lit(false)), lit(false)), true); // (KUI a SIIS (KUI a SIIS 1 MUIDU 0) MUIDU 0)
67+
checkEvalAllDefsProg(kui(var("a"), kui(var("b"), lit(false), lit(true)), lit(false)), true); // (KUI a SIIS (KUI b SIIS 0 MUIDU 1) MUIDU 0)
68+
checkEvalAllDefsProg(kui(var("b"), kui(var("b"), lit(false), lit(false)), lit(true)), true); // (KUI b SIIS (KUI b SIIS 0 MUIDU 0) MUIDU 1)
69+
}
70+
71+
@Test
72+
public void test05_all() {
73+
checkEvalAllDefsProg(kui(var("b"), voi(var("x"), var("y")), ja(var("x"), lit(true))), false); // (KUI b SIIS (x VOI y) MUIDU (x JA 1))
74+
checkEvalAllDefsProg(kui(var("b"), voi(var("x"), var("y")), ja(var("x"), var("y"))), false); // (KUI b SIIS (x VOI y) MUIDU (x JA y))
75+
checkEvalAllDefsProg(kui(ja(var("b"), vordus(lit(false), lit(true))), voi(var("x"), var("y")), vordus(var("x"), var("y"))), false); // (KUI (b JA (0 = 1)) SIIS (x VOI y) MUIDU (x = y))
76+
checkEvalAllDefsProg(voi(voi(ja(var("x"), var("y")), ja(var("a"), var("z"))), ja(var("b"), var("c"))), true); // (((x JA y) VOI (a JA z)) VOI (b JA c))
77+
checkEvalAllDefsProg(voi(voi(ja(var("x"), var("y")), vordus(var("a"), var("z"))), ja(var("b"), var("c"))), true); // (((x JA y) VOI (a = z)) VOI (b JA c))
78+
}
79+
80+
@Test
81+
public void test06_defines() {
82+
// non-literal define
83+
checkEval(prog(var("x"), def("x", vordus(lit(false), lit(false)))), true); // x := (0 = 0); x
84+
85+
// dependent define
86+
checkEval(prog(var("y"), def("x", lit(false)), def("y", vordus(var("x"), lit(false)))), true); // x := 0; y := (x = 0); y
87+
88+
// redefine
89+
checkEval(prog(var("x"), def("x", lit(true)), def("x", lit(false))), false); // x := 1; x := 0; x
90+
91+
// dependent redefine
92+
checkEval(prog(var("x"), def("x", lit(false)), def("x", vordus(var("x"), lit(false)))), true); // x := 0; x := (x = 0); x
93+
}
94+
95+
@Test
96+
public void test07_kui_without_muidu() {
97+
checkEvalAllDefsProg(kui(lit(true), lit(false)), false); // (KUI 1 SIIS 0)
98+
checkEvalAllDefsProg(kui(lit(false), lit(false)), true); // (KUI 0 SIIS 0)
99+
checkEvalAllDefsProg(kui(lit(true), var("x")), false); // (KUI 1 SIIS x)
100+
checkEvalAllDefsProg(kui(lit(false), var("x")), true); // (KUI 0 SIIS x)
101+
102+
checkEvalAllDefsProg(kui(var("b"), voi(lit(false), var("y"))), true); // (KUI b SIIS (0 VOI y))
103+
checkEvalAllDefsProg(kui(var("b"), voi(var("x"), var("y"))), true); // (KUI b SIIS (x VOI y))
104+
}
105+
106+
@Test(expected = NoSuchElementException.class)
107+
public void test08_variable_undefined() {
108+
EstologEvaluator.eval(prog(var("y"), def("x", lit(true)))); // x := 1; y
109+
}
110+
111+
private void checkEval(EstologProg prog, boolean expected) {
112+
assertEquals(expected, EstologEvaluator.eval(prog));
113+
}
114+
115+
private void checkEvalAllDefsProg(EstologNode node, boolean expected) {
116+
checkEval(prog(node, allDefs), expected);
117+
}
118+
}

0 commit comments

Comments
 (0)