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()
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
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)
예제 #5
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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
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_()