115 lines
2.8 KiB
Python
Executable File
115 lines
2.8 KiB
Python
Executable File
#!/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()
|