mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-07 05:24:46 +01:00
93 lines
3.8 KiB
Python
93 lines
3.8 KiB
Python
|
#!/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()
|