Sync
This commit is contained in:
parent
a937b1bc44
commit
fc8b83fca3
8 changed files with 117 additions and 19 deletions
|
@ -14,6 +14,8 @@ import prolog.ast.terms.Atom
|
|||
import prolog.ast.terms.Structure
|
||||
import prolog.ast.terms.Variable
|
||||
import prolog.ast.Database.Program
|
||||
import prolog.ast.arithmetic.Integer
|
||||
import prolog.ast.terms.AnonymousVariable
|
||||
|
||||
class EvaluationTests {
|
||||
@BeforeEach
|
||||
|
@ -418,4 +420,37 @@ class EvaluationTests {
|
|||
assertEquals(Atom("bob"), subs5[Variable("Person")], "Expected bob")
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `leq Peano`() {
|
||||
val fact = Fact(Structure(Atom("leq"), listOf(Integer(0), AnonymousVariable.create())))
|
||||
val rule = Rule(
|
||||
Structure(Atom("leq"), listOf(Structure(Atom("s"), listOf(Variable("X"))), Structure(Atom("s"), listOf(Variable("Y"))))),
|
||||
Structure(Atom("leq"), listOf(Variable("X"), Variable("Y"))),
|
||||
)
|
||||
|
||||
Program.db.load(listOf(fact, rule))
|
||||
|
||||
val result1 = Program.query(Structure(Atom("leq"), listOf(Variable("X"), Integer(0)))).toList()
|
||||
|
||||
assertEquals(1, result1.size, "Expected 1 result")
|
||||
assertTrue(result1[0].isSuccess, "Expected success")
|
||||
val subs = result1[0].getOrNull()!!
|
||||
assertEquals(1, subs.size, "Expected 1 substitution")
|
||||
assertEquals(Integer(0), subs[Variable("X")], "Expected X to be 0")
|
||||
|
||||
val result2 = Program.query(Structure(Atom("leq"), listOf(Variable("X"), Structure(Atom("s"), listOf(Integer(0)))))).toList()
|
||||
|
||||
assertEquals(2, result2.size, "Expected 2 results")
|
||||
|
||||
assertTrue(result2[0].isSuccess, "Expected success")
|
||||
val subs2a = result2[0].getOrNull()!!
|
||||
assertEquals(1, subs2a.size, "Expected 1 substitution")
|
||||
assertEquals(Integer(0), subs2a[Variable("X")], "Expected X to be 0")
|
||||
|
||||
assertTrue(result2[1].isSuccess, "Expected success")
|
||||
val subs2b = result2[1].getOrNull()!!
|
||||
assertEquals(1, subs2b.size, "Expected 1 substitution")
|
||||
assertEquals(Structure(Atom("s"), listOf(Integer(0))), subs2b[Variable("X")], "Expected X to be s(0)")
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue