Skip to content
Snippets Groups Projects
Commit ecc1640e authored by linopino's avatar linopino
Browse files

StringCalculatorTestListBasic

+ Verbesserungen alter Code
parent 0efebe12
1 merge request!2StringCalculatorTestListBasic
No preview for this file type
No preview for this file type
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
class IRomanNumerals(ABC): class IRomanNumber(ABC):
@abstractmethod @abstractmethod
def to_roman(self, num): def convert(self, n: int) -> str:
pass pass
\ No newline at end of file
from src.interfaces import IRomanNumerals from src.interfaces import IRomanNumber
class RomanNumber(IRomanNumber):
class RomanNumerals(IRomanNumerals): def convert(self, n: int) -> str:
def to_roman(self, num): if not isinstance(n, int):
if not isinstance(num, int):
raise ValueError("Eingabe muss eine ganze Zahl sein") raise ValueError("Eingabe muss eine ganze Zahl sein")
if num <= 0 or num >= 4000: if n <= 0 or n >= 4000:
raise ValueError("Zahl muss zwischen 1 und 3999 liegen") raise ValueError("Zahl muss zwischen 1 und 3999 liegen")
val = [ val = [
...@@ -17,7 +16,7 @@ class RomanNumerals(IRomanNumerals): ...@@ -17,7 +16,7 @@ class RomanNumerals(IRomanNumerals):
result = "" result = ""
for (value, numeral) in val: for (value, numeral) in val:
while num >= value: while n >= value:
result += numeral result += numeral
num -= value n -= value
return result return result
\ No newline at end of file
No preview for this file type
...@@ -42,67 +42,59 @@ ...@@ -42,67 +42,59 @@
# Bei Eingabe der Zahl 3.14 erhalte ich eine Fehlermeldung # Bei Eingabe der Zahl 3.14 erhalte ich eine Fehlermeldung
import unittest import unittest
from src.romannumerals import RomanNumerals from src.romannumerals import RomanNumber
from src.interfaces import IRomanNumber
class TestRomanNumber(unittest.TestCase):
class TestRomanNumerals(unittest.TestCase):
def setUp(self): def setUp(self):
self.converter = RomanNumerals() self.converter: IRomanNumber = RomanNumber()
def test_to_roman_basic(self):
self.assertEqual(self.converter.to_roman(1), "I")
self.assertEqual(self.converter.to_roman(5), "V")
self.assertEqual(self.converter.to_roman(10), "X")
self.assertEqual(self.converter.to_roman(50), "L")
self.assertEqual(self.converter.to_roman(100), "C")
self.assertEqual(self.converter.to_roman(500), "D")
self.assertEqual(self.converter.to_roman(1000), "M")
def test_to_roman_subtraction(self): def test_convert_subtraction(self):
self.assertEqual(self.converter.to_roman(4), "IV") self.assertEqual(self.converter.convert(4), "IV")
self.assertEqual(self.converter.to_roman(9), "IX") self.assertEqual(self.converter.convert(9), "IX")
self.assertEqual(self.converter.to_roman(40), "XL") self.assertEqual(self.converter.convert(40), "XL")
self.assertEqual(self.converter.to_roman(90), "XC") self.assertEqual(self.converter.convert(90), "XC")
self.assertEqual(self.converter.to_roman(400), "CD") self.assertEqual(self.converter.convert(400), "CD")
self.assertEqual(self.converter.to_roman(900), "CM") self.assertEqual(self.converter.convert(900), "CM")
def test_to_roman_addition(self): def test_convert_addition(self):
self.assertEqual(self.converter.to_roman(2), "II") self.assertEqual(self.converter.convert(2), "II")
self.assertEqual(self.converter.to_roman(3), "III") self.assertEqual(self.converter.convert(3), "III")
self.assertEqual(self.converter.to_roman(6), "VI") self.assertEqual(self.converter.convert(6), "VI")
self.assertEqual(self.converter.to_roman(8), "VIII") self.assertEqual(self.converter.convert(8), "VIII")
self.assertEqual(self.converter.to_roman(30), "XXX") self.assertEqual(self.converter.convert(30), "XXX")
self.assertEqual(self.converter.to_roman(80), "LXXX") self.assertEqual(self.converter.convert(80), "LXXX")
def test_to_roman_mixed(self): def test_convert_mixed(self):
self.assertEqual(self.converter.to_roman(14), "XIV") self.assertEqual(self.converter.convert(14), "XIV")
self.assertEqual(self.converter.to_roman(19), "XIX") self.assertEqual(self.converter.convert(19), "XIX")
self.assertEqual(self.converter.to_roman(29), "XXIX") self.assertEqual(self.converter.convert(29), "XXIX")
self.assertEqual(self.converter.to_roman(44), "XLIV") self.assertEqual(self.converter.convert(44), "XLIV")
self.assertEqual(self.converter.to_roman(99), "XCIX") self.assertEqual(self.converter.convert(99), "XCIX")
self.assertEqual(self.converter.to_roman(444), "CDXLIV") self.assertEqual(self.converter.convert(444), "CDXLIV")
self.assertEqual(self.converter.to_roman(999), "CMXCIX") self.assertEqual(self.converter.convert(999), "CMXCIX")
def test_to_roman_large_numbers(self): def test_convert_large_numbers(self):
self.assertEqual(self.converter.to_roman(1001), "MI") self.assertEqual(self.converter.convert(1001), "MI")
self.assertEqual(self.converter.to_roman(1987), "MCMLXXXVII") self.assertEqual(self.converter.convert(1987), "MCMLXXXVII")
self.assertEqual(self.converter.to_roman(2023), "MMXXIII") self.assertEqual(self.converter.convert(2023), "MMXXIII")
self.assertEqual(self.converter.to_roman(3999), "MMMCMXCIX") self.assertEqual(self.converter.convert(3999), "MMMCMXCIX")
def test_to_roman_invalid(self): def test_convert_invalid(self):
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
self.converter.to_roman(0) self.converter.convert(0)
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
self.converter.to_roman(-1) self.converter.convert(-1)
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
self.converter.to_roman(4000) self.converter.convert(4000)
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
self.converter.to_roman("ABC") self.converter.convert("ABC")
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
self.converter.to_roman(None) self.converter.convert(None)
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
self.converter.to_roman(3.14) self.converter.convert(3.14)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
\ No newline at end of file
#python -m unittest discover -s tests
\ No newline at end of file
# Basis
# Bei Eingabe keiner Zahl soll eine 0 ausgegeben werden
# Bei Eingabe einer 1 soll 1 ausgegeben werden
# Bei Eingabe einer 3,4 soll 7 ausgegeben werden
# Bei Eingabe einer 10,20 soll 30 ausgegeben werden
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment