p1/05_nacrtovanje_poti/naloga_test.py

161 lines
5.0 KiB
Python
Raw Normal View History

2023-11-16 15:18:51 +00:00
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): "gravel trava",
(A, V): "pešci lonci",
(B, C): "bolt lonci",
(B, V): "",
(C, R): "stopnice pešci lonci",
(D, F): "stopnice pešci",
(D, R): "pešci",
(E, I): "trava lonci",
(F, G): "trava črepinje",
(G, H): "črepinje pešci",
(G, I): "avtocesta",
(H, J): "robnik bolt",
(I, M): "avtocesta",
(I, P): "gravel",
(I, R): "stopnice robnik",
(J, K): "",
(J, L): "gravel bolt",
(K, M): "stopnice bolt",
(L, M): "robnik pešci",
(M, N): "rodeo",
(N, P): "gravel",
(O, P): "gravel",
(P, S): "",
(R, U): "trava pešci",
(R, V): "pešci lonci",
(S, T): "robnik trava",
(T, U): "gravel trava",
(U, V): "robnik lonci trava",
}
mali_zemljevid = {(A, B): "robnik bolt", (A, C): "bolt rodeo pešci", (C, D): ""}
import unittest
import ast
class TestObvezna(unittest.TestCase):
def test_1_dvosmerni_zemljevid(self):
kopija = mali_zemljevid.copy()
self.assertEqual(
{
("A", "B"): {"robnik", "bolt"},
("B", "A"): {"robnik", "bolt"},
("A", "C"): {"bolt", "rodeo", "pešci"},
("C", "A"): {"bolt", "rodeo", "pešci"},
("C", "D"): set(),
("D", "C"): set(),
},
dvosmerni_zemljevid(mali_zemljevid),
)
self.assertEqual(
mali_zemljevid, kopija, "Ne spreminjaj zemljevida, temveč sestavi novega!"
)
def test_2_mozna_pot(self):
self.assertTrue(mozna_pot("ACD", mali_zemljevid))
self.assertTrue(mozna_pot("ABACD", mali_zemljevid))
self.assertTrue(mozna_pot("AB", mali_zemljevid))
self.assertFalse(mozna_pot("ABD", mali_zemljevid))
self.assertTrue(mozna_pot("ABCRVRIEIPNM", zemljevid))
self.assertTrue(mozna_pot("HJKMLJH", zemljevid))
self.assertFalse(mozna_pot("AC", zemljevid))
self.assertFalse(mozna_pot("ABCRVRIEPNM", zemljevid))
self.assertTrue(mozna_pot("A", zemljevid))
def test_3_potrebne_vescine(self):
self.assertEqual(
{"pešci", "bolt", "rodeo"}, potrebne_vescine("AC", mali_zemljevid)
)
self.assertEqual(
{"pešci", "bolt", "rodeo"}, potrebne_vescine("ACD", mali_zemljevid)
)
self.assertEqual(
{"pešci", "robnik", "bolt", "rodeo"},
potrebne_vescine("ABACD", mali_zemljevid),
)
self.assertEqual(
{"robnik", "stopnice", "gravel", "trava"},
potrebne_vescine("RIPSTUT", zemljevid),
)
self.assertEqual(
{"pešci", "trava", "lonci", "bolt", "stopnice", "gravel"},
potrebne_vescine("ABCRVR", zemljevid),
)
self.assertEqual(
{
"pešci",
"trava",
"robnik",
"lonci",
"bolt",
"stopnice",
"rodeo",
"gravel",
},
potrebne_vescine("ABCRVRIEIPNM", zemljevid),
)
self.assertEqual(
{"pešci", "robnik", "bolt", "stopnice", "gravel"},
potrebne_vescine("HJKMLJH", zemljevid),
)
self.assertEqual(set(), potrebne_vescine("BVBVBVB", zemljevid))
def test_4_nepotrebne_vescine(self):
vescine = {"pešci", "robnik", "stopnice", "gravel", "bolt", "rodeo"}
kopija = vescine.copy()
self.assertEqual(
{"stopnice", "gravel"}, nepotrebne_vescine("ABACD", mali_zemljevid, vescine)
)
self.assertEqual(
vescine,
kopija,
"Se mi prav zdi, da je funkcija nepotrebne_vescine spremenila "
"vrednost svojega argumenta `vescine`? Fail, fail!",
)
vescine = {"stopnice", "gravel", "bolt", "rodeo"}
self.assertEqual(
{"stopnice", "bolt"}, nepotrebne_vescine("IPNMNPO", zemljevid, vescine)
)
vescine = {"gravel", "rodeo"}
self.assertEqual(set(), nepotrebne_vescine("IPNMNPO", zemljevid, vescine))
def test_5_tocke_vescine(self):
self.assertEqual("GIM", tocke_vescine(zemljevid, "avtocesta"))
self.assertEqual("HIJLMRSTUV", tocke_vescine(zemljevid, "robnik"))
self.assertEqual("MN", tocke_vescine(zemljevid, "rodeo"))
self.assertEqual("ABIJLNOPTU", tocke_vescine(zemljevid, "gravel"))
class TestDodatna(unittest.TestCase):
def test_1_koncna_tocka(self):
vescine = {"pešci", "robnik", "bolt", "stopnice", "gravel"}
self.assertEqual(
("H", {"črepinje"}), koncna_tocka("HJKMLJHGFD", zemljevid, vescine)
)
self.assertEqual(("M", {"rodeo"}), koncna_tocka("HJKMNPIG", zemljevid, vescine))
self.assertEqual(
("B", {"lonci", "bolt"}),
koncna_tocka("ABCRVB", zemljevid, {"gravel", "trava"}),
)
if "__main__" == __name__:
unittest.main()