Example #1
0
class StringCalculatorsTest(unittest.TestCase):
    def setUp(self):
        self.calculator = StringCalculator()

    def test_stringcalculator_emptylist_shouldreturn0(self):
        self.assertEqual(0, self.calculator.add(""))

    def test_stringcalculator_listof1_shouldreturn1(self):
        self.assertEqual(1, self.calculator.add("1"))

    def test_stringcalculator_listofN_shouldreturnN(self):
        rand = randint(1, 1000)
        self.assertEqual(1, self.calculator.add("1"))
        self.assertEqual(7, self.calculator.add("7"))
        self.assertEqual(99, self.calculator.add("99"))
        self.assertEqual(0, self.calculator.add("0"))
        self.assertEqual(rand, self.calculator.add(str(rand)))

    def test_stringcalculator_listoftwo_shouldreturnsumoftwo(self):
        self.assertEqual(self.calculator.add("1,2"), 3)
        self.assertEqual(self.calculator.add("5,10"), 15)
        self.assertEqual(self.calculator.add("88,9"), 88 + 9)
        rand1 = randint(1, 1000)
        rand2 = randint(1, 1000)
        self.assertEqual(
            self.calculator.add('{0!s},{1!s}'.format(rand1, rand2)),
            rand1 + rand2)

    def test_stringcalculator_listendingwithcomma_shouldnotbreak(self):
        self.assertEqual(self.calculator.add("1,"), 1)

    def test_stringcalculator_liststartingwithcomma_shouldnotbreak(self):
        self.assertEqual(self.calculator.add(",8"), 8)

    def test_stringcalculator_listwithmultipleemptycommas_shouldnotbreak(self):
        self.assertEqual(self.calculator.add(",,,,8,,,,"), 8)
        self.assertEqual(self.calculator.add(",,3,,,,5,,"), 8)
        self.assertEqual(self.calculator.add("3,,,,,,5,,"), 8)
        self.assertEqual(self.calculator.add(",,3,,,,,,5"), 8)
        self.assertEqual(self.calculator.add("3,,,,,,,,5"), 8)

    def test_stringcalculator_multiplenumber_shouldreturnsum(self):
        self.assertEqual(self.calculator.add("1,2,3,4"), 10)
        self.assertEqual(self.calculator.add("2,2,2,2,2,2,2,2,2,2"), 20)

    def test_stringcalculator_newlinesarelikecommas_shouldreturnsum(self):
        self.assertEqual(self.calculator.add("1\n2,3"), 6)
        self.assertEqual(self.calculator.add("1\n,,"), 1)

    def test_stringcalculator_changedelimiterintheformat_shouldreturnsum(self):
        self.assertEqual(self.calculator.add("//;\n1;2"), 3)
        self.assertEqual(self.calculator.add("//kk\n1kk2"), 3)
        self.assertEqual(self.calculator.add("///\n1/2"), 3)

    def test_stringcalculator_passingnegativenumber_shouldthrowexception(self):
        with self.assertRaises(NegativeNotAllowedException) as ctx:
            self.calculator.add("1,-2")
        exc = ctx.exception
        self.assertEqual("negatives not allowed: -2", str(exc))

    def test_stringcalculator_numberbiggerthan1000_shouldbeignore(self):
        self.assertEqual(self.calculator.add("1001,1"), 1)
        self.assertEqual(self.calculator.add("1000,1"), 1001)
