xwords/xwords4/linux/scripts/regex-test.py

93 lines
3.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import argparse, subprocess
g_pairs = [
(['_*ING'], [('RINGER', False)]),
(['_{2}ING'], [('RING', False), ('DOING', True), ('SPRING', False)]),
(['_{2}'], [('DO', True)]),
(['D_{1,2}'], [('DOG', True), ('DO', True), ('D', False)]),
(['A_*'], [('ABLE', True), ('BALL', False),]),
(['B_*'], [('BALL', True), ('APPLE', False), ('CAT', False),],),
(['ABC'], [('ABC', True), ('CBA', False)]),
(['_*'], [('ABC', True)]),
(['_*Z'], [('ABC', False), ('AB', False)]),
(['_*C'], [('ABC', True)]),
(['_*B'], [('AB', True)]),
(['B_*'], [('AB', False), ('BA', True)]),
(['A*'], [('A', True)]),
(['A*A*'], [('A', True), ('AA', True), ('AAA', True), ('AAAA', True), ('AABA', False)]),
(['A*A*B'], [('B', True), ('C', False)]),
(['A{3}'], [('AAA', True)]),
(['A{1}A{1}A{1}'], [('AAA', True),('AA', False),('AAAA', False)]),
(['A*A*A*'], [('A', True),('AA', True),('AAA', True),('AAAA', True), ('ABAA', False)]),
(['AB*'], [('A', True)]),
(['A{2,4}'], [('A', False), ('AA', True), ('AAAA', True), ('AAAAA', False)]),
(['_*ING'], [('RINGER', False)]),
(['R_*'], [('RINGER', True)]),
(['R_*', '_*ING'], [('RING', True), ('ROLLING', True), ('SPRING', False), ('INGER', False), ('RINGER', False)]),
(['A', '_*'], [('ABC', False), ('CBA', False), ('A', True)]),
(['ABC', '_*'], [('ABC', True)]),
(['[ABC]{3}'], [('ABC', True), ('CBA', True), ('AAA', True), ('BBB', True)]),
(['[+ABC]{3}'], [('ABC', True), ('CBA', True), ('AAA', False), ('AA', False), ]),
(['[+ABC]{3}_*'], [('ABC', True), ('CBA', True), ('AAA', False), ('AA', False), ]),
(['AA[+ABC]{3}ZZ'], [('AAABCZZ', True), ('AACBAZZ', True), ('AAAAAZZ', False), ]),
(['[+AAB]{3}'], [('AAB', True), ('ABA', True), ('ABB', False), ('AB', False),
('ABBA', False),]),
(['[+AB_]{3}'], [('AAB', True), ('ABA', True), ('ABB', True), ('ABC', True),
('AB', False), ('ABBA', False),]),
(['[+_AB]{3}'], [('AAB', True), ('ABA', True), ('ABB', True), ('ABC', True),
('AB', False), ('ABBA', False),]),
]
g_dict = '../android/app/src/main/assets/BasEnglish2to8.xwd'
def doTest( pats, pair, stderr ):
# print('pair: {}'.format(pair))
(word, expect) = pair
args = ['./obj_linux_memdbg/xwords', '--test-dict', g_dict, '--test-string', word ]
for pat in pats:
args += ['--test-pat', pat]
result = subprocess.run(args, stderr=stderr)
passed = (0 == result.returncode) == expect
return passed
def main():
stderr = subprocess.DEVNULL
parser = argparse.ArgumentParser()
parser.add_argument('--with-stderr', dest = 'STDERR', action = 'store_true',
help = 'don\'t discard stderr')
parser.add_argument('--do-only', dest = 'SPECIFIED', type = int, action = 'append',
help = 'do this test case only')
parser.add_argument('--show-all', dest = 'PRINT_ALL', action = 'store_true', default = False,
help = 'print successes in addition to failures')
args = parser.parse_args()
if args.STDERR: stderr = None
ii = 0
counts = { False: 0, True: 0 }
for cases in g_pairs:
(pats, rest) = cases
for one in rest:
if not args.SPECIFIED or ii in args.SPECIFIED:
success = doTest(pats, one, stderr)
note = success and 'passed' or 'FAILED'
if args.PRINT_ALL or not success:
print( '{:2d} {}: {} {}'.format(ii, note, pats, one))
counts[success] += 1
ii += 1
print('Successes: {}'.format(counts[True]))
print('Failures: {}'.format(counts[False]))
##############################################################################
if __name__ == '__main__':
main()