def test_names(): auto = Automaton() auto.add_all(NAMES) auto.update_automaton() auto_matches = [(m.start, m.end) for m in auto.get_matches(TEXT)] with TemporaryDirectory() as tmpdir: #tmpdir = '' fnm = os.path.join(tmpdir, 'test.aca') auto.save_to_file(fnm) auto2 = Automaton() auto2.load_from_file(fnm) auto2_matches = [(m.start, m.end) for m in auto2.get_matches(TEXT)] assert list(auto.items()) == list(auto2.items()) assert list(auto.prefixes()) == list(auto2.prefixes()) assert auto_matches == auto2_matches auto3 = Automaton() auto3.load_from_string(auto2.save_to_string()) auto3_matches = [(m.start, m.end) for m in auto3.get_matches(TEXT)] assert list(auto.items()) == list(auto2.items()) assert list(auto.prefixes()) == list(auto2.prefixes()) assert auto_matches == auto3_matches
def test_prefixes(): auto = Automaton() auto.add_all(['jaanus', 'janek', 'janis']) prefixes, values = zip(*auto.prefixes()) prefixes = [''.join(prefix) for prefix in prefixes] assert prefixes == ['', 'j', 'ja', 'jaa', 'jaan', 'jaanu', 'jaanus', 'jan', 'jane', 'janek', 'jani', 'janis']
# access it like a Python dictionary print(map['acid']) # using an invalid key raises a KeyError #print (map['invalid key']) # you can use get to provide a default value when key is missing print(map.get('invalid key', 'default value')) # NB! Implementation specific special case: empty strings # denote "missing" values, so you can't use these map['special'] = '' #print (map['special']) # you can delete items del map['electrify'] # trying to delete a non-existent item raises KeyError #del map['invalid key'] # iterate items like a dict print('items:') for key, value in map.items(): print('{}: {}'.format(key, value)) # you can also iterate prefixes print('prefixes:') for prefix, value in map.prefixes(): print('{}: {}'.format(prefix, value))