34 lines
No EOL
1.3 KiB
Kotlin
34 lines
No EOL
1.3 KiB
Kotlin
package prolog.builtins
|
|
|
|
import org.junit.jupiter.api.Assertions.assertEquals
|
|
import org.junit.jupiter.api.Assertions.assertTrue
|
|
import org.junit.jupiter.api.Test
|
|
import prolog.ast.arithmetic.Integer
|
|
import prolog.ast.lists.List.Cons
|
|
import prolog.ast.lists.List.Empty
|
|
import prolog.ast.terms.Variable
|
|
|
|
class MetaOperatorsTests {
|
|
@Test
|
|
fun `ignore of failing goal succeeds`() {
|
|
val goal = Member(Integer(4), Cons(Integer(1), Cons(Integer(2), Cons(Integer(3), Empty))))
|
|
|
|
val result = Ignore(goal).satisfy(emptyMap()).toList()
|
|
|
|
assertEquals(1, result.size, "Should return one result")
|
|
assertTrue(result[0].isSuccess, "Result should be successful")
|
|
assertTrue(result[0].getOrNull()!!.isEmpty(), "Expected empty substitutions")
|
|
}
|
|
|
|
@Test
|
|
fun `ignore of succeeding goal returns first solution`() {
|
|
val goal = Member(Variable("X"), Cons(Integer(1), Cons(Integer(2), Cons(Integer(3), Empty))))
|
|
|
|
val result = Ignore(goal).satisfy(emptyMap()).toList()
|
|
|
|
assertEquals(1, result.size, "Should return one result")
|
|
assertTrue(result[0].isSuccess, "Result should be successful")
|
|
val subs = result[0].getOrNull()!!
|
|
assertEquals(Integer(1), subs[Variable("X")], "Expected first solution to be 1")
|
|
}
|
|
} |