def similar_test(self):
        similar_to_paint = ['faint', 'saint', 'taint', 'point', 'print', 'pains']
        similar_to_coder = ['cider', 'ceder', 'comer', 'coper', 'corer', 'cower', 'cover', 'coyer', 'codex', 'codes']

        vocab = Vocabulary()
        vocab.fetch("dictionary.txt")

        similar_words = [x for x in vocab.similar("paint")]     # get words one character different from 'paint'
        for item in similar_to_paint:                           # check that the test words are contained in result list
            self.assertIn(item, similar_words)

        similar_words = [x for x in vocab.similar("coder")]     # get words one character different from 'coder'
        for item in similar_to_coder:                           # check that the test words are contained in result list
            self.assertIn(item, similar_words)

        similar_words = [x for x in vocab.similar("zzzzz")]     # test non-sense word returns no results
        self.assertEqual(similar_words, [])
    def word_ladder_test(self):
        slant_to_grain = ['slant', 'plant', 'plank', 'blank', 'bland', 'brand', 'braid', 'brain', 'grain']
        smart_to_brain = ['smart', 'start', 'stars', 'sears', 'bears', 'beans', 'brans', 'brand', 'braid', 'brain']

        vocab = Vocabulary()
        vocab.fetch("dictionary.txt")

        self.assertEqual(vocab.word_ladder('slant', 'grain'), slant_to_grain)
        self.assertEqual(vocab.word_ladder('smart', 'brain'), smart_to_brain)