### Tule so testi za: # - vse, kar smo delali na predavanjih - če bi se radi še sami preskusili, # - vse, kar je še v zapiskih, vendar nismo uspeli narediti, # - naloge o rodbini, ki so med nalogami za vaje # - nekatere druge naloge za vajo rodbina = """Adam: Matjaž-90; Cilka-88; Daniel-85; Erik-83 Matjaž: Viljem-58 Viljem: Tadeja-20 Daniel: Elizabeta-67; Hans-64 Elizabeta: Ludvik-50; Jurij-49; Barbara-45; Herman-39; Mihael-32 Jurij: Franc-30; Jožef-29 Herman: Margareta-10 Jožef: Alenka-5; Aleksander-7; Petra-9""" def sestavi_rodbino(rodbina): import inspect caller_frame = inspect.currentframe() globals = caller_frame.f_globals globals["adam"] = Oseba(None, "Adam", "Ž", 111) for opis in rodbina.splitlines(): ime, opisi_otrok = opis.split(":") oseba = globals[ime.lower()] for otrok in opisi_otrok.split(";"): ime, starost = otrok.split("-") ime = ime.strip() starost = int(starost) otrok = Oseba(oseba, ime, "MŽ"[ime[-1] == "a"], starost) globals[ime.lower()] = otrok oseba.otroci.append(otrok) class Oseba: def __init__(self, prednik, ime, spol, starost): self.prednik = prednik self.ime = ime self.spol = spol self.starost = starost self.otroci = [] @staticmethod def rodilnik(s): if s[-2:] == "er": return s[:-2] + "ra" elif s[-1] == "a": return s[:-1] + "e" else: return s + "a" def __str__(self): if self.prednik: return "{} ({}, {} {})".format( self.ime, self.starost, ["hči", "sin"][self.spol=="M"], self.rodilnik(self.prednik.ime)) else: return "{} ({})".format(self.ime, self.starost) __repr__ = __str__ sestavi_rodbino(rodbina) import unittest class Testi_Predavanja(unittest.TestCase): def test_stevilo_otrok(self): self.assertEqual(stevilo_otrok(adam), 4) self.assertEqual(stevilo_otrok(viljem), 1) self.assertEqual(stevilo_otrok(alenka), 0) def test_stevilo_vnukov(self): self.assertEqual(stevilo_vnukov(adam), 3) self.assertEqual(stevilo_vnukov(viljem), 0) self.assertEqual(stevilo_vnukov(elizabeta), 3) self.assertEqual(stevilo_vnukov(matjaž), 1) def test_velikost_rodbine(self): self.assertEqual(velikost_rodbine(adam), 20) self.assertEqual(velikost_rodbine(viljem), 2) self.assertEqual(velikost_rodbine(elizabeta), 12) self.assertEqual(velikost_rodbine(tadeja), 1) def test_obstaja_ime(self): self.assertTrue(obstaja_ime(adam, "Margareta")) self.assertTrue(obstaja_ime(jurij, "Petra")) self.assertFalse(obstaja_ime(jurij, "Alojzij")) self.assertFalse(obstaja_ime(jurij, "Hans")) def test_najvec_otrok(self): self.assertEqual(najvec_otrok(adam), 5) self.assertEqual(najvec_otrok(matjaž), 1) self.assertEqual(najvec_otrok(ludvik), 0) self.assertEqual(najvec_otrok(jurij), 3) def test_najdaljse_ime(self): self.assertEqual(najdaljse_ime(adam), "Aleksander") self.assertEqual(najdaljse_ime(matjaž), "Matjaž") self.assertEqual(najdaljse_ime(herman), "Margareta") def test_globina(self): self.assertEqual(globina(adam), 6) self.assertEqual(globina(viljem), 2) self.assertEqual(globina(tadeja), 1) self.assertEqual(globina(elizabeta), 4) def test_stevilo_potomcev(self): self.assertEqual(stevilo_potomcev(adam), 19) self.assertEqual(stevilo_potomcev(viljem), 1) self.assertEqual(stevilo_potomcev(elizabeta), 11) self.assertEqual(stevilo_potomcev(tadeja), 0) class Testi_Vaje_Rodbina(unittest.TestCase): def test_kolikokrat_ime(self): self.assertEqual(kolikokrat_ime(adam, "A"), 3) self.assertEqual(kolikokrat_ime(adam, "E"), 2) self.assertEqual(kolikokrat_ime(adam, "B"), 1) self.assertEqual(kolikokrat_ime(adam, "G"), 0) def test_kolikokrat_zensk(self): self.assertEqual(koliko_zensk(jurij), 2) self.assertEqual(koliko_zensk(erik), 0) self.assertEqual(koliko_zensk(elizabeta), 5) def test_vsa_rodbina(self): self.assertSetEqual(vsa_rodbina(jurij), {"Jurij", "Franc", "Jožef", "Alenka", "Petra", "Aleksander"}) self.assertSetEqual(vsa_rodbina(alenka), {"Alenka"}) def test_vse_potomstvo(self): self.assertSetEqual(vse_potomstvo(jurij), {"Franc", "Jožef", "Alenka", "Petra", "Aleksander"}) self.assertSetEqual(vse_potomstvo(alenka), set()) def test_kako_dalec(self): self.assertEqual(kako_dalec(elizabeta, "Petra"), 3) self.assertEqual(kako_dalec(elizabeta, "Jurij"), 1) self.assertEqual(kako_dalec(elizabeta, "Margareta"), 2) self.assertEqual(kako_dalec(elizabeta, "Elizabeta"), 0) def test_pot_do(self): self.assertEqual(pot_do(elizabeta, "Petra"), ["Elizabeta", "Jurij", "Jožef", "Petra"]) self.assertEqual(pot_do(elizabeta, "Jurij"), ["Elizabeta", "Jurij"]) self.assertEqual(pot_do(elizabeta, "Margareta"), ["Elizabeta", "Herman", "Margareta"]) class Testi_Vaje_Drugo(unittest.TestCase): def test_convert(self): self.assertEqual(convert([]), ()) self.assertEqual(convert([1]), (1, ())) self.assertEqual(convert([5, 4, 6, 7, 1]), (5, (4, (6, (7, (1, ())))))) self.assertEqual(convert([5, 4, 6, 7, 1, 0]), (5, (4, (6, (7, (1, (0, ()))))))) def test_length(self): self.assertEqual(length(()), 0) self.assertEqual(length((1, ())), 1) self.assertEqual(length((5, (4, (6, (7, (1, ())))))), 5) self.assertEqual(length((5, (4, (6, (7, (1, (0, ()))))))), 6) def test_dup(self): self.assertEqual(dup((1, (2, ()))), (1, (1, (2, (2, ()))))) self.assertEqual(dup((5, (4, (6, (7, (1, ())))))), (5, (5, (4, (4, (6, (6, (7, (7, (1, (1, ()))))))))))) def test_reverse(self): self.assertEqual(reverse((5, (4, (6, (7, (1, ())))))), (1, (7, (6, (4, (5, ())))))) if __name__ == "__main__": unittest.main()