def test_remove_complex_number_at_index(self): """ Test controller remove_complex_number_at_index. """ controllers.remove_complex_number_at_index(self.list_track, 0) self.assertEqual(track.peek(self.list_track), [2 + 2.5j, 3 + 0j]) controllers.remove_complex_number_at_index(self.list_track, 1) self.assertEqual(track.peek(self.list_track), [2 + 2.5j]) with self.assertRaises(IndexError): controllers.remove_complex_number_at_index(self.list_track, 1)
def test_append_complex_number_to_list(self): """ Test controller append_complex_number_to_list. """ controllers.append_complex_number_to_list(self.list_track, 1 + 0j) self.assertEqual(track.peek(self.list_track), [1 + 1j, 2 + 2.5j, 3 + 0j, 1 + 0j]) controllers.append_complex_number_to_list(self.list_track, 2 + 0j) self.assertEqual(track.peek(self.list_track), [1 + 1j, 2 + 2.5j, 3 + 0j, 1 + 0j, 2 + 0j])
def test_undo_list_track(self): """ Test controller undo_list_track. """ controllers.undo_list_track(self.list_track) self.assertEqual(track.peek(self.list_track), [1 + 1j, 2 + 2.5j, 3 + 0j]) track.push(self.list_track, [3 + 0j]) controllers.undo_list_track(self.list_track) self.assertEqual(track.peek(self.list_track), [1 + 1j, 2 + 2.5j, 3 + 0j])
def test_replace_complex_number(self): """ Test controller replace_complex_number. """ controllers.replace_complex_number(self.list_track, 1 + 1j, 2 + 2.5j) self.assertEqual(track.peek(self.list_track), [2 + 2.5j, 2 + 2.5j, 3 + 0j]) controllers.replace_complex_number(self.list_track, 2 + 2.5j, 3 + 0j) self.assertEqual(track.peek(self.list_track), [3 + 0j, 3 + 0j, 3 + 0j]) controllers.replace_complex_number(self.list_track, 1 + 0j, 2 + 0j) self.assertEqual(track.peek(self.list_track), [3 + 0j, 3 + 0j, 3 + 0j])
def test_filter_by_absolute_relation(self): """ Test controller filter_by_absolute_relation. """ controllers.filter_by_absolute_relation(self.list_track, 3, 0) self.assertEqual(track.peek(self.list_track), [1 + 1j, 2 + 2.5j]) track.push(self.list_track, [1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.filter_by_absolute_relation(self.list_track, 2, -999) self.assertEqual(track.peek(self.list_track), [2 + 2.5j, 3 + 0j]) track.push(self.list_track, [1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.filter_by_absolute_relation(self.list_track, 3, 12321) self.assertEqual(track.peek(self.list_track), [1 + 1j, 3 + 0j])
def test_remove_complex_numbers_sequence(self): """ Test controller remove_complex_numbers_sequence. """ controllers.remove_complex_numbers_sequence(self.list_track, 1, 2) self.assertEqual(track.peek(self.list_track), [1 + 1j]) track.push(self.list_track, [1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.remove_complex_numbers_sequence(self.list_track, -2, -1) self.assertEqual(track.peek(self.list_track), [1 + 1j]) track.push(self.list_track, [1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.remove_complex_numbers_sequence(self.list_track, -10, 1) self.assertEqual(track.peek(self.list_track), [3 + 0j])
def filter_real_part_not_prime(list_track): list_snapshot = track.peek(list_track) list_snapshot = [ item for item in list_snapshot if not utils.is_prime(item.real) ] track.push(list_track, list_snapshot)
def filter_by_absolute_relation(list_track, target, relation): list_snapshot = track.peek(list_track) list_snapshot = [ item for item in list_snapshot if not utils.satisfies_relation(abs(item), target, relation) ] track.push(list_track, list_snapshot)
def print_complex_numbers_product(list_track, index_left, index_right): list_snapshot = track.peek(list_track) list_sequence = list_snapshot[index_left:index_right + 1 or None] list_product = None for result in accumulate(list_sequence, mul): list_product = result return list_product
def test_insert_complex_number_at_index(self): """ Test controller insert_complex_number_at_index. """ controllers.insert_complex_number_at_index(self.list_track, 1 + 0j, 0) self.assertEqual(track.peek(self.list_track), [1 + 0j, 1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.insert_complex_number_at_index(self.list_track, 2 + 0j, 0) self.assertEqual(track.peek(self.list_track), [2 + 0j, 1 + 0j, 1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.insert_complex_number_at_index(self.list_track, 3 + 0j, -100) self.assertEqual(track.peek(self.list_track), [3 + 0j, 2 + 0j, 1 + 0j, 1 + 1j, 2 + 2.5j, 3 + 0j]) controllers.insert_complex_number_at_index(self.list_track, 4 + 0j, 100) self.assertEqual( track.peek(self.list_track), [3 + 0j, 2 + 0j, 1 + 0j, 1 + 1j, 2 + 2.5j, 3 + 0j, 4 + 0j])
def start_ui(): """ > Start the main program loop. """ options = { # Feature group 1 "Append complex number at the end of the list": drivers.append_complex_number_to_list, "Insert complex number at index": drivers.insert_complex_number_at_index, # Feature group 2 "Remove complex number at index": drivers.remove_complex_number_at_index, "Remove complex numbers between indexes(inclusive)": drivers.remove_complex_numbers_sequence, "Replace complex number with another complex number": drivers.replace_complex_number, # Feature group 3 "Print imaginary part of complex numbers between indexes(inclusive)": drivers.print_imaginary_parts, "Print all complex numbers with absolute value less than 10": drivers.print_absolute_less_than_ten, "Print all complex numbers with absolute value equal with 10": drivers.print_absolute_equal_with_ten, # Feature group 4 "Print sum of complex numbers between indexes(inclusive)": drivers.print_complex_numbers_sum, "Print product of complex numbers between indexes(inclusive)": drivers.print_complex_numbers_product, "Print all complex numbers in descending order by imaginary part": drivers.print_reverse_sorted_by_j, # Feature group 5 "Remove all complex numbers where the real part is prime": drivers.filter_real_part_not_prime, "Remove all complex numbers by relation with given absolute value": drivers.filter_by_absolute_relation, # Feature group 6 "Undo last operation": drivers.undo_list_track, # Quit "Quit": exit_ui } options_texts = list(options.keys()) options_handlers = list(options.values()) complex_number_list = track.create(2, []) while True: print("NUMBERS: ", track.peek(complex_number_list)) try: option_index = console.input_option(options_texts) option_handler = options_handlers[option_index] option_handler(console, complex_number_list) except (EOFError, IndexError, ValueError): print("INVALID INPUT.") print()
def remove_complex_number_at_index(list_track, index): list_snapshot = track.peek(list_track) list_snapshot.pop(index) track.push(list_track, list_snapshot)
def remove_complex_numbers_sequence(list_track, index_left, index_right): list_snapshot = track.peek(list_track) list_snapshot[index_left:index_right + 1 or None] = [] track.push(list_track, list_snapshot)
def replace_complex_number(list_track, old_item, new_item): list_snapshot = track.peek(list_track) list_snapshot = [new_item if item == old_item else item for item in list_snapshot] track.push(list_track, list_snapshot)
def print_imaginary_parts(list_track, index_left, index_right): list_snapshot = track.peek(list_track) list_sequence = list_snapshot[index_left:index_right + 1 or None] imaginary_parts = [item.imag for item in list_sequence] return imaginary_parts
def test_filter_real_part_not_prime(self): """ Test controller filter_real_part_not_prime. """ controllers.filter_real_part_not_prime(self.list_track) self.assertEqual(track.peek(self.list_track), [1 + 1j])
def print_absolute_less_than_ten(list_track): list_snapshot = track.peek(list_track) list_sequence = [item for item in list_snapshot if abs(item) < 10] return list_sequence
def append_complex_number_to_list(list_track, item): list_snapshot = track.peek(list_track) list_snapshot.append(item) track.push(list_track, list_snapshot)
def insert_complex_number_at_index(list_track, item, index): list_snapshot = track.peek(list_track) list_snapshot.insert(index, item) track.push(list_track, list_snapshot)
def print_reverse_sorted_by_j(list_track): list_snapshot = track.peek(list_track) sorted_list = sorted(list_snapshot, key=lambda item: item.imag, reverse=True) return sorted_list
def print_absolute_equal_with_ten(list_track): list_snapshot = track.peek(list_track) list_sequence = [item for item in list_snapshot if abs(item) == 10] return list_sequence