class ReversePolishNotation: """ Reverse Polish Notation class It just a wrapper for Queue_. To add some interests for this class we add iterations using magic methods """ def __init__(self): self._expression_queue = Queue_() def put(self, element: Element): """ Put the element to the RPN :param element: element to put """ self._expression_queue.put(element) def __iter__(self): return self def __next__(self) -> Element: """ Get next element in Reverse Polish Notation :return: next element from rpn if exists. Raise StopIteration Error if does not exist """ if self._expression_queue.empty(): raise StopIteration return self._expression_queue.get()
def test_call_put_of_fully_queue_raised_error(self): """ Create a Queue with maximum size=0. Test that call of put function raises Assertion error """ queue = Queue_(max_size=1) queue.put(0) self.assertRaises(AssertionError, queue.put, 1)
def test_new_queue_with_max_number_is_empty(self): """ Create an empty Queue with specified maximal size. Test that its size is 0. """ queue = Queue_(max_size=10) self.assertTrue(queue.empty()) self.assertEqual(queue.size(), 0)
def test_new_queue_is_empty(self): """ Create an empty Queue. Test that its size is 0. """ queue = Queue_() self.assertTrue(queue.empty()) self.assertEqual(queue.size(), 0)
def test_call_full_of_not_full_queue(self): """ Create a Queue with 0 elements. Test that call of full-function returns False """ data = () queue = Queue_(data) self.assertFalse(queue.full()) self.assertEqual(queue.capacity(), None)
def test_call_get_of_empty_queue_raised_error(self): """ Create an empty Queue. Test that call of get function raises Assertion error """ queue = Queue_() self.assertRaises(AssertionError, queue.get)
def test_new_queue_from_tuple_with_max_size(self): """ Create an empty Queue from the given data and put elements to queue_. """ data = (1, None, [], Queue_()) queue = Queue_(data=data, max_size=len(data) - 2) self.assertFalse(queue.empty()) self.assertEqual(queue.size(), len(data) - 2) self.assertTrue(queue.full()) for value in data[:-2]: test_value = queue.get() self.assertEqual(test_value, value) self.assertTrue(queue.empty()) self.assertEqual(queue.size(), 0)
def test_new_queue_from_tuple(self): """ Create a Queue from an iterable object. Check that the size of queue_ equals to the size of the given tuple. """ data = (1, None, [], Queue_()) queue = Queue_(data=data) self.assertFalse(queue.empty()) self.assertEqual(queue.size(), len(data)) self.assertFalse(queue.full()) for value in data: test_value = queue.get() self.assertEqual(test_value, value) self.assertTrue(queue.empty()) self.assertEqual(queue.size(), 0)
def __init__(self): self._expression_queue = Queue_()