import pytest @pytest.mark.parametrize(['oracle', 'text'], [ ('PRED[Happy](VAR[x])', 'Happy(x)'), ('PRED[Sad](VAR[y],VAR[z])', 'Sad(y, z)'), # EXISTS ('EXISTS(VAR[x],PRED[Happy](VAR[x]))', '\\exists x Happy(x)'), # FORALL ('FORALL(VAR[z],PRED[Sad](VAR[z]))', '\\forall z Sad(z)'), # IMP ('IMP(PRED[Rich](VAR[x]),PRED[Happy](VAR[x]))', 'Rich(x) -> Happy(x)'), # OR ('OR(OR(PRED[Rich](VAR[x]),PRED[Happy](VAR[x])),' 'PRED[Smart](VAR[x]))', 'Rich(x) | Happy(x) | Smart(x)'), # AND ('AND(AND(PRED[Rich](VAR[x]),PRED[Happy](VAR[x])),' 'PRED[Smart](VAR[x]))', 'Rich(x) & Happy(x) & Smart(x)'), ('OR(AND(PRED[Rich](VAR[x]),' 'PRED[Happy](VAR[x])),PRED[Smart](VAR[x]))', 'Rich(x) & Happy(x) | Smart(x)'), ('AND(PRED[Rich](VAR[x]),OR(PRED[Happy](VAR[x]),' 'PRED[Smart](VAR[x])))', 'Rich(x) & (Happy(x) | Smart(x))'), # NOT ('FORALL(VAR[x],NOT(PRED[Happy](VAR[x])))', '\\forall x ~Happy(x)'), # PRED ('PRED[Rich](CONST[BOB])', 'Rich(BOB)'), ('PRED[Rich](FUN[father](CONST[BOB]))', 'Rich(father(BOB))'), ]) def test_parser(parser, oracle, text): p = parser(text) root = p.parse() assert oracle == str(root)