1import unittest
2
3from solution import *
4
5
6class SanityTest(unittest.TestCase):
7 """Sanity tests for Halloween in Pripyat."""
8
9 def test_candy(self):
10 """Test Candy class."""
11 self.assertIsInstance(Candy(1, 1.0), Candy)
12
13 def test_person(self):
14 """Test Person class."""
15 self.assertIsInstance(Person((1, 1)), Person)
16
17 def test_kid(self):
18 """Test Kid class."""
19 self.assertIsInstance(Kid((1, 1), 1), Kid)
20
21 def test_host(self):
22 """Test Host class."""
23 self.assertIsInstance(Host((1, 1), [(1, 1.0)]), Host)
24
25 def test_flux_capacitor(self):
26 """Test FluxCapacitor class."""
27 kid = Kid((1, 1), 1)
28 host = Host((1, 1), [(1, 1.0)])
29 self.assertIsInstance(FluxCapacitor({kid, host}), FluxCapacitor)
30
31
32if __name__ == '__main__':
33 unittest.main()
1import unittest
2
3import timeout_decorator
4
5from solution import *
6
7
8class CandyTest(unittest.TestCase):
9 """Tests for the Candy class."""
10
11 def test_basic_usage(self):
12 """Test basic usage of Candy class."""
13 candy = Candy(5, 0.5)
14 self.assertEqual(candy.get_mass(), 5)
15 self.assertEqual(candy.get_uranium_quantity(), 2.5)
16
17
18class PersonTest(unittest.TestCase):
19 """Tests for the Person class."""
20
21 def test_basic_usage(self):
22 """Test basic usage of Person class."""
23 person = Person((0, 0))
24 self.assertEqual(person.get_position(), (0, 0))
25 person.set_position((2, 2))
26 self.assertEqual(person.get_position(), (2, 2))
27
28
29class KidTest(unittest.TestCase):
30 """Tests for the Kid class."""
31
32 def test_inheritance(self):
33 """Ensure Kid inherits from Person."""
34 self.assertTrue(issubclass(Kid, Person))
35
36 def test_basic_usage(self):
37 """Test basic usage of Kid class."""
38 kid = Kid((0, 0), 666)
39 self.assertEqual(kid.get_position(), (0, 0))
40 self.assertEqual(kid.get_initiative(), 666)
41
42 def test_candies(self):
43 """Test basic usage of candies in the Kid class."""
44 kid = Kid((0, 0), 666)
45 self.assertFalse(kid.is_critical())
46 candy = Candy(20, 1)
47 kid.add_candy(candy)
48 self.assertFalse(kid.is_critical())
49 candy = Candy(0.1, 1)
50 kid.add_candy(candy)
51 self.assertTrue(kid.is_critical())
52
53
54class HostTest(unittest.TestCase):
55 """Tests for the Host class."""
56
57 def test_inheritance(self):
58 """Ensure Host inherits from Person."""
59 self.assertTrue(issubclass(Host, Person))
60
61 def test_basic_usage(self):
62 """Test basic usage of Host class."""
63 compare_fun = lambda candies: min(candies, key=lambda candy: candy.get_mass())
64 host = Host((0, 0), [(456, 1.0), (785, 0.5)])
65 candy = host.remove_candy(compare_fun)
66 self.assertEqual(candy.get_mass(), 456)
67 candy = host.remove_candy(compare_fun)
68 self.assertEqual(candy.get_mass(), 785)
69 candy = host.remove_candy(compare_fun)
70 self.assertEqual(candy, None)
71
72
73class FluxCapacitorTest(unittest.TestCase):
74 """Tests for the FluxCapacitor class."""
75
76 @timeout_decorator.timeout(0.2)
77 def test_empty(self):
78 """Test with empty collection."""
79 flux_capacitor = FluxCapacitor(set())
80 self.assertEqual(flux_capacitor.get_victim(), None)
81
82 @timeout_decorator.timeout(0.2)
83 def test_empty_hosts(self):
84 """Test with empty hosts."""
85 kid1 = Kid((-1, -5), 1)
86 kid2 = Kid((-6, 45), 2)
87 flux_capacitor = FluxCapacitor({kid1, kid2})
88 self.assertEqual(flux_capacitor.get_victim(), None)
89
90 @timeout_decorator.timeout(0.2)
91 def test_empty_kids(self):
92 """Test with empty kids."""
93 host1 = Host((1, 3), [(1, 0.1), (3, 0.3)])
94 host2 = Host((2, 4), [(2, 0.2), (4, 0.4)])
95 flux_capacitor = FluxCapacitor({host1, host2})
96 self.assertEqual(flux_capacitor.get_victim(), None)
97
98 @timeout_decorator.timeout(0.2)
99 def test_no_candies(self):
100 """Test with no candies."""
101 kid1 = Kid((1, 1), 1)
102 kid2 = Kid((7, 1), 2)
103 host1 = Host((2, 1), [])
104 host2 = Host((6, 1), [])
105 flux_capacitor = FluxCapacitor({kid1, kid2, host1, host2})
106 self.assertEqual(flux_capacitor.get_victim(), None)
107
108 @timeout_decorator.timeout(0.2)
109 def test_real_case(self):
110 """Test with real case."""
111 kid1 = Kid((100, 100), 1)
112 kid2 = Kid((200, 200), 2)
113 host1 = Host((101, 101), [(21, 1.0)])
114 host2 = Host((201, 201), [(21, 1.0)])
115 self.assertEqual(FluxCapacitor({kid1, kid2, host1, host2}).get_victim(), {kid1, kid2})
116
117
118if __name__ == '__main__':
119 unittest.main()
Георги Кунчев
05.11.2023 13:03Всяко дете си има собствена кошница.
|
Даниела Бадева
05.11.2023 11:26Възможно ли е няколко деца да споделят една кошница? Ако това е възможно, когато в кошницата се надвишат 20гр. уран умират всички деца или трябва броят на децата да се умножи по 20гр., за да стане количеството уран критично?
|
Георги Кунчев
04.11.2023 17:37Не е проблем да имаш и други методи.
|
Теодор Костадинов
04.11.2023 16:48Класовете могат ли да имат други публични методи, например class Kid -> def change_clothes()?
|
Георги Кунчев
04.11.2023 15:54За този въпрос отговорът е наличен в самата дефиниция на домашното, така че ще си позволя да не отговарям.
|
Добромир Пеев
04.11.2023 15:41Един домакин може ли да приема повече от 1 деца на всяка итерация ?
|
Георги Кунчев
04.11.2023 15:11Добавих примерни входове в условието на задачата.
|
Добромир Пеев
04.11.2023 14:42Може ли да приложите някакви примерни input-и ?
|
Георги Кунчев
04.11.2023 14:34За имплементацията на `remove_candy` - трябва да работи с произволна функция. Тук методът просто очаква функция, но тя може да е каквото и да било, стига да филтрира получената колекция така, че да връща точно един елемент от нея.
За имплементацията на `FluxCapacitor` вече дефинираме конкретен вид функция, която трябва да се приложи, и срещу която ще тестваме - най-голямата маса от лакомствата.
Разбирам, че дефинирането на това условие би било по-удачно в тялото на класа, а не като уговорка, но е вече написано, така че няма да пипам, за да не объркам някого. Така или иначе всички уговорки са по темата `FluxCapacitor`. Останалото е строго дефинирано.
|
Мартин Кузманов
04.11.2023 14:02Относно избора на конкретно сладко за дете от домакин , в "remove_candy" метода на класа "Host" се иска определящата функция да се приема външно без конкретика, докато в "Уговорки" се споменава точно коя да бъде мярката - " винаги най-тежкото по абсолютна маса сладко" . Следователно кое от двете трябва да бъде реализирано ?
|