Skip to content

Commit

Permalink
[FIX] ISO code for Belarusian language is be, not by. + coverage
Browse files Browse the repository at this point in the history
+ soma cases covered
+reformat
  • Loading branch information
SkiBY committed May 3, 2024
1 parent ed54468 commit 8f99231
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 116 deletions.
28 changes: 12 additions & 16 deletions num2words/lang_BE.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,7 @@ def to_ordinal(self, number, gender="m"):
try:
if len(outwords) > 1:
if outwords[-2] in self.ords_adjective:
outwords[-2] = self.ords_adjective.get(
outwords[-2], outwords[-2]
)
outwords[-2] = self.ords_adjective.get(outwords[-2], outwords[-2])
elif outwords[-2] == "дзесяць":
outwords[-2] = outwords[-2][:-1] + "і"
if len(outwords) == 3:
Expand All @@ -222,9 +220,7 @@ def to_ordinal(self, number, gender="m"):
lastword = self.ords[lastword]
except KeyError:
if lastword[:-3] in self.ords_adjective:
lastword = (
self.ords_adjective.get(lastword[:-3], lastword) + "соты"
)
lastword = self.ords_adjective.get(lastword[:-3], lastword) + "соты"
elif lastword[-5:] == "шэсць":
lastword = "шосты"
elif lastword[-7:] == "дзесяць":
Expand All @@ -242,10 +238,9 @@ def to_ordinal(self, number, gender="m"):
if lastword[-1] == "ч":
lastword = lastword + "ны"


elif lastword[-1] == "н" or lastword[-2] == "н":
lastword = lastword[: lastword.rfind("н") + 1] + "ны"
elif lastword[-3:] == 'наў':
elif lastword[-3:] == "наў":
lastword = lastword[: lastword.rfind("н") + 1] + "ны"
elif lastword[-1] == "д" or lastword[-2] == "д":
lastword = lastword[: lastword.rfind("д") + 1] + "ны"
Expand All @@ -259,9 +254,7 @@ def to_ordinal(self, number, gender="m"):
lastword = lastword[:-1] + "ая"

if gender == "n":
if lastword[-2:] in [
"ці", "ца"
]:
if lastword[-2:] in ["ці", "ца"]:
lastword = lastword[:-2] + "цяе"
else:
lastword = lastword[:-1] + "ае"
Expand All @@ -272,15 +265,18 @@ def to_ordinal(self, number, gender="m"):
del outwords[-1]

if len(outwords) > 2 and "тысяч" in outwords[-1]:
if 'сорак' in outwords[-3]:
outwords[-3] = outwords[-3].replace('сорак', 'сарака')
if "сорак" in outwords[-3]:
outwords[-3] = outwords[-3].replace("сорак", "сарака")
outwords[-3] = outwords[-3] + outwords[-2] + outwords[-1]
del outwords[-1]
del outwords[-1]

elif len(outwords) > 1 and (any(x[0] in outwords[-1] for x in THOUSANDS.values()) or "тысяч" in outwords[-1]):
if 'трыццаць' in outwords[-2]:
outwords[-2] = outwords[-2].replace('трыццаць', 'трыццаці')
elif len(outwords) > 1 and (
any(x[0] in outwords[-1] for x in THOUSANDS.values())
or "тысяч" in outwords[-1]
):
if "трыццаць" in outwords[-2]:
outwords[-2] = outwords[-2].replace("трыццаць", "трыццаці")
outwords[-2] = outwords[-2] + outwords[-1]
del outwords[-1]

