#!/usr/bin/python import unittest import constraints from game import LetterResult class TestConstraints(unittest.TestCase): def test_empty(self): consts = constraints.Constraints() self.assertTrue(consts.matches("abcde")) self.assertTrue(consts.matches("bcdef")) def test_correct(self): consts = constraints.Constraints() consts.update_graded( "abcde", [ LetterResult.CORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, ], ) self.assertTrue(consts.matches("amnop")) self.assertTrue(consts.matches("aaaaa")) self.assertFalse(consts.matches("abcde")) self.assertFalse(consts.matches("lmnop")) self.assertFalse(consts.matches("aedcb")) self.assertFalse(consts.matches("amnob")) def test_correct_count_limit(self): consts = constraints.Constraints() consts.update_graded( "aazzz", [ LetterResult.CORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, ], ) self.assertTrue(consts.matches("abcde")) self.assertTrue(consts.matches("abbbb")) self.assertFalse(consts.matches("aabbb")) self.assertFalse(consts.matches("abbba")) self.assertFalse(consts.matches("bbbbb")) self.assertFalse(consts.matches("bbbba")) self.assertFalse(consts.matches("babbb")) def test_move(self): consts = constraints.Constraints() consts.update_graded( "abcde", [ LetterResult.MOVE, LetterResult.INCORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, LetterResult.INCORRECT, ], ) self.assertTrue(consts.matches("zzzza")) self.assertTrue(consts.matches("zzzaa")) self.assertTrue(consts.matches("zaaaa")) self.assertFalse(consts.matches("azzzz")) self.assertFalse(consts.matches("zzzzz")) self.assertFalse(consts.matches("zzzba")) if __name__ == "__main__": unittest.main()