sine-patre/fol/tests/test_parser.py

46 lines
1.2 KiB
Python
Raw Normal View History

2024-04-24 12:40:43 +00:00
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)