Expand Down
135 changes: 35 additions & 100 deletions tests/test_be.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,7 @@ def test_cardinal(self):
self.assertEqual(num2words(5, lang="be"), "пяць")
self.assertEqual(num2words(15, lang="be"), "пятнаццаць")
self.assertEqual(num2words(154, lang="be"), "сто пяцьдзясят чатыры")
self.assertEqual(
num2words(1135, lang="be"), "адна тысяча сто трыццаць пяць"
)
self.assertEqual(num2words(1135, lang="be"), "адна тысяча сто трыццаць пяць")
self.assertEqual(
num2words(418531, lang="be"),
"чатырыста васямнаццаць тысяч пяцьсот трыццаць адзін",
Expand All @@ -80,9 +78,7 @@ def test_cardinal(self):
def test_floating_point(self):
self.assertEqual(num2words(5.2, lang="be"), "пяць коска два")
self.assertEqual(num2words(10.02, lang="be"), "дзесяць коска нуль два")
self.assertEqual(
num2words(15.007, lang="be"), "пятнаццаць коска нуль нуль сем"
)
self.assertEqual(num2words(15.007, lang="be"), "пятнаццаць коска нуль нуль сем")
self.assertEqual(
num2words(561.42, lang="be"),
"пяцьсот шэсцьдзясят адзін коска сорак два",
Expand All @@ -100,9 +96,7 @@ def test_to_ordinal(self):

self.assertEqual(num2words(13, lang="be", to="ordinal"), "трынаццаты")
self.assertEqual(num2words(20, lang="be", to="ordinal"), "дваццаты")
self.assertEqual(
num2words(23, lang="be", to="ordinal"), "дваццаць трэці"
)
self.assertEqual(num2words(23, lang="be", to="ordinal"), "дваццаць трэці")
self.assertEqual(
num2words(23, lang="be", to="ordinal", gender="f"),
"дваццаць трэцяя",
Expand All @@ -116,19 +110,14 @@ def test_to_ordinal(self):
"дваццаць трэцяе",
)
self.assertEqual(
num2words(
46, lang="be", to="ordinal", gender="m"),
num2words(46, lang="be", to="ordinal", gender="m"),
"сорак шосты",
)
self.assertEqual(num2words(40, lang="be", to="ordinal"), "саракавы")
self.assertEqual(
num2words(61, lang="be", to="ordinal"), "шэсцьдзясят першы"
)
self.assertEqual(num2words(61, lang="be", to="ordinal"), "шэсцьдзясят першы")
self.assertEqual(num2words(70, lang="be", to="ordinal"), "сямідзясяты")
self.assertEqual(num2words(100, lang="be", to="ordinal"), "соты")
self.assertEqual(
num2words(136, lang="be", to="ordinal"), "сто трыццаць шосты"
)
self.assertEqual(num2words(136, lang="be", to="ordinal"), "сто трыццаць шосты")
self.assertEqual(num2words(500, lang="be", to="ordinal"), "пяцісоты")

self.assertEqual(
Expand All @@ -149,30 +138,16 @@ def test_to_ordinal(self):
num2words(1000, lang="be", to="ordinal", gender="n"), "тысячнае"
)

self.assertEqual(
num2words(1001, lang="be", to="ordinal"), "тысяча першы"
)
self.assertEqual(
num2words(3000, lang="be", to="ordinal"), "трохтысячны"
)
self.assertEqual(
num2words(10000, lang="be", to="ordinal"), "дзесяцітысячны"
)
self.assertEqual(
num2words(30000, lang="be", to="ordinal"), "трыццацітысячны"
)
self.assertEqual(
num2words(42000, lang="be", to="ordinal"), "саракадвухтысячны"
)
self.assertEqual(
num2words(1000000, lang="be", to="ordinal"), "мільённы"
)
self.assertEqual(num2words(1001, lang="be", to="ordinal"), "тысяча першы")
self.assertEqual(num2words(3000, lang="be", to="ordinal"), "трохтысячны")
self.assertEqual(num2words(10000, lang="be", to="ordinal"), "дзесяцітысячны")
self.assertEqual(num2words(30000, lang="be", to="ordinal"), "трыццацітысячны")
self.assertEqual(num2words(42000, lang="be", to="ordinal"), "саракадвухтысячны")
self.assertEqual(num2words(1000000, lang="be", to="ordinal"), "мільённы")
self.assertEqual(
num2words(30000000, lang="be", to="ordinal"), "трыццацімільённы"
)
self.assertEqual(
num2words(1000000000, lang="be", to="ordinal"), "мільярдны"
)
self.assertEqual(num2words(1000000000, lang="be", to="ordinal"), "мільярдны")
self.assertEqual(
num2words(3000000000, lang="be", to="ordinal"), "трохмільярдны"
)
Expand All @@ -196,8 +171,7 @@ def test_to_currency(self):
)
self.assertEqual(
num2words(1234.56, lang="be", to="currency", currency="EUR"),
"адна тысяча дзвесце трыццаць чатыры еўра, "
"пяцьдзясят шэсць цэнтаў",
"адна тысяча дзвесце трыццаць чатыры еўра, " "пяцьдзясят шэсць цэнтаў",
)
self.assertEqual(
num2words(1234.56, lang="be", to="currency", currency="RUB"),
Expand All @@ -211,111 +185,76 @@ def test_to_currency(self):
)
self.assertEqual(
num2words(1234.56, lang="be", to="currency", currency="UAH"),
"адна тысяча дзвесце трыццаць чатыры грыўны, "
"пяцьдзясят шэсць капеек",
"адна тысяча дзвесце трыццаць чатыры грыўны, " "пяцьдзясят шэсць капеек",
)
self.assertEqual(
num2words(
10111, lang="be", to="currency", currency="EUR", separator=" і"
),
num2words(10111, lang="be", to="currency", currency="EUR", separator=" і"),
"сто адзін еўра і адзінаццаць цэнтаў",
)
self.assertEqual(
num2words(
10111, lang="be", to="currency", currency="RUB", separator=" і"
),
num2words(10111, lang="be", to="currency", currency="RUB", separator=" і"),
"сто адзін расійскі рубель і адзінаццаць капеек",
)
self.assertEqual(
num2words(
10111, lang="be", to="currency", currency="BYN", separator=" і"
),
num2words(10111, lang="be", to="currency", currency="BYN", separator=" і"),
"сто адзін беларускі рубель і адзінаццаць капеек",
)
self.assertEqual(
num2words(
10111, lang="be", to="currency", currency="UAH", separator=" і"
),
num2words(10111, lang="be", to="currency", currency="UAH", separator=" і"),
"сто адна грыўна і адзінаццаць капеек",
)
self.assertEqual(
num2words(
10121, lang="be", to="currency", currency="EUR", separator=" і"
),
num2words(10121, lang="be", to="currency", currency="EUR", separator=" і"),
"сто адзін еўра і дваццаць адзін цэнт",
)
self.assertEqual(
num2words(
10121, lang="be", to="currency", currency="RUB", separator=" і"
),
num2words(10121, lang="be", to="currency", currency="RUB", separator=" і"),
"сто адзін расійскі рубель і дваццаць адна капейка",
)
self.assertEqual(
num2words(
10121, lang="be", to="currency", currency="BYN", separator=" і"
),
num2words(10121, lang="be", to="currency", currency="BYN", separator=" і"),
"сто адзін беларускі рубель і дваццаць адна капейка",
)
self.assertEqual(
num2words(
10121, lang="be", to="currency", currency="UAH", separator=" і"
),
num2words(10121, lang="be", to="currency", currency="UAH", separator=" і"),
"сто адна грыўна і дваццаць адна капейка",
)
self.assertEqual(
num2words(
10122, lang="be", to="currency", currency="EUR", separator=" і"
),
num2words(10122, lang="be", to="currency", currency="EUR", separator=" і"),
"сто адзін еўра і дваццаць два цэнты",
)
self.assertEqual(
num2words(
10122, lang="be", to="currency", currency="RUB", separator=" і"
),
num2words(10122, lang="be", to="currency", currency="RUB", separator=" і"),
"сто адзін расійскі рубель і дваццаць дзве капейкі",
)
self.assertEqual(
num2words(
10122, lang="be", to="currency", currency="BYN", separator=" і"
),
num2words(10122, lang="be", to="currency", currency="BYN", separator=" і"),
"сто адзін беларускі рубель і дваццаць дзве капейкі",
)
self.assertEqual(
num2words(
10122, lang="be", to="currency", currency="UAH", separator=" і"
),
num2words(10122, lang="be", to="currency", currency="UAH", separator=" і"),
"сто адна грыўна і дваццаць дзве капейкі",
)
self.assertEqual(
num2words(
10122, lang="be", to="currency", currency="KZT", separator=" і"
),
num2words(10122, lang="be", to="currency", currency="KZT", separator=" і"),
"сто адзін тэнге і дваццаць два тыйіны",
)
self.assertEqual(
num2words(
-1251985, lang="be", to="currency", currency="EUR", cents=False
),
num2words(-1251985, lang="be", to="currency", currency="EUR", cents=False),
"мінус дванаццаць тысяч пяцьсот дзевятнаццаць еўра, 85 цэнтаў",
)
self.assertEqual(
num2words(
-1251985, lang="be", to="currency", currency="RUB", cents=False
),
num2words(-1251985, lang="be", to="currency", currency="RUB", cents=False),
"мінус дванаццаць тысяч пяцьсот дзевятнаццаць "
"расійскіх рублёў, 85 капеек",
)
self.assertEqual(
num2words(
-1251985, lang="be", to="currency", currency="BYN", cents=False
),
num2words(-1251985, lang="be", to="currency", currency="BYN", cents=False),
"мінус дванаццаць тысяч пяцьсот дзевятнаццаць "
"беларускіх рублёў, 85 капеек",
)
self.assertEqual(
num2words(
-1251985, lang="be", to="currency", currency="UAH", cents=False
),
num2words(-1251985, lang="be", to="currency", currency="UAH", cents=False),
"мінус дванаццаць тысяч пяцьсот дзевятнаццаць грыўнаў, 85 капеек",
)
self.assertEqual(
Expand Down Expand Up @@ -357,17 +296,13 @@ def test_to_currency(self):
)
self.assertEqual(
num2words("1231.56", lang="be", to="currency", currency="USD"),
"адна тысяча дзвесце трыццаць адзін долар, "
"пяцьдзясят шэсць цэнтаў",
"адна тысяча дзвесце трыццаць адзін долар, " "пяцьдзясят шэсць цэнтаў",
)
self.assertEqual(
num2words("1234.56", lang="be", to="currency", currency="USD"),
"адна тысяча дзвесце трыццаць чатыры долары, пяцьдзясят шэсць "
"цэнтаў",
"адна тысяча дзвесце трыццаць чатыры долары, пяцьдзясят шэсць " "цэнтаў",
)
self.assertEqual(
num2words(
10122, lang="be", to="currency", currency="UZS", separator=" і"
),
num2words(10122, lang="be", to="currency", currency="UZS", separator=" і"),
"сто адзін сум і дваццаць два тыйіны",
)

0 comments on commit 8f99231

Please sign in to comment.