45 lines
No EOL
1.3 KiB
Kotlin
45 lines
No EOL
1.3 KiB
Kotlin
package prolog.logic
|
|
|
|
import org.junit.jupiter.api.Assertions.assertEquals
|
|
import org.junit.jupiter.api.Assertions.assertFalse
|
|
import org.junit.jupiter.api.Assertions.assertTrue
|
|
import org.junit.jupiter.api.Test
|
|
import prolog.ast.terms.Atom
|
|
import prolog.ast.terms.Functor
|
|
import prolog.ast.terms.Structure
|
|
import prolog.ast.arithmetic.Integer
|
|
|
|
/**
|
|
* Based on [Predicates for analyzing/constructing terms](https://github.com/dtonhofer/prolog_notes/blob/master/swipl_notes/about_term_analysis_and_construction/term_analysis_construction.png)
|
|
*
|
|
* Notes by [David Tonhofer](https://github.com/dtonhofer)
|
|
*/
|
|
class TermAnalysisConstructionTest {
|
|
@Test
|
|
fun atomic_term_properties() {
|
|
val atom = Atom("foo")
|
|
|
|
assertTrue(atomic(atom))
|
|
assertFalse(compound(atom))
|
|
|
|
assertEquals(Functor("foo", 0), atom.functor)
|
|
}
|
|
|
|
@Test
|
|
fun compound_arity_0_properties() {
|
|
val structure = Structure(Atom("foo"), emptyList())
|
|
|
|
assertFalse(atomic(structure))
|
|
assertTrue(compound(structure))
|
|
}
|
|
|
|
@Test
|
|
fun compound_arity_1_properties() {
|
|
val structure = Structure(Atom("foo"), listOf(Atom("bar")))
|
|
|
|
assertFalse(atomic(structure))
|
|
assertTrue(compound(structure))
|
|
|
|
assertEquals(Functor("foo", 1), structure.functor)
|
|
}
|
|
} |