1import unittest 2from util import * 3 4class Wordlist: 5 6 def __init__(self, words): 7 8 self.wl = wordlist_init(utf8(words)) 9 self.lookup_word = lambda w: wordlist_lookup_word(self.wl, w) 10 self.lookup_index = lambda i: wordlist_lookup_index(self.wl, i) 11 12 def free(self): 13 if self.is_valid(): 14 wordlist_free(self.wl) 15 self.wl = None 16 17 def is_valid(self): 18 return self.wl is not None 19 20 21 22class WordlistTests(unittest.TestCase): 23 24 words_list = None 25 26 def setUp(self): 27 if self.words_list is None and wordlist_init is not None: 28 self.words_list, _ = load_words('english') 29 30 @internal_only() 31 def test_wordlist(self): 32 33 for n in range(17): 34 # Build a wordlist of n words 35 test_list = self.words_list[0 : n] 36 37 wl = Wordlist(' '.join(test_list)) 38 self.assertTrue(wl.is_valid()) 39 40 for idx, word in enumerate(test_list): 41 w = utf8(word) 42 # Verify lookup by word and index 43 self.assertEqual(idx + 1, wl.lookup_word(w)) 44 check_word = utf8(self.words_list[n + 1]) 45 self.assertEqual(wl.lookup_word(check_word), 0) 46 self.assertEqual(wl.lookup_index(idx), w) 47 # Lookup of a non-present word 48 self.assertIsNone(wl.lookup_index(n + 1)) 49 50 wl.free() 51 52 53if __name__ == '__main__': 54 unittest.main() 55