From 551079f10a45f4f11d04865f1398f406a031bc62 Mon Sep 17 00:00:00 2001
From: DaniRafeh28 <daniel.rafeh@student.reutlingen-university.de>
Date: Tue, 1 Apr 2025 19:00:58 +0200
Subject: [PATCH] 8 errors detected

---
 Project_tests/converter.py                    |   7 +-
 .../__pycache__/romannumerals.cpython-312.pyc | Bin 0 -> 7981 bytes
 .../other/PikkemaatLasse/calculator.py        |  29 ------
 Project_tests/other/PikkemaatLasse/counter.py |  48 ---------
 .../other/PikkemaatLasse/interfaces.py        |   6 --
 .../other/PikkemaatLasse/romannumerals.py     |  93 ++++++++++++++++++
 Project_tests/report.md                       |   2 +-
 7 files changed, 98 insertions(+), 87 deletions(-)
 create mode 100644 Project_tests/other/PikkemaatLasse/__pycache__/romannumerals.cpython-312.pyc
 delete mode 100644 Project_tests/other/PikkemaatLasse/calculator.py
 delete mode 100644 Project_tests/other/PikkemaatLasse/counter.py
 delete mode 100644 Project_tests/other/PikkemaatLasse/interfaces.py
 create mode 100644 Project_tests/other/PikkemaatLasse/romannumerals.py

diff --git a/Project_tests/converter.py b/Project_tests/converter.py
index 73d592b..3156cb9 100644
--- a/Project_tests/converter.py
+++ b/Project_tests/converter.py
@@ -29,7 +29,8 @@ import unittest
 from abc import ABC, abstractmethod
 #from other.AliciMuhamed.Test_Converter_Römische_Zahlen import ConverterMomo as MomoCalc
 #from other.BerishaAlma.test2converter import RomanNumber as AlmaCalc
-from other.GotsisWasilios.TDD_Converter import WasiliRomanNumber as WasiliCalc
+#from other.GotsisWasilios.TDD_Converter import WasiliRomanNumber as WasiliCalc
+from other.PikkemaatLasse.romannumerals import RomanNumerals as LasseCalc
 
 class IConverter(ABC):
     @abstractmethod
@@ -72,8 +73,8 @@ class DanisConverter(IConverter):
 
 class TestConverter(unittest.TestCase):
     def setUp(self):
-        self.c = WasiliCalc()
-        self.c.convert = self.c.convert_int_to_str
+        self.c = LasseCalc()
+        self.c.convert = self.c.to_roman
        
 
     def test_convertOne(self):
