116 lines
7.3 KiB
Python
116 lines
7.3 KiB
Python
import unittest
|
|
import pytest
|
|
from locomotive_engineer import (get_list_of_wagons,
|
|
fix_list_of_wagons,
|
|
add_missing_stops,
|
|
extend_route_information,
|
|
fix_wagon_depot)
|
|
|
|
|
|
class LocomotiveEngineerTest(unittest.TestCase):
|
|
|
|
@pytest.mark.task(taskno=1)
|
|
def test_get_list_of_wagons(self):
|
|
input_data = [(1,5,2,7,4), (1,5), (1,), (1,9,3), (1,10,6,3,9,8,4,14,24,7)]
|
|
output_data = [[1,5,2,7,4], [1,5], [1], [1,9,3], [1,10,6,3,9,8,4,14,24,7]]
|
|
|
|
for variant, (input_data, expected) in enumerate(zip(input_data, output_data), start=1):
|
|
with self.subTest(f'variation #{variant}', input_data=input_data, expected=expected):
|
|
|
|
actual_result = get_list_of_wagons(*input_data)
|
|
error_msg= (f'Called get_list_of_wagons{input_data}. '
|
|
f'The function returned {actual_result}, but the '
|
|
f'tests expected: {expected} as the wagon list instead.')
|
|
|
|
self.assertEqual(actual_result, expected, msg=error_msg)
|
|
|
|
@pytest.mark.task(taskno=2)
|
|
def test_fix_list_of_wagons(self):
|
|
input_data = [([2, 5, 1, 7, 4, 12, 6, 3, 13], [3, 17, 6, 15]),
|
|
([3, 27, 1, 14, 10, 4, 12, 6, 23, 17, 13, 22, 28, 19], [8, 10, 5, 9, 36, 7, 20]),
|
|
([4, 2, 1], [8, 6, 15]),
|
|
([3, 14, 1, 25, 7, 19, 10], [8, 6, 4, 5, 9, 21, 2, 13])
|
|
]
|
|
output_data = [[1, 3, 17, 6, 15, 7, 4, 12, 6, 3, 13, 2, 5],
|
|
[1, 8, 10, 5, 9, 36, 7, 20, 14, 10, 4, 12, 6, 23, 17, 13, 22, 28, 19, 3, 27],
|
|
[1, 8, 6, 15, 4, 2],
|
|
[1, 8, 6, 4, 5, 9, 21, 2, 13, 25, 7, 19, 10, 3, 14]
|
|
]
|
|
for variant, (input_data, expected) in enumerate(zip(input_data, output_data), start=1):
|
|
with self.subTest(f'variation #{variant}', input_data=input_data, expected=expected):
|
|
|
|
actual_result = fix_list_of_wagons(input_data[0], input_data[1])
|
|
error_msg= (f'Called fix_list_of_wagons({input_data[0]}, {input_data[1]}). '
|
|
f'The function returned {actual_result}, but the '
|
|
f'tests expected: {expected} as the wagon list instead.')
|
|
|
|
self.assertEqual(actual_result, expected, msg=error_msg)
|
|
|
|
@pytest.mark.task(taskno=3)
|
|
def test_add_missing_stops(self):
|
|
input_data = (({'from': 'Berlin', 'to': 'Hamburg'}, {'stop_1': 'Lepzig', 'stop_2': 'Hannover', 'stop_3': 'Frankfurt'}),
|
|
({'from': 'Paris', 'to': 'London'}, {'stop_1': 'Lille'}),
|
|
({'from': 'New York', 'to': 'Philadelphia'},{}),
|
|
({'from': 'Gothenburg', 'to': 'Copenhagen'}, {'stop_1': 'Kungsbacka', 'stop_2': 'Varberg', 'stop_3': 'Halmstad', 'stop_4': 'Angelholm', 'stop_5': 'Lund', 'stop_6': 'Malmo'})
|
|
)
|
|
output_data = [{'from': 'Berlin', 'to': 'Hamburg', 'stops': ['Lepzig', 'Hannover', 'Frankfurt']},
|
|
{'from': 'Paris', 'to': 'London', 'stops': ['Lille']},
|
|
{'from': 'New York', 'to': 'Philadelphia', 'stops': []},
|
|
{'from': 'Gothenburg', 'to': 'Copenhagen', 'stops': ['Kungsbacka', 'Varberg', 'Halmstad', 'Angelholm', 'Lund', 'Malmo']}
|
|
]
|
|
for variant, (input_data, expected) in enumerate(zip(input_data, output_data), start=1):
|
|
with self.subTest(f'variation #{variant}', input_data=input_data, expected=expected):
|
|
|
|
actual_result = add_missing_stops(input_data[0], **input_data[1])
|
|
error_msg= (f'Called add_missing_stops({input_data[0]}, {input_data[1]}). '
|
|
f'The function returned {actual_result}, but the '
|
|
f'tests expected: {expected} as the set of stops.')
|
|
|
|
self.assertEqual(actual_result, expected, msg=error_msg)
|
|
|
|
@pytest.mark.task(taskno=4)
|
|
def test_extend_route_information(self):
|
|
input_data = [({'from': 'Berlin', 'to': 'Hamburg'}, {'timeOfArrival': '12:00', 'precipitation': '10', 'temperature': '5', 'caboose': 'yes'}),
|
|
({'from': 'Paris', 'to': 'London'}, {'timeOfArrival': '10:30', 'temperature': '20', 'length': '15'}),
|
|
({'from': 'Gothenburg', 'to': 'Copenhagen'}, {'precipitation': '1', 'timeOfArrival': '21:20', 'temperature': '-6'})]
|
|
output_data = [{'from': 'Berlin', 'to': 'Hamburg', 'timeOfArrival': '12:00', 'precipitation': '10', 'temperature': '5', 'caboose': 'yes'},
|
|
{'from': 'Paris', 'to': 'London', 'timeOfArrival': '10:30', 'temperature': '20', 'length': '15'},
|
|
{'from': 'Gothenburg', 'to': 'Copenhagen', 'precipitation': '1', 'timeOfArrival': '21:20', 'temperature': '-6'}
|
|
]
|
|
|
|
for variant, (input_data, expected) in enumerate(zip(input_data, output_data), start=1):
|
|
with self.subTest(f'variation #{variant}', input_data=input_data, expected=expected):
|
|
|
|
actual_result = extend_route_information(input_data[0], input_data[1])
|
|
error_msg= (f'Called extend_route_information({input_data[0]}, {input_data[1]}). '
|
|
f'The function returned {actual_result}, but the '
|
|
f'tests expected: {expected} as the route dictionary.')
|
|
|
|
self.assertEqual(actual_result, expected, msg=error_msg)
|
|
|
|
@pytest.mark.task(taskno=5)
|
|
def test_fix_wagon_depot(self):
|
|
input_data = (
|
|
[[(2, 'red'), (4, 'red'), (8, 'red')], [(5, 'blue'), (9, 'blue'), (13, 'blue')], [(3, 'orange'), (7, 'orange'), (11, 'orange')]],
|
|
[[(6, 'blue'), (10, 'blue'), (14, 'blue')], [(7, 'red'), (4, 'red'), (2, 'red')], [(3, 'orange'), (11, 'orange'), (15, 'orange')]],
|
|
[[(7, 'pink'), (4, 'pink'), (2, 'pink')], [(10, 'green'), (6, 'green'), (14, 'green')], [(9, 'yellow'), (5, 'yellow'), (13, 'yellow')]],
|
|
[[(3, 'purple'), (11, 'purple'), (15, 'purple')], [(20, 'black'), (16, 'black'), (12, 'black')], [(19, 'white'), (17, 'white'), (18, 'white')]]
|
|
)
|
|
|
|
output_data = (
|
|
[[(2, 'red'), (5, 'blue'), (3, 'orange')], [(4, 'red'), (9, 'blue'), (7, 'orange')], [(8, 'red'), (13, 'blue'), (11, 'orange')]],
|
|
[[(6, 'blue'), (7, 'red'), (3, 'orange')], [(10, 'blue'), (4, 'red'), (11, 'orange')], [(14, 'blue'), (2, 'red'), (15, 'orange')]],
|
|
[[(7, 'pink'), (10, 'green'), (9, 'yellow')], [(4, 'pink'), (6, 'green'), (5, 'yellow')], [(2, 'pink'), (14, 'green'), (13, 'yellow')]],
|
|
[[(3, 'purple'), (20, 'black'), (19, 'white')], [(11, 'purple'), (16, 'black'), (17, 'white')], [(15, 'purple'), (12, 'black'), (18, 'white')]]
|
|
)
|
|
|
|
for variant, (input_data, expected) in enumerate(zip(input_data, output_data), start=1):
|
|
with self.subTest(f'variation #{variant}', input_data=input_data, expected=expected):
|
|
|
|
actual_result = fix_wagon_depot(input_data)
|
|
error_msg= (f'Called fix_wagon_depot({input_data}). '
|
|
f'The function returned {actual_result}, but the '
|
|
f'tests expected: {expected} as the wagon depot list.')
|
|
|
|
self.assertEqual(actual_result, expected, msg=error_msg)
|