import unittest from unittest.mock import patch, Mock class TestBase(unittest.TestCase): ovire = [(1, 1, 3), (1, 5, 6), (1, 8, 8), (1, 10, 10), (2, 5, 6), (2, 13, 16), (4, 9, 11), (4, 13, 14), (5, 1, 3), (5, 15, 17), (6, 5, 6), (6, 8, 9), (7, 12, 13), (8, 10, 10), (9, 1, 2), (9, 14, 16), (10, 4, 4), (10, 12, 12), (11, 17, 17), (12, 13, 15), (13, 1, 5), (13, 7, 11), (13, 17, 17), (14, 16, 16), (15, 3, 4), (15, 10, 11), (16, 15, 15), (17, 2, 3), (17, 5, 9), (17, 11, 13), (17, 16, 16)] ovire2 = [(1, 1, 3), (1, 5, 6), (1, 8, 8), (1, 10, 10), (2, 5, 6), (4, 9, 11), (5, 1, 3), (6, 5, 6), (6, 8, 9), ] class Test6_7(TestBase): def test_01_ovira(self): steza = Steza(17, 19, self.ovire.copy()) self.assertEqual((1, 10, 10), steza.ovira(10, 1)) self.assertEqual((4, 9, 11), steza.ovira(9, 4)) self.assertEqual((4, 9, 11), steza.ovira(10, 4)) self.assertEqual((4, 9, 11), steza.ovira(11, 4)) self.assertEqual((6, 8, 9), steza.ovira(8, 6)) self.assertEqual((6, 8, 9), steza.ovira(9, 6)) self.assertIsNone(steza.ovira(7, 1)) self.assertIsNone(steza.ovira(9, 1)) self.assertIsNone(steza.ovira(8, 4)) self.assertIsNone(steza.ovira(12, 4)) def test_02_dodaj_odstrani_oviro(self): steza = Steza(10, 10, [(5, 7, 9)]) self.assertEqual((5, 7, 9), steza.ovira(7, 5)) self.assertIsNone(steza.ovira(3, 2)) self.assertIsNone(steza.ovira(3, 1)) steza.dodaj_oviro(1, 2, 5) self.assertEqual((5, 7, 9), steza.ovira(7, 5)) self.assertIsNone(steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.dodaj_oviro(2, 3, 3) self.assertEqual((5, 7, 9), steza.ovira(7, 5)) self.assertEqual((2, 3, 3), steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.odstrani_oviro(5, 7, 9) self.assertIsNone(steza.ovira(7, 5)) self.assertEqual((2, 3, 3), steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.odstrani_oviro(2, 3, 3) self.assertIsNone(steza.ovira(7, 5)) self.assertIsNone(steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.odstrani_oviro(1, 2, 5) self.assertIsNone(steza.ovira(7, 5)) self.assertIsNone(steza.ovira(3, 2)) self.assertIsNone(steza.ovira(3, 1)) def test_03_sprosti_polje(self): steza = Steza(10, 10, [(5, 7, 9), (1, 2, 5)]) steza.dodaj_oviro(2, 3, 3) self.assertEqual((5, 7, 9), steza.ovira(7, 5)) self.assertEqual((2, 3, 3), steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.sprosti_polje(9, 5) self.assertIsNone(steza.ovira(7, 5)) self.assertEqual((2, 3, 3), steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.sprosti_polje(3, 2) self.assertIsNone(steza.ovira(7, 5)) self.assertIsNone(steza.ovira(3, 2)) self.assertEqual((1, 2, 5), steza.ovira(3, 1)) steza.odstrani_oviro = Mock() steza.sprosti_polje(3, 1) steza.odstrani_oviro.assert_called() steza.ovira = Mock(return_value=(1, 2, 5)) steza.sprosti_polje(3, 1) steza.ovira.assert_called() def test_04_konec(self): steza = Steza(18, 20, self.ovire.copy()) self.assertEqual(((9, 7), (6, 8, 9)), steza.konec(9, 10, "^")) self.assertEqual(((9, 12), (13, 7, 11)), steza.konec(9, 10, "v")) self.assertEqual(((11, 10), (10, 12, 12)), steza.konec(9, 10, ">")) self.assertEqual(((5, 10), (10, 4, 4)), steza.konec(9, 10, "<")) self.assertEqual(((7, 1), None), steza.konec(7, 10, "^")) self.assertEqual(((18, 15), None), steza.konec(14, 15, ">")) self.assertEqual(((14, 20), None), steza.konec(14, 15, "v")) self.assertEqual(((1, 11), None), steza.konec(16, 11, "<")) self.assertEqual(((16, 11), (11, 17, 17)), steza.konec(16, 11, ">")) self.assertEqual(((14, 13), (12, 13, 15)), steza.konec(14, 13, "^")) self.assertEqual(((14, 11), (12, 13, 15)), steza.konec(14, 11, "v")) self.assertEqual(((12, 13), (13, 7, 11)), steza.konec(12, 13, "<")) class Test7_8(TestBase): def test_01_kolesar(self): steza = Steza(19, 17, self.ovire.copy()) kolesar = Kolesar(11, 1, steza) self.assertEqual((11, 1), kolesar.pozicija()) kolesar.premik(">") self.assertEqual((19, 1), kolesar.pozicija()) kolesar.premik(">") self.assertEqual((19, 1), kolesar.pozicija()) kolesar.premik("<") self.assertEqual((11, 1), kolesar.pozicija()) kolesar.premik("v") self.assertEqual((11, 3), kolesar.pozicija()) kolesar.premik("v") self.assertEqual((11, 3), kolesar.pozicija()) kolesar.premik("<") self.assertEqual((1, 3), kolesar.pozicija()) kolesar.premik("<") self.assertEqual((1, 3), kolesar.pozicija()) kolesar.premik("^") self.assertEqual((1, 2), kolesar.pozicija()) kolesar.premik(">") self.assertEqual((4, 2), kolesar.pozicija()) kolesar.premik("^") self.assertEqual((4, 1), kolesar.pozicija()) steza2 = Steza(13, 15, self.ovire2.copy()) kolesar = Kolesar(4, 2, steza2) kolesar.premik("v") self.assertEqual((4, 15), kolesar.pozicija()) kolesar.premik(">") self.assertEqual((13, 15), kolesar.pozicija()) steza2.konec = Mock(return_value=((13, 15), None)) kolesar.premik(">") steza2.konec.assert_called() def test_02_vestni_kolesar(self): steza = Steza(19, 17, self.ovire.copy()) kolesar = VestniKolesar(11, 1, steza) self.assertEqual((11, 1), kolesar.pozicija()) self.assertEqual(0, kolesar.korakov()) kolesar.premik(">") self.assertEqual((19, 1), kolesar.pozicija()) self.assertEqual(1, kolesar.korakov()) kolesar.premik(">") self.assertEqual((19, 1), kolesar.pozicija()) self.assertEqual(2, kolesar.korakov()) kolesar.premik("<") self.assertEqual((11, 1), kolesar.pozicija()) self.assertEqual(3, kolesar.korakov()) with patch.object(Kolesar, "premik"): kolesar.premik("<") Kolesar.premik.assert_called() def test_03_avtonomni_kolesar(self): steza = Steza(19, 17, self.ovire.copy()) kolesar = AvtonomniKolesar(11, 1, steza, ">>^") steza2 = Steza(17, 17, self.ovire.copy()) kolesar2 = AvtonomniKolesar(12, 1, steza2, "v>v") for i, pozicija in enumerate(((12, 1), (12, 6), (17, 6), (17, 10), (13, 10), (13, 11), (1, 11), (1, 12), (12, 12), (12, 16), (14, 16), (14, 17))): self.assertEqual(pozicija, kolesar2.pozicija(), f"po {i} korakih") self.assertEqual(i, kolesar2.korakov(), f"po {i} korakih") kolesar2.korak() for i, pozicija in enumerate(((11, 1), (19, 1), (19, 1), (11, 1), (11, 3), (11, 3), (1, 3), (1, 3), (1, 2), (4, 2), )): self.assertEqual(pozicija, kolesar.pozicija(), f"po {i} korakih") self.assertEqual(i, kolesar.korakov(), f"po {i} korakih") kolesar.korak() class Test8_9(TestBase): def test_01_mehka_steza(self): steza = MehkaSteza(17, 17, self.ovire.copy()) self.assertEqual((13, 7, 11), steza.ovira(10, 13)) self.assertEqual(((5, 3), (2, 5, 6)), steza.konec(5, 3, "^")) self.assertEqual(((7, 12), (13, 7, 11)), steza.konec(7, 3, "v")) self.assertEqual((13, 7, 11), steza.ovira(10, 13)) self.assertEqual(((9, 14), (13, 7, 11)), steza.konec(9, 16, "^")) # drugič self.assertEqual((13, 7, 11), steza.ovira(10, 13)) self.assertEqual(((8, 4), (4, 9, 11)), steza.konec(5, 4, ">")) self.assertEqual(((9, 12), (13, 7, 11)), steza.konec(9, 7, "v")) # tretjič self.assertEqual(None, steza.ovira(10, 13)) self.assertEqual(((7, 16), (17, 5, 9)), steza.konec(7, 2, "v")) # ni več ovire with patch.object(Steza, "konec", return_value=((1, 17), None)): steza.konec(1, 14, "v") Steza.konec.assert_called() class Test9_10(TestBase): def test_avtonomni(self): kolesar = UsmerjeniKolesar(12, 1, Steza(17, 18, self.ovire), "><<>><>") self.assertEqual((12, 1), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((12, 6), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 6), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((17, 10), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((13, 10), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((13, 11), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((1, 11), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((1, 12), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((12, 12), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((12, 16), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((14, 16), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((14, 18), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((1, 18), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((1, 18), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 18), kolesar.pozicija()) kolesar = UsmerjeniKolesar(12, 1, Steza(17, 18, self.ovire), "><<") self.assertEqual((12, 1), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((12, 6), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 6), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((17, 10), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((13, 10), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((13, 11), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((1, 11), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((1, 12), kolesar.pozicija()) kolesar.korak() # > (ponavljanje!) self.assertEqual((12, 12), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((12, 16), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((1, 16), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((1, 18), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((1, 18), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((1, 18), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 18), kolesar.pozicija()) kolesar = UsmerjeniKolesar(13, 1, Steza(17, 18, self.ovire), "><") self.assertEqual((13, 1), kolesar.pozicija()) kolesar.korak() # v - ne gre nikamor! self.assertEqual((13, 1), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 1), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((17, 4), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((15, 4), kolesar.pozicija()) kolesar.korak() # v - ne gre nikamor! self.assertEqual((15, 4), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 4), kolesar.pozicija()) kolesar.korak() # v self.assertEqual((17, 4), kolesar.pozicija()) kolesar.korak() # < self.assertEqual((15, 4), kolesar.pozicija()) kolesar.korak() # v - ne gre nikamor! self.assertEqual((15, 4), kolesar.pozicija()) kolesar.korak() # > self.assertEqual((17, 4), kolesar.pozicija()) if __name__ == "__main__": unittest.main()