refactor: Rework
This commit is contained in:
parent
ac55ed4c64
commit
6469dd6ced
34 changed files with 593 additions and 552 deletions
|
@ -4,7 +4,7 @@ import org.junit.jupiter.api.Assertions.assertEquals
|
|||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.RepeatedTest
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.assertThrows
|
||||
import prolog.Substitutions
|
||||
import prolog.ast.terms.Integer
|
||||
import prolog.ast.terms.Term
|
||||
import prolog.ast.terms.Variable
|
||||
|
@ -15,7 +15,11 @@ class ArithmeticTests {
|
|||
val result = between(Integer(0), Integer(2), Integer(1))
|
||||
|
||||
assertTrue(result.any(), "Expected 1 to be between 0 and 2")
|
||||
assertEquals(emptyMap<Variable, Term>(), result.first(), "Expected no substitutions")
|
||||
assertTrue(result.first().isSuccess, "Expected success")
|
||||
|
||||
val subs = result.first().getOrNull()!!
|
||||
|
||||
assertEquals(emptyMap<Variable, Term>(), subs, "Expected no substitutions")
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -39,9 +43,11 @@ class ArithmeticTests {
|
|||
assertEquals(expectedResults.size, actualResults.size, "Expected 3 results")
|
||||
for ((expected, actual) in expectedResults.zip(actualResults)) {
|
||||
for ((key, value) in expected) {
|
||||
assertTrue(actual.isSuccess, "Expected success")
|
||||
val actual = actual.getOrNull()!!
|
||||
assertTrue(actual.containsKey(key), "Expected key $key to be present")
|
||||
assertTrue(
|
||||
equivalent(value, actual[key]!!),
|
||||
equivalent(value, actual[key]!!, emptyMap()),
|
||||
"Expected value $value for key $key, but got ${actual[key]}"
|
||||
)
|
||||
}
|
||||
|
@ -93,20 +99,6 @@ class ArithmeticTests {
|
|||
val t1 = Variable("X")
|
||||
val t2 = Integer(2)
|
||||
|
||||
t1.bind(Integer(1))
|
||||
|
||||
val result = succ(t1, t2, emptyMap()).toList()
|
||||
|
||||
assertEquals(1, result.size, "Expected X + 1 to be equal to 2")
|
||||
assertTrue(result[0].isSuccess, "Expected success")
|
||||
assertTrue(result[0].getOrNull()!!.isEmpty(), "Expected no substitutions")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `succ(bound-to-1-var) is 2 by map`() {
|
||||
val t1 = Variable("X")
|
||||
val t2 = Integer(2)
|
||||
|
||||
val result = succ(t1, t2, mapOf(t1 to Integer(1))).toList()
|
||||
|
||||
assertEquals(1, result.size, "Expected X + 1 to be equal to 2")
|
||||
|
@ -119,20 +111,6 @@ class ArithmeticTests {
|
|||
val t1 = Variable("X")
|
||||
val t2 = Variable("Y")
|
||||
|
||||
t1.bind(Integer(1))
|
||||
|
||||
val result = succ(t1, t2, emptyMap()).toList()
|
||||
|
||||
assertEquals(1, result.size, "Expected X + 1 to be equal to Y")
|
||||
assertTrue(result[0].isSuccess, "Expected success")
|
||||
assertEquals(Integer(2), result[0].getOrNull()!![t2], "Expected Y to be equal to 2")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `succ(bound-to-1-var) is var by map`() {
|
||||
val t1 = Variable("X")
|
||||
val t2 = Variable("Y")
|
||||
|
||||
val result = succ(t1, t2, mapOf(t1 to Integer(1))).toList()
|
||||
|
||||
assertEquals(1, result.size, "Expected X + 1 to be equal to Y")
|
||||
|
@ -219,21 +197,6 @@ class ArithmeticTests {
|
|||
val t2 = Integer(2)
|
||||
val t3 = Variable("X")
|
||||
|
||||
t3.bind(Integer(3))
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap()).toList()
|
||||
|
||||
assertEquals(1, result.size, "1 + 2 should be equal to X")
|
||||
assertTrue(result[0].isSuccess, "Expected success")
|
||||
assertTrue(result[0].getOrNull()!!.isEmpty(), "t3 should not be rebound")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `1 plus 2 is bound-to-3-var by map`() {
|
||||
val t1 = Integer(1)
|
||||
val t2 = Integer(2)
|
||||
val t3 = Variable("X")
|
||||
|
||||
val result = plus(t1, t2, t3, mapOf(Variable("X") to Integer(3))).toList()
|
||||
|
||||
assertEquals(1, result.size, "1 + 2 should be equal to X")
|
||||
|
@ -247,9 +210,7 @@ class ArithmeticTests {
|
|||
val t2 = Integer(2)
|
||||
val t3 = Variable("X")
|
||||
|
||||
t3.bind(Integer(4))
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap())
|
||||
val result = plus(t1, t2, t3, mapOf(t3 to Integer(4)))
|
||||
|
||||
assertTrue(result.none(), "1 + 2 should not be equal to X")
|
||||
}
|
||||
|
@ -260,9 +221,7 @@ class ArithmeticTests {
|
|||
val t2 = Variable("X")
|
||||
val t3 = Integer(3)
|
||||
|
||||
t2.bind(Integer(2))
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap()).toList()
|
||||
val result = plus(t1, t2, t3, mapOf(t2 to Integer(2))).toList()
|
||||
|
||||
assertEquals(1, result.size, "1 + X should be equal to 3")
|
||||
assertTrue(result[0].isSuccess, "Expected success")
|
||||
|
@ -275,9 +234,7 @@ class ArithmeticTests {
|
|||
val t2 = Variable("X")
|
||||
val t3 = Integer(4)
|
||||
|
||||
t2.bind(Integer(2))
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap())
|
||||
val result = plus(t1, t2, t3, mapOf(t2 to Integer(2)))
|
||||
|
||||
assertTrue(result.none(), "1 + X should not be equal to 4")
|
||||
}
|
||||
|
@ -288,9 +245,7 @@ class ArithmeticTests {
|
|||
val t2 = Integer(2)
|
||||
val t3 = Integer(3)
|
||||
|
||||
t1.bind(Integer(1))
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap()).toList()
|
||||
val result = plus(t1, t2, t3, mapOf(t1 to Integer(1))).toList()
|
||||
|
||||
assertEquals(1, result.size, "X + 2 should be equal to 3")
|
||||
assertTrue(result[0].isSuccess, "Expected success")
|
||||
|
@ -303,9 +258,7 @@ class ArithmeticTests {
|
|||
val t2 = Integer(2)
|
||||
val t3 = Integer(4)
|
||||
|
||||
t1.bind(Integer(1))
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap())
|
||||
val result = plus(t1, t2, t3, mapOf(t1 to Integer(1)))
|
||||
|
||||
assertTrue(result.none(), "X + 2 should not be equal to 4")
|
||||
}
|
||||
|
@ -329,14 +282,16 @@ class ArithmeticTests {
|
|||
val t2 = Variable("Y")
|
||||
val t3 = Variable("Z")
|
||||
|
||||
t1.bind(Integer(1))
|
||||
t2.bind(Integer(2))
|
||||
val map: Substitutions = mapOf(
|
||||
t1 to Integer(1),
|
||||
t2 to Integer(2),
|
||||
)
|
||||
|
||||
val result = plus(t1, t2, t3, emptyMap()).toList()
|
||||
val result = plus(t1, t2, t3, map).toList()
|
||||
|
||||
assertTrue(result.isNotEmpty(), "X + Y should be equal to Z")
|
||||
assertTrue(result[0].isSuccess, "Expected success")
|
||||
assertTrue(equivalent(result[0].getOrThrow()[t3]!!, Integer(3)), "Z should be equal to 3")
|
||||
assertTrue(equivalent(result[0].getOrThrow()[t3]!!, Integer(3), result[0].getOrNull()!!), "Z should be equal to 3")
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Reference in a new issue