package prolog.builtins 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.Structure import prolog.logic.atomic import prolog.logic.compound /** * 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)) assertTrue(functor(atom, Atom("foo"), 0)) } @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)) assertTrue(functor(structure, Atom("foo"), 1)) } }