#Bei Eingabe von Zahlen, die in der Liste definiert sind, sollen römische Zhalen zurückgegeben werden.
#Bei Eingabe von Zahlen, die nicht in der Liste definiert ist, soll ein "" ausgeben werden.

import unittest
from abc import ABC, abstractmethod

class IRomanNumber(ABC):
    @abstractmethod
    def convert(self, n:int) -> str:
        pass

class RomanNumber(IRomanNumber):
    def convert(self, n: int) -> str:
        roman_numerals = {
            1: "I",  2: "II", 3: "III", 
            4: "IV",  5: "V", 9: "IX", 
            21: "XXI",  50: "L", 100: "C",
            500: "D",  1000: "M" 
        }
        return roman_numerals.get(n, "")

class TestRomanConverter(unittest.TestCase):
    def setUp(self):
        self.converter = RomanNumber()

    def test_single_value(self):
        self.assertEqual(self.converter.convert(1), "I")
        self.assertEqual(self.converter.convert(2), "II")
        self.assertEqual(self.converter.convert(3), "III")
        self.assertEqual(self.converter.convert(4), "IV")
        self.assertEqual(self.converter.convert(5), "V")
        self.assertEqual(self.converter.convert(9), "IX")
        self.assertEqual(self.converter.convert(21), "XXI")
        self.assertEqual(self.converter.convert(50), "L")
        self.assertEqual(self.converter.convert(100), "C")
        self.assertEqual(self.converter.convert(500), "D")
        self.assertEqual(self.converter.convert(1000), "M")
    
    def test_inivalid_numbers(self):
        self.assertEqual(self.converter.convert(6), "")
        self.assertEqual(self.converter.convert(99), "")
        self.assertEqual(self.converter.convert(-1), "")
        




if __name__ == "__main__":
    unittest.main()