def test_pouring_water_in_stack_when_capcity_is_lower_and_overflows(
         self, size, k_liter_water):
     "Test pouring water"
     triangular_stack = TriangularStack(size=size,
                                        unit_capacity=self.unit_capacity)
     with self.assertRaises(OverflowException):
         triangular_stack.pour(k_liter_water)
 def test_query_water_in_stack(self, size, k_liters_to_be_poured,
                               row_column_tests):
     "Test querying for water in glass (row, column)"
     triangular_stack = TriangularStack(size=size,
                                        unit_capacity=self.unit_capacity)
     triangular_stack.pour(k_liters_to_be_poured)
     for (row, column, expected_value) in row_column_tests:
         self.assertEqual(triangular_stack.get_water_at(row, column),
                          expected_value)
def solveWaterOverFlowFor(jth_glass: int, ith_row: int,
                          k_liter: float) -> float:
    """
    Function to solve water
    """
    LOGGER.debug("j => {}, i => {}, k => {}".format(jth_glass, ith_row,
                                                    k_liter))
    unit_capacity = 0.250
    triangular_stack = TriangularStack(size=ith_row + 1,
                                       unit_capacity=unit_capacity)
    triangular_stack.pour(k_liter)
    try:
        answer = triangular_stack.get_water_at(ith_row, jth_glass)
    except WaterNotFilledException as wnfe:
        # we dont care about it, just return 0
        LOGGER.info(str(wnfe.message))
        return 0
 def setUp(self):
     """
     setup of default stack
     """
     self.rows = 7
     self.unit_capacity = 0.250
     self.defaultStack = TriangularStack(size=self.rows,
                                         unit_capacity=self.unit_capacity)
    def test_query_water_in_stack_insufficent_water_poured(
            self, size, k_liters_to_be_poured, row_column_tests):
        "Test querying for water in glass (row, column)"
        triangular_stack = TriangularStack(size=size,
                                           unit_capacity=self.unit_capacity)
        triangular_stack.pour(k_liters_to_be_poured)
        for (row, column) in row_column_tests:

            with self.assertRaises(WaterNotFilledException):
                triangular_stack.get_water_at(row, column)
 def test_query_water_in_stack_with_wrong_index(self, size,
                                                k_liters_to_be_poured,
                                                row_column_tests):
     "Test querying for water in glass (row, column)"
     triangular_stack = TriangularStack(size=size,
                                        unit_capacity=self.unit_capacity)
     triangular_stack.pour(k_liters_to_be_poured)
     for (row, column, expected_error) in row_column_tests:
         try:
             triangular_stack.get_water_at(row, column)
         except ValueError as value_error:
             self.assertEqual(str(value_error), str(expected_error))
 def test_maximun_capacity_of_stack(self, size, capacity, max_size):
     "Test calculation of maximum size to throw sane errors"
     triangular_stack = TriangularStack(size=size, unit_capacity=capacity)
     self.assertEqual(triangular_stack.maximum_water_limit, max_size)
 def test_pouring_water_in_stack_when_capacity_is_higher(
         self, size, k_liter_water):
     "Test pouring water"
     triangular_stack = TriangularStack(size=size,
                                        unit_capacity=self.unit_capacity)
     self.assertTrue(triangular_stack.pour(k_liter_water))