def test_can_pop_more_then_one_from_stack(self):
     stack = ModifiedStack()
     stack.push([20, 7, 56, 23])
     stack.pop(3)
     self.assertEqual(stack.look_top(), 20)
 def test_push_in_empty_stack(self):
     stack = ModifiedStack()
     stack.push(2)
     self.assertEqual(stack.look_top(), 2)
 def test_can_push_one_elem_in_stack(self):
     stack = ModifiedStack([2])
     stack.push(3)
     self.assertEqual(stack.look_top(), 3)
 def test_look_top_return_none_if_stack_empty(self):
     stack = ModifiedStack()
     self.assertEqual(stack.look_top(), None)
 def test_can_look_top(self):
     stack = ModifiedStack([34, 467, 567, 768])
     self.assertEqual(stack.look_top(), 768)
 def test_can_create_stack_from_list(self):
     stack = ModifiedStack([1, 2, 6, 7, 8])
     self.assertEqual(stack.look_top(), 8)
class ModifiedStackViewModel(object):
    def __init__(self, logger=RealLogger()):
        self.logger = logger
        self.modified_stack = ModifiedStack()
        self.pushed_element = None
        self.push_state = None
        self.pop_size = None
        self.top = None
        self.min = None
        self.input_array = None
        self.error_message = None
        self.logger.log('Stack object was successfully created')

    def size(self):
        return self.modified_stack.size()

    def push(self):
        self.logger.log('Push button was clicked')
        self.clear_error_message()
        try:
            if self.push_state == 'One':
                self.modified_stack.push(to_int(self.pushed_element))
                self.logger.log(
                    'Operation push successfully completed with single element. Push: {}'
                    .format(to_int(self.pushed_element)))
            elif self.push_state == 'N':
                self.modified_stack.push(
                    [to_int(element) for element in self.input_array])
                self.logger.log(
                    'Operation push successfully completed with array. Push: {}'
                    .format(self.input_array))
        except Exception as e:
            self.set_error_message(str(e))
            self.logger.log('Push error: {}'.format(self.get_error_message()))

    def pop(self):
        self.logger.log('Pop button was clicked')
        self.clear_error_message()
        try:
            self.modified_stack.pop(to_int(self.pop_size))
            self.logger.log(
                'Operation pop successfully completed. Pop: {}'.format(
                    to_int(self.pop_size)))
        except Exception as e:
            self.set_error_message(str(e))
            self.logger.log('Pop error: {}'.format(self.get_error_message()))

    def get_top(self):
        self.logger.log('Getting top button was clicked')
        self.clear_error_message()
        if self.modified_stack.is_empty():
            self.set_error_message('Stack is empty')
            self.logger.log('Result from getting top element: {}'.format(
                self.get_error_message()))
        else:
            self.top = self.modified_stack.look_top()
            self.logger.log('Result from getting top element: {}'.format(
                self.top))

    def get_min(self):
        self.logger.log('Getting min button was clicked')
        self.clear_error_message()
        if self.modified_stack.is_empty():
            self.set_error_message('Stack is empty')
            self.logger.log('Result from getting min element: {}'.format(
                self.get_error_message()))
        else:
            self.min = self.modified_stack.find_min()
            self.logger.log('Result from getting min element: {}'.format(
                self.min))

    def set_pop_size(self, size):
        self.pop_size = size
        self.logger.log('Setting pop size to: {}'.format(self.pop_size))

    def set_push_state(self, state):
        self.push_state = state
        self.logger.log('Setting push state to: {}'.format(self.push_state))

    def set_pushed_element(self, value):
        self.pushed_element = value
        self.logger.log('Setting pushed element to: {}'.format(
            self.pushed_element))

    def set_input_array(self, input_array):
        self.input_array = input_array
        self.logger.log('Setting input array to: {}'.format(self.input_array))

    def set_error_message(self, message):
        self.error_message = message
        self.logger.log('Setting error message to: {}'.format(
            self.error_message))

    def get_error_message(self):
        return self.error_message

    def clear_error_message(self):
        self.error_message = None
        self.logger.log('Error message was successfully cleared')
Пример #8
0
class ModifiedStackViewModel(object):
    def __init__(self):
        self.modified_stack = ModifiedStack()
        self.pushed_element = None
        self.push_state = None
        self.pop_size = None
        self.top = None
        self.min = None
        self.input_array = None
        self.error_message = None

    def size(self):
        return self.modified_stack.size()

    def push(self):
        self.clear_error_message()
        try:
            if self.push_state == 'One':
                self.modified_stack.push(to_int(self.pushed_element))
            elif self.push_state == 'N':
                self.modified_stack.push(
                    [to_int(element) for element in self.input_array])
        except Exception as e:
            self.set_error_message(str(e))

    def pop(self):
        self.clear_error_message()
        try:
            self.modified_stack.pop(to_int(self.pop_size))
        except Exception as e:
            self.set_error_message(str(e))

    def get_top(self):
        self.clear_error_message()
        if self.modified_stack.is_empty():
            self.set_error_message('Stack is empty')
        else:
            self.top = self.modified_stack.look_top()

    def get_min(self):
        self.clear_error_message()
        if self.modified_stack.is_empty():
            self.set_error_message('Stack is empty')
        else:
            self.min = self.modified_stack.find_min()

    def set_pop_size(self, size):
        self.pop_size = size

    def set_push_state(self, state):
        self.push_state = state

    def set_pushed_element(self, value):
        self.pushed_element = value

    def set_input_array(self, input_array):
        self.input_array = input_array

    def set_error_message(self, message):
        self.error_message = message

    def get_error_message(self):
        return self.error_message

    def clear_error_message(self):
        self.error_message = None