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