package prolog.logic import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test import prolog.ast.terms.Atom import prolog.ast.terms.Functor import prolog.ast.terms.Structure /** * 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("foo") assertFalse(atomic(structure)) assertTrue(compound(structure)) } @Test fun compound_arity_1_properties() { val structure = Structure("foo", Atom("bar")) assertFalse(atomic(structure)) assertTrue(compound(structure)) assertEquals(Functor("foo", 1), structure.functor) } }