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()
Георги Кунчев
06.11.2023 08:41Не е нужно да проверяваш дали входа е валиден. Няма да тестваме с невалиден вход.
Можеш да си добавиш и допълнителни атрибути, да.
|
Веселина Велкова
06.11.2023 00:45Здравейте, имам няколко въпроса :) .Първият се отнася до __init__ метода на Candy класа. Необходимо ли е да проверяваме, че количеството уран е в правилния интервал (тоест от 0 до 1) и какво да е поведението в случай, че това не е така? Вторият ми въпрос е: можем ли да си добавяме атрибути, които са ни полезни към класовете, ако това няма да влияе по никакъв начин на параметрите, които се подават на конструктора?
|
Георги Кунчев
05.11.2023 19:59Надвишава е >20.
|
Михаил Цанков
05.11.2023 19:48Децата търпят полуразпад при >20 или >=20? (Спорим с един колега какво значи надвишава 🫠)
|
Георги Кунчев
05.11.2023 17:47Моя грешка. Преправям го. Мерси, че алармира.
|
Стелиан Витанов
05.11.2023 17:33В примерния вход на реда host = Host((3,4), [(1, 1.0), (2, 3.5)]) как имаме 3.5, като това е урановото съдържание (по дефиниция нали е число между 0 и 1).
|
Георги Кунчев
05.11.2023 15:52Да, това, което си пратил, изглежда като инстанция на `Kid` в `set`, т.е. изглежда правилно.
|
Александър Ангелов
05.11.2023 15:23под "get_victim - връща set от инстанции на Kid" визираме {<__main__.Kid object at 0x000002152D437680>} или не?
|
Георги Кунчев
05.11.2023 14:29Да.
|
Данаил Тодоров
05.11.2023 13:45След като някое дете отиде при някой хост, то детето си сменя координатите, нали? После гледаме следващия най-близък хост до новите координати на детето.
|