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 setUp(self): self.logger = Mock(spec_set=['write']) self.webservice = Mock(spec_set=['logging_failed']) self.calc = StringCalculator(self.logger, self.webservice) self.valid_input = '1,2' self.sum_of_valid_input = 3
def main(): if len(sys.argv) == 2: calculator = StringCalculator() decoded_input = decode(sys.argv[1], 'unicode_escape') result = calculator.add(decoded_input) print(result) else: print( "Usage: python main.py //[delimiter]\\n[delimiter separated numbers]" ) sys.exit(1)
def test_extract_delimiter_with_multiple_delimiter(self): self.assertEqual(StringCalculator().extract_delimiter("//$,@\n1$2@3"), ("1$2@3", "$,@"))
def test_extract_delimiter_multiple_delimiters_arbitrary_length(self): self.assertEqual( StringCalculator().extract_delimiter("//$$$,@@\n1$$$2@@3"), ("1$$$2@@3", "$$$,@@"))
def test_when_one_numbers_then_return_same_number(): assert StringCalculator().add("1") == 1
def test_add_empty_list(self): self.assertEqual(StringCalculator().add_list([]), 0)
def test_parse_input_with_comma(self): self.assertEqual(StringCalculator().parse_input("1,56,78"), [1, 56, 78])
def test_when_big_number_then_ignore_it(): assert StringCalculator().add("1001,2") == 2
def test_parse_input_with_multiple_delimiters(self): self.assertEqual(StringCalculator().parse_input("1$2@3", "$,@"), [1, 2, 3])
def calculator(): return StringCalculator()
def test_parse_input_single_input_with_newline_suffix(self): self.assertEqual(StringCalculator().parse_input("1\n"), [1])
def test_parse_input_with_newline_and_comma(self): self.assertEqual(StringCalculator().parse_input("1,\n2,3"), [1, 2, 3])
def test_add_comma_delimiter(self): self.assertEqual(StringCalculator().add("1,2,3"), 6)
def test_parse_input_single_input(self): self.assertEqual(StringCalculator().parse_input("1"), [1])
def test_parse_input_empty_string(self): self.assertEqual(StringCalculator().parse_input(""), [])
def setUp(self): self.calculator = StringCalculator()
def test_when_two_numbers_then_return_sum(): assert StringCalculator().add("1,2") == 3
def calculator() -> StringCalculator: return StringCalculator()
def test_when_different_delimiter_then_return_sum(): assert StringCalculator().add("//;\n1;2;3") == 6
def test_parse_input_with_arbitrary_length_delimiter(self): self.assertEqual(StringCalculator().parse_input("1$$$2$$$3", "$$$"), [1, 2, 3])
def test_single_input(self): self.assertEqual(StringCalculator().add_list([1]), 1)
def test_when_numbers_divided_by_new_line_then_return_sum(): assert StringCalculator().add("1\n2,3") == 6
def test_extract_delimiter_with_comma_delimiter(self): self.assertEqual(StringCalculator().extract_delimiter("//,\n1,2,3"), ("1,2,3", ","))
def test_when_negative_then_throw_not_allowed(): with pytest.raises(RuntimeError) as exception_info: StringCalculator().add("1,4,-1") assert 'negatives not allowed: -1' in str(exception_info.value)
def test_extract_delimiter_with_custom_delimiter(self): self.assertEqual(StringCalculator().extract_delimiter("//$\n1,2,3"), ("1,2,3", "$"))
def test_when_empty_string_return_zero(): assert StringCalculator().add("") == 0
def test_extract_delimiter_with_arbitrary_length_delimiter(self): self.assertEqual( StringCalculator().extract_delimiter("//$$$\n1$$$2$$$3"), ("1$$$2$$$3", "$$$"))
import pytest from string_calculator import StringCalculator """ Copyright: @2019 Author: Zweli Mthethwa """ calculator = StringCalculator() def test_add(): assert calculator.add("") == 0 assert calculator.add("1") == 1 assert calculator.add("0,1,3,2") == 6 assert calculator.add("1,2,3") == 6 assert calculator.add("//;\n1;2") == 3 assert calculator.add("//[***]\n1***2***3") == 6 assert calculator.add("//[*][%]\n1*2%3") == 6 # testing exceptions with pytest.raises(Exception) as e: assert calculator.add("-20,\n,3,2") assert str(e.value) == "negatives not allowed " + "-20" with pytest.raises(Exception) as e: assert calculator.add("-10,\n,-33,10, -79") assert str(e.value) == "negatives not allowed " + "-10,-33,-79" # testing for numbers bigger than 1000 assert calculator.add("2, 1001") == 2 assert calculator.add("//[(-_-')][%]\n1(-_-')2%3") == 6
def test_add_empty_input(self): self.assertEqual(StringCalculator().add(""), 0)