defl/tests/test_microlang.py

115 lines
2.8 KiB
Python
Raw Normal View History

2024-09-11 11:14:03 -04:00
#!/usr/bin/env python
'''
onFileChange.py ~/deflDev/tests/test_microlang.py ~/deflDev/defl/_microlang_.py -- ~/deflDev/bin/pythonDeflDev.py - python ~/deflDev/tests/test_microlang.py
'''
import defl
import os
import shlex
import pathlib
from defl import log, cl, Path
from defl.testing_ import Tester
from defl._microlang_ import *
tester = Tester(name=__file__)
@tester.add()
def test():
ml = MicroLang(['!', '(', ')', "&&", 1])
assert ml._eval() == ['not', '(', ')', 'and', 1], ml.statements
assert ml.eval() == True
def z():
return False
@tester.add()
def test():
ml = MicroLang(['!', '(', ')', "&&", z])
assert ml._eval() == ['not', '(', ')', 'and', F], ml._eval()
assert ml.eval() == False
def syntaxError(run):
try:
r = run().eval()
raise ValueError(r)
except SyntaxError:
...
@tester.add()
def test():
syntaxError(lambda: MicroLang(['!!', '(', ')', "&&", z]))
@tester.add()
def test():
assert MicroLang([]).eval() == N
assert MicroLang('').eval() == N
@tester.add()
def test():
a = {'a': T, 'b': F, 'c': F}
assert not MicroLang("a and b", env=a)
assert MicroLang("a and !b", env=a)
assert MicroLang("a and !b and !c", env=a)
# assert MicroLang("x and !x and !", env=a)
@tester.add()
def test():
filt = ['^a', 'and', 'b$']
def match(x):
def wrap(y):
return bool(re.compile(x).search(y))
return wrap
c = MicroLang([x if MicroLang.isToken(x) else match(x) for x in filt])
assert c.stmnts[0]('a')
assert c.stmnts[2]('b')
print(c.stmnts)
assert c.eval('ab')
assert not c.eval('a')
@tester.add()
def test():
try:
assert MicroLang("")
raise ValueError()
except TypeError as e:
...
assert MicroLang("").eval() == N
@tester.add()
def test():
assert MicroLang(['True'])
assert MicroLang([True])
assert MicroLang([1])
assert not MicroLang(['False'])
assert not MicroLang([False])
assert not MicroLang([0])
assert MicroLang(['k'], env={'k': T})
assert not MicroLang(['k'], env={'k': F})
assert not MicroLang(['!', '!', '(', ')', "&&", z])
assert not MicroLang('false')
assert MicroLang('true')
assert MicroLang('true and not false')
assert not MicroLang('true and ! not false')
assert not MicroLang('true and ! ! false')
assert not MicroLang('true and !! false')
assert MicroLang('true and !!! false')
assert MicroLang('true and !~! false')
assert not MicroLang('11-11')
assert MicroLang('11+11')
assert not MicroLang('-11+11')
assert MicroLang('-11+-11')
@tester.add()
def test():
if not MicroLang(['True']):
raise ValueError()
if MicroLang(['False']):
raise ValueError()
assert not MicroLang(['False'])
log.info(tester.run())
tester.exitWithStatus()