Example #2
0
def calculator() -> StringCalculator:
    return StringCalculator()
 def test_extract_delimiter_with_arbitrary_length_delimiter(self):
     self.assertEqual(
         StringCalculator().extract_delimiter("//$$$\n1$$$2$$$3"),
         ("1$$$2$$$3", "$$$"))
 def test_extract_delimiter_with_multiple_delimiter(self):
     self.assertEqual(StringCalculator().extract_delimiter("//$,@\n1$2@3"),
                      ("1$2@3", "$,@"))
 def test_delimiters_can_be_of_any_length(self):
     calc = StringCalculator()
     self.assertEqual(6, calc.add("//[***]\n1***2***3"))
 def test_handle_negative_numbers_with_negative_inputs(self):
     self.assertRaises(Exception,
                       StringCalculator().handle_negative_numbers,
                       [1, -4, 5, -7])
 def test_add_multiple_delimiters_bonus_three(self):
     self.assertEqual(StringCalculator().add("//$,@,*\n1$2@3*6"), 12)
 def test_negative_number_will_throw_an_exception(self):
     calc = StringCalculator()
     try:
         calc.add("-1")
     except Exception, m:
         self.assertEqual("negatives not allowed: -1", m.message)
 def test_add_large_numbers_bonus_one(self):
     self.assertEqual(StringCalculator().add("1000,2000,3"), 3)
 def test_add_delimiters_arbitrary_length_bonus_two(self):
     self.assertEqual(StringCalculator().add("//$$\n1$$20$$3000"), 21)
 def test_add_negative_inputs(self):
     self.assertRaises(Exception,
                       StringCalculator().handle_negative_numbers,
                       "1, -4, 5, -7")
 def test_add_custom_delimiter(self):
     self.assertEqual(StringCalculator().add("//%\n1%3%4"), 8)
 def test_add_comma_delimiter_with_new_line(self):
     self.assertEqual(StringCalculator().add("\n10, 3, 5"), 18)
 def test_call_add_with_an_arbitrary_number_of_numbers(self):
     calc = StringCalculator()
     sumIs55 = ",".join(map(lambda x: "%s" % x, range(1,11)))
     self.assertEqual(55, calc.add(sumIs55))
 def test_add_multiple_delimiters_arbitrary_length_bonus_four(self):
     self.assertEqual(StringCalculator().add("//$$,@\n1$$20@3000"), 21)
 def  test_add_allow_new_lines_between_numbers(self):
     calc = StringCalculator()
     self.assertEqual(6, calc.add("1\n2,3"))
 def test_add_list(self):
     self.assertEqual(StringCalculator().add_list([19, 2, 37]), 58)
 def test_call_add_with_empty_string(self):
     calc = StringCalculator()
     self.assertEqual(0, calc.add(""))
 def test_add_large_number(self):
     self.assertEqual(StringCalculator().add_list([19, 2, 1000]), 21)
 def test_multiple_delimiters_of_any_length(self):
     calc = StringCalculator()
     self.assertEqual(15, calc.add("//[**][%=]\n1**2%=3**4**5"))
 def test_add_empty_list(self):
     self.assertEqual(StringCalculator().add_list([]), 0)
 def test_extract_delimiter_with_custom_delimiter(self):
     self.assertEqual(StringCalculator().extract_delimiter("//$\n1,2,3"),
                      ("1,2,3", "$"))
 def test_single_input(self):
     self.assertEqual(StringCalculator().add_list([1]), 1)
 def test_add_empty_input(self):
     self.assertEqual(StringCalculator().add(""), 0)
 def test_parse_input_with_comma(self):
     self.assertEqual(StringCalculator().parse_input("1,56,78"),
                      [1, 56, 78])
 def test_extract_delimiter_multiple_delimiters_arbitrary_length(self):
     self.assertEqual(
         StringCalculator().extract_delimiter("//$$$,@@\n1$$$2@@3"),
         ("1$$$2@@3", "$$$,@@"))
 def test_parse_input_empty_string(self):
     self.assertEqual(StringCalculator().parse_input(""), [])
Example #28
0
 def setUp(self):
     self.calculator = StringCalculator()
 def test_parse_input_single_input(self):
     self.assertEqual(StringCalculator().parse_input("1"), [1])
 def test_call_add_with_two_numbers(self):
     calc = StringCalculator()
     self.assertEqual(3, calc.add("1,2"))
 def test_add_comma_delimiter(self):
     self.assertEqual(StringCalculator().add("1,2,3"), 6)
 def test_add_unknown_amount_of_numbers(self):
     calc = StringCalculator()
     theList = range(1, randint(10, 1000),1)
     shuffle(theList) 
     theStrLst = ",".join(map(lambda x: "%s" % x, theList)) 
     self.assertEqual(reduce(lambda x, y: x + y, theList), calc.add(theStrLst))
 def test_parse_input_single_input_with_newline_suffix(self):
     self.assertEqual(StringCalculator().parse_input("1\n"), [1])
 def test_add_supports_different_delimiters(self):
     calc = StringCalculator()
     self.assertEqual(3, calc.add("//;\n1;2"))
 def test_parse_input_with_newline_and_comma(self):
     self.assertEqual(StringCalculator().parse_input("1,\n2,3"), [1, 2, 3])
 def test_multiple_negatives_will_throw_an_exception_with_all_of_them(self):
     calc = StringCalculator()
     try:
         calc.add("-1,-3,4,-5")
     except Exception, m:
         self.assertEqual("negatives not allowed: -1,-3,-5", m.message)
 def test_parse_input_with_multiple_delimiters(self):
     self.assertEqual(StringCalculator().parse_input("1$2@3", "$,@"),
                      [1, 2, 3])
 def test_numbers_bigger_than_1000_should_be_ignored(self):
     calc = StringCalculator()
     self.assertEqual(2, calc.add("2,1001"))
 def test_parse_input_with_arbitrary_length_delimiter(self):
     self.assertEqual(StringCalculator().parse_input("1$$$2$$$3", "$$$"),
                      [1, 2, 3])
 def test_multiple_delimiters(self):
     calc = StringCalculator()
     self.assertEqual(6, calc.add("//[*][%]\n1*2%3"))
 def test_extract_delimiter_with_comma_delimiter(self):
     self.assertEqual(StringCalculator().extract_delimiter("//,\n1,2,3"),
                      ("1,2,3", ","))
 def test_call_add_with_one_number(self):
     calc = StringCalculator()
     self.assertEqual(1, calc.add("1"))
 def test_multiple_delimiters_of_any_length(self):
     calc = StringCalculator()
     self.assertEqual(15, calc.add("//[**][%=]\n1**2%=3**4**5"))