diff --git a/liquidjava-verifier/pom.xml b/liquidjava-verifier/pom.xml
index 5b42f4cb..673b0b5f 100644
--- a/liquidjava-verifier/pom.xml
+++ b/liquidjava-verifier/pom.xml
@@ -39,6 +39,45 @@
+org.jacoco
+jacoco-maven-plugin
+0.8.14
+
+
+default-prepare-agent
+
+prepare-agent
+
+
+
+default-report
+
+report
+
+
+
+default-check
+
+check
+
+
+
+
+BUNDLE
+
+
+COMPLEXITY
+COVEREDRATIO
+0.60
+
+
+
+
+
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
${pVersion.compiler}
diff --git a/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java
new file mode 100644
index 00000000..d99b0e7a
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java
@@ -0,0 +1,18 @@
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import liquidjava.rj_language.ast.BinaryExpression;
+import liquidjava.rj_language.ast.LiteralInt;
+import liquidjava.rj_language.opt.ConstantFolding;
+import liquidjava.rj_language.opt.derivation_node.ValDerivationNode;
+
+public class TestOptimization {
+ @Test
+ public void testBinaryFold() {
+ BinaryExpression b = new BinaryExpression(new LiteralInt(1), "+", new LiteralInt(2));
+
+ ValDerivationNode r = ConstantFolding.fold(new ValDerivationNode(b, null));
+ assertEquals(r.getValue(), new LiteralInt(3));
+ }
+}
\ No newline at end of file
diff --git a/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimizationInt.java b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimizationInt.java
new file mode 100644
index 00000000..6e76382f
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimizationInt.java
@@ -0,0 +1,18 @@
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import liquidjava.rj_language.ast.BinaryExpression;
+import liquidjava.rj_language.ast.LiteralInt;
+import liquidjava.rj_language.opt.ConstantFolding;
+import liquidjava.rj_language.opt.derivation_node.ValDerivationNode;
+
+public class TestOptimizationInt {
+ @Test
+ public void testIntegerAddFold() {
+ BinaryExpression b = new BinaryExpression(new LiteralInt(2), "+", new LiteralInt(3));
+
+ ValDerivationNode r = ConstantFolding.fold(new ValDerivationNode(b, null));
+ assertEquals(new LiteralInt(5), r.getValue());
+ }
+}
\ No newline at end of file
diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralInt.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralInt.java
new file mode 100644
index 00000000..a54a6595
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralInt.java
@@ -0,0 +1,24 @@
+package liquidjava.rj_language;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import liquidjava.rj_language.ast.LiteralInt;
+
+public class TestLiteralInt {
+
+ @Test
+ public void testLiteralIntEquality() {
+ LiteralInt a = new LiteralInt(10);
+ LiteralInt b = new LiteralInt(10);
+ assertEquals(a, b);
+ }
+
+ @Test
+ public void testLiteralIntHashCodeConsistency() {
+ LiteralInt a = new LiteralInt(5);
+ int firstHash = a.hashCode();
+ int secondHash = a.hashCode();
+ assertEquals(firstHash, secondHash);
+
+ }
+}
diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java
new file mode 100644
index 00000000..bb198e05
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralString.java
@@ -0,0 +1,14 @@
+package liquidjava.rj_language;
+
+import static org.junit.Assert.assertNotEquals;
+import org.junit.Test;
+import liquidjava.rj_language.ast.LiteralString;
+
+public class TestLiteralString {
+ @Test
+ public void testLiteralString() {
+ LiteralString s1 = new LiteralString("hello");
+ LiteralString s2 = new LiteralString("world");
+ assertNotEquals(s1.hashCode(), s2.hashCode());
+ }
+}
\ No newline at end of file
diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralStringExtra.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralStringExtra.java
new file mode 100644
index 00000000..f7615d42
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/TestLiteralStringExtra.java
@@ -0,0 +1,22 @@
+package liquidjava.rj_language;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import liquidjava.rj_language.ast.LiteralString;
+
+public class TestLiteralStringExtra {
+
+ @Test
+ public void testEqualStringsHaveEqualHashCodes() {
+ LiteralString s1 = new LiteralString("hello");
+ LiteralString s2 = new LiteralString("hello");
+ assertEquals(s1.hashCode(), s2.hashCode());
+ }
+
+ @Test
+ public void testDifferentStringsAreNotEqual() {
+ LiteralString s1 = new LiteralString("hello");
+ LiteralString s2 = new LiteralString("world");
+ assertNotEquals(s1, s2);
+ }
+}