diff --git a/Project_tests/other/PikkemaatLasse/__pycache__/romannumerals.cpython-312.pyc b/Project_tests/other/PikkemaatLasse/__pycache__/romannumerals.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..53d750b163127a48512ff3cb2717a6f4cd76370b
GIT binary patch
literal 7981
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
QzZ-t%4LGggUvT>JUm%l{KL7v#

literal 0
HcmV?d00001

diff --git a/Project_tests/other/PikkemaatLasse/calculator.py b/Project_tests/other/PikkemaatLasse/calculator.py
deleted file mode 100644
index e799761..0000000
--- a/Project_tests/other/PikkemaatLasse/calculator.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#Test1: Addition 2 positiver Zaheln (2+5) erwartetes Ergebnis 8
-#Test2: Addition negativer und positiver Zahl (-1+1) erwartetes Ergebnis 0
-#Test3: Addition (0+0), erwartetes Ergebnis 0
-#Test4: Addition von 2 Dezimalzahlen (2,5+3,5), erwartetes Ergebnis 6
-
-from abc import ABC, abstractmethod
-class ICalculator(ABC):
-    @abstractmethod
-    def add(self, a: float, b: float) -> float:
-        pass
-
-class Calculator(ICalculator):
-    def add(self, a: float, b: float) -> float:
-        return a + b
-
-class TestCalculator:
-    def __init__(self, calculator: ICalculator):
-        self.calculator = calculator
-    def test_add(self):
-        assert self.calculator.add(2,3) == 5, "Fehler falls nicht 5"
-        assert self.calculator.add(-1,1) == 0, "Fegler falls nich 0"
-        assert self.calculator.add(0,0) == 0, "Fehler falls nicht 0"
-        assert self.calculator.add(2.5,3.5) == 6, "Fehler falls nicht 5"
-        print("Test erfolgreich")
-
-if __name__ == "__main__":
-    calc = Calculator()
-    tester = TestCalculator(calc)
-    tester.test_add()
diff --git a/Project_tests/other/PikkemaatLasse/counter.py b/Project_tests/other/PikkemaatLasse/counter.py
deleted file mode 100644
index 00cf9c0..0000000
--- a/Project_tests/other/PikkemaatLasse/counter.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#Bei Eingabe des Strings "Decker" liefert die Funktion 3
-#Bei Eingabe eines leeren Stings soll 0 augegeben werden
-#Bei Eingabe des Strings "Hallo" ohne E und D soll 0 ausgegeben werden
-#Bei Eingabe von dem String "Der Esel" soll Groß-Kleinschreibung (Caseinsensitive) gezählt werden. das Ergebnis ist 4
-#Bei Eingabe des Buchstaben D oder E soll 1 ausgegeben werden
-
-from abc import ABC,abstractmethod
-import unittest
-
-class ICounter (ABC):
-    @abstractmethod
-    def count_ED(self,s):
-        pass
-
-class Counter (ICounter):
-    def count_ED(self, s):
-        s=s.upper()
-        return s.count("D")+s.count("E")
-        
-class TestCounter (unittest.TestCase):
-    def setUp(self):
-        self.c=Counter()
-    def test_count_ED_regular (self):
-        res=self.c.count_ED ("Decker")
-        self.assertEqual(res,3)
-    def test_count_ED_empty (self):
-        res=self.c.count_ED ("")
-        self.assertEqual(res,0)
-    def test_count_ED_wo (self):
-        '''Testet einen String ohne E und D'''
-        res=self.c.count_ED ("Hallo")
-        self.assertEqual(res,0)
-    def test_count_ED_case_insensitive (self):
-        '''Testet verschiedene Groß- und Kleinschreibungen'''
-        res=self.c.count_ED ("Der Esel")
-        self.assertEqual(res,4) 
-    def test_count_ED_single_letetr (self):
-        '''Testet Eingaben mit nur einem Buchstaben'''
-        res=self.c.count_ED ('D')
-        self.assertEqual(res,1) 
-        res=self.c.count_ED ('E')
-        self.assertEqual (res,1)
-        res=self.c.count_ED ('d')
-        self.assertEqual(res,1) 
-        res=self.c.count_ED ('e')
-        self.assertEqual (res,1)
-if __name__=="__main__":
-    unittest.main()
\ No newline at end of file
diff --git a/Project_tests/other/PikkemaatLasse/interfaces.py b/Project_tests/other/PikkemaatLasse/interfaces.py
deleted file mode 100644
index fc64573..0000000
--- a/Project_tests/other/PikkemaatLasse/interfaces.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from abc import ABC, abstractmethod
-
-class IRomanNumerals(ABC):
-    @abstractmethod
-    def to_roman(self, num):
-        pass
\ No newline at end of file
diff --git a/Project_tests/other/PikkemaatLasse/romannumerals.py b/Project_tests/other/PikkemaatLasse/romannumerals.py
new file mode 100644
index 0000000..a1cc589
--- /dev/null
+++ b/Project_tests/other/PikkemaatLasse/romannumerals.py
@@ -0,0 +1,93 @@
+from abc import ABC, abstractmethod
+
+class IRomanNumerals(ABC):
+    @abstractmethod
+    def to_roman(self, num):
+        pass
+
+class RomanNumerals(IRomanNumerals):
+    def to_roman(self, num):
+        if not isinstance(num, int):
+            raise ValueError("Eingabe muss eine ganze Zahl sein")
+        if num <= 0 or num >= 4000:
+            raise ValueError("Zahl muss zwischen 1 und 3999 liegen")
+
+        val = [
+            (1000, "M"), (900, "CM"), (500, "D"), (400, "CD"),
+            (100, "C"), (90, "XC"), (50, "L"), (40, "XL"),
+            (10, "X"), (9, "IX"), (5, "V"), (4, "IV"),
+            (1, "I")
+        ]
+
+        result = ""
+        for (value, numeral) in val:
+            while num >= value:
+                result += numeral
+                num -= value
+        return result
+
+
+import unittest
+
+
+class TestRomanNumerals(unittest.TestCase):
+    def setUp(self):
+        self.converter = RomanNumerals()
+
+    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):
+        self.assertEqual(self.converter.to_roman(4), "IV")
+        self.assertEqual(self.converter.to_roman(9), "IX")
+        self.assertEqual(self.converter.to_roman(40), "XL")
+        self.assertEqual(self.converter.to_roman(90), "XC")
+        self.assertEqual(self.converter.to_roman(400), "CD")
+        self.assertEqual(self.converter.to_roman(900), "CM")
+
+    def test_to_roman_addition(self):
+        self.assertEqual(self.converter.to_roman(2), "II")
+        self.assertEqual(self.converter.to_roman(3), "III")
+        self.assertEqual(self.converter.to_roman(6), "VI")
+        self.assertEqual(self.converter.to_roman(8), "VIII")
+        self.assertEqual(self.converter.to_roman(30), "XXX")
+        self.assertEqual(self.converter.to_roman(80), "LXXX")
+
+    def test_to_roman_mixed(self):
+        self.assertEqual(self.converter.to_roman(14), "XIV")
+        self.assertEqual(self.converter.to_roman(19), "XIX")
+        self.assertEqual(self.converter.to_roman(29), "XXIX")
+        self.assertEqual(self.converter.to_roman(44), "XLIV")
+        self.assertEqual(self.converter.to_roman(99), "XCIX")
+        self.assertEqual(self.converter.to_roman(444), "CDXLIV")
+        self.assertEqual(self.converter.to_roman(999), "CMXCIX")
+
+    def test_to_roman_large_numbers(self):
+        self.assertEqual(self.converter.to_roman(1001), "MI")
+        self.assertEqual(self.converter.to_roman(1987), "MCMLXXXVII")
+        self.assertEqual(self.converter.to_roman(2023), "MMXXIII")
+        self.assertEqual(self.converter.to_roman(3999), "MMMCMXCIX")
+
+    def test_to_roman_invalid(self):
+        with self.assertRaises(ValueError):
+            self.converter.to_roman(0)
+        with self.assertRaises(ValueError):
+            self.converter.to_roman(-1)
+        with self.assertRaises(ValueError):
+            self.converter.to_roman(4000)
+        with self.assertRaises(ValueError):
+            self.converter.to_roman("ABC")
+        with self.assertRaises(ValueError):
+            self.converter.to_roman(None)
+        with self.assertRaises(ValueError):
+            self.converter.to_roman(3.14)
+
+
+if __name__ == "__main__":
+    unittest.main()
\ No newline at end of file
diff --git a/Project_tests/report.md b/Project_tests/report.md
index 99fe936..6f81ce1 100644
--- a/Project_tests/report.md
+++ b/Project_tests/report.md
@@ -3,7 +3,7 @@
 | AliciMuhamed   | yes (4)         | test_convertFloat test_convertNegative test_convertZero                              |
 | BerishaAlma    | no              | all except one (test_convertThree)                                                   |
 | GotsisWasilios | no              | 23/26 failed (test_convertTwenty, test_convertSixty, test_convertSeventy successful) |
-|                |                 |                                                                                      |
+| PikkemaatLasse | yes (8)         | none                                                                                 |
 |                |                 |                                                                                      |
 |                |                 |                                                                                      |
 |                |                 |                                                                                      |
\ No newline at end of file
-- 
GitLab