p1/06_analiza_infrastrukture/naloga_test.py
2023-11-23 21:19:11 +01:00

192 lines
6.7 KiB
Python

from .naloga import *
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, S, T, U, V = "ABCDEFGHIJKLMNOPRSTUV"
zemljevid = {
(A, B): {"trava", "gravel"},
(B, A): {"trava", "gravel"},
(A, V): {"lonci", "pešci"},
(V, A): {"lonci", "pešci"},
(B, C): {"lonci", "bolt"},
(C, B): {"lonci", "bolt"},
(B, V): set(),
(V, B): set(),
(C, R): {"lonci", "pešci", "stopnice"},
(R, C): {"lonci", "pešci", "stopnice"},
(D, F): {"pešci", "stopnice"},
(F, D): {"pešci", "stopnice"},
(D, R): {"pešci"},
(R, D): {"pešci"},
(E, I): {"lonci", "trava"},
(I, E): {"lonci", "trava"},
(F, G): {"črepinje", "trava"},
(G, F): {"črepinje", "trava"},
(G, H): {"pešci", "črepinje"},
(H, G): {"pešci", "črepinje"},
(G, I): {"avtocesta"},
(I, G): {"avtocesta"},
(H, J): {"bolt", "robnik"},
(J, H): {"bolt", "robnik"},
(I, M): {"avtocesta"},
(M, I): {"avtocesta"},
(I, P): {"gravel"},
(P, I): {"gravel"},
(I, R): {"stopnice", "robnik"},
(R, I): {"stopnice", "robnik"},
(J, K): set(),
(K, J): set(),
(J, L): {"bolt", "gravel"},
(L, J): {"bolt", "gravel"},
(K, M): {"bolt", "stopnice"},
(M, K): {"bolt", "stopnice"},
(L, M): {"pešci", "robnik"},
(M, L): {"pešci", "robnik"},
(M, N): {"rodeo"},
(N, M): {"rodeo"},
(N, P): {"gravel"},
(P, N): {"gravel"},
(O, P): {"gravel"},
(P, O): {"gravel"},
(P, S): set(),
(S, P): set(),
(R, U): {"pešci", "trava"},
(U, R): {"pešci", "trava"},
(R, V): {"lonci", "pešci"},
(V, R): {"lonci", "pešci"},
(S, T): {"robnik", "trava"},
(T, S): {"robnik", "trava"},
(T, U): {"trava", "gravel"},
(U, T): {"trava", "gravel"},
(U, V): {"lonci", "robnik", "trava"},
(V, U): {"lonci", "robnik", "trava"},
}
mali_zemljevid = {
(A, B): {"robnik", "bolt"},
(B, A): {"robnik", "bolt"},
(A, C): {"bolt", "rodeo", "pešci"},
(C, D): set(),
(D, C): set(),
(V, B): {"avtocesta"},
}
import unittest
import ast
class Test01Obvezna(unittest.TestCase):
def test_0_ena_vrstica(self):
pricakovane = (
"nove_povezave obiskane_tocke popravljena_pot povezave_z_vescino dolgocasna_pot"
" dobra_pot dolgocasne_povezave zahtevnost_poti izvedljiva najzahtevnejsi_odsek"
" enosmerne dvosmerne".split()
)
with open(__file__, "r", encoding="utf-8") as f:
for elm in ast.parse(f.read()).body:
if not isinstance(elm, ast.FunctionDef):
continue
self.assertIn(
elm.name,
pricakovane,
f"\nTokrat ne dodajaj drugih funkcij: odstrani funkcijo '{elm.name}'.",
)
body = elm.body
self.assertEqual(len(body), 1, "\nFunkcija ni dolga le eno vrstico")
self.assertIsInstance(
body[0], ast.Return, "\nFunkcija naj bi vsebovala le return"
)
def test_1_nove_povezave(self):
self.assertEqual({(V, C), (C, D), (F, E)}, nove_povezave("ABVCDFE", zemljevid))
self.assertEqual({(A, U)}, nove_povezave("AU", zemljevid))
self.assertEqual(set(), nove_povezave("ABVRC", zemljevid))
self.assertEqual(set(), nove_povezave("ABVRCBA", zemljevid))
self.assertEqual({(C, D), (D, P), (P, M)}, nove_povezave("CDPM", zemljevid))
def test_2_obiskane_tocke(self):
self.assertEqual({A, B, C, R, U, V}, obiskane_tocke("ABVURURC"))
self.assertEqual({P, N}, obiskane_tocke("PN"))
def test_3_popravljena_pot(self):
self.assertEqual("ABCRIE", popravljena_pot("ABBCCRRIIE"))
self.assertEqual("MN", popravljena_pot("MN"))
self.assertEqual("NMI", popravljena_pot("NMMI"))
self.assertEqual(
"ABCRDFGIMNPSTUVA", popravljena_pot("ABBCCRRDDFFGGIIMMNNPPSSTTUUVVA")
)
def test_4_povezave_z_vescino(self):
self.assertEqual(
[("R", "U"), ("V", "R"), ("R", "U")],
povezave_z_vescino("RUVRUTS", zemljevid, "pešci"),
)
self.assertEqual([], povezave_z_vescino("RUVRUTS", zemljevid, "avtocesta"))
self.assertEqual(
[(V, R), (R, C), (C, R), (R, D), (D, F)],
povezave_z_vescino("VRCRDF", zemljevid, "pešci"),
)
self.assertEqual([(G, I)], povezave_z_vescino("FGIE", zemljevid, "avtocesta"))
def test_5_dolgocasna_pot(self):
self.assertTrue(dolgocasna_pot("ABVUR", zemljevid))
self.assertFalse(dolgocasna_pot("AVUR", zemljevid))
self.assertTrue(dolgocasna_pot("GIPS", zemljevid))
self.assertFalse(dolgocasna_pot("GIP", zemljevid))
self.assertFalse(dolgocasna_pot("GI", zemljevid))
self.assertTrue(dolgocasna_pot("PS", zemljevid))
self.assertTrue(dolgocasna_pot("SP", zemljevid))
def test_6_dobra_pot(self):
self.assertTrue(dobra_pot("ABCR", zemljevid))
self.assertFalse(dobra_pot("ABCRDF", zemljevid))
self.assertFalse(dobra_pot("BV", zemljevid))
self.assertFalse(dobra_pot("ABV", zemljevid))
self.assertFalse(dobra_pot("BVU", zemljevid))
def test_7_zahtevnost_poti(self):
self.assertEqual(3, zahtevnost_poti("ABCRU", zemljevid))
self.assertEqual(1, zahtevnost_poti("IPS", zemljevid))
self.assertEqual(0, zahtevnost_poti("PS", zemljevid))
self.assertEqual(3, zahtevnost_poti("ABVUT", zemljevid))
self.assertEqual(2, zahtevnost_poti("ABVR", zemljevid))
def test_8_izvedljiva(self):
self.assertTrue(izvedljiva("AVUSPRDEI", zemljevid, 4))
self.assertFalse(izvedljiva("AVUSPRDEI", zemljevid, 3))
self.assertFalse(izvedljiva("AVUSPRE", zemljevid, 3))
self.assertFalse(izvedljiva("AVUSPRE", zemljevid, 2))
self.assertTrue(izvedljiva("AB", zemljevid, 2))
self.assertTrue(izvedljiva("AB", zemljevid, 1))
self.assertFalse(izvedljiva("AB", zemljevid, 0))
def test_9_enosmerne(self):
self.assertEqual({(A, C), (V, B)}, enosmerne(mali_zemljevid))
self.assertEqual(set(), enosmerne(zemljevid))
def test_10_dvosmerne(self):
self.assertEqual(zemljevid, dvosmerne(zemljevid))
self.assertEqual(
{
(A, B): {"robnik", "bolt"},
(B, A): {"robnik", "bolt"},
(C, D): set(),
(D, C): set(),
},
dvosmerne(mali_zemljevid),
)
class Test02Dodatna(unittest.TestCase):
def test_najzahtevnejsi_odsek(self):
self.assertEqual((C, R), najzahtevnejsi_odsek("ABCRU", zemljevid))
self.assertEqual((C, R), najzahtevnejsi_odsek("CR", zemljevid))
self.assertEqual((V, U), najzahtevnejsi_odsek("ABVUT", zemljevid))
if "__main__" == __name__:
unittest.main()