import unittest import util WORD_LENGTH_LIMIT = 100 def _possible_lengths(wordlen): """Determine all possible suffix, stem, prefix lengths for the given word length.""" results = set() for pre in range(util.MAX_PREFIX_LENGTH + 1): for suf in range(util.MAX_SUFFIX_LENGTH + 1): stem = wordlen - pre - suf if stem < 1: continue results.add((pre, stem, suf)) return results class TestUtil(unittest.TestCase): def _check_segment_limits(self, stem_idx, suf_idx, wordlen): prelen = stem_idx stemlen = suf_idx - stem_idx suflen = wordlen - suf_idx self.assertLessEqual(prelen, util.MAX_PREFIX_LENGTH) self.assertGreaterEqual(stemlen, 1) self.assertLessEqual(suflen, util.MAX_SUFFIX_LENGTH) def test_segment_indexes_limits(self): """Check if all indexes are within limits.""" for wordlen in range(WORD_LENGTH_LIMIT): for stem_idx, suf_idx in util.segment_indexes(wordlen): self._check_segment_limits(stem_idx, suf_idx, wordlen) def test_segment_indexes_values(self): """Check if all possible index values are being given.""" for wordlen in range(WORD_LENGTH_LIMIT): possibilities = _possible_lengths(wordlen) for stem_idx, suf_idx in util.segment_indexes(wordlen): prelen = stem_idx stemlen = suf_idx - stem_idx suflen = wordlen - suf_idx indexes = (prelen, stemlen, suflen) self.assertIn(indexes, possibilities) possibilities.remove(indexes) self.assertSetEqual(possibilities, set()) if __name__ == '__main__': unittest.main()