import unittest from random import randint import os open("zemljevid.txt", "w").write("""3 4 1 8 7 6 4 5 2 3 6 10 4 11 11 4 3 3 8 11 3 16 9 7 11 8 16 14 5 11 13 10 5 6 7 9 14 13 12 10 14 13 11 9 16 16 14 9 8 15""") class Test06(unittest.TestCase): maxDiff = 100000 def test_01_preberi(self): self.assertEqual( {1: [3], 2: [4], 3: [1, 8, 7, 6, 4], 4: [2, 3, 6, 5], 5: [4, 11, 10], 6: [3, 11, 4], 7: [3, 8, 11], 8: [3, 16, 9, 7], 9: [8, 16, 14, 11], 10: [5, 11, 13], 11: [5, 6, 7, 9, 14, 10], 12: [13], 13: [10, 14, 12], 14: [9, 16, 13, 11], 15: [16], 16: [8, 15, 14, 9]}, preberi("zemljevid.txt") ) fname = "z{:05}.bla".format(randint(10000, 99999)) with open(fname, "w") as f: f.write("2\n3 1\n2") try: self.assertEqual({1:[2], 2: [1, 3], 3: [2]}, preberi(fname)) finally: try: os.remove(fname) except: print("Ne morem pobrisati {}. (Je na Dropboxu?) Briši sam(a).".format(fname)) def test_02_mozna_pot(self): zemljevid = preberi("zemljevid.txt") self.assertTrue(mozna_pot([1, 3, 7, 3, 4, 2], zemljevid)) self.assertTrue(mozna_pot([1, 3, 7, 3, 4, 2][::-1], zemljevid)) self.assertTrue(mozna_pot([1, 3, 7, 3, 4, 5, 4, 3, 1], zemljevid)) self.assertTrue(mozna_pot([1, 3, 7, 3, 4, 5, 4, 3, 1][::-1], zemljevid)) self.assertTrue(mozna_pot([1, 3, 8, 16, 15], zemljevid)) self.assertTrue(mozna_pot([1, 3, 8, 16, 15][::-1], zemljevid)) self.assertTrue(mozna_pot([15, 16, 15], zemljevid)) # Ne začne/konča se na vhodih/izhodih self.assertFalse(mozna_pot([1, 3, 7, 11, 14, 16], zemljevid)) self.assertFalse(mozna_pot([3, 7, 11, 14, 16, 15], zemljevid)) # Vmes gre ven self.assertFalse(mozna_pot([1, 3, 6, 4, 2, 4, 5, 11, 14, 13, 12], zemljevid)) self.assertFalse(mozna_pot([1, 3, 6, 4, 2, 2, 4, 5, 11, 14, 13, 12], zemljevid)) # Ponovi eno križišče self.assertFalse(mozna_pot([1, 3, 8, 8, 16, 15], zemljevid)) # Ni povezave self.assertFalse(mozna_pot([1, 3, 16, 15], zemljevid)) self.assertFalse(mozna_pot([1, 15], zemljevid)) zemljevid2 = {1: [2], 2: [1, 3], 3: [2]} self.assertTrue(mozna_pot([1, 2, 3], zemljevid2)) self.assertFalse(mozna_pot([1, 3], zemljevid2)) zemljevid2 = {1: [2], 2: [1, 3], 3: [2, 4], 4: [3]} self.assertTrue(mozna_pot([1, 2, 3, 4], zemljevid2)) self.assertTrue(mozna_pot([4, 3, 2, 1], zemljevid2)) self.assertFalse(mozna_pot([1, 3, 4], zemljevid2)) self.assertFalse(mozna_pot([1, 4], zemljevid2)) def test_03_hamiltonova(self): zemljevid = preberi("zemljevid.txt") self.assertTrue(hamiltonova([1, 3, 7, 8, 16, 9, 14, 11, 6, 4, 5, 10, 13, 12], zemljevid)) self.assertTrue(hamiltonova([1, 3, 7, 8, 16, 9, 14, 11, 6, 4, 5, 10, 13, 12][::-1], zemljevid)) # Ena manjka self.assertFalse(hamiltonova([1, 3, 8, 16, 9, 14, 11, 6, 4, 5, 10, 13, 12], zemljevid)) # Ni začetka/konca self.assertFalse(hamiltonova([3, 8, 16, 9, 14, 11, 6, 4, 5, 10, 13, 12], zemljevid)) self.assertFalse(hamiltonova([1, 3, 7, 8, 16, 9, 14, 11, 6, 4, 5, 10, 13], zemljevid)) # Ponavljenje self.assertFalse(hamiltonova([1, 3, 8, 16, 9, 14, 11, 6, 4, 5, 10, 11, 14, 13, 12], zemljevid)) self.assertFalse(hamiltonova([1, 3, 7, 8, 16, 9, 14, 11, 6, 3, 4, 5, 10, 13, 12], zemljevid)) zemljevid2 = {1: [2], 2: [1, 3], 3: [2, 4], 4: [3]} self.assertTrue(hamiltonova([1, 2, 3, 4], zemljevid2)) self.assertTrue(hamiltonova([4, 3, 2, 1], zemljevid2)) self.assertFalse(hamiltonova([1, 2, 4], zemljevid2)) class Test07(unittest.TestCase): maxDiff = 100000 def test_01_navodila(self): zemljevid = preberi("zemljevid.txt") self.assertEqual([1, 1, 1], navodila([1, 3, 8, 16, 15], zemljevid)) self.assertEqual([3, 2, 2], navodila([1, 3, 6, 4, 2], zemljevid)) self.assertEqual([3, 1, 3, 2, 3], navodila([1, 3, 6, 11, 14, 16, 15], zemljevid)) self.assertEqual([2, 1, 5, 1, 1, 2, 2, 3], navodila([12, 13, 14, 11, 9, 8, 7, 3, 4, 2], zemljevid)) self.assertEqual([0], navodila([2, 4, 2], zemljevid)) self.assertEqual([1, 2, 5, 2, 3, 2, 5, 2, 2], navodila([15, 16, 14, 11, 9, 16, 14, 11, 9, 16, 15], zemljevid)) class Test08(unittest.TestCase): maxDiff = 100000 def test_01_prevozi(self): zemljevid = preberi("zemljevid.txt") self.assertEqual([1, 3, 8, 16, 15], prevozi(1, [1, 1, 1], zemljevid)) self.assertEqual([1, 3, 6, 4, 2], prevozi(1, [3, 2, 2], zemljevid)) self.assertEqual([1, 3, 6, 11, 14, 16, 15], prevozi(1, [3, 1, 3, 2, 3], zemljevid)) self.assertEqual([12, 13, 14, 11, 9, 8, 7, 3, 4, 2], prevozi(12, [2, 1, 5, 1, 1, 2, 2, 3], zemljevid)) self.assertEqual([2, 4, 2], prevozi(2, [0], zemljevid)) self.assertEqual([15, 16, 14, 11, 9, 16, 14, 11, 9, 16, 15], prevozi(15, [1, 2, 5, 2, 3, 2, 5, 2, 2], zemljevid)) class Test09(unittest.TestCase): maxDiff = 100000 def test_01_sosedi(self): zemljevid = preberi("zemljevid.txt") self.assertEqual({16}, sosedi({15}, zemljevid)) self.assertEqual({14, 9, 8}, sosedi({15, 16}, zemljevid)) self.assertEqual({3, 7, 11, 13}, sosedi({15, 16, 14, 9, 8}, zemljevid)) self.assertEqual({1, 4, 6, 5, 10, 12}, sosedi({15, 16, 14, 9, 8, 3, 7, 11, 13}, zemljevid)) self.assertEqual({2}, sosedi({15, 16, 14, 9, 8, 3, 7, 11, 13, 1, 4, 6, 5, 10, 12}, zemljevid)) self.assertEqual(set(), sosedi({15, 16, 14, 9, 8, 3, 7, 11, 13, 1, 4, 6, 5, 10, 12, 2}, zemljevid)) self.assertEqual({4, 3, 11}, sosedi({6}, zemljevid)) self.assertEqual({2, 5, 1, 7, 8, 9, 14, 10}, sosedi({6, 4, 3, 11}, zemljevid)) def test_02_razdalja(self): zemljevid = preberi("zemljevid.txt") self.assertEqual(1, razdalja(15, 16, zemljevid)) self.assertEqual(2, razdalja(15, 14, zemljevid)) self.assertEqual(2, razdalja(15, 9, zemljevid)) self.assertEqual(2, razdalja(15, 8, zemljevid)) self.assertEqual(3, razdalja(15, 7, zemljevid)) self.assertEqual(3, razdalja(15, 13, zemljevid)) self.assertEqual(4, razdalja(15, 5, zemljevid)) self.assertEqual(4, razdalja(15, 10, zemljevid)) self.assertEqual(5, razdalja(15, 2, zemljevid)) self.assertEqual(1, razdalja(6, 4, zemljevid)) self.assertEqual(2, razdalja(6, 5, zemljevid)) self.assertEqual(2, razdalja(6, 10, zemljevid)) self.assertEqual(3, razdalja(6, 13, zemljevid)) self.assertEqual(4, razdalja(6, 12, zemljevid)) class Test10(unittest.TestCase): maxDiff = 100000 def test_01_najkrajsa_pot(self): zemljevid = preberi("zemljevid.txt") self.assertEqual([1, 1, 1], najkrajsa_navodila(1, 15, zemljevid)) self.assertEqual([4, 3], najkrajsa_navodila(1, 2, zemljevid)) self.assertEqual([1, 2, 1, 1], najkrajsa_navodila(2, 15, zemljevid)) self.assertEqual([3, 2, 2, 2], najkrajsa_navodila(2, 12, zemljevid)) self.assertEqual([1, 1, 1], najkrajsa_navodila(15, 12, zemljevid)) self.assertEqual([3, 3, 4], najkrajsa_navodila(15, 1, zemljevid)) self.assertEqual([1, 1], najkrajsa_navodila(2, 1, zemljevid)) self.assertEqual([3, 3, 3, 3], najkrajsa_navodila(15, 2, zemljevid)) self.assertEqual([1, 1, 1, 1], najkrajsa_navodila(12, 2, zemljevid)) self.assertEqual([2, 3, 3], najkrajsa_navodila(12, 15, zemljevid)) navodila = najkrajsa_navodila(1, 12, zemljevid) self.assertEqual(5, len(navodila)) self.assertEqual(12, prevozi(1, navodila, zemljevid)[-1]) navodila = najkrajsa_navodila(12, 1, zemljevid) self.assertEqual(5, len(navodila), 5) self.assertEqual(1, prevozi(12, navodila, zemljevid)[-1]) if __name__ == "__main__": unittest.main()