diff --git a/liquidjava-verifier/pom.xml b/liquidjava-verifier/pom.xml
index 5b42f4cb..19a19d11 100644
--- a/liquidjava-verifier/pom.xml
+++ b/liquidjava-verifier/pom.xml
@@ -10,7 +10,7 @@
liquidjava-verifier
-
+
liquidjava-verifier
5.2-SNAPSHOT
liquidjava-verifier
@@ -77,7 +77,8 @@
-
+
liquidjava.api.CommandLineLauncher
@@ -95,6 +96,45 @@
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.14
+
+
+ default-prepare-agent
+
+ prepare-agent
+
+
+
+ default-report
+
+ report
+
+
+
+ default-check
+
+ check
+
+
+
+
+ BUNDLE
+
+
+ COMPLEXITY
+ COVEREDRATIO
+ 0.50
+
+
+
+
+
+
+
+
@@ -206,4 +246,4 @@
-
+
\ No newline at end of file
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..e7849ad9
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/ast/opt/TestOptimization.java
@@ -0,0 +1,17 @@
+package liquidjava.rj_language.ast.opt;
+
+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));
+ }
+}
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..7e82772f
--- /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());
+ }
+}
diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestBinaryTypeIntegration.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestBinaryTypeIntegration.java
new file mode 100644
index 00000000..47342c83
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestBinaryTypeIntegration.java
@@ -0,0 +1,37 @@
+package liquidjava.rj_language.ast.typing;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import liquidjava.rj_language.ast.*;
+import liquidjava.processor.context.Context;
+import spoon.Launcher;
+import spoon.reflect.factory.Factory;
+import java.util.Optional;
+import spoon.reflect.reference.CtTypeReference;
+
+public class TestBinaryTypeIntegration {
+
+ @Test
+ public void testBinaryIntExpressionType() {
+ Launcher launcher = new Launcher();
+ Factory factory = launcher.getFactory();
+ Context ctx = null;
+
+ BinaryExpression expr = new BinaryExpression(new LiteralInt(1), "+", new LiteralInt(2));
+ Optional> result = TypeInfer.getType(ctx, factory, expr);
+ assertTrue(result.isPresent());
+ assertEquals("int", result.get().getSimpleName().toLowerCase());
+ }
+
+ @Test
+ public void testBinaryBooleanExpressionType() {
+ Launcher launcher = new Launcher();
+ Factory factory = launcher.getFactory();
+ Context ctx = null;
+
+ BinaryExpression expr = new BinaryExpression(new LiteralBoolean(true), "&&", new LiteralBoolean(false));
+ Optional> result = TypeInfer.getType(ctx, factory, expr);
+ assertTrue(result.isPresent());
+ assertEquals("boolean", result.get().getSimpleName().toLowerCase());
+ }
+}
diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestBoolType.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestBoolType.java
new file mode 100644
index 00000000..0f347fa6
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestBoolType.java
@@ -0,0 +1,26 @@
+package liquidjava.rj_language.ast.typing;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import spoon.Launcher;
+import spoon.reflect.factory.Factory;
+import liquidjava.processor.context.Context;
+import liquidjava.rj_language.ast.*;
+import java.util.Optional;
+import spoon.reflect.reference.CtTypeReference;
+
+public class TestBoolType {
+
+ @Test
+ public void testBooleanLiteralType() {
+ Launcher launcher = new Launcher();
+ Factory factory = launcher.getFactory();
+ Context ctx = null;
+
+ LiteralBoolean boolExpr = new LiteralBoolean(true);
+ Optional> result = TypeInfer.getType(ctx, factory, boolExpr);
+
+ assertTrue(result.isPresent());
+ assertEquals("boolean", result.get().getSimpleName().toLowerCase());
+ }
+}
diff --git a/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestCheckCompatibleType.java b/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestCheckCompatibleType.java
new file mode 100644
index 00000000..d32db786
--- /dev/null
+++ b/liquidjava-verifier/src/test/java/liquidjava/rj_language/ast/typing/TestCheckCompatibleType.java
@@ -0,0 +1,35 @@
+package liquidjava.rj_language.ast.typing;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import liquidjava.rj_language.ast.*;
+import liquidjava.processor.context.Context;
+import spoon.Launcher;
+import spoon.reflect.factory.Factory;
+
+public class TestCheckCompatibleType {
+
+ @Test
+ public void testCompatibleLiterals() {
+ Launcher launcher = new Launcher();
+ Factory factory = launcher.getFactory();
+ Context ctx = null;
+
+ LiteralInt a = new LiteralInt(3);
+ LiteralInt b = new LiteralInt(4);
+
+ assertTrue(TypeInfer.checkCompatibleType(a, b, ctx, factory));
+ }
+
+ @Test
+ public void testIncompatibleLiterals() {
+ Launcher launcher = new Launcher();
+ Factory factory = launcher.getFactory();
+ Context ctx = null;
+
+ LiteralInt a = new LiteralInt(3);
+ LiteralString s = new LiteralString("abc");
+
+ assertFalse(TypeInfer.checkCompatibleType(a, s, ctx, factory));
+ }
+}