from calculator import add
def describe_string_calculator():
  pass
def add(string):
  pass
from calculator import add
def describe_string_calculator():
  pass
  def returns_0_for_empty_string():
    assert add('') == 0
def add(string):
  pass
  return 0
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('1') == 1
def add(string):
  return 0
  return 1 if string else 0
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
def add(string):
  return 1 if string else 0
  return int(string) if string else 0
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
def add(string):
  if ',' in string:
    return 3
  return int(string) if string else 0
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
def add(string):
  if ',' in string:
    return 3
    return sum(map(int, string.split(',')))
  return int(string) if string else 0
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
def add(string):
  if ',' in string:
    return sum(map(int, string.split(',')))
  return int(string) if string else 0
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
def add(string):
  if '\n' in string;
    return 3
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
def add(string):
  if '\n' in string;
    return 3
  string = string.replace('\n', ',')
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
def add(string):
  if string.startswith('//'):
    return 3
  string = string.replace('\n', ',')
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
def add(string):
  if string.startswith('//'):
    return 3
    delimiter = string[2]
    string = string[4:]
    string = string.replace(delimiter, ',')
  string = string.replace('\n', ',')
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
def add(string):
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  if string.startswith('//'):
    delimiter = string[2]
    string = string[4:]
    string = string.replace(delimiter, ',')
  string = string.replace('\n', ',')
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
  return string
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
def add(string):
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter = string[2]
    string = string[4:]
    string = string.replace(delimiter, ',')
  string = string.replace('\n', ',')
  return string
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
      assert add('//abc\n1abc2abc3')
    def can_be_mixed():
      assert add('//;\n1,2;3\n4') == 10
def add(string):
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter = string[2]
    string = string[4:]
    delimiter_spec, string = string.split('\n', 1)
    delimiter = delimiter_spec[2:]
    string = string.replace(delimiter, ',')
  return string
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
      assert add('//abc\n1abc2abc3')
    def can_be_mixed():
      assert add('//;\n1,2;3\n4') == 10
    def rejects_negative_numbers():
      assert raises(ValueError, add, '-1')
def add(string):
  if string.startswith('-'):
    raise ValueError
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter_spec, string = string.split('\n', 1)
    delimiter = delimiter_spec[2:]
    string = string.replace(delimiter, ',')
  return string
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
      assert add('//abc\n1abc2abc3')
    def can_be_mixed():
      assert add('//;\n1,2;3\n4') == 10
    def rejects_negative_numbers():
      assert raises(ValueError, add, '-1')
      assert raises(ValueError, add, '1,-2')
def add(string):
  if string.startswith('-'):
  if '-' in string:
    raise ValueError
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter_spec, string = string.split('\n', 1)
    delimiter = delimiter_spec[2:]
    string = string.replace(delimiter, ',')
  return string
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
      assert add('//abc\n1abc2abc3')
    def can_be_mixed():
      assert add('//;\n1,2;3\n4') == 10
    def can_be_minus_signs():
      assert add('//-\n1-2') == 3
    def rejects_negative_numbers():
      assert raises(ValueError, add, '-1')
      assert raises(ValueError, add, '1,-2')
def add(string):
  if '-' in string:
    raise ValueError
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter_spec, string = string.split('\n', 1)
    delimiter = delimiter_spec[2:]
    string = string.replace(delimiter, ',')
  return string
def _add_numbers_in_string(string):
  return sum(map(int, string.split(',')))
  numbers = map(int, string.split(','))
  if any(number < 0 for number in numbers):
    raise ValueError
  return sum(numbers)
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
      assert add('//abc\n1abc2abc3')
    def can_be_mixed():
      assert add('//;\n1,2;3\n4') == 10
    def can_be_minus_signs():
      assert add('//-\n1-2') == 3
    def rejects_negative_numbers():
      assert raises(ValueError, add, '-1')
      assert raises(ValueError, add, '1,-2')
def add(string):
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter_spec, string = string.split('\n', 1)
    delimiter = delimiter_spec[2:]
    string = string.replace(delimiter, ',')
  return string
def _add_numbers_in_string(string):
  numbers = map(int, string.split(','))
  _validate_numbers(numbers)
  return sum(numbers)
def _validate_numbers(numbers):
  if any(number < 0 for number in numbers):
    raise ValueError
  return sum(numbers)
from calculator import add
def describe_string_calculator():
  def returns_0_for_empty_string():
    assert add('') == 0
  def returns_bare_numbers():
    assert add('0') == 0
    assert add('1') == 1
  def adds_numbers():
    assert add('1,2') == 3
    assert add('1,10') == 11
  def describe_delimiters():
    def can_be_newlines():
      assert add('1\n2') == 3
    def can_be_custom():
      assert add('//;\n1;2') == 3
      assert add('//+\n1+10') == 11
      assert add('//abc\n1abc2abc3')
    def can_be_mixed():
      assert add('//;\n1,2;3\n4') == 10
    def can_be_minus_signs():
      assert add('//-\n1-2') == 3
    def rejects_negative_numbers():
      assert raises(ValueError, add, '-1')
      assert raises(ValueError, add, '1,-2')
def add(string):
  string = _normalize_delimiters(string)
  if string:
    return _add_numbers_in_string(string)
  else:
    return 0
def _normalize_delimiters(string):
  string = _normalize_custom_delimiter(string)
  string = string.replace('\n', ',')
  return string
def _normalize_custom_delimiter(string):
  if string.startswith('//'):
    delimiter_spec, string = string.split('\n', 1)
    delimiter = delimiter_spec[2:]
    string = string.replace(delimiter, ',')
  return string
def _add_numbers_in_string(string):
  numbers = map(int, string.split(','))
  _validate_numbers(numbers)
  return sum(numbers)
def _validate_numbers(numbers):
  if any(number < 0 for number in numbers):
    raise ValueError