From 47a3cac323bf9290a28ec1f28b5c5fb9dcf1318c Mon Sep 17 00:00:00 2001 From: Willem Van Onsem Date: Mon, 21 Sep 2020 18:53:47 +0200 Subject: [PATCH 01/76] Fix zeroth in Dutch to nulde fixing #325 --- num2words/lang_NL.py | 5 ++++- tests/test_nl.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/num2words/lang_NL.py b/num2words/lang_NL.py index ac4d405..8725714 100644 --- a/num2words/lang_NL.py +++ b/num2words/lang_NL.py @@ -76,7 +76,10 @@ class Num2Word_NL(Num2Word_EU): "zes", "vijf", "vier", "drie", "twee", "één", "nul"] - self.ords = {"één": "eerst", + # Wiktionary says it is "nulde", not "nulte" or "nule" + # https://en.wiktionary.org/wiki/nulde + self.ords = {"nul": "nuld", + "één": "eerst", "twee": "tweed", "drie": "derd", "vier": "vierd", diff --git a/tests/test_nl.py b/tests/test_nl.py index e72b43b..95c690f 100644 --- a/tests/test_nl.py +++ b/tests/test_nl.py @@ -36,6 +36,7 @@ class Num2WordsNLTest(TestCase): ) def test_ordinal_at_crucial_number(self): + self.assertEqual(num2words(0, ordinal=True, lang='nl'), "nulde") self.assertEqual(num2words(100, ordinal=True, lang='nl'), "honderdste") self.assertEqual( num2words(1000, ordinal=True, lang='nl'), "duizendste" From 9b62e333d769acfb634b251187648309f3597269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20Eski?= Date: Tue, 12 Oct 2021 10:09:49 +0300 Subject: [PATCH 02/76] [ADD] to ordinal number for Turkish --- num2words/lang_TR.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 7fba871..59393c2 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -806,6 +806,10 @@ class Num2Word_TR(Num2Word_Base): return wrd + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)[-4:]) + def to_splitnum(self, val): float_digits = str(int(val * 10 ** self.precision)) if not int(val) == 0: From fe0d1850592f208dd1b3c369bffcccd98f31b53e Mon Sep 17 00:00:00 2001 From: Cris140 <60457418+Cris140@users.noreply.github.com> Date: Fri, 29 Oct 2021 22:42:10 -0400 Subject: [PATCH 03/76] Update lang_PT_BR.py To fix a problem with the thousands when the hundreds are exacts. --- num2words/lang_PT_BR.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/num2words/lang_PT_BR.py b/num2words/lang_PT_BR.py index 80eb5e7..2c50f03 100644 --- a/num2words/lang_PT_BR.py +++ b/num2words/lang_PT_BR.py @@ -53,6 +53,8 @@ class Num2Word_PT_BR(lang_PT.Num2Word_PT): ctext = "cento" if nnum < cnum: + if cnum < 100: + return ("%s e %s" % (ctext, ntext), cnum + nnum) return ("%s e %s" % (ctext, ntext), cnum + nnum) elif (not nnum % 1000000) and cnum > 1: @@ -75,7 +77,7 @@ class Num2Word_PT_BR(lang_PT.Num2Word_PT): for ext in ( 'mil', 'milhão', 'milhões', 'bilhão', 'bilhões', 'trilhão', 'trilhões', 'quatrilhão', 'quatrilhões'): - if re.match('.*{} e \\w*ento'.format(ext), result): + if re.match('.*{} e \\w*entos? (?=.*e)'.format(ext), result): result = result.replace( '{} e'.format(ext), '{},'.format(ext), 1 ) From 8633c0baf2cc5c38cc9caa2c06c1660f15edd824 Mon Sep 17 00:00:00 2001 From: ismail eski Date: Wed, 17 Aug 2022 18:09:07 +0300 Subject: [PATCH 04/76] [FIX] /num2words/lang_TR.py:812:1: W293 blank line contains whitespace --- num2words/lang_TR.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 59393c2..ee1d6d4 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -809,7 +809,7 @@ class Num2Word_TR(Num2Word_Base): def to_ordinal_num(self, value): self.verify_ordinal(value) return "%s%s" % (value, self.to_ordinal(value)[-4:]) - + def to_splitnum(self, val): float_digits = str(int(val * 10 ** self.precision)) if not int(val) == 0: From 3187fa2e055234c8e23cea3eac7405dc9888164a Mon Sep 17 00:00:00 2001 From: ismail eski Date: Wed, 17 Aug 2022 19:11:37 +0300 Subject: [PATCH 05/76] [TEST] ordinal_num test --- tests/test_tr.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_tr.py b/tests/test_tr.py index 8425262..2da7001 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -183,6 +183,10 @@ class Num2WordsTRTest(TestCase): "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgüliki"}, {"test": 101101011010.2, "to": "cardinal", "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"} + {"test": 10, "to": "ordinal_num", "expected": u"10uncu"} + {"test": 1, "to": "ordinal_num","expected": u"1inci"} + {"test": 3, "to": "ordinal_num","expected": u"3üncü"} + {"test": 6, "to": "ordinal_num","expected": u"6ıncı"} ] for casedata in testcases: From c19ea1314598af17f02dcfacc9fe6b262fd282e6 Mon Sep 17 00:00:00 2001 From: ismail eski Date: Wed, 17 Aug 2022 19:56:11 +0300 Subject: [PATCH 06/76] [TEST] ordinal_num test --- tests/test_tr.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_tr.py b/tests/test_tr.py index 2da7001..d01ba06 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -182,10 +182,10 @@ class Num2WordsTRTest(TestCase): {"test": 101101011010.02, "to": "cardinal", "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgüliki"}, {"test": 101101011010.2, "to": "cardinal", - "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"} - {"test": 10, "to": "ordinal_num", "expected": u"10uncu"} - {"test": 1, "to": "ordinal_num","expected": u"1inci"} - {"test": 3, "to": "ordinal_num","expected": u"3üncü"} + "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"}, + {"test": 10, "to": "ordinal_num", "expected": u"10uncu"}, + {"test": 1, "to": "ordinal_num","expected": u"1inci"}, + {"test": 3, "to": "ordinal_num","expected": u"3üncü"}, {"test": 6, "to": "ordinal_num","expected": u"6ıncı"} ] From a05f6e5c1d626ddff7f9de0d196ab28915980ffc Mon Sep 17 00:00:00 2001 From: ismail eski Date: Thu, 18 Aug 2022 18:48:10 +0300 Subject: [PATCH 07/76] [FIX] E231 missing whitespace after ',' --- tests/test_tr.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_tr.py b/tests/test_tr.py index d01ba06..e1aefba 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -184,9 +184,9 @@ class Num2WordsTRTest(TestCase): {"test": 101101011010.2, "to": "cardinal", "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"}, {"test": 10, "to": "ordinal_num", "expected": u"10uncu"}, - {"test": 1, "to": "ordinal_num","expected": u"1inci"}, - {"test": 3, "to": "ordinal_num","expected": u"3üncü"}, - {"test": 6, "to": "ordinal_num","expected": u"6ıncı"} + {"test": 1, "to": "ordinal_num", "expected": u"1inci"}, + {"test": 3, "to": "ordinal_num", "expected": u"3üncü"}, + {"test": 6, "to": "ordinal_num", "expected": u"6ıncı"} ] for casedata in testcases: From 8db643a918370eec0ef3e2c16b78de42fa9a4999 Mon Sep 17 00:00:00 2001 From: Israel Teixeira Date: Tue, 22 Dec 2020 07:43:10 -0300 Subject: [PATCH 08/76] Remove dupplicated line in lang_PT_BR Remove an unnecessary condition, since the very same action follows it. --- num2words/lang_PT_BR.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/num2words/lang_PT_BR.py b/num2words/lang_PT_BR.py index 4c73cac..80eb5e7 100644 --- a/num2words/lang_PT_BR.py +++ b/num2words/lang_PT_BR.py @@ -53,8 +53,6 @@ class Num2Word_PT_BR(lang_PT.Num2Word_PT): ctext = "cento" if nnum < cnum: - if cnum < 100: - return ("%s e %s" % (ctext, ntext), cnum + nnum) return ("%s e %s" % (ctext, ntext), cnum + nnum) elif (not nnum % 1000000) and cnum > 1: From 9c64d486120fbdc57ceb40f7aca4c61eed40f218 Mon Sep 17 00:00:00 2001 From: Maroua Romdhane Date: Thu, 21 Jan 2021 14:24:38 -0500 Subject: [PATCH 09/76] [UPD] Readme file --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index db64202..c84b491 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -num2words - Convert numbers to words in multiple languages +num2words library - Convert numbers to words in multiple languages ========================================================== .. image:: https://img.shields.io/pypi/v/num2words.svg From cb24e20785b0d069fe95421ea398303e2af5b634 Mon Sep 17 00:00:00 2001 From: Israel Teixeira Date: Mon, 25 Jan 2021 22:28:49 -0300 Subject: [PATCH 10/76] This error is already raised in line 223 --- num2words/lang_PT.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/num2words/lang_PT.py b/num2words/lang_PT.py index 6f45972..ddfa771 100644 --- a/num2words/lang_PT.py +++ b/num2words/lang_PT.py @@ -227,12 +227,7 @@ class Num2Word_PT(Num2Word_EU): self.negword = backup_negword # transforms "milhões euros" em "milhões de euros" - try: - cr1, _ = self.CURRENCY_FORMS[currency] - except KeyError: - raise NotImplementedError( - 'Currency code "%s" not implemented for "%s"' % - (currency, self.__class__.__name__)) + cr1, _ = self.CURRENCY_FORMS[currency] for ext in ( 'milhão', 'milhões', 'bilião', From 1b35e7fe58e55b0222abc970d1fe7c1cf62975a2 Mon Sep 17 00:00:00 2001 From: Peter Nordstrom Date: Mon, 7 Dec 2020 14:24:51 +0100 Subject: [PATCH 11/76] added swedish language including test cases --- num2words/__init__.py | 3 +- num2words/lang_SV.py | 113 ++++++++++++++++++++++++++++++++++++++++++ tests/test_sv.py | 46 +++++++++++++++++ 3 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 num2words/lang_SV.py create mode 100644 tests/test_sv.py diff --git a/num2words/__init__.py b/num2words/__init__.py index 931d28a..6d40774 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -22,7 +22,7 @@ from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, - lang_RU, lang_SL, lang_SR, lang_TE, lang_TH, lang_TR, lang_UK, + lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, lang_TR, lang_UK, lang_VI) CONVERTER_CLASSES = { @@ -52,6 +52,7 @@ CONVERTER_CLASSES = { 'ru': lang_RU.Num2Word_RU(), 'sl': lang_SL.Num2Word_SL(), 'sr': lang_SR.Num2Word_SR(), + 'sv': lang_SV.Num2Word_SV(), 'no': lang_NO.Num2Word_NO(), 'dk': lang_DK.Num2Word_DK(), 'pt': lang_PT.Num2Word_PT(), diff --git a/num2words/lang_SV.py b/num2words/lang_SV.py new file mode 100644 index 0000000..215c196 --- /dev/null +++ b/num2words/lang_SV.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import division, print_function, unicode_literals + +from . import lang_EU + + +class Num2Word_SV(lang_EU.Num2Word_EU): + GIGA_SUFFIX = "iljarder" + MEGA_SUFFIX = "iljoner" + + def set_high_numwords(self, high): + cap = 3 + 6 * len(high) + + for word, n in zip(high, range(cap, 3, -6)): + if self.GIGA_SUFFIX: + self.cards[10 ** n] = word + self.GIGA_SUFFIX + + if self.MEGA_SUFFIX: + self.cards[10 ** (n - 3)] = word + self.MEGA_SUFFIX + + def setup(self): + super(Num2Word_SV, self).setup() + + self.negword = "minus " + self.pointword = "komma" + self.exclude_title = ["och", "komma", "minus"] + + self.mid_numwords = [(1000, "tusen"), (100, "hundra"), + (90, "nittio"), (80, "\åttio"), (70, "sjuttio"), + (60, "sextio"), (50, "femtio"), (40, "förtio"), + (30, "trettio")] + self.low_numwords = ["tjugo", "nitton", "arton", "sjutton", + "sexton", "femton", "fjorton", "tretton", + "tolv", "elva", "tio", "nio", "åtta", + "sju", "sex", "fem", "fyra", "tre", "två", + "ett", "noll"] + self.ords = {"noll": "nollte", + "ett": "första", + "två": "andra", + "tre": "tredje", + "fyra": "fjärde", + "fem": "femte", + "sex": "sjätte", + "sju": "sjunde", + "åtta": "åttonde", + "nio": "nionde", + "tio": "tionde", + "elva": "elfte", + "tolv": "tolfte", + "tjugo": "tjugonde"} + + def merge(self, lpair, rpair): + ltext, lnum = lpair + rtext, rnum = rpair + if lnum == 1 and rnum < 100: + return (rtext, rnum) + elif 100 > lnum > rnum: + return ("%s%s" % (ltext, rtext), lnum + rnum) + elif lnum >= 100 > rnum: + return ("%s%s" % (ltext, rtext), lnum + rnum) + elif rnum >= 1000000 and lnum == 1: + return ("%s %s" % ('en', rtext[:-2]), lnum + rnum) + elif rnum >= 1000000 and lnum > 1: + return ("%s %s" % (ltext, rtext), lnum + rnum) + elif rnum > lnum: + return ("%s%s" % (ltext, rtext), lnum * rnum) + return ("%s %s" % (ltext, rtext), lnum + rnum) + + def to_ordinal(self, value): + self.verify_ordinal(value) + outwords = self.to_cardinal(value).split(" ") + lastwords = outwords[-1].split("-") + lastword = lastwords[-1].lower() + try: + lastword = self.ords[lastword] + except KeyError: + if lastword[-2:] == "tio": + lastword = lastword + "onde" + else: + lastword += "de" + lastwords[-1] = self.title(lastword) + outwords[-1] = "".join(lastwords) + return " ".join(outwords) + + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)[-2:]) + + def to_year(self, val, longval=True): + if not (val // 100) % 10: + return self.to_cardinal(val) + return self.to_splitnum(val, hightxt="hundra", jointxt="och", + longval=longval) + + def to_currency(self, val, longval=True): + return self.to_splitnum(val, hightxt="krone/r", lowtxt="öre/n", + jointxt="och", longval=longval, cents=True) diff --git a/tests/test_sv.py b/tests/test_sv.py new file mode 100644 index 0000000..fa3d48d --- /dev/null +++ b/tests/test_sv.py @@ -0,0 +1,46 @@ +# coding: utf-8 +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import unicode_literals + +from unittest import TestCase + +from num2words import num2words + + +class Num2WordsSVTest(TestCase): + def test_ordinal(self): + pass + self.assertEqual(num2words(1, to="ordinal", lang="sv"), "första") + self.assertEqual(num2words(5, to="ordinal", lang="sv"), "femte") + self.assertEqual(num2words(32, to="ordinal", lang="sv"), "trettioandra") + + + def test_cardinal(self): + self.assertEqual(num2words(0, to="cardinal", lang="sv"), "noll") + self.assertEqual(num2words(1, to="cardinal", lang="sv"), "ett") + self.assertEqual(num2words(2, to="cardinal", lang="sv"), "två") + self.assertEqual(num2words(5, to="cardinal", lang="sv"), "fem") + self.assertEqual(num2words(8, to="cardinal", lang="sv"), "åtta") + self.assertEqual(num2words(18, to="cardinal", lang="sv"), "arton") + self.assertEqual(num2words(45, to="cardinal", lang="sv"), "förtiofem") + self.assertEqual(num2words(1245, to="cardinal", lang="sv"), "etttusen tvåhundraförtiofem") + self.assertEqual(num2words(4235, to="cardinal", lang="sv"), "fyratusen tvåhundratrettiofem") + self.assertEqual(num2words(1004135, to="cardinal", lang="sv"), "en miljon fyratusen etthundratrettiofem") + self.assertEqual(num2words(14004235000, to="cardinal", lang="sv"), "fjorton miljarder fyra miljoner tvåhundratrettiofemtusen") + self.assertEqual(num2words(14004235, to="cardinal", lang="sv"), "fjorton miljoner fyratusen tvåhundratrettiofem") + self.assertEqual(num2words(1.25, to="cardinal", lang="sv"), "ett komma två fem") From a35effbd1b0ccc8016e58c37a682bb06b0076906 Mon Sep 17 00:00:00 2001 From: Peter Nordstrom Date: Mon, 7 Dec 2020 16:24:58 +0100 Subject: [PATCH 12/76] added correct ordinal handling and more test cases --- num2words/lang_SV.py | 22 +++++++++++++--------- tests/test_sv.py | 6 +++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/num2words/lang_SV.py b/num2words/lang_SV.py index 215c196..12ba9ae 100644 --- a/num2words/lang_SV.py +++ b/num2words/lang_SV.py @@ -85,17 +85,21 @@ class Num2Word_SV(lang_EU.Num2Word_EU): def to_ordinal(self, value): self.verify_ordinal(value) outwords = self.to_cardinal(value).split(" ") - lastwords = outwords[-1].split("-") - lastword = lastwords[-1].lower() + lastword = outwords[-1] + # lastword = lastwords[-1].lower() + ending_length = 0 try: - lastword = self.ords[lastword] - except KeyError: - if lastword[-2:] == "tio": - lastword = lastword + "onde" - else: + lastword_ending = self.ords[lastword[-4:]] + ending_length = 4 + except: + try: + lastword_ending = self.ords[lastword[-3:]] + ending_length = 3 + except KeyError: lastword += "de" - lastwords[-1] = self.title(lastword) - outwords[-1] = "".join(lastwords) + lastword_first_part = self.title(lastword)[:-ending_length] + lastword_correct = lastword_first_part + lastword_ending + outwords[-1] = lastword_correct return " ".join(outwords) def to_ordinal_num(self, value): diff --git a/tests/test_sv.py b/tests/test_sv.py index fa3d48d..e4ce466 100644 --- a/tests/test_sv.py +++ b/tests/test_sv.py @@ -24,11 +24,11 @@ from num2words import num2words class Num2WordsSVTest(TestCase): def test_ordinal(self): - pass + self.assertEqual(num2words(1435, to="ordinal", lang="sv"), "etttusen fyrahundratrettiofemte") + self.assertEqual(num2words(32, to="ordinal", lang="sv"), "trettioandra") self.assertEqual(num2words(1, to="ordinal", lang="sv"), "första") self.assertEqual(num2words(5, to="ordinal", lang="sv"), "femte") - self.assertEqual(num2words(32, to="ordinal", lang="sv"), "trettioandra") - + self.assertEqual(num2words(10, to="ordinal", lang="sv"), "tionde") def test_cardinal(self): self.assertEqual(num2words(0, to="cardinal", lang="sv"), "noll") From 469aaff8e6ac499dee2015f09772f3980d0d49c8 Mon Sep 17 00:00:00 2001 From: Peter Nordstrom Date: Mon, 25 Jan 2021 14:30:43 +0100 Subject: [PATCH 13/76] updated test case to increase coverage. raised NotImplementedError for options not implemented. --- num2words/lang_SV.py | 20 ++++++++++---------- tests/test_sv.py | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/num2words/lang_SV.py b/num2words/lang_SV.py index 12ba9ae..34a8827 100644 --- a/num2words/lang_SV.py +++ b/num2words/lang_SV.py @@ -96,22 +96,22 @@ class Num2Word_SV(lang_EU.Num2Word_EU): lastword_ending = self.ords[lastword[-3:]] ending_length = 3 except KeyError: - lastword += "de" - lastword_first_part = self.title(lastword)[:-ending_length] + # lastword += "de" + lastword_ending = "de" + if lastword_ending == 'de': + lastword_first_part = self.title(lastword)[:] + else: + lastword_first_part = self.title(lastword)[:-ending_length] lastword_correct = lastword_first_part + lastword_ending outwords[-1] = lastword_correct return " ".join(outwords) def to_ordinal_num(self, value): - self.verify_ordinal(value) - return "%s%s" % (value, self.to_ordinal(value)[-2:]) + raise NotImplementedError("'ordinal_num' is not implemented for swedish language") def to_year(self, val, longval=True): - if not (val // 100) % 10: - return self.to_cardinal(val) - return self.to_splitnum(val, hightxt="hundra", jointxt="och", - longval=longval) + raise NotImplementedError("'year' is not implemented for swedish language") + def to_currency(self, val, longval=True): - return self.to_splitnum(val, hightxt="krone/r", lowtxt="öre/n", - jointxt="och", longval=longval, cents=True) + raise NotImplementedError("'currency' is not implemented for swedish language") diff --git a/tests/test_sv.py b/tests/test_sv.py index e4ce466..fffbd0e 100644 --- a/tests/test_sv.py +++ b/tests/test_sv.py @@ -24,6 +24,7 @@ from num2words import num2words class Num2WordsSVTest(TestCase): def test_ordinal(self): + self.assertEqual(num2words(14, to="ordinal", lang="sv"), "fjortonde") self.assertEqual(num2words(1435, to="ordinal", lang="sv"), "etttusen fyrahundratrettiofemte") self.assertEqual(num2words(32, to="ordinal", lang="sv"), "trettioandra") self.assertEqual(num2words(1, to="ordinal", lang="sv"), "första") @@ -44,3 +45,17 @@ class Num2WordsSVTest(TestCase): self.assertEqual(num2words(14004235000, to="cardinal", lang="sv"), "fjorton miljarder fyra miljoner tvåhundratrettiofemtusen") self.assertEqual(num2words(14004235, to="cardinal", lang="sv"), "fjorton miljoner fyratusen tvåhundratrettiofem") self.assertEqual(num2words(1.25, to="cardinal", lang="sv"), "ett komma två fem") + + def test_not_implemented_options(self): + + with self.assertRaises(NotImplementedError) as context: + num2words(1235, to="year", lang="sv") + self.assertTrue("'year' is not implemented for swedish language" in str(context.exception)) + + with self.assertRaises(NotImplementedError) as context: + num2words(1235, to="currency", lang="sv") + self.assertTrue("'currency' is not implemented for swedish language" in str(context.exception)) + + with self.assertRaises(NotImplementedError) as context: + num2words(1235, to="ordinal_num", lang="sv") + self.assertTrue("'ordinal_num' is not implemented for swedish language" in str(context.exception)) \ No newline at end of file From 3e494d71a0ca618acdbe0aff7ca8efd7a51b80d1 Mon Sep 17 00:00:00 2001 From: Peter Nordstrom Date: Tue, 26 Jan 2021 08:40:17 +0100 Subject: [PATCH 14/76] updated failing flake8 test --- num2words/__init__.py | 5 ++--- num2words/lang_SV.py | 4 +--- tests/test_sv.py | 37 +++++++++++++++++++++++-------------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/num2words/__init__.py b/num2words/__init__.py index 6d40774..a8c4737 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -22,8 +22,8 @@ from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, - lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, lang_TR, lang_UK, - lang_VI) + lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, lang_TR, + lang_UK, lang_VI) CONVERTER_CLASSES = { 'ar': lang_AR.Num2Word_AR(), @@ -68,7 +68,6 @@ CONVERTER_CLASSES = { 'hu': lang_HU.Num2Word_HU() } - CONVERTES_TYPES = ['cardinal', 'ordinal', 'ordinal_num', 'year', 'currency'] diff --git a/num2words/lang_SV.py b/num2words/lang_SV.py index 34a8827..afdd31e 100644 --- a/num2words/lang_SV.py +++ b/num2words/lang_SV.py @@ -86,17 +86,15 @@ class Num2Word_SV(lang_EU.Num2Word_EU): self.verify_ordinal(value) outwords = self.to_cardinal(value).split(" ") lastword = outwords[-1] - # lastword = lastwords[-1].lower() ending_length = 0 try: lastword_ending = self.ords[lastword[-4:]] ending_length = 4 - except: + except KeyError: try: lastword_ending = self.ords[lastword[-3:]] ending_length = 3 except KeyError: - # lastword += "de" lastword_ending = "de" if lastword_ending == 'de': lastword_first_part = self.title(lastword)[:] diff --git a/tests/test_sv.py b/tests/test_sv.py index fffbd0e..a780dae 100644 --- a/tests/test_sv.py +++ b/tests/test_sv.py @@ -25,8 +25,10 @@ from num2words import num2words class Num2WordsSVTest(TestCase): def test_ordinal(self): self.assertEqual(num2words(14, to="ordinal", lang="sv"), "fjortonde") - self.assertEqual(num2words(1435, to="ordinal", lang="sv"), "etttusen fyrahundratrettiofemte") - self.assertEqual(num2words(32, to="ordinal", lang="sv"), "trettioandra") + self.assertEqual(num2words(1435, to="ordinal", lang="sv"), + "etttusen fyrahundratrettiofemte") + self.assertEqual(num2words(32, to="ordinal", lang="sv"), + "trettioandra") self.assertEqual(num2words(1, to="ordinal", lang="sv"), "första") self.assertEqual(num2words(5, to="ordinal", lang="sv"), "femte") self.assertEqual(num2words(10, to="ordinal", lang="sv"), "tionde") @@ -34,28 +36,35 @@ class Num2WordsSVTest(TestCase): def test_cardinal(self): self.assertEqual(num2words(0, to="cardinal", lang="sv"), "noll") self.assertEqual(num2words(1, to="cardinal", lang="sv"), "ett") - self.assertEqual(num2words(2, to="cardinal", lang="sv"), "två") + self.assertEqual(num2words(3, to="cardinal", lang="sv"), "tre") self.assertEqual(num2words(5, to="cardinal", lang="sv"), "fem") - self.assertEqual(num2words(8, to="cardinal", lang="sv"), "åtta") self.assertEqual(num2words(18, to="cardinal", lang="sv"), "arton") self.assertEqual(num2words(45, to="cardinal", lang="sv"), "förtiofem") - self.assertEqual(num2words(1245, to="cardinal", lang="sv"), "etttusen tvåhundraförtiofem") - self.assertEqual(num2words(4235, to="cardinal", lang="sv"), "fyratusen tvåhundratrettiofem") - self.assertEqual(num2words(1004135, to="cardinal", lang="sv"), "en miljon fyratusen etthundratrettiofem") - self.assertEqual(num2words(14004235000, to="cardinal", lang="sv"), "fjorton miljarder fyra miljoner tvåhundratrettiofemtusen") - self.assertEqual(num2words(14004235, to="cardinal", lang="sv"), "fjorton miljoner fyratusen tvåhundratrettiofem") - self.assertEqual(num2words(1.25, to="cardinal", lang="sv"), "ett komma två fem") + self.assertEqual(num2words(1345, to="cardinal", lang="sv"), + "etttusen trehundraförtiofem") + self.assertEqual(num2words(4435, to="cardinal", lang="sv"), + "fyratusen fyrahundratrettiofem") + self.assertEqual(num2words(1004135, to="cardinal", lang="sv"), + "en miljon fyratusen etthundratrettiofem") + self.assertEqual(num2words(4335000, to="cardinal", lang="sv"), + "fyra miljoner trehundratrettiofemtusen") + self.assertEqual(num2words(14004535, to="cardinal", lang="sv"), + "fjorton miljoner fyratusen femhundratrettiofem") + self.assertEqual(num2words(1.5, to="cardinal", lang="sv"), + "ett komma fem") def test_not_implemented_options(self): - with self.assertRaises(NotImplementedError) as context: num2words(1235, to="year", lang="sv") - self.assertTrue("'year' is not implemented for swedish language" in str(context.exception)) + self.assertTrue("'year' is not implemented for swedish language" + in str(context.exception)) with self.assertRaises(NotImplementedError) as context: num2words(1235, to="currency", lang="sv") - self.assertTrue("'currency' is not implemented for swedish language" in str(context.exception)) + self.assertTrue("'currency' is not implemented for swedish language" + in str(context.exception)) with self.assertRaises(NotImplementedError) as context: num2words(1235, to="ordinal_num", lang="sv") - self.assertTrue("'ordinal_num' is not implemented for swedish language" in str(context.exception)) \ No newline at end of file + self.assertTrue("'ordinal_num' is not implemented for swedish language" + in str(context.exception)) From 402b1e88e7caabc6d20e94996ef15e15478bc53a Mon Sep 17 00:00:00 2001 From: Fernanda Hernandez Date: Wed, 23 Dec 2020 11:50:06 -0600 Subject: [PATCH 15/76] Add translations to spanish of several currencies --- num2words/lang_ES.py | 191 ++- tests/test_es.py | 2826 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 3014 insertions(+), 3 deletions(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index a8cc47d..d6fa77a 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -21,13 +21,190 @@ import math from .lang_EU import Num2Word_EU +GENERIC_DOLLARS = ('dolar', 'dólares') +GENERIC_CENTS = ('centavo', 'centavos') +CURRENCIES_UNA = ('SLL', 'SEK', 'NOK', 'CZK', 'DKK', 'ISK', + 'SKK', 'GBP', 'CYP', 'EGP', 'FKP', 'GIP', + 'LBP', 'SDG', 'SHP', 'SSP', 'SYP', 'INR', + 'IDR', 'LKR', 'MUR', 'NPR', 'PKR', 'SCR', + 'ESP') + class Num2Word_ES(Num2Word_EU): CURRENCY_FORMS = { 'EUR': (('euro', 'euros'), ('céntimo', 'céntimos')), 'ESP': (('peseta', 'pesetas'), ('céntimo', 'céntimos')), - 'USD': (('dolar', 'dólares'), ('centavo', 'centavos')), + 'USD': (GENERIC_DOLLARS, GENERIC_CENTS), 'PEN': (('sol', 'soles'), ('céntimo', 'céntimos')), + 'CRC': (('colón', 'colones'), GENERIC_CENTS), + 'AUD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'CAD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'GBP': (('libra', 'libras'), ('penny', 'pence')), + 'RUB': (('rublo', 'rublos'), ('kopeyka', 'kopeykas')), + 'SEK': (('corona', 'coronas'), ('öre', 'öre')), + 'NOK': (('corona', 'coronas'), ('øre', 'øre')), + 'PLN': (('zloty', 'zlotys'), ('grosz', 'groszy')), + 'MXN': (('peso', 'pesos'), GENERIC_CENTS), + 'RON': (('leu', 'leus'), ('ban', 'bani')), + 'INR': (('rupia', 'rupias'), ('paisa', 'paisas')), + 'HUF': (('florín', 'florines'), ('fillér', 'fillér')), + 'FRF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'CNY': (('yuan', 'yuanes'), ('fen', 'jiaos')), + 'CZK': (('corona', 'coronas'), ('haléř', 'haléř')), + 'NIO': (('córdoba', 'córdobas'), GENERIC_CENTS), + 'VES': (('bolívar', 'bolívares'), ('céntimo', 'céntimos')), + 'BRL': (('real', 'reales'), GENERIC_CENTS), + 'CHF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'JPY': (('yen', 'yenes'), ('sen', 'sen')), + 'KRW': (('won', 'wones'), ('jeon', 'jeon')), + 'KPW': (('won', 'wones'), ('chon', 'chon')), + 'TRY': (('lira', 'liras'), ('kuruş', 'kuruş')), + 'ZAR': (('rand', 'rands'), ('céntimo', 'céntimos')), + 'KZT': (('tenge', 'tenges'), ('tïın', 'tïın')), + 'UAH': (('hryvnia', 'hryvnias'), ('kopiyka', 'kopiykas')), + 'THB': (('baht', 'bahts'), ('satang', 'satang')), + 'AED': (('dirham', 'dirhams'), ('fils', 'fils')), + 'AFN': (('afghani', 'afghanis'), ('pul', 'puls')), + 'ALL': (('lek ', 'leke'), ('qindarkë', 'qindarka')), + 'AMD': (('dram', 'drams'), ('luma', 'lumas')), + 'ANG': (('florín', 'florines'), GENERIC_CENTS), + 'AOA': (('kwanza', 'kwanzas'), ('céntimo', 'céntimos')), + 'ARS': (('peso', 'pesos'), GENERIC_CENTS), + 'AWG': (('florín', 'florines'), GENERIC_CENTS), + 'AZN': (('manat', 'manat'), ('qəpik', 'qəpik')), + 'BBD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BDT': (('taka', 'takas'), ('paisa', 'paisas')), + 'BGN': (('lev', 'leva'), ('stotinka', 'stotinki')), + 'BHD': (('dinar', 'dinares'), ('fils', 'fils')), + 'BIF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'BMD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BND': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BOB': (('boliviano', 'bolivianos'), GENERIC_CENTS), + 'BSD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BTN': (('ngultrum', 'ngultrum'), ('chetrum', 'chetrum')), + 'BWP': (('pula', 'pulas'), ('thebe', 'thebes')), + 'BYN': (('rublo', 'rublos'), ('kópek', 'kópeks')), + 'BYR': (('rublo', 'rublos'), ('kópek', 'kópeks')), + 'BZD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'CDF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'CLP': (('peso', 'pesos'), GENERIC_CENTS), + 'COP': (('peso', 'pesos'), GENERIC_CENTS), + 'CUP': (('peso', 'pesos'), GENERIC_CENTS), + 'CVE': (('escudo', 'escudos'), GENERIC_CENTS), + 'CYP': (('libra', 'libras'), ('céntimo', 'céntimos')), + 'DJF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'DKK': (('corona', 'coronas'), ('øre', 'øre')), + 'DOP': (('peso', 'pesos'), GENERIC_CENTS), + 'DZD': (('dinar', 'dinares'), ('céntimo', 'céntimos')), + 'ECS': (('sucre', 'sucres'), GENERIC_CENTS), + 'EGP': (('libra', 'libras'), ('piastra', 'piastras')), + 'ERN': (('nakfa', 'nakfas'), ('céntimo', 'céntimos')), + 'ETB': (('birr', 'birrs'), ('céntimo', 'céntimos')), + 'FJD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'FKP': (('libra', 'libras'), ('penny', 'peniques')), + 'GEL': (('lari', 'laris'), ('tetri', 'tetris')), + 'GHS': (('cedi', 'cedis'), ('pesewa', 'pesewas')), + 'GIP': (('libra', 'libras'), ('penique', 'peniques')), + 'GMD': (('dalasi', 'dalasis'), ('butut', 'bututs')), + 'GNF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'GTQ': (('quetzal', 'quetzales'), GENERIC_CENTS), + 'GYD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'HKD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'HNL': (('lempira', 'lempiras'), GENERIC_CENTS), + 'HRK': (('kuna', 'kunas'), ('lipa', 'lipas')), + 'HTG': (('gourde', 'gourdes'), ('céntimo', 'céntimos')), + 'IDR': (('rupia', 'rupias'), ('céntimo', 'céntimos')), + 'ILS': (('séquel', 'séqueles'), ('agora', 'agoras')), + 'IQD': (('dinar', 'dinares'), ('fils', 'fils')), + 'IRR': (('rial', 'riales'), ('dinar', 'dinares')), + 'ISK': (('corona', 'coronas'), ('eyrir', 'aurar')), + 'ITL': (('lira', 'liras'), ('céntimo', 'céntimos')), + 'JMD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'JOD': (('dinar', 'dinares'), ('piastra', 'piastras')), + 'KES': (('chelín', 'chelines'), ('céntimo', 'céntimos')), + 'KGS': (('som', 'som'), ('tyiyn', 'tyiyn')), + 'KHR': (('riel', 'rieles'), ('céntimo', 'céntimos')), + 'KMF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'KWD': (('dinar', 'dinares'), ('fils', 'fils')), + 'KYD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'LAK': (('kip', 'kips'), ('att', 'att')), + 'LBP': (('libra', 'libras'), ('piastra', 'piastras')), + 'LKR': (('rupia', 'rupias'), ('céntimo', 'céntimos')), + 'LRD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'LSL': (('loti', 'lotis'), ('céntimo', 'céntimos')), + 'LTL': (('lita', 'litas'), ('céntimo', 'céntimos')), + 'LVL': (('lat', 'lats'), ('céntimo', 'céntimos')), + 'LYD': (('dinar', 'dinares'), ('dírham', 'dírhams')), + 'MAD': (('dírham', 'dirhams'), ('céntimo', 'céntimos')), + 'MDL': (('leu', 'lei'), ('ban', 'bani')), + 'MGA': (('ariary', 'ariaris'), ('iraimbilanja', 'iraimbilanja')), + 'MKD': (('denar', 'denares'), ('deni', 'denis')), + 'MMK': (('kiat', 'kiats'), ('pya', 'pyas')), + 'MNT': (('tugrik', 'tugriks'), ('möngö', 'möngö')), + 'MOP': (('pataca', 'patacas'), ('avo', 'avos')), + 'MRO': (('ouguiya', 'ouguiyas'), ('khoums', 'khoums')), + 'MRU': (('ouguiya', 'ouguiyas'), ('khoums', 'khoums')), + 'MUR': (('rupia', 'rupias'), ('céntimo', 'céntimos')), + 'MVR': (('rufiyaa', 'rufiyaas'), ('laari', 'laari')), + 'MWK': (('kuacha', 'kuachas'), ('tambala', 'tambalas')), + 'MYR': (('ringgit', 'ringgit'), ('céntimo', 'céntimos')), + 'MZN': (('metical', 'metical'), GENERIC_CENTS), + 'NAD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'NGN': (('naira', 'nairas'), ('kobo', 'kobo')), + 'NPR': (('rupia', 'rupias'), ('paisa', 'paisas')), + 'NZD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'OMR': (('rial', 'riales'), ('baisa', 'baisa')), + 'PAB': (('balboa', 'balboas'), ('centésimo', 'centésimos')), + 'PGK': (('kina', 'kinas'), ('toea', 'toea')), + 'PHP': (('peso', 'pesos'), GENERIC_CENTS), + 'PKR': (('rupia', 'rupias'), ('paisa', 'paisas')), + 'PLZ': (('zloty', 'zlotys'), ('grosz', 'groszy')), + 'PYG': (('guaraní', 'guaranís'), ('céntimo', 'céntimos')), + 'QAR': (('rial', 'riales'), ('dírham', 'dírhams')), + 'QTQ': (('quetzal', 'quetzales'), GENERIC_CENTS), + 'RSD': (('dinar', 'dinares'), ('para', 'para')), + 'RUR': (('rublo', 'rublos'), ('kopek', 'kopeks')), + 'RWF': (('franco', 'francos'), ('céntimo', 'céntimos')), + 'SAR': (('riyal', 'riales'), ('halala', 'halalas')), + 'SBD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'SCR': (('rupia', 'rupias'), ('céntimo', 'céntimos')), + 'SDG': (('libra', 'libras'), ('piastra', 'piastras')), + 'SGD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'SHP': (('libra', 'libras'), ('penny', 'peniques')), + 'SKK': (('corona', 'coronas'), ('halier', 'haliers')), + 'SLL': (('leona', 'leonas'), ('céntimo', 'céntimos')), + 'SRD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'SSP': (('libra', 'libras'), ('piastra', 'piastras')), + 'STD': (('dobra', 'dobras'), ('céntimo', 'céntimos')), + 'SVC': (('colón', 'colones'), GENERIC_CENTS), + 'SYP': (('libra', 'libras'), ('piastra', 'piastras')), + 'SZL': (('lilangeni', 'emalangeni'), ('céntimo', 'céntimos')), + 'TJS': (('somoni', 'somonis'), ('dirame', 'dirames')), + 'TMT': (('manat', 'manat'), ('tenge', 'tenge')), + 'TND': (('dinar', 'dinares'), ('milésimo', 'milésimos')), + 'TOP': (('paanga', 'paangas'), ('céntimo', 'céntimos')), + 'TTD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'TWD': (('nuevo dólar', 'nuevos dolares'), ('céntimo', 'céntimos')), + 'TZS': (('chelín', 'chelines'), ('céntimo', 'céntimos')), + 'UAG': (('hryvnia', 'hryvnias'), ('kopiyka', 'kopiykas')), + 'UGX': (('chelín', 'chelines'), ('céntimo', 'céntimos')), + 'UYU': (('peso', 'pesos'), ('centésimo', 'centésimos')), + 'UZS': (('sum', 'sum'), ('tiyin', 'tiyin')), + 'VEF': (('bolívar fuerte', 'bolívares fuertes'), + ('céntimo', 'céntimos')), + 'VND': (('dong', 'dongs'), ('xu', 'xu')), + 'VUV': (('vatu', 'vatu'), ('nenhum', 'nenhum')), + 'WST': (('tala', 'tala'), GENERIC_CENTS), + 'XAF': (('franco CFA', 'francos CFA'), ('céntimo', 'céntimos')), + 'XCD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'XOF': (('franco CFA', 'francos CFA'), ('céntimo', 'céntimos')), + 'XPF': (('franco CFP', 'francos CFP'), ('céntimo', 'céntimos')), + 'YER': (('rial', 'riales'), ('fils', 'fils')), + 'YUM': (('dinar', 'dinares'), ('para', 'para')), + 'ZMW': (('kwacha', 'kwachas'), ('ngwee', 'ngwee')), + 'ZRZ': (('zaire', 'zaires'), ('likuta', 'makuta')), + 'ZWL': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), + 'ZWL': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), } # //CHECK: Is this sufficient?? @@ -176,4 +353,14 @@ class Num2Word_ES(Num2Word_EU): val, currency=currency, cents=cents, separator=separator, adjective=adjective) # Handle exception, in spanish is "un euro" and not "uno euro" - return result.replace("uno", "un") + # except in this currencies: leona, corona, + # libra, rupia, lempira, peseta, is 'una' + # but only when it's first word, otherwise + # it's replaced in others words like 'veintiun' + if currency in CURRENCIES_UNA: + list_result = result.split(" ") + if list_result[0] == "uno": + list_result[0] = list_result[0].replace("uno", "una") + result = " ".join(list_result) + result = result.replace("uno", "un") + return result diff --git a/tests/test_es.py b/tests/test_es.py index d306981..cf3a8c2 100644 --- a/tests/test_es.py +++ b/tests/test_es.py @@ -124,7 +124,7 @@ TEST_CASES_TO_CURRENCY = ( ) TEST_CASES_TO_CURRENCY_ESP = ( - (1.00, 'un peseta con cero céntimos'), + (1.00, 'una peseta con cero céntimos'), (2.00, 'dos pesetas con cero céntimos'), (8.00, 'ocho pesetas con cero céntimos'), (12.00, 'doce pesetas con cero céntimos'), @@ -156,6 +156,1661 @@ TEST_CASES_TO_CURRENCY_PEN = ( (100.00, 'cien soles con cero céntimos'), ) +TEST_CASES_TO_CURRENCY_CRC = ( + (1.00, 'un colón con cero centavos'), + (2.00, 'dos colones con cero centavos'), + (8.00, 'ocho colones con cero centavos'), + (12.00, 'doce colones con cero centavos'), + (21.00, 'veintiun colones con cero centavos'), + (81.25, 'ochenta y un colones con veinticinco centavos'), + (350.90, 'trescientos cincuenta colones con noventa centavos'), + (100.00, 'cien colones con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta colones con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_GBP = ( + (1.00, 'una libra con cero pence'), + (2.00, 'dos libras con cero pence'), + (8.00, 'ocho libras con cero pence'), + (12.00, 'doce libras con cero pence'), + (21.00, 'veintiun libras con cero pence'), + (81.25, 'ochenta y un libras con veinticinco pence'), + (350.90, 'trescientos cincuenta libras con noventa pence'), + (100.00, 'cien libras con cero pence'), + (4150.83, + 'cuatro mil ciento cincuenta libras con ochenta y tres pence'), +) + +TEST_CASES_TO_CURRENCY_RUB = ( + (1.00, 'un rublo con cero kopeykas'), + (2.00, 'dos rublos con cero kopeykas'), + (8.00, 'ocho rublos con cero kopeykas'), + (12.00, 'doce rublos con cero kopeykas'), + (21.00, 'veintiun rublos con cero kopeykas'), + (81.25, 'ochenta y un rublos con veinticinco kopeykas'), + (350.90, 'trescientos cincuenta rublos con noventa kopeykas'), + (100.00, 'cien rublos con cero kopeykas'), + (4150.83, + 'cuatro mil ciento cincuenta rublos con ochenta y tres kopeykas'), +) + +TEST_CASES_TO_CURRENCY_SEK = ( + (1.00, 'una corona con cero öre'), + (2.00, 'dos coronas con cero öre'), + (8.00, 'ocho coronas con cero öre'), + (12.00, 'doce coronas con cero öre'), + (21.00, 'veintiun coronas con cero öre'), + (81.25, 'ochenta y un coronas con veinticinco öre'), + (350.90, 'trescientos cincuenta coronas con noventa öre'), + (100.00, 'cien coronas con cero öre'), + (4150.83, + 'cuatro mil ciento cincuenta coronas con ochenta y tres öre'), +) + +TEST_CASES_TO_CURRENCY_NOK = ( + (1.00, 'una corona con cero øre'), + (2.00, 'dos coronas con cero øre'), + (8.00, 'ocho coronas con cero øre'), + (12.00, 'doce coronas con cero øre'), + (21.00, 'veintiun coronas con cero øre'), + (81.25, 'ochenta y un coronas con veinticinco øre'), + (350.90, 'trescientos cincuenta coronas con noventa øre'), + (100.00, 'cien coronas con cero øre'), + (4150.83, + 'cuatro mil ciento cincuenta coronas con ochenta y tres øre'), +) + +TEST_CASES_TO_CURRENCY_PLN = ( + (1.00, 'un zloty con cero groszy'), + (2.00, 'dos zlotys con cero groszy'), + (8.00, 'ocho zlotys con cero groszy'), + (12.00, 'doce zlotys con cero groszy'), + (21.00, 'veintiun zlotys con cero groszy'), + (81.25, 'ochenta y un zlotys con veinticinco groszy'), + (350.90, 'trescientos cincuenta zlotys con noventa groszy'), + (100.00, 'cien zlotys con cero groszy'), + (4150.83, + 'cuatro mil ciento cincuenta zlotys con ochenta y tres groszy'), +) + +TEST_CASES_TO_CURRENCY_MXN = ( + (1.00, 'un peso con cero centavos'), + (2.00, 'dos pesos con cero centavos'), + (8.00, 'ocho pesos con cero centavos'), + (12.00, 'doce pesos con cero centavos'), + (21.00, 'veintiun pesos con cero centavos'), + (81.25, 'ochenta y un pesos con veinticinco centavos'), + (350.90, 'trescientos cincuenta pesos con noventa centavos'), + (100.00, 'cien pesos con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta pesos con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_RON = ( + (1.00, 'un leu con cero bani'), + (2.00, 'dos leus con cero bani'), + (8.00, 'ocho leus con cero bani'), + (12.00, 'doce leus con cero bani'), + (21.00, 'veintiun leus con cero bani'), + (81.25, 'ochenta y un leus con veinticinco bani'), + (350.90, 'trescientos cincuenta leus con noventa bani'), + (100.00, 'cien leus con cero bani'), + (4150.83, + 'cuatro mil ciento cincuenta leus con ochenta y tres bani'), +) + +TEST_CASES_TO_CURRENCY_INR = ( + (1.00, 'una rupia con cero paisas'), + (2.00, 'dos rupias con cero paisas'), + (8.00, 'ocho rupias con cero paisas'), + (12.00, 'doce rupias con cero paisas'), + (21.00, 'veintiun rupias con cero paisas'), + (81.25, 'ochenta y un rupias con veinticinco paisas'), + (350.90, 'trescientos cincuenta rupias con noventa paisas'), + (100.00, 'cien rupias con cero paisas'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres paisas'), +) + +TEST_CASES_TO_CURRENCY_HUF = ( + (1.00, 'un florín con cero fillér'), + (2.00, 'dos florines con cero fillér'), + (8.00, 'ocho florines con cero fillér'), + (12.00, 'doce florines con cero fillér'), + (21.00, 'veintiun florines con cero fillér'), + (81.25, 'ochenta y un florines con veinticinco fillér'), + (350.90, 'trescientos cincuenta florines con noventa fillér'), + (100.00, 'cien florines con cero fillér'), + (4150.83, + 'cuatro mil ciento cincuenta florines con ochenta y tres fillér'), +) + +TEST_CASES_TO_CURRENCY_FRF = ( + (1.00, 'un franco con cero céntimos'), + (2.00, 'dos francos con cero céntimos'), + (8.00, 'ocho francos con cero céntimos'), + (12.00, 'doce francos con cero céntimos'), + (21.00, 'veintiun francos con cero céntimos'), + (81.25, 'ochenta y un francos con veinticinco céntimos'), + (350.90, 'trescientos cincuenta francos con noventa céntimos'), + (100.00, 'cien francos con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta francos con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_CNY = ( + (1.00, 'un yuan con cero jiaos'), + (2.00, 'dos yuanes con cero jiaos'), + (8.00, 'ocho yuanes con cero jiaos'), + (12.00, 'doce yuanes con cero jiaos'), + (21.00, 'veintiun yuanes con cero jiaos'), + (81.25, 'ochenta y un yuanes con veinticinco jiaos'), + (350.90, 'trescientos cincuenta yuanes con noventa jiaos'), + (100.00, 'cien yuanes con cero jiaos'), + (4150.83, + 'cuatro mil ciento cincuenta yuanes con ochenta y tres jiaos'), +) + +TEST_CASES_TO_CURRENCY_CZK = ( + (1.00, 'una corona con cero haléř'), + (2.00, 'dos coronas con cero haléř'), + (8.00, 'ocho coronas con cero haléř'), + (12.00, 'doce coronas con cero haléř'), + (21.00, 'veintiun coronas con cero haléř'), + (81.25, 'ochenta y un coronas con veinticinco haléř'), + (350.90, 'trescientos cincuenta coronas con noventa haléř'), + (100.00, 'cien coronas con cero haléř'), + (4150.83, + 'cuatro mil ciento cincuenta coronas con ochenta y tres haléř'), +) + +TEST_CASES_TO_CURRENCY_NIO = ( + (1.00, 'un córdoba con cero centavos'), + (2.00, 'dos córdobas con cero centavos'), + (8.00, 'ocho córdobas con cero centavos'), + (12.00, 'doce córdobas con cero centavos'), + (21.00, 'veintiun córdobas con cero centavos'), + (81.25, 'ochenta y un córdobas con veinticinco centavos'), + (350.90, 'trescientos cincuenta córdobas con noventa centavos'), + (100.00, 'cien córdobas con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta córdobas con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_VES = ( + (1.00, 'un bolívar con cero céntimos'), + (2.00, 'dos bolívares con cero céntimos'), + (8.00, 'ocho bolívares con cero céntimos'), + (12.00, 'doce bolívares con cero céntimos'), + (21.00, 'veintiun bolívares con cero céntimos'), + (81.25, 'ochenta y un bolívares con veinticinco céntimos'), + (350.90, 'trescientos cincuenta bolívares con noventa céntimos'), + (100.00, 'cien bolívares con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta bolívares con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_BRL = ( + (1.00, 'un real con cero centavos'), + (2.00, 'dos reales con cero centavos'), + (8.00, 'ocho reales con cero centavos'), + (12.00, 'doce reales con cero centavos'), + (21.00, 'veintiun reales con cero centavos'), + (81.25, 'ochenta y un reales con veinticinco centavos'), + (350.90, 'trescientos cincuenta reales con noventa centavos'), + (100.00, 'cien reales con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta reales con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_JPY = ( + (1.00, 'un yen con cero sen'), + (2.00, 'dos yenes con cero sen'), + (8.00, 'ocho yenes con cero sen'), + (12.00, 'doce yenes con cero sen'), + (21.00, 'veintiun yenes con cero sen'), + (81.25, 'ochenta y un yenes con veinticinco sen'), + (350.90, 'trescientos cincuenta yenes con noventa sen'), + (100.00, 'cien yenes con cero sen'), + (4150.83, + 'cuatro mil ciento cincuenta yenes con ochenta y tres sen'), +) + +TEST_CASES_TO_CURRENCY_KRW = ( + (1.00, 'un won con cero jeon'), + (2.00, 'dos wones con cero jeon'), + (8.00, 'ocho wones con cero jeon'), + (12.00, 'doce wones con cero jeon'), + (21.00, 'veintiun wones con cero jeon'), + (81.25, 'ochenta y un wones con veinticinco jeon'), + (350.90, 'trescientos cincuenta wones con noventa jeon'), + (100.00, 'cien wones con cero jeon'), + (4150.83, + 'cuatro mil ciento cincuenta wones con ochenta y tres jeon'), +) + +TEST_CASES_TO_CURRENCY_KPW = ( + (1.00, 'un won con cero chon'), + (2.00, 'dos wones con cero chon'), + (8.00, 'ocho wones con cero chon'), + (12.00, 'doce wones con cero chon'), + (21.00, 'veintiun wones con cero chon'), + (81.25, 'ochenta y un wones con veinticinco chon'), + (350.90, 'trescientos cincuenta wones con noventa chon'), + (100.00, 'cien wones con cero chon'), + (4150.83, + 'cuatro mil ciento cincuenta wones con ochenta y tres chon'), +) + +TEST_CASES_TO_CURRENCY_TRY = ( + (1.00, 'un lira con cero kuruş'), + (2.00, 'dos liras con cero kuruş'), + (8.00, 'ocho liras con cero kuruş'), + (12.00, 'doce liras con cero kuruş'), + (21.00, 'veintiun liras con cero kuruş'), + (81.25, 'ochenta y un liras con veinticinco kuruş'), + (350.90, 'trescientos cincuenta liras con noventa kuruş'), + (100.00, 'cien liras con cero kuruş'), + (4150.83, + 'cuatro mil ciento cincuenta liras con ochenta y tres kuruş'), +) + +TEST_CASES_TO_CURRENCY_ZAR = ( + (1.00, 'un rand con cero céntimos'), + (2.00, 'dos rands con cero céntimos'), + (8.00, 'ocho rands con cero céntimos'), + (12.00, 'doce rands con cero céntimos'), + (21.00, 'veintiun rands con cero céntimos'), + (81.25, 'ochenta y un rands con veinticinco céntimos'), + (350.90, 'trescientos cincuenta rands con noventa céntimos'), + (100.00, 'cien rands con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta rands con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_KZT = ( + (1.00, 'un tenge con cero tïın'), + (2.00, 'dos tenges con cero tïın'), + (8.00, 'ocho tenges con cero tïın'), + (12.00, 'doce tenges con cero tïın'), + (21.00, 'veintiun tenges con cero tïın'), + (81.25, 'ochenta y un tenges con veinticinco tïın'), + (350.90, 'trescientos cincuenta tenges con noventa tïın'), + (100.00, 'cien tenges con cero tïın'), + (4150.83, + 'cuatro mil ciento cincuenta tenges con ochenta y tres tïın'), +) + +TEST_CASES_TO_CURRENCY_UAH = ( + (1.00, 'un hryvnia con cero kopiykas'), + (2.00, 'dos hryvnias con cero kopiykas'), + (8.00, 'ocho hryvnias con cero kopiykas'), + (12.00, 'doce hryvnias con cero kopiykas'), + (21.00, 'veintiun hryvnias con cero kopiykas'), + (81.25, 'ochenta y un hryvnias con veinticinco kopiykas'), + (350.90, 'trescientos cincuenta hryvnias con noventa kopiykas'), + (100.00, 'cien hryvnias con cero kopiykas'), + (4150.83, + 'cuatro mil ciento cincuenta hryvnias con ochenta y tres kopiykas'), +) + +TEST_CASES_TO_CURRENCY_THB = ( + (1.00, 'un baht con cero satang'), + (2.00, 'dos bahts con cero satang'), + (8.00, 'ocho bahts con cero satang'), + (12.00, 'doce bahts con cero satang'), + (21.00, 'veintiun bahts con cero satang'), + (81.25, 'ochenta y un bahts con veinticinco satang'), + (350.90, 'trescientos cincuenta bahts con noventa satang'), + (100.00, 'cien bahts con cero satang'), + (4150.83, + 'cuatro mil ciento cincuenta bahts con ochenta y tres satang'), +) + +TEST_CASES_TO_CURRENCY_AED = ( + (1.00, 'un dirham con cero fils'), + (2.00, 'dos dirhams con cero fils'), + (8.00, 'ocho dirhams con cero fils'), + (12.00, 'doce dirhams con cero fils'), + (21.00, 'veintiun dirhams con cero fils'), + (81.25, 'ochenta y un dirhams con veinticinco fils'), + (350.90, 'trescientos cincuenta dirhams con noventa fils'), + (100.00, 'cien dirhams con cero fils'), + (4150.83, + 'cuatro mil ciento cincuenta dirhams con ochenta y tres fils'), +) + +TEST_CASES_TO_CURRENCY_AFN = ( + (1.00, 'un afghani con cero puls'), + (2.00, 'dos afghanis con cero puls'), + (8.00, 'ocho afghanis con cero puls'), + (12.00, 'doce afghanis con cero puls'), + (21.00, 'veintiun afghanis con cero puls'), + (81.25, 'ochenta y un afghanis con veinticinco puls'), + (350.90, 'trescientos cincuenta afghanis con noventa puls'), + (100.00, 'cien afghanis con cero puls'), + (4150.83, + 'cuatro mil ciento cincuenta afghanis con ochenta y tres puls'), +) + +TEST_CASES_TO_CURRENCY_ALL = ( + (1.00, 'un lek con cero qindarka'), + (2.00, 'dos leke con cero qindarka'), + (8.00, 'ocho leke con cero qindarka'), + (12.00, 'doce leke con cero qindarka'), + (21.00, 'veintiun leke con cero qindarka'), + (81.25, 'ochenta y un leke con veinticinco qindarka'), + (350.90, 'trescientos cincuenta leke con noventa qindarka'), + (100.00, 'cien leke con cero qindarka'), + (4150.83, + 'cuatro mil ciento cincuenta leke con ochenta y tres qindarka'), +) + +TEST_CASES_TO_CURRENCY_AMD = ( + (1.00, 'un dram con cero lumas'), + (2.00, 'dos drams con cero lumas'), + (8.00, 'ocho drams con cero lumas'), + (12.00, 'doce drams con cero lumas'), + (21.00, 'veintiun drams con cero lumas'), + (81.25, 'ochenta y un drams con veinticinco lumas'), + (350.90, 'trescientos cincuenta drams con noventa lumas'), + (100.00, 'cien drams con cero lumas'), + (4150.83, + 'cuatro mil ciento cincuenta drams con ochenta y tres lumas'), +) + +TEST_CASES_TO_CURRENCY_ANG = ( + (1.00, 'un florín con cero centavos'), + (2.00, 'dos florines con cero centavos'), + (8.00, 'ocho florines con cero centavos'), + (12.00, 'doce florines con cero centavos'), + (21.00, 'veintiun florines con cero centavos'), + (81.25, 'ochenta y un florines con veinticinco centavos'), + (350.90, 'trescientos cincuenta florines con noventa centavos'), + (100.00, 'cien florines con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta florines con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_AOA = ( + (1.00, 'un kwanza con cero céntimos'), + (2.00, 'dos kwanzas con cero céntimos'), + (8.00, 'ocho kwanzas con cero céntimos'), + (12.00, 'doce kwanzas con cero céntimos'), + (21.00, 'veintiun kwanzas con cero céntimos'), + (81.25, 'ochenta y un kwanzas con veinticinco céntimos'), + (350.90, 'trescientos cincuenta kwanzas con noventa céntimos'), + (100.00, 'cien kwanzas con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta kwanzas con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_AWG = ( + (1.00, 'un florín con cero centavos'), + (2.00, 'dos florines con cero centavos'), + (8.00, 'ocho florines con cero centavos'), + (12.00, 'doce florines con cero centavos'), + (21.00, 'veintiun florines con cero centavos'), + (81.25, 'ochenta y un florines con veinticinco centavos'), + (350.90, 'trescientos cincuenta florines con noventa centavos'), + (100.00, 'cien florines con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta florines con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_AZN = ( + (1.00, 'un manat con cero qəpik'), + (2.00, 'dos manat con cero qəpik'), + (8.00, 'ocho manat con cero qəpik'), + (12.00, 'doce manat con cero qəpik'), + (21.00, 'veintiun manat con cero qəpik'), + (81.25, 'ochenta y un manat con veinticinco qəpik'), + (350.90, 'trescientos cincuenta manat con noventa qəpik'), + (100.00, 'cien manat con cero qəpik'), + (4150.83, + 'cuatro mil ciento cincuenta manat con ochenta y tres qəpik'), +) + +TEST_CASES_TO_CURRENCY_BDT = ( + (1.00, 'un taka con cero paisas'), + (2.00, 'dos takas con cero paisas'), + (8.00, 'ocho takas con cero paisas'), + (12.00, 'doce takas con cero paisas'), + (21.00, 'veintiun takas con cero paisas'), + (81.25, 'ochenta y un takas con veinticinco paisas'), + (350.90, 'trescientos cincuenta takas con noventa paisas'), + (100.00, 'cien takas con cero paisas'), + (4150.83, + 'cuatro mil ciento cincuenta takas con ochenta y tres paisas'), +) + +TEST_CASES_TO_CURRENCY_BGN = ( + (1.00, 'un lev con cero stotinki'), + (2.00, 'dos leva con cero stotinki'), + (8.00, 'ocho leva con cero stotinki'), + (12.00, 'doce leva con cero stotinki'), + (21.00, 'veintiun leva con cero stotinki'), + (81.25, 'ochenta y un leva con veinticinco stotinki'), + (350.90, 'trescientos cincuenta leva con noventa stotinki'), + (100.00, 'cien leva con cero stotinki'), + (4150.83, + 'cuatro mil ciento cincuenta leva con ochenta y tres stotinki'), +) + +TEST_CASES_TO_CURRENCY_BHD = ( + (1.00, 'un dinar con cero fils'), + (2.00, 'dos dinares con cero fils'), + (8.00, 'ocho dinares con cero fils'), + (12.00, 'doce dinares con cero fils'), + (21.00, 'veintiun dinares con cero fils'), + (81.25, 'ochenta y un dinares con veinticinco fils'), + (350.90, 'trescientos cincuenta dinares con noventa fils'), + (100.00, 'cien dinares con cero fils'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres fils'), +) + +TEST_CASES_TO_CURRENCY_BOB = ( + (1.00, 'un boliviano con cero centavos'), + (2.00, 'dos bolivianos con cero centavos'), + (8.00, 'ocho bolivianos con cero centavos'), + (12.00, 'doce bolivianos con cero centavos'), + (21.00, 'veintiun bolivianos con cero centavos'), + (81.25, 'ochenta y un bolivianos con veinticinco centavos'), + (350.90, 'trescientos cincuenta bolivianos con noventa centavos'), + (100.00, 'cien bolivianos con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta bolivianos con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_BTN = ( + (1.00, 'un ngultrum con cero chetrum'), + (2.00, 'dos ngultrum con cero chetrum'), + (8.00, 'ocho ngultrum con cero chetrum'), + (12.00, 'doce ngultrum con cero chetrum'), + (21.00, 'veintiun ngultrum con cero chetrum'), + (81.25, 'ochenta y un ngultrum con veinticinco chetrum'), + (350.90, 'trescientos cincuenta ngultrum con noventa chetrum'), + (100.00, 'cien ngultrum con cero chetrum'), + (4150.83, + 'cuatro mil ciento cincuenta ngultrum con ochenta y tres chetrum'), +) + +TEST_CASES_TO_CURRENCY_BWP = ( + (1.00, 'un pula con cero thebes'), + (2.00, 'dos pulas con cero thebes'), + (8.00, 'ocho pulas con cero thebes'), + (12.00, 'doce pulas con cero thebes'), + (21.00, 'veintiun pulas con cero thebes'), + (81.25, 'ochenta y un pulas con veinticinco thebes'), + (350.90, 'trescientos cincuenta pulas con noventa thebes'), + (100.00, 'cien pulas con cero thebes'), + (4150.83, + 'cuatro mil ciento cincuenta pulas con ochenta y tres thebes'), +) + +TEST_CASES_TO_CURRENCY_BYN = ( + (1.00, 'un rublo con cero kópeks'), + (2.00, 'dos rublos con cero kópeks'), + (8.00, 'ocho rublos con cero kópeks'), + (12.00, 'doce rublos con cero kópeks'), + (21.00, 'veintiun rublos con cero kópeks'), + (81.25, 'ochenta y un rublos con veinticinco kópeks'), + (350.90, 'trescientos cincuenta rublos con noventa kópeks'), + (100.00, 'cien rublos con cero kópeks'), + (4150.83, + 'cuatro mil ciento cincuenta rublos con ochenta y tres kópeks'), +) + +TEST_CASES_TO_CURRENCY_BYR = ( + (1.00, 'un rublo con cero kópeks'), + (2.00, 'dos rublos con cero kópeks'), + (8.00, 'ocho rublos con cero kópeks'), + (12.00, 'doce rublos con cero kópeks'), + (21.00, 'veintiun rublos con cero kópeks'), + (81.25, 'ochenta y un rublos con veinticinco kópeks'), + (350.90, 'trescientos cincuenta rublos con noventa kópeks'), + (100.00, 'cien rublos con cero kópeks'), + (4150.83, + 'cuatro mil ciento cincuenta rublos con ochenta y tres kópeks'), +) + +TEST_CASES_TO_CURRENCY_BZD = ( + (1.00, 'un dolar con cero céntimos'), + (2.00, 'dos dólares con cero céntimos'), + (8.00, 'ocho dólares con cero céntimos'), + (12.00, 'doce dólares con cero céntimos'), + (21.00, 'veintiun dólares con cero céntimos'), + (81.25, 'ochenta y un dólares con veinticinco céntimos'), + (350.90, 'trescientos cincuenta dólares con noventa céntimos'), + (100.00, 'cien dólares con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta dólares con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_CVE = ( + (1.00, 'un escudo con cero centavos'), + (2.00, 'dos escudos con cero centavos'), + (8.00, 'ocho escudos con cero centavos'), + (12.00, 'doce escudos con cero centavos'), + (21.00, 'veintiun escudos con cero centavos'), + (81.25, 'ochenta y un escudos con veinticinco centavos'), + (350.90, 'trescientos cincuenta escudos con noventa centavos'), + (100.00, 'cien escudos con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta escudos con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_CYP = ( + (1.00, 'una libra con cero céntimos'), + (2.00, 'dos libras con cero céntimos'), + (8.00, 'ocho libras con cero céntimos'), + (12.00, 'doce libras con cero céntimos'), + (21.00, 'veintiun libras con cero céntimos'), + (81.25, 'ochenta y un libras con veinticinco céntimos'), + (350.90, 'trescientos cincuenta libras con noventa céntimos'), + (100.00, 'cien libras con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta libras con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_DKK = ( + (1.00, 'una corona con cero øre'), + (2.00, 'dos coronas con cero øre'), + (8.00, 'ocho coronas con cero øre'), + (12.00, 'doce coronas con cero øre'), + (21.00, 'veintiun coronas con cero øre'), + (81.25, 'ochenta y un coronas con veinticinco øre'), + (350.90, 'trescientos cincuenta coronas con noventa øre'), + (100.00, 'cien coronas con cero øre'), + (4150.83, + 'cuatro mil ciento cincuenta coronas con ochenta y tres øre'), +) + +TEST_CASES_TO_CURRENCY_DZD = ( + (1.00, 'un dinar con cero céntimos'), + (2.00, 'dos dinares con cero céntimos'), + (8.00, 'ocho dinares con cero céntimos'), + (12.00, 'doce dinares con cero céntimos'), + (21.00, 'veintiun dinares con cero céntimos'), + (81.25, 'ochenta y un dinares con veinticinco céntimos'), + (350.90, 'trescientos cincuenta dinares con noventa céntimos'), + (100.00, 'cien dinares con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_ECS = ( + (1.00, 'un sucre con cero centavos'), + (2.00, 'dos sucres con cero centavos'), + (8.00, 'ocho sucres con cero centavos'), + (12.00, 'doce sucres con cero centavos'), + (21.00, 'veintiun sucres con cero centavos'), + (81.25, 'ochenta y un sucres con veinticinco centavos'), + (350.90, 'trescientos cincuenta sucres con noventa centavos'), + (100.00, 'cien sucres con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta sucres con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_EGP = ( + (1.00, 'una libra con cero piastras'), + (2.00, 'dos libras con cero piastras'), + (8.00, 'ocho libras con cero piastras'), + (12.00, 'doce libras con cero piastras'), + (21.00, 'veintiun libras con cero piastras'), + (81.25, 'ochenta y un libras con veinticinco piastras'), + (350.90, 'trescientos cincuenta libras con noventa piastras'), + (100.00, 'cien libras con cero piastras'), + (4150.83, + 'cuatro mil ciento cincuenta libras con ochenta y tres piastras'), +) + +TEST_CASES_TO_CURRENCY_ERN = ( + (1.00, 'un nakfa con cero céntimos'), + (2.00, 'dos nakfas con cero céntimos'), + (8.00, 'ocho nakfas con cero céntimos'), + (12.00, 'doce nakfas con cero céntimos'), + (21.00, 'veintiun nakfas con cero céntimos'), + (81.25, 'ochenta y un nakfas con veinticinco céntimos'), + (350.90, 'trescientos cincuenta nakfas con noventa céntimos'), + (100.00, 'cien nakfas con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta nakfas con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_ETB = ( + (1.00, 'un birr con cero céntimos'), + (2.00, 'dos birrs con cero céntimos'), + (8.00, 'ocho birrs con cero céntimos'), + (12.00, 'doce birrs con cero céntimos'), + (21.00, 'veintiun birrs con cero céntimos'), + (81.25, 'ochenta y un birrs con veinticinco céntimos'), + (350.90, 'trescientos cincuenta birrs con noventa céntimos'), + (100.00, 'cien birrs con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta birrs con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_FKP = ( + (1.00, 'una libra con cero peniques'), + (2.00, 'dos libras con cero peniques'), + (8.00, 'ocho libras con cero peniques'), + (12.00, 'doce libras con cero peniques'), + (21.00, 'veintiun libras con cero peniques'), + (81.25, 'ochenta y un libras con veinticinco peniques'), + (350.90, 'trescientos cincuenta libras con noventa peniques'), + (100.00, 'cien libras con cero peniques'), + (4150.83, + 'cuatro mil ciento cincuenta libras con ochenta y tres peniques'), +) + +TEST_CASES_TO_CURRENCY_GEL = ( + (1.00, 'un lari con cero tetris'), + (2.00, 'dos laris con cero tetris'), + (8.00, 'ocho laris con cero tetris'), + (12.00, 'doce laris con cero tetris'), + (21.00, 'veintiun laris con cero tetris'), + (81.25, 'ochenta y un laris con veinticinco tetris'), + (350.90, 'trescientos cincuenta laris con noventa tetris'), + (100.00, 'cien laris con cero tetris'), + (4150.83, + 'cuatro mil ciento cincuenta laris con ochenta y tres tetris'), +) + +TEST_CASES_TO_CURRENCY_GHS = ( + (1.00, 'un cedi con cero pesewas'), + (2.00, 'dos cedis con cero pesewas'), + (8.00, 'ocho cedis con cero pesewas'), + (12.00, 'doce cedis con cero pesewas'), + (21.00, 'veintiun cedis con cero pesewas'), + (81.25, 'ochenta y un cedis con veinticinco pesewas'), + (350.90, 'trescientos cincuenta cedis con noventa pesewas'), + (100.00, 'cien cedis con cero pesewas'), + (4150.83, + 'cuatro mil ciento cincuenta cedis con ochenta y tres pesewas'), +) + +TEST_CASES_TO_CURRENCY_GMD = ( + (1.00, 'un dalasi con cero bututs'), + (2.00, 'dos dalasis con cero bututs'), + (8.00, 'ocho dalasis con cero bututs'), + (12.00, 'doce dalasis con cero bututs'), + (21.00, 'veintiun dalasis con cero bututs'), + (81.25, 'ochenta y un dalasis con veinticinco bututs'), + (350.90, 'trescientos cincuenta dalasis con noventa bututs'), + (100.00, 'cien dalasis con cero bututs'), + (4150.83, + 'cuatro mil ciento cincuenta dalasis con ochenta y tres bututs'), +) + +TEST_CASES_TO_CURRENCY_GTQ = ( + (1.00, 'un quetzal con cero centavos'), + (2.00, 'dos quetzales con cero centavos'), + (8.00, 'ocho quetzales con cero centavos'), + (12.00, 'doce quetzales con cero centavos'), + (21.00, 'veintiun quetzales con cero centavos'), + (81.25, 'ochenta y un quetzales con veinticinco centavos'), + (350.90, 'trescientos cincuenta quetzales con noventa centavos'), + (100.00, 'cien quetzales con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta quetzales con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_HNL = ( + (1.00, 'un lempira con cero centavos'), + (2.00, 'dos lempiras con cero centavos'), + (8.00, 'ocho lempiras con cero centavos'), + (12.00, 'doce lempiras con cero centavos'), + (21.00, 'veintiun lempiras con cero centavos'), + (81.25, 'ochenta y un lempiras con veinticinco centavos'), + (350.90, 'trescientos cincuenta lempiras con noventa centavos'), + (100.00, 'cien lempiras con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta lempiras con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_HRK = ( + (1.00, 'un kuna con cero lipas'), + (2.00, 'dos kunas con cero lipas'), + (8.00, 'ocho kunas con cero lipas'), + (12.00, 'doce kunas con cero lipas'), + (21.00, 'veintiun kunas con cero lipas'), + (81.25, 'ochenta y un kunas con veinticinco lipas'), + (350.90, 'trescientos cincuenta kunas con noventa lipas'), + (100.00, 'cien kunas con cero lipas'), + (4150.83, + 'cuatro mil ciento cincuenta kunas con ochenta y tres lipas'), +) + +TEST_CASES_TO_CURRENCY_HTG = ( + (1.00, 'un gourde con cero céntimos'), + (2.00, 'dos gourdes con cero céntimos'), + (8.00, 'ocho gourdes con cero céntimos'), + (12.00, 'doce gourdes con cero céntimos'), + (21.00, 'veintiun gourdes con cero céntimos'), + (81.25, 'ochenta y un gourdes con veinticinco céntimos'), + (350.90, 'trescientos cincuenta gourdes con noventa céntimos'), + (100.00, 'cien gourdes con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta gourdes con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_IDR = ( + (1.00, 'una rupia con cero céntimos'), + (2.00, 'dos rupias con cero céntimos'), + (8.00, 'ocho rupias con cero céntimos'), + (12.00, 'doce rupias con cero céntimos'), + (21.00, 'veintiun rupias con cero céntimos'), + (81.25, 'ochenta y un rupias con veinticinco céntimos'), + (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (100.00, 'cien rupias con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_ILS = ( + (1.00, 'un séquel con cero agoras'), + (2.00, 'dos séqueles con cero agoras'), + (8.00, 'ocho séqueles con cero agoras'), + (12.00, 'doce séqueles con cero agoras'), + (21.00, 'veintiun séqueles con cero agoras'), + (81.25, 'ochenta y un séqueles con veinticinco agoras'), + (350.90, 'trescientos cincuenta séqueles con noventa agoras'), + (100.00, 'cien séqueles con cero agoras'), + (4150.83, + 'cuatro mil ciento cincuenta séqueles con ochenta y tres agoras'), +) + +TEST_CASES_TO_CURRENCY_IQD = ( + (1.00, 'un dinar con cero fils'), + (2.00, 'dos dinares con cero fils'), + (8.00, 'ocho dinares con cero fils'), + (12.00, 'doce dinares con cero fils'), + (21.00, 'veintiun dinares con cero fils'), + (81.25, 'ochenta y un dinares con veinticinco fils'), + (350.90, 'trescientos cincuenta dinares con noventa fils'), + (100.00, 'cien dinares con cero fils'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres fils'), +) + +TEST_CASES_TO_CURRENCY_IRR = ( + (1.00, 'un rial con cero dinares'), + (2.00, 'dos riales con cero dinares'), + (8.00, 'ocho riales con cero dinares'), + (12.00, 'doce riales con cero dinares'), + (21.00, 'veintiun riales con cero dinares'), + (81.25, 'ochenta y un riales con veinticinco dinares'), + (350.90, 'trescientos cincuenta riales con noventa dinares'), + (100.00, 'cien riales con cero dinares'), + (4150.83, + 'cuatro mil ciento cincuenta riales con ochenta y tres dinares'), +) + +TEST_CASES_TO_CURRENCY_ISK = ( + (1.00, 'una corona con cero aurar'), + (2.00, 'dos coronas con cero aurar'), + (8.00, 'ocho coronas con cero aurar'), + (12.00, 'doce coronas con cero aurar'), + (21.00, 'veintiun coronas con cero aurar'), + (81.25, 'ochenta y un coronas con veinticinco aurar'), + (350.90, 'trescientos cincuenta coronas con noventa aurar'), + (100.00, 'cien coronas con cero aurar'), + (4150.83, + 'cuatro mil ciento cincuenta coronas con ochenta y tres aurar'), +) + +TEST_CASES_TO_CURRENCY_ITL = ( + (1.00, 'un lira con cero céntimos'), + (2.00, 'dos liras con cero céntimos'), + (8.00, 'ocho liras con cero céntimos'), + (12.00, 'doce liras con cero céntimos'), + (21.00, 'veintiun liras con cero céntimos'), + (81.25, 'ochenta y un liras con veinticinco céntimos'), + (350.90, 'trescientos cincuenta liras con noventa céntimos'), + (100.00, 'cien liras con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta liras con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_JOD = ( + (1.00, 'un dinar con cero piastras'), + (2.00, 'dos dinares con cero piastras'), + (8.00, 'ocho dinares con cero piastras'), + (12.00, 'doce dinares con cero piastras'), + (21.00, 'veintiun dinares con cero piastras'), + (81.25, 'ochenta y un dinares con veinticinco piastras'), + (350.90, 'trescientos cincuenta dinares con noventa piastras'), + (100.00, 'cien dinares con cero piastras'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres piastras'), +) + +TEST_CASES_TO_CURRENCY_KES = ( + (1.00, 'un chelín con cero céntimos'), + (2.00, 'dos chelines con cero céntimos'), + (8.00, 'ocho chelines con cero céntimos'), + (12.00, 'doce chelines con cero céntimos'), + (21.00, 'veintiun chelines con cero céntimos'), + (81.25, 'ochenta y un chelines con veinticinco céntimos'), + (350.90, 'trescientos cincuenta chelines con noventa céntimos'), + (100.00, 'cien chelines con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta chelines con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_KGS = ( + (1.00, 'un som con cero tyiyn'), + (2.00, 'dos som con cero tyiyn'), + (8.00, 'ocho som con cero tyiyn'), + (12.00, 'doce som con cero tyiyn'), + (21.00, 'veintiun som con cero tyiyn'), + (81.25, 'ochenta y un som con veinticinco tyiyn'), + (350.90, 'trescientos cincuenta som con noventa tyiyn'), + (100.00, 'cien som con cero tyiyn'), + (4150.83, + 'cuatro mil ciento cincuenta som con ochenta y tres tyiyn'), +) + +TEST_CASES_TO_CURRENCY_KHR = ( + (1.00, 'un riel con cero céntimos'), + (2.00, 'dos rieles con cero céntimos'), + (8.00, 'ocho rieles con cero céntimos'), + (12.00, 'doce rieles con cero céntimos'), + (21.00, 'veintiun rieles con cero céntimos'), + (81.25, 'ochenta y un rieles con veinticinco céntimos'), + (350.90, 'trescientos cincuenta rieles con noventa céntimos'), + (100.00, 'cien rieles con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta rieles con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_KWD = ( + (1.00, 'un dinar con cero fils'), + (2.00, 'dos dinares con cero fils'), + (8.00, 'ocho dinares con cero fils'), + (12.00, 'doce dinares con cero fils'), + (21.00, 'veintiun dinares con cero fils'), + (81.25, 'ochenta y un dinares con veinticinco fils'), + (350.90, 'trescientos cincuenta dinares con noventa fils'), + (100.00, 'cien dinares con cero fils'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres fils'), +) + +TEST_CASES_TO_CURRENCY_LAK = ( + (1.00, 'un kip con cero att'), + (2.00, 'dos kips con cero att'), + (8.00, 'ocho kips con cero att'), + (12.00, 'doce kips con cero att'), + (21.00, 'veintiun kips con cero att'), + (81.25, 'ochenta y un kips con veinticinco att'), + (350.90, 'trescientos cincuenta kips con noventa att'), + (100.00, 'cien kips con cero att'), + (4150.83, + 'cuatro mil ciento cincuenta kips con ochenta y tres att'), +) + +TEST_CASES_TO_CURRENCY_LKR = ( + (1.00, 'una rupia con cero céntimos'), + (2.00, 'dos rupias con cero céntimos'), + (8.00, 'ocho rupias con cero céntimos'), + (12.00, 'doce rupias con cero céntimos'), + (21.00, 'veintiun rupias con cero céntimos'), + (81.25, 'ochenta y un rupias con veinticinco céntimos'), + (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (100.00, 'cien rupias con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_LSL = ( + (1.00, 'un loti con cero céntimos'), + (2.00, 'dos lotis con cero céntimos'), + (8.00, 'ocho lotis con cero céntimos'), + (12.00, 'doce lotis con cero céntimos'), + (21.00, 'veintiun lotis con cero céntimos'), + (81.25, 'ochenta y un lotis con veinticinco céntimos'), + (350.90, 'trescientos cincuenta lotis con noventa céntimos'), + (100.00, 'cien lotis con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta lotis con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_LTL = ( + (1.00, 'un lita con cero céntimos'), + (2.00, 'dos litas con cero céntimos'), + (8.00, 'ocho litas con cero céntimos'), + (12.00, 'doce litas con cero céntimos'), + (21.00, 'veintiun litas con cero céntimos'), + (81.25, 'ochenta y un litas con veinticinco céntimos'), + (350.90, 'trescientos cincuenta litas con noventa céntimos'), + (100.00, 'cien litas con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta litas con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_LVL = ( + (1.00, 'un lat con cero céntimos'), + (2.00, 'dos lats con cero céntimos'), + (8.00, 'ocho lats con cero céntimos'), + (12.00, 'doce lats con cero céntimos'), + (21.00, 'veintiun lats con cero céntimos'), + (81.25, 'ochenta y un lats con veinticinco céntimos'), + (350.90, 'trescientos cincuenta lats con noventa céntimos'), + (100.00, 'cien lats con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta lats con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_LYD = ( + (1.00, 'un dinar con cero dírhams'), + (2.00, 'dos dinares con cero dírhams'), + (8.00, 'ocho dinares con cero dírhams'), + (12.00, 'doce dinares con cero dírhams'), + (21.00, 'veintiun dinares con cero dírhams'), + (81.25, 'ochenta y un dinares con veinticinco dírhams'), + (350.90, 'trescientos cincuenta dinares con noventa dírhams'), + (100.00, 'cien dinares con cero dírhams'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres dírhams'), +) + +TEST_CASES_TO_CURRENCY_MAD = ( + (1.00, 'un dírham con cero céntimos'), + (2.00, 'dos dirhams con cero céntimos'), + (8.00, 'ocho dirhams con cero céntimos'), + (12.00, 'doce dirhams con cero céntimos'), + (21.00, 'veintiun dirhams con cero céntimos'), + (81.25, 'ochenta y un dirhams con veinticinco céntimos'), + (350.90, 'trescientos cincuenta dirhams con noventa céntimos'), + (100.00, 'cien dirhams con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta dirhams con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_MDL = ( + (1.00, 'un leu con cero bani'), + (2.00, 'dos lei con cero bani'), + (8.00, 'ocho lei con cero bani'), + (12.00, 'doce lei con cero bani'), + (21.00, 'veintiun lei con cero bani'), + (81.25, 'ochenta y un lei con veinticinco bani'), + (350.90, 'trescientos cincuenta lei con noventa bani'), + (100.00, 'cien lei con cero bani'), + (4150.83, + 'cuatro mil ciento cincuenta lei con ochenta y tres bani'), +) + +TEST_CASES_TO_CURRENCY_MGA = ( + (1.00, 'un ariary con cero iraimbilanja'), + (2.00, 'dos ariaris con cero iraimbilanja'), + (8.00, 'ocho ariaris con cero iraimbilanja'), + (12.00, 'doce ariaris con cero iraimbilanja'), + (21.00, 'veintiun ariaris con cero iraimbilanja'), + (81.25, 'ochenta y un ariaris con veinticinco iraimbilanja'), + (350.90, 'trescientos cincuenta ariaris con noventa iraimbilanja'), + (100.00, 'cien ariaris con cero iraimbilanja'), + (4150.83, + 'cuatro mil ciento cincuenta ariaris con ochenta y tres iraimbilanja'), +) + +TEST_CASES_TO_CURRENCY_MKD = ( + (1.00, 'un denar con cero denis'), + (2.00, 'dos denares con cero denis'), + (8.00, 'ocho denares con cero denis'), + (12.00, 'doce denares con cero denis'), + (21.00, 'veintiun denares con cero denis'), + (81.25, 'ochenta y un denares con veinticinco denis'), + (350.90, 'trescientos cincuenta denares con noventa denis'), + (100.00, 'cien denares con cero denis'), + (4150.83, + 'cuatro mil ciento cincuenta denares con ochenta y tres denis'), +) + +TEST_CASES_TO_CURRENCY_MMK = ( + (1.00, 'un kiat con cero pyas'), + (2.00, 'dos kiats con cero pyas'), + (8.00, 'ocho kiats con cero pyas'), + (12.00, 'doce kiats con cero pyas'), + (21.00, 'veintiun kiats con cero pyas'), + (81.25, 'ochenta y un kiats con veinticinco pyas'), + (350.90, 'trescientos cincuenta kiats con noventa pyas'), + (100.00, 'cien kiats con cero pyas'), + (4150.83, + 'cuatro mil ciento cincuenta kiats con ochenta y tres pyas'), +) + +TEST_CASES_TO_CURRENCY_MNT = ( + (1.00, 'un tugrik con cero möngö'), + (2.00, 'dos tugriks con cero möngö'), + (8.00, 'ocho tugriks con cero möngö'), + (12.00, 'doce tugriks con cero möngö'), + (21.00, 'veintiun tugriks con cero möngö'), + (81.25, 'ochenta y un tugriks con veinticinco möngö'), + (350.90, 'trescientos cincuenta tugriks con noventa möngö'), + (100.00, 'cien tugriks con cero möngö'), + (4150.83, + 'cuatro mil ciento cincuenta tugriks con ochenta y tres möngö'), +) + +TEST_CASES_TO_CURRENCY_MOP = ( + (1.00, 'un pataca con cero avos'), + (2.00, 'dos patacas con cero avos'), + (8.00, 'ocho patacas con cero avos'), + (12.00, 'doce patacas con cero avos'), + (21.00, 'veintiun patacas con cero avos'), + (81.25, 'ochenta y un patacas con veinticinco avos'), + (350.90, 'trescientos cincuenta patacas con noventa avos'), + (100.00, 'cien patacas con cero avos'), + (4150.83, + 'cuatro mil ciento cincuenta patacas con ochenta y tres avos'), +) + +TEST_CASES_TO_CURRENCY_MRO = ( + (1.00, 'un ouguiya con cero khoums'), + (2.00, 'dos ouguiyas con cero khoums'), + (8.00, 'ocho ouguiyas con cero khoums'), + (12.00, 'doce ouguiyas con cero khoums'), + (21.00, 'veintiun ouguiyas con cero khoums'), + (81.25, 'ochenta y un ouguiyas con veinticinco khoums'), + (350.90, 'trescientos cincuenta ouguiyas con noventa khoums'), + (100.00, 'cien ouguiyas con cero khoums'), + (4150.83, + 'cuatro mil ciento cincuenta ouguiyas con ochenta y tres khoums'), +) + +TEST_CASES_TO_CURRENCY_MRU = ( + (1.00, 'un ouguiya con cero khoums'), + (2.00, 'dos ouguiyas con cero khoums'), + (8.00, 'ocho ouguiyas con cero khoums'), + (12.00, 'doce ouguiyas con cero khoums'), + (21.00, 'veintiun ouguiyas con cero khoums'), + (81.25, 'ochenta y un ouguiyas con veinticinco khoums'), + (350.90, 'trescientos cincuenta ouguiyas con noventa khoums'), + (100.00, 'cien ouguiyas con cero khoums'), + (4150.83, + 'cuatro mil ciento cincuenta ouguiyas con ochenta y tres khoums'), +) + +TEST_CASES_TO_CURRENCY_MUR = ( + (1.00, 'una rupia con cero céntimos'), + (2.00, 'dos rupias con cero céntimos'), + (8.00, 'ocho rupias con cero céntimos'), + (12.00, 'doce rupias con cero céntimos'), + (21.00, 'veintiun rupias con cero céntimos'), + (81.25, 'ochenta y un rupias con veinticinco céntimos'), + (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (100.00, 'cien rupias con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_MVR = ( + (1.00, 'un rufiyaa con cero laari'), + (2.00, 'dos rufiyaas con cero laari'), + (8.00, 'ocho rufiyaas con cero laari'), + (12.00, 'doce rufiyaas con cero laari'), + (21.00, 'veintiun rufiyaas con cero laari'), + (81.25, 'ochenta y un rufiyaas con veinticinco laari'), + (350.90, 'trescientos cincuenta rufiyaas con noventa laari'), + (100.00, 'cien rufiyaas con cero laari'), + (4150.83, + 'cuatro mil ciento cincuenta rufiyaas con ochenta y tres laari'), +) + +TEST_CASES_TO_CURRENCY_MWK = ( + (1.00, 'un kuacha con cero tambalas'), + (2.00, 'dos kuachas con cero tambalas'), + (8.00, 'ocho kuachas con cero tambalas'), + (12.00, 'doce kuachas con cero tambalas'), + (21.00, 'veintiun kuachas con cero tambalas'), + (81.25, 'ochenta y un kuachas con veinticinco tambalas'), + (350.90, 'trescientos cincuenta kuachas con noventa tambalas'), + (100.00, 'cien kuachas con cero tambalas'), + (4150.83, + 'cuatro mil ciento cincuenta kuachas con ochenta y tres tambalas'), +) + +TEST_CASES_TO_CURRENCY_MYR = ( + (1.00, 'un ringgit con cero céntimos'), + (2.00, 'dos ringgit con cero céntimos'), + (8.00, 'ocho ringgit con cero céntimos'), + (12.00, 'doce ringgit con cero céntimos'), + (21.00, 'veintiun ringgit con cero céntimos'), + (81.25, 'ochenta y un ringgit con veinticinco céntimos'), + (350.90, 'trescientos cincuenta ringgit con noventa céntimos'), + (100.00, 'cien ringgit con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta ringgit con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_MZN = ( + (1.00, 'un metical con cero centavos'), + (2.00, 'dos metical con cero centavos'), + (8.00, 'ocho metical con cero centavos'), + (12.00, 'doce metical con cero centavos'), + (21.00, 'veintiun metical con cero centavos'), + (81.25, 'ochenta y un metical con veinticinco centavos'), + (350.90, 'trescientos cincuenta metical con noventa centavos'), + (100.00, 'cien metical con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta metical con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_NGN = ( + (1.00, 'un naira con cero kobo'), + (2.00, 'dos nairas con cero kobo'), + (8.00, 'ocho nairas con cero kobo'), + (12.00, 'doce nairas con cero kobo'), + (21.00, 'veintiun nairas con cero kobo'), + (81.25, 'ochenta y un nairas con veinticinco kobo'), + (350.90, 'trescientos cincuenta nairas con noventa kobo'), + (100.00, 'cien nairas con cero kobo'), + (4150.83, + 'cuatro mil ciento cincuenta nairas con ochenta y tres kobo'), +) + +TEST_CASES_TO_CURRENCY_NPR = ( + (1.00, 'una rupia con cero paisas'), + (2.00, 'dos rupias con cero paisas'), + (8.00, 'ocho rupias con cero paisas'), + (12.00, 'doce rupias con cero paisas'), + (21.00, 'veintiun rupias con cero paisas'), + (81.25, 'ochenta y un rupias con veinticinco paisas'), + (350.90, 'trescientos cincuenta rupias con noventa paisas'), + (100.00, 'cien rupias con cero paisas'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres paisas'), +) + +TEST_CASES_TO_CURRENCY_OMR = ( + (1.00, 'un rial con cero baisa'), + (2.00, 'dos riales con cero baisa'), + (8.00, 'ocho riales con cero baisa'), + (12.00, 'doce riales con cero baisa'), + (21.00, 'veintiun riales con cero baisa'), + (81.25, 'ochenta y un riales con veinticinco baisa'), + (350.90, 'trescientos cincuenta riales con noventa baisa'), + (100.00, 'cien riales con cero baisa'), + (4150.83, + 'cuatro mil ciento cincuenta riales con ochenta y tres baisa'), +) + +TEST_CASES_TO_CURRENCY_PAB = ( + (1.00, 'un balboa con cero centésimos'), + (2.00, 'dos balboas con cero centésimos'), + (8.00, 'ocho balboas con cero centésimos'), + (12.00, 'doce balboas con cero centésimos'), + (21.00, 'veintiun balboas con cero centésimos'), + (81.25, 'ochenta y un balboas con veinticinco centésimos'), + (350.90, 'trescientos cincuenta balboas con noventa centésimos'), + (100.00, 'cien balboas con cero centésimos'), + (4150.83, + 'cuatro mil ciento cincuenta balboas con ochenta y tres centésimos'), +) + +TEST_CASES_TO_CURRENCY_PGK = ( + (1.00, 'un kina con cero toea'), + (2.00, 'dos kinas con cero toea'), + (8.00, 'ocho kinas con cero toea'), + (12.00, 'doce kinas con cero toea'), + (21.00, 'veintiun kinas con cero toea'), + (81.25, 'ochenta y un kinas con veinticinco toea'), + (350.90, 'trescientos cincuenta kinas con noventa toea'), + (100.00, 'cien kinas con cero toea'), + (4150.83, + 'cuatro mil ciento cincuenta kinas con ochenta y tres toea'), +) + +TEST_CASES_TO_CURRENCY_PKR = ( + (1.00, 'una rupia con cero paisas'), + (2.00, 'dos rupias con cero paisas'), + (8.00, 'ocho rupias con cero paisas'), + (12.00, 'doce rupias con cero paisas'), + (21.00, 'veintiun rupias con cero paisas'), + (81.25, 'ochenta y un rupias con veinticinco paisas'), + (350.90, 'trescientos cincuenta rupias con noventa paisas'), + (100.00, 'cien rupias con cero paisas'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres paisas'), +) + +TEST_CASES_TO_CURRENCY_PLZ = ( + (1.00, 'un zloty con cero groszy'), + (2.00, 'dos zlotys con cero groszy'), + (8.00, 'ocho zlotys con cero groszy'), + (12.00, 'doce zlotys con cero groszy'), + (21.00, 'veintiun zlotys con cero groszy'), + (81.25, 'ochenta y un zlotys con veinticinco groszy'), + (350.90, 'trescientos cincuenta zlotys con noventa groszy'), + (100.00, 'cien zlotys con cero groszy'), + (4150.83, + 'cuatro mil ciento cincuenta zlotys con ochenta y tres groszy'), +) + +TEST_CASES_TO_CURRENCY_PYG = ( + (1.00, 'un guaraní con cero céntimos'), + (2.00, 'dos guaranís con cero céntimos'), + (8.00, 'ocho guaranís con cero céntimos'), + (12.00, 'doce guaranís con cero céntimos'), + (21.00, 'veintiun guaranís con cero céntimos'), + (81.25, 'ochenta y un guaranís con veinticinco céntimos'), + (350.90, 'trescientos cincuenta guaranís con noventa céntimos'), + (100.00, 'cien guaranís con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta guaranís con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_QAR = ( + (1.00, 'un rial con cero dírhams'), + (2.00, 'dos riales con cero dírhams'), + (8.00, 'ocho riales con cero dírhams'), + (12.00, 'doce riales con cero dírhams'), + (21.00, 'veintiun riales con cero dírhams'), + (81.25, 'ochenta y un riales con veinticinco dírhams'), + (350.90, 'trescientos cincuenta riales con noventa dírhams'), + (100.00, 'cien riales con cero dírhams'), + (4150.83, + 'cuatro mil ciento cincuenta riales con ochenta y tres dírhams'), +) + +TEST_CASES_TO_CURRENCY_RSD = ( + (1.00, 'un dinar con cero para'), + (2.00, 'dos dinares con cero para'), + (8.00, 'ocho dinares con cero para'), + (12.00, 'doce dinares con cero para'), + (21.00, 'veintiun dinares con cero para'), + (81.25, 'ochenta y un dinares con veinticinco para'), + (350.90, 'trescientos cincuenta dinares con noventa para'), + (100.00, 'cien dinares con cero para'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres para'), +) + +TEST_CASES_TO_CURRENCY_RUR = ( + (1.00, 'un rublo con cero kopeks'), + (2.00, 'dos rublos con cero kopeks'), + (8.00, 'ocho rublos con cero kopeks'), + (12.00, 'doce rublos con cero kopeks'), + (21.00, 'veintiun rublos con cero kopeks'), + (81.25, 'ochenta y un rublos con veinticinco kopeks'), + (350.90, 'trescientos cincuenta rublos con noventa kopeks'), + (100.00, 'cien rublos con cero kopeks'), + (4150.83, + 'cuatro mil ciento cincuenta rublos con ochenta y tres kopeks'), +) + +TEST_CASES_TO_CURRENCY_SAR = ( + (1.00, 'un riyal con cero halalas'), + (2.00, 'dos riales con cero halalas'), + (8.00, 'ocho riales con cero halalas'), + (12.00, 'doce riales con cero halalas'), + (21.00, 'veintiun riales con cero halalas'), + (81.25, 'ochenta y un riales con veinticinco halalas'), + (350.90, 'trescientos cincuenta riales con noventa halalas'), + (100.00, 'cien riales con cero halalas'), + (4150.83, + 'cuatro mil ciento cincuenta riales con ochenta y tres halalas'), +) + +TEST_CASES_TO_CURRENCY_SCR = ( + (1.00, 'una rupia con cero céntimos'), + (2.00, 'dos rupias con cero céntimos'), + (8.00, 'ocho rupias con cero céntimos'), + (12.00, 'doce rupias con cero céntimos'), + (21.00, 'veintiun rupias con cero céntimos'), + (81.25, 'ochenta y un rupias con veinticinco céntimos'), + (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (100.00, 'cien rupias con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_SHP = ( + (1.00, 'una libra con cero peniques'), + (2.00, 'dos libras con cero peniques'), + (8.00, 'ocho libras con cero peniques'), + (12.00, 'doce libras con cero peniques'), + (21.00, 'veintiun libras con cero peniques'), + (81.25, 'ochenta y un libras con veinticinco peniques'), + (350.90, 'trescientos cincuenta libras con noventa peniques'), + (100.00, 'cien libras con cero peniques'), + (4150.83, + 'cuatro mil ciento cincuenta libras con ochenta y tres peniques'), +) + +TEST_CASES_TO_CURRENCY_SKK = ( + (1.00, 'una corona con cero haliers'), + (2.00, 'dos coronas con cero haliers'), + (8.00, 'ocho coronas con cero haliers'), + (12.00, 'doce coronas con cero haliers'), + (21.00, 'veintiun coronas con cero haliers'), + (81.25, 'ochenta y un coronas con veinticinco haliers'), + (350.90, 'trescientos cincuenta coronas con noventa haliers'), + (100.00, 'cien coronas con cero haliers'), + (4150.83, + 'cuatro mil ciento cincuenta coronas con ochenta y tres haliers'), +) + +TEST_CASES_TO_CURRENCY_SLL = ( + (1.00, 'una leona con cero céntimos'), + (2.00, 'dos leonas con cero céntimos'), + (8.00, 'ocho leonas con cero céntimos'), + (12.00, 'doce leonas con cero céntimos'), + (21.00, 'veintiun leonas con cero céntimos'), + (81.25, 'ochenta y un leonas con veinticinco céntimos'), + (350.90, 'trescientos cincuenta leonas con noventa céntimos'), + (100.00, 'cien leonas con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta leonas con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_STD = ( + (1.00, 'un dobra con cero céntimos'), + (2.00, 'dos dobras con cero céntimos'), + (8.00, 'ocho dobras con cero céntimos'), + (12.00, 'doce dobras con cero céntimos'), + (21.00, 'veintiun dobras con cero céntimos'), + (81.25, 'ochenta y un dobras con veinticinco céntimos'), + (350.90, 'trescientos cincuenta dobras con noventa céntimos'), + (100.00, 'cien dobras con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta dobras con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_SVC = ( + (1.00, 'un colón con cero centavos'), + (2.00, 'dos colones con cero centavos'), + (8.00, 'ocho colones con cero centavos'), + (12.00, 'doce colones con cero centavos'), + (21.00, 'veintiun colones con cero centavos'), + (81.25, 'ochenta y un colones con veinticinco centavos'), + (350.90, 'trescientos cincuenta colones con noventa centavos'), + (100.00, 'cien colones con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta colones con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_SZL = ( + (1.00, 'un lilangeni con cero céntimos'), + (2.00, 'dos emalangeni con cero céntimos'), + (8.00, 'ocho emalangeni con cero céntimos'), + (12.00, 'doce emalangeni con cero céntimos'), + (21.00, 'veintiun emalangeni con cero céntimos'), + (81.25, 'ochenta y un emalangeni con veinticinco céntimos'), + (350.90, 'trescientos cincuenta emalangeni con noventa céntimos'), + (100.00, 'cien emalangeni con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta emalangeni con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_TJS = ( + (1.00, 'un somoni con cero dirames'), + (2.00, 'dos somonis con cero dirames'), + (8.00, 'ocho somonis con cero dirames'), + (12.00, 'doce somonis con cero dirames'), + (21.00, 'veintiun somonis con cero dirames'), + (81.25, 'ochenta y un somonis con veinticinco dirames'), + (350.90, 'trescientos cincuenta somonis con noventa dirames'), + (100.00, 'cien somonis con cero dirames'), + (4150.83, + 'cuatro mil ciento cincuenta somonis con ochenta y tres dirames'), +) + +TEST_CASES_TO_CURRENCY_TMT = ( + (1.00, 'un manat con cero tenge'), + (2.00, 'dos manat con cero tenge'), + (8.00, 'ocho manat con cero tenge'), + (12.00, 'doce manat con cero tenge'), + (21.00, 'veintiun manat con cero tenge'), + (81.25, 'ochenta y un manat con veinticinco tenge'), + (350.90, 'trescientos cincuenta manat con noventa tenge'), + (100.00, 'cien manat con cero tenge'), + (4150.83, + 'cuatro mil ciento cincuenta manat con ochenta y tres tenge'), +) + +TEST_CASES_TO_CURRENCY_TND = ( + (1.00, 'un dinar con cero milésimos'), + (2.00, 'dos dinares con cero milésimos'), + (8.00, 'ocho dinares con cero milésimos'), + (12.00, 'doce dinares con cero milésimos'), + (21.00, 'veintiun dinares con cero milésimos'), + (81.25, 'ochenta y un dinares con veinticinco milésimos'), + (350.90, 'trescientos cincuenta dinares con noventa milésimos'), + (100.00, 'cien dinares con cero milésimos'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres milésimos'), +) + +TEST_CASES_TO_CURRENCY_TOP = ( + (1.00, 'un paanga con cero céntimos'), + (2.00, 'dos paangas con cero céntimos'), + (8.00, 'ocho paangas con cero céntimos'), + (12.00, 'doce paangas con cero céntimos'), + (21.00, 'veintiun paangas con cero céntimos'), + (81.25, 'ochenta y un paangas con veinticinco céntimos'), + (350.90, 'trescientos cincuenta paangas con noventa céntimos'), + (100.00, 'cien paangas con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta paangas con ochenta y tres céntimos'), +) + +wordamount = "{} {}".format("cuatro mil ciento cincuenta", + "nuevos dolares con ochenta y tres céntimos") + +TEST_CASES_TO_CURRENCY_TWD = ( + (1.00, 'un nuevo dólar con cero céntimos'), + (2.00, 'dos nuevos dolares con cero céntimos'), + (8.00, 'ocho nuevos dolares con cero céntimos'), + (12.00, 'doce nuevos dolares con cero céntimos'), + (21.00, 'veintiun nuevos dolares con cero céntimos'), + (81.25, 'ochenta y un nuevos dolares con veinticinco céntimos'), + (350.90, 'trescientos cincuenta nuevos dolares con noventa céntimos'), + (100.00, 'cien nuevos dolares con cero céntimos'), + (4150.83, wordamount), +) + +TEST_CASES_TO_CURRENCY_TZS = ( + (1.00, 'un chelín con cero céntimos'), + (2.00, 'dos chelines con cero céntimos'), + (8.00, 'ocho chelines con cero céntimos'), + (12.00, 'doce chelines con cero céntimos'), + (21.00, 'veintiun chelines con cero céntimos'), + (81.25, 'ochenta y un chelines con veinticinco céntimos'), + (350.90, 'trescientos cincuenta chelines con noventa céntimos'), + (100.00, 'cien chelines con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta chelines con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_UAG = ( + (1.00, 'un hryvnia con cero kopiykas'), + (2.00, 'dos hryvnias con cero kopiykas'), + (8.00, 'ocho hryvnias con cero kopiykas'), + (12.00, 'doce hryvnias con cero kopiykas'), + (21.00, 'veintiun hryvnias con cero kopiykas'), + (81.25, 'ochenta y un hryvnias con veinticinco kopiykas'), + (350.90, 'trescientos cincuenta hryvnias con noventa kopiykas'), + (100.00, 'cien hryvnias con cero kopiykas'), + (4150.83, + 'cuatro mil ciento cincuenta hryvnias con ochenta y tres kopiykas'), +) + +TEST_CASES_TO_CURRENCY_UGX = ( + (1.00, 'un chelín con cero céntimos'), + (2.00, 'dos chelines con cero céntimos'), + (8.00, 'ocho chelines con cero céntimos'), + (12.00, 'doce chelines con cero céntimos'), + (21.00, 'veintiun chelines con cero céntimos'), + (81.25, 'ochenta y un chelines con veinticinco céntimos'), + (350.90, 'trescientos cincuenta chelines con noventa céntimos'), + (100.00, 'cien chelines con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta chelines con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_UYU = ( + (1.00, 'un peso con cero centésimos'), + (2.00, 'dos pesos con cero centésimos'), + (8.00, 'ocho pesos con cero centésimos'), + (12.00, 'doce pesos con cero centésimos'), + (21.00, 'veintiun pesos con cero centésimos'), + (81.25, 'ochenta y un pesos con veinticinco centésimos'), + (350.90, 'trescientos cincuenta pesos con noventa centésimos'), + (100.00, 'cien pesos con cero centésimos'), + (4150.83, + 'cuatro mil ciento cincuenta pesos con ochenta y tres centésimos'), +) + +TEST_CASES_TO_CURRENCY_UZS = ( + (1.00, 'un sum con cero tiyin'), + (2.00, 'dos sum con cero tiyin'), + (8.00, 'ocho sum con cero tiyin'), + (12.00, 'doce sum con cero tiyin'), + (21.00, 'veintiun sum con cero tiyin'), + (81.25, 'ochenta y un sum con veinticinco tiyin'), + (350.90, 'trescientos cincuenta sum con noventa tiyin'), + (100.00, 'cien sum con cero tiyin'), + (4150.83, + 'cuatro mil ciento cincuenta sum con ochenta y tres tiyin'), +) + +wordamount = "{} {}".format("cuatro mil ciento cincuenta", + "bolívares fuertes con ochenta y tres céntimos") + +TEST_CASES_TO_CURRENCY_VEF = ( + (1.00, 'un bolívar fuerte con cero céntimos'), + (2.00, 'dos bolívares fuertes con cero céntimos'), + (8.00, 'ocho bolívares fuertes con cero céntimos'), + (12.00, 'doce bolívares fuertes con cero céntimos'), + (21.00, 'veintiun bolívares fuertes con cero céntimos'), + (81.25, 'ochenta y un bolívares fuertes con veinticinco céntimos'), + (350.90, 'trescientos cincuenta bolívares fuertes con noventa céntimos'), + (100.00, 'cien bolívares fuertes con cero céntimos'), + (4150.83, wordamount), +) + +TEST_CASES_TO_CURRENCY_VND = ( + (1.00, 'un dong con cero xu'), + (2.00, 'dos dongs con cero xu'), + (8.00, 'ocho dongs con cero xu'), + (12.00, 'doce dongs con cero xu'), + (21.00, 'veintiun dongs con cero xu'), + (81.25, 'ochenta y un dongs con veinticinco xu'), + (350.90, 'trescientos cincuenta dongs con noventa xu'), + (100.00, 'cien dongs con cero xu'), + (4150.83, + 'cuatro mil ciento cincuenta dongs con ochenta y tres xu'), +) + +TEST_CASES_TO_CURRENCY_VUV = ( + (1.00, 'un vatu con cero nenhum'), + (2.00, 'dos vatu con cero nenhum'), + (8.00, 'ocho vatu con cero nenhum'), + (12.00, 'doce vatu con cero nenhum'), + (21.00, 'veintiun vatu con cero nenhum'), + (81.25, 'ochenta y un vatu con veinticinco nenhum'), + (350.90, 'trescientos cincuenta vatu con noventa nenhum'), + (100.00, 'cien vatu con cero nenhum'), + (4150.83, + 'cuatro mil ciento cincuenta vatu con ochenta y tres nenhum'), +) + +TEST_CASES_TO_CURRENCY_WST = ( + (1.00, 'un tala con cero centavos'), + (2.00, 'dos tala con cero centavos'), + (8.00, 'ocho tala con cero centavos'), + (12.00, 'doce tala con cero centavos'), + (21.00, 'veintiun tala con cero centavos'), + (81.25, 'ochenta y un tala con veinticinco centavos'), + (350.90, 'trescientos cincuenta tala con noventa centavos'), + (100.00, 'cien tala con cero centavos'), + (4150.83, + 'cuatro mil ciento cincuenta tala con ochenta y tres centavos'), +) + +TEST_CASES_TO_CURRENCY_XAF = ( + (1.00, 'un franco CFA con cero céntimos'), + (2.00, 'dos francos CFA con cero céntimos'), + (8.00, 'ocho francos CFA con cero céntimos'), + (12.00, 'doce francos CFA con cero céntimos'), + (21.00, 'veintiun francos CFA con cero céntimos'), + (81.25, 'ochenta y un francos CFA con veinticinco céntimos'), + (350.90, 'trescientos cincuenta francos CFA con noventa céntimos'), + (100.00, 'cien francos CFA con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta francos CFA con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_XPF = ( + (1.00, 'un franco CFP con cero céntimos'), + (2.00, 'dos francos CFP con cero céntimos'), + (8.00, 'ocho francos CFP con cero céntimos'), + (12.00, 'doce francos CFP con cero céntimos'), + (21.00, 'veintiun francos CFP con cero céntimos'), + (81.25, 'ochenta y un francos CFP con veinticinco céntimos'), + (350.90, 'trescientos cincuenta francos CFP con noventa céntimos'), + (100.00, 'cien francos CFP con cero céntimos'), + (4150.83, + 'cuatro mil ciento cincuenta francos CFP con ochenta y tres céntimos'), +) + +TEST_CASES_TO_CURRENCY_YER = ( + (1.00, 'un rial con cero fils'), + (2.00, 'dos riales con cero fils'), + (8.00, 'ocho riales con cero fils'), + (12.00, 'doce riales con cero fils'), + (21.00, 'veintiun riales con cero fils'), + (81.25, 'ochenta y un riales con veinticinco fils'), + (350.90, 'trescientos cincuenta riales con noventa fils'), + (100.00, 'cien riales con cero fils'), + (4150.83, + 'cuatro mil ciento cincuenta riales con ochenta y tres fils'), +) + +TEST_CASES_TO_CURRENCY_YUM = ( + (1.00, 'un dinar con cero para'), + (2.00, 'dos dinares con cero para'), + (8.00, 'ocho dinares con cero para'), + (12.00, 'doce dinares con cero para'), + (21.00, 'veintiun dinares con cero para'), + (81.25, 'ochenta y un dinares con veinticinco para'), + (350.90, 'trescientos cincuenta dinares con noventa para'), + (100.00, 'cien dinares con cero para'), + (4150.83, + 'cuatro mil ciento cincuenta dinares con ochenta y tres para'), +) + +TEST_CASES_TO_CURRENCY_ZMW = ( + (1.00, 'un kwacha con cero ngwee'), + (2.00, 'dos kwachas con cero ngwee'), + (8.00, 'ocho kwachas con cero ngwee'), + (12.00, 'doce kwachas con cero ngwee'), + (21.00, 'veintiun kwachas con cero ngwee'), + (81.25, 'ochenta y un kwachas con veinticinco ngwee'), + (350.90, 'trescientos cincuenta kwachas con noventa ngwee'), + (100.00, 'cien kwachas con cero ngwee'), + (4150.83, + 'cuatro mil ciento cincuenta kwachas con ochenta y tres ngwee'), +) + +TEST_CASES_TO_CURRENCY_ZRZ = ( + (1.00, 'un zaire con cero makuta'), + (2.00, 'dos zaires con cero makuta'), + (8.00, 'ocho zaires con cero makuta'), + (12.00, 'doce zaires con cero makuta'), + (21.00, 'veintiun zaires con cero makuta'), + (81.25, 'ochenta y un zaires con veinticinco makuta'), + (350.90, 'trescientos cincuenta zaires con noventa makuta'), + (100.00, 'cien zaires con cero makuta'), + (4150.83, + 'cuatro mil ciento cincuenta zaires con ochenta y tres makuta'), +) + class Num2WordsESTest(TestCase): @@ -204,3 +1859,1172 @@ class Num2WordsESTest(TestCase): num2words(test[0], lang='es', to='currency', currency='PEN'), test[1] ) + + def test_currency_crc(self): + for test in TEST_CASES_TO_CURRENCY_CRC: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CRC'), + test[1] + ) + + def test_currency_aud(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AUD'), + test[1] + ) + + def test_currency_cad(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CAD'), + test[1] + ) + + def test_currency_gbp(self): + for test in TEST_CASES_TO_CURRENCY_GBP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GBP'), + test[1] + ) + + def test_currency_rub(self): + for test in TEST_CASES_TO_CURRENCY_RUB: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='RUB'), + test[1] + ) + + def test_currency_sek(self): + for test in TEST_CASES_TO_CURRENCY_SEK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SEK'), + test[1] + ) + + def test_currency_nok(self): + for test in TEST_CASES_TO_CURRENCY_NOK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='NOK'), + test[1] + ) + + def test_currency_pln(self): + for test in TEST_CASES_TO_CURRENCY_PLN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PLN'), + test[1] + ) + + def test_currency_mxn(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MXN'), + test[1] + ) + + def test_currency_ron(self): + for test in TEST_CASES_TO_CURRENCY_RON: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='RON'), + test[1] + ) + + def test_currency_inr(self): + for test in TEST_CASES_TO_CURRENCY_INR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='INR'), + test[1] + ) + + def test_currency_huf(self): + for test in TEST_CASES_TO_CURRENCY_HUF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='HUF'), + test[1] + ) + + def test_currency_frf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='FRF'), + test[1] + ) + + def test_currency_cny(self): + for test in TEST_CASES_TO_CURRENCY_CNY: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CNY'), + test[1] + ) + + def test_currency_czk(self): + for test in TEST_CASES_TO_CURRENCY_CZK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CZK'), + test[1] + ) + + def test_currency_nio(self): + for test in TEST_CASES_TO_CURRENCY_NIO: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='NIO'), + test[1] + ) + + def test_currency_ves(self): + for test in TEST_CASES_TO_CURRENCY_VES: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='VES'), + test[1] + ) + + def test_currency_brl(self): + for test in TEST_CASES_TO_CURRENCY_BRL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BRL'), + test[1] + ) + + def test_currency_chf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CHF'), + test[1] + ) + + def test_currency_jpy(self): + for test in TEST_CASES_TO_CURRENCY_JPY: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='JPY'), + test[1] + ) + + def test_currency_krw(self): + for test in TEST_CASES_TO_CURRENCY_KRW: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KRW'), + test[1] + ) + + def test_currency_kpw(self): + for test in TEST_CASES_TO_CURRENCY_KPW: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KPW'), + test[1] + ) + + def test_currency_try(self): + for test in TEST_CASES_TO_CURRENCY_TRY: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TRY'), + test[1] + ) + + def test_currency_zar(self): + for test in TEST_CASES_TO_CURRENCY_ZAR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ZAR'), + test[1] + ) + + def test_currency_kzt(self): + for test in TEST_CASES_TO_CURRENCY_KZT: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KZT'), + test[1] + ) + + def test_currency_uah(self): + for test in TEST_CASES_TO_CURRENCY_UAH: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='UAH'), + test[1] + ) + + def test_currency_thb(self): + for test in TEST_CASES_TO_CURRENCY_THB: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='THB'), + test[1] + ) + + def test_currency_aed(self): + for test in TEST_CASES_TO_CURRENCY_AED: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AED'), + test[1] + ) + + def test_currency_afn(self): + for test in TEST_CASES_TO_CURRENCY_AFN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AFN'), + test[1] + ) + + def test_currency_all(self): + for test in TEST_CASES_TO_CURRENCY_ALL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ALL'), + test[1] + ) + + def test_currency_amd(self): + for test in TEST_CASES_TO_CURRENCY_AMD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AMD'), + test[1] + ) + + def test_currency_ang(self): + for test in TEST_CASES_TO_CURRENCY_ANG: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ANG'), + test[1] + ) + + def test_currency_aoa(self): + for test in TEST_CASES_TO_CURRENCY_AOA: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AOA'), + test[1] + ) + + def test_currency_ars(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ARS'), + test[1] + ) + + def test_currency_awg(self): + for test in TEST_CASES_TO_CURRENCY_AWG: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AWG'), + test[1] + ) + + def test_currency_azn(self): + for test in TEST_CASES_TO_CURRENCY_AZN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='AZN'), + test[1] + ) + + def test_currency_bbd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BBD'), + test[1] + ) + + def test_currency_bdt(self): + for test in TEST_CASES_TO_CURRENCY_BDT: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BDT'), + test[1] + ) + + def test_currency_bgn(self): + for test in TEST_CASES_TO_CURRENCY_BGN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BGN'), + test[1] + ) + + def test_currency_bhd(self): + for test in TEST_CASES_TO_CURRENCY_BHD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BHD'), + test[1] + ) + + def test_currency_bif(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BIF'), + test[1] + ) + + def test_currency_bmd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BMD'), + test[1] + ) + + def test_currency_bnd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BND'), + test[1] + ) + + def test_currency_bob(self): + for test in TEST_CASES_TO_CURRENCY_BOB: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BOB'), + test[1] + ) + + def test_currency_bsd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BSD'), + test[1] + ) + + def test_currency_btn(self): + for test in TEST_CASES_TO_CURRENCY_BTN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BTN'), + test[1] + ) + + def test_currency_bwp(self): + for test in TEST_CASES_TO_CURRENCY_BWP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BWP'), + test[1] + ) + + def test_currency_byn(self): + for test in TEST_CASES_TO_CURRENCY_BYN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BYN'), + test[1] + ) + + def test_currency_byr(self): + for test in TEST_CASES_TO_CURRENCY_BYR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BYR'), + test[1] + ) + + def test_currency_bzd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='BZD'), + test[1] + ) + + def test_currency_cdf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CDF'), + test[1] + ) + + def test_currency_clp(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CLP'), + test[1] + ) + + def test_currency_cop(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='COP'), + test[1] + ) + + def test_currency_cup(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CUP'), + test[1] + ) + + def test_currency_cve(self): + for test in TEST_CASES_TO_CURRENCY_CVE: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CVE'), + test[1] + ) + + def test_currency_cyp(self): + for test in TEST_CASES_TO_CURRENCY_CYP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='CYP'), + test[1] + ) + + def test_currency_djf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='DJF'), + test[1] + ) + + def test_currency_dkk(self): + for test in TEST_CASES_TO_CURRENCY_DKK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='DKK'), + test[1] + ) + + def test_currency_dop(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='DOP'), + test[1] + ) + + def test_currency_dzd(self): + for test in TEST_CASES_TO_CURRENCY_DZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='DZD'), + test[1] + ) + + def test_currency_ecs(self): + for test in TEST_CASES_TO_CURRENCY_ECS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ECS'), + test[1] + ) + + def test_currency_egp(self): + for test in TEST_CASES_TO_CURRENCY_EGP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='EGP'), + test[1] + ) + + def test_currency_ern(self): + for test in TEST_CASES_TO_CURRENCY_ERN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ERN'), + test[1] + ) + + def test_currency_etb(self): + for test in TEST_CASES_TO_CURRENCY_ETB: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ETB'), + test[1] + ) + + def test_currency_fjd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='FJD'), + test[1] + ) + + def test_currency_fkp(self): + for test in TEST_CASES_TO_CURRENCY_FKP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='FKP'), + test[1] + ) + + def test_currency_gel(self): + for test in TEST_CASES_TO_CURRENCY_GEL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GEL'), + test[1] + ) + + def test_currency_ghs(self): + for test in TEST_CASES_TO_CURRENCY_GHS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GHS'), + test[1] + ) + + def test_currency_gip(self): + for test in TEST_CASES_TO_CURRENCY_FKP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GIP'), + test[1] + ) + + def test_currency_gmd(self): + for test in TEST_CASES_TO_CURRENCY_GMD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GMD'), + test[1] + ) + + def test_currency_gnf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GNF'), + test[1] + ) + + def test_currency_gtq(self): + for test in TEST_CASES_TO_CURRENCY_GTQ: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GTQ'), + test[1] + ) + + def test_currency_gyd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='GYD'), + test[1] + ) + + def test_currency_hkd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='HKD'), + test[1] + ) + + def test_currency_hnl(self): + for test in TEST_CASES_TO_CURRENCY_HNL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='HNL'), + test[1] + ) + + def test_currency_hrk(self): + for test in TEST_CASES_TO_CURRENCY_HRK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='HRK'), + test[1] + ) + + def test_currency_htg(self): + for test in TEST_CASES_TO_CURRENCY_HTG: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='HTG'), + test[1] + ) + + def test_currency_idr(self): + for test in TEST_CASES_TO_CURRENCY_IDR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='IDR'), + test[1] + ) + + def test_currency_ils(self): + for test in TEST_CASES_TO_CURRENCY_ILS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ILS'), + test[1] + ) + + def test_currency_iqd(self): + for test in TEST_CASES_TO_CURRENCY_IQD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='IQD'), + test[1] + ) + + def test_currency_irr(self): + for test in TEST_CASES_TO_CURRENCY_IRR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='IRR'), + test[1] + ) + + def test_currency_isk(self): + for test in TEST_CASES_TO_CURRENCY_ISK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ISK'), + test[1] + ) + + def test_currency_itl(self): + for test in TEST_CASES_TO_CURRENCY_ITL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ITL'), + test[1] + ) + + def test_currency_jmd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='JMD'), + test[1] + ) + + def test_currency_jod(self): + for test in TEST_CASES_TO_CURRENCY_JOD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='JOD'), + test[1] + ) + + def test_currency_kes(self): + for test in TEST_CASES_TO_CURRENCY_KES: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KES'), + test[1] + ) + + def test_currency_kgs(self): + for test in TEST_CASES_TO_CURRENCY_KGS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KGS'), + test[1] + ) + + def test_currency_khr(self): + for test in TEST_CASES_TO_CURRENCY_KHR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KHR'), + test[1] + ) + + def test_currency_kmf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KMF'), + test[1] + ) + + def test_currency_kwd(self): + for test in TEST_CASES_TO_CURRENCY_KWD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KWD'), + test[1] + ) + + def test_currency_kyd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='KYD'), + test[1] + ) + + def test_currency_lak(self): + for test in TEST_CASES_TO_CURRENCY_LAK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LAK'), + test[1] + ) + + def test_currency_lbp(self): + for test in TEST_CASES_TO_CURRENCY_EGP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LBP'), + test[1] + ) + + def test_currency_lkr(self): + for test in TEST_CASES_TO_CURRENCY_LKR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LKR'), + test[1] + ) + + def test_currency_lrd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LRD'), + test[1] + ) + + def test_currency_lsl(self): + for test in TEST_CASES_TO_CURRENCY_LSL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LSL'), + test[1] + ) + + def test_currency_ltl(self): + for test in TEST_CASES_TO_CURRENCY_LTL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LTL'), + test[1] + ) + + def test_currency_lvl(self): + for test in TEST_CASES_TO_CURRENCY_LVL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LVL'), + test[1] + ) + + def test_currency_lyd(self): + for test in TEST_CASES_TO_CURRENCY_LYD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='LYD'), + test[1] + ) + + def test_currency_mad(self): + for test in TEST_CASES_TO_CURRENCY_MAD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MAD'), + test[1] + ) + + def test_currency_mdl(self): + for test in TEST_CASES_TO_CURRENCY_MDL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MDL'), + test[1] + ) + + def test_currency_mga(self): + for test in TEST_CASES_TO_CURRENCY_MGA: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MGA'), + test[1] + ) + + def test_currency_mkd(self): + for test in TEST_CASES_TO_CURRENCY_MKD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MKD'), + test[1] + ) + + def test_currency_mmk(self): + for test in TEST_CASES_TO_CURRENCY_MMK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MMK'), + test[1] + ) + + def test_currency_mnt(self): + for test in TEST_CASES_TO_CURRENCY_MNT: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MNT'), + test[1] + ) + + def test_currency_mop(self): + for test in TEST_CASES_TO_CURRENCY_MOP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MOP'), + test[1] + ) + + def test_currency_mro(self): + for test in TEST_CASES_TO_CURRENCY_MRO: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MRO'), + test[1] + ) + + def test_currency_mru(self): + for test in TEST_CASES_TO_CURRENCY_MRU: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MRU'), + test[1] + ) + + def test_currency_mur(self): + for test in TEST_CASES_TO_CURRENCY_MUR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MUR'), + test[1] + ) + + def test_currency_mvr(self): + for test in TEST_CASES_TO_CURRENCY_MVR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MVR'), + test[1] + ) + + def test_currency_mwk(self): + for test in TEST_CASES_TO_CURRENCY_MWK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MWK'), + test[1] + ) + + def test_currency_myr(self): + for test in TEST_CASES_TO_CURRENCY_MYR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MYR'), + test[1] + ) + + def test_currency_mzn(self): + for test in TEST_CASES_TO_CURRENCY_MZN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='MZN'), + test[1] + ) + + def test_currency_nad(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='NAD'), + test[1] + ) + + def test_currency_ngn(self): + for test in TEST_CASES_TO_CURRENCY_NGN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='NGN'), + test[1] + ) + + def test_currency_npr(self): + for test in TEST_CASES_TO_CURRENCY_NPR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='NPR'), + test[1] + ) + + def test_currency_nzd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='NZD'), + test[1] + ) + + def test_currency_omr(self): + for test in TEST_CASES_TO_CURRENCY_OMR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='OMR'), + test[1] + ) + + def test_currency_pab(self): + for test in TEST_CASES_TO_CURRENCY_PAB: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PAB'), + test[1] + ) + + def test_currency_pgk(self): + for test in TEST_CASES_TO_CURRENCY_PGK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PGK'), + test[1] + ) + + def test_currency_php(self): + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PHP'), + test[1] + ) + + def test_currency_pkr(self): + for test in TEST_CASES_TO_CURRENCY_PKR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PKR'), + test[1] + ) + + def test_currency_plz(self): + for test in TEST_CASES_TO_CURRENCY_PLZ: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PLZ'), + test[1] + ) + + def test_currency_pyg(self): + for test in TEST_CASES_TO_CURRENCY_PYG: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='PYG'), + test[1] + ) + + def test_currency_qar(self): + for test in TEST_CASES_TO_CURRENCY_QAR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='QAR'), + test[1] + ) + + def test_currency_qtq(self): + for test in TEST_CASES_TO_CURRENCY_GTQ: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='QTQ'), + test[1] + ) + + def test_currency_rsd(self): + for test in TEST_CASES_TO_CURRENCY_RSD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='RSD'), + test[1] + ) + + def test_currency_rur(self): + for test in TEST_CASES_TO_CURRENCY_RUR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='RUR'), + test[1] + ) + + def test_currency_rwf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='RWF'), + test[1] + ) + + def test_currency_sar(self): + for test in TEST_CASES_TO_CURRENCY_SAR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SAR'), + test[1] + ) + + def test_currency_sbd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SBD'), + test[1] + ) + + def test_currency_scr(self): + for test in TEST_CASES_TO_CURRENCY_SCR: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SCR'), + test[1] + ) + + def test_currency_sdg(self): + for test in TEST_CASES_TO_CURRENCY_EGP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SDG'), + test[1] + ) + + def test_currency_sgd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SGD'), + test[1] + ) + + def test_currency_shp(self): + for test in TEST_CASES_TO_CURRENCY_SHP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SHP'), + test[1] + ) + + def test_currency_skk(self): + for test in TEST_CASES_TO_CURRENCY_SKK: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SKK'), + test[1] + ) + + def test_currency_sll(self): + for test in TEST_CASES_TO_CURRENCY_SLL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SLL'), + test[1] + ) + + def test_currency_srd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SRD'), + test[1] + ) + + def test_currency_ssp(self): + for test in TEST_CASES_TO_CURRENCY_EGP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SSP'), + test[1] + ) + + def test_currency_std(self): + for test in TEST_CASES_TO_CURRENCY_STD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='STD'), + test[1] + ) + + def test_currency_svc(self): + for test in TEST_CASES_TO_CURRENCY_SVC: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SVC'), + test[1] + ) + + def test_currency_syp(self): + for test in TEST_CASES_TO_CURRENCY_EGP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SYP'), + test[1] + ) + + def test_currency_szl(self): + for test in TEST_CASES_TO_CURRENCY_SZL: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='SZL'), + test[1] + ) + + def test_currency_tjs(self): + for test in TEST_CASES_TO_CURRENCY_TJS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TJS'), + test[1] + ) + + def test_currency_tmt(self): + for test in TEST_CASES_TO_CURRENCY_TMT: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TMT'), + test[1] + ) + + def test_currency_tnd(self): + for test in TEST_CASES_TO_CURRENCY_TND: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TND'), + test[1] + ) + + def test_currency_top(self): + for test in TEST_CASES_TO_CURRENCY_TOP: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TOP'), + test[1] + ) + + def test_currency_ttd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TTD'), + test[1] + ) + + def test_currency_twd(self): + for test in TEST_CASES_TO_CURRENCY_TWD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TWD'), + test[1] + ) + + def test_currency_tzs(self): + for test in TEST_CASES_TO_CURRENCY_TZS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='TZS'), + test[1] + ) + + def test_currency_uag(self): + for test in TEST_CASES_TO_CURRENCY_UAG: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='UAG'), + test[1] + ) + + def test_currency_ugx(self): + for test in TEST_CASES_TO_CURRENCY_UGX: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='UGX'), + test[1] + ) + + def test_currency_uyu(self): + for test in TEST_CASES_TO_CURRENCY_UYU: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='UYU'), + test[1] + ) + + def test_currency_uzs(self): + for test in TEST_CASES_TO_CURRENCY_UZS: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='UZS'), + test[1] + ) + + def test_currency_vef(self): + for test in TEST_CASES_TO_CURRENCY_VEF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='VEF'), + test[1] + ) + + def test_currency_vnd(self): + for test in TEST_CASES_TO_CURRENCY_VND: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='VND'), + test[1] + ) + + def test_currency_vuv(self): + for test in TEST_CASES_TO_CURRENCY_VUV: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='VUV'), + test[1] + ) + + def test_currency_wst(self): + for test in TEST_CASES_TO_CURRENCY_WST: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='WST'), + test[1] + ) + + def test_currency_xaf(self): + for test in TEST_CASES_TO_CURRENCY_XAF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='XAF'), + test[1] + ) + + def test_currency_xcd(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='XCD'), + test[1] + ) + + def test_currency_xof(self): + for test in TEST_CASES_TO_CURRENCY_XAF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='XOF'), + test[1] + ) + + def test_currency_xpf(self): + for test in TEST_CASES_TO_CURRENCY_XPF: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='XPF'), + test[1] + ) + + def test_currency_yer(self): + for test in TEST_CASES_TO_CURRENCY_YER: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='YER'), + test[1] + ) + + def test_currency_yum(self): + for test in TEST_CASES_TO_CURRENCY_YUM: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='YUM'), + test[1] + ) + + def test_currency_zmw(self): + for test in TEST_CASES_TO_CURRENCY_ZMW: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ZMW'), + test[1] + ) + + def test_currency_zrz(self): + for test in TEST_CASES_TO_CURRENCY_ZRZ: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ZRZ'), + test[1] + ) + + def test_currency_zwl(self): + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='es', to='currency', currency='ZWL'), + test[1] + ) From 2039df64cff0a36191ac14867ea62dfea6d634c0 Mon Sep 17 00:00:00 2001 From: Peter Nordstrom Date: Wed, 27 Jan 2021 08:09:27 +0100 Subject: [PATCH 16/76] split some lines that were too long for flake8 --- num2words/lang_SV.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/num2words/lang_SV.py b/num2words/lang_SV.py index afdd31e..4e32841 100644 --- a/num2words/lang_SV.py +++ b/num2words/lang_SV.py @@ -42,7 +42,7 @@ class Num2Word_SV(lang_EU.Num2Word_EU): self.exclude_title = ["och", "komma", "minus"] self.mid_numwords = [(1000, "tusen"), (100, "hundra"), - (90, "nittio"), (80, "\åttio"), (70, "sjuttio"), + (90, "nittio"), (80, "åttio"), (70, "sjuttio"), (60, "sextio"), (50, "femtio"), (40, "förtio"), (30, "trettio")] self.low_numwords = ["tjugo", "nitton", "arton", "sjutton", @@ -105,11 +105,13 @@ class Num2Word_SV(lang_EU.Num2Word_EU): return " ".join(outwords) def to_ordinal_num(self, value): - raise NotImplementedError("'ordinal_num' is not implemented for swedish language") + raise NotImplementedError( + "'ordinal_num' is not implemented for swedish language") def to_year(self, val, longval=True): - raise NotImplementedError("'year' is not implemented for swedish language") - + raise NotImplementedError( + "'year' is not implemented for swedish language") def to_currency(self, val, longval=True): - raise NotImplementedError("'currency' is not implemented for swedish language") + raise NotImplementedError( + "'currency' is not implemented for swedish language") From f1cfc8e41ec37ed7dfdc4d803f8a6e7f588154eb Mon Sep 17 00:00:00 2001 From: Peter Nordstrom Date: Thu, 28 Jan 2021 08:09:56 +0100 Subject: [PATCH 17/76] updated readme (added swedish) --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index c84b491..ab4cf65 100644 --- a/README.rst +++ b/README.rst @@ -107,6 +107,7 @@ Besides the numerical argument, there are two main optional arguments. * ``pt_BR`` (Portuguese - Brazilian) * ``sl`` (Slovene) * ``sr`` (Serbian) +* ``sv`` (Swedish) * ``ro`` (Romanian) * ``ru`` (Russian) * ``te`` (Telugu) From 5cb46055d794a4dc3effff22af0b4882900b107e Mon Sep 17 00:00:00 2001 From: Erwin de Haan <1627021+EraYaN@users.noreply.github.com> Date: Sun, 14 Feb 2021 19:56:24 +0100 Subject: [PATCH 18/76] Fix ordinal_num output for Dutch (NL) --- num2words/lang_NL.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/lang_NL.py b/num2words/lang_NL.py index 8725714..7251e2a 100644 --- a/num2words/lang_NL.py +++ b/num2words/lang_NL.py @@ -138,7 +138,7 @@ class Num2Word_NL(Num2Word_EU): def to_ordinal_num(self, value): self.verify_ordinal(value) - return str(value) + "." + return str(value) + "e" def pluralize(self, n, forms): """ From ea82fe11ca7c07007b99ba634ffa19429040d621 Mon Sep 17 00:00:00 2001 From: Paulina Komorek <46355739+PaulinaKomorek@users.noreply.github.com> Date: Fri, 23 Apr 2021 21:27:47 +0200 Subject: [PATCH 19/76] [ADD] polish ordinal numbers (#367) --- num2words/lang_PL.py | 94 +++++++++++++++++++++++++++++++++++++++++++- tests/test_pl.py | 29 ++++++++++++-- 2 files changed, 119 insertions(+), 4 deletions(-) diff --git a/num2words/lang_PL.py b/num2words/lang_PL.py index 2fa52f7..0f2bd75 100644 --- a/num2words/lang_PL.py +++ b/num2words/lang_PL.py @@ -36,6 +36,28 @@ ONES = { 9: ('dziewięć',), } +ONES_ORDINALS = { + 1: ('pierwszy', "pierwszo"), + 2: ('drugi', "dwu"), + 3: ('trzeci', "trzy"), + 4: ('czwarty', "cztero"), + 5: ('piąty', "pięcio"), + 6: ('szósty', "sześcio"), + 7: ('siódmy', "siedmio"), + 8: ('ósmy', "ośmio"), + 9: ('dziewiąty', "dziewięcio"), + 10: ('dziesiąty', "dziesięcio"), + 11: ('jedenasty', "jedenasto"), + 12: ('dwunasty', "dwunasto"), + 13: ('trzynasty', "trzynasto"), + 14: ('czternasty', "czternasto"), + 15: ('piętnasty', "piętnasto"), + 16: ('szesnasty', "szesnasto"), + 17: ('siedemnasty', "siedemnasto"), + 18: ('osiemnasty', "osiemnasto"), + 19: ('dziewiętnasty', "dziewiętnasto"), +} + TENS = { 0: ('dziesięć',), 1: ('jedenaście',), @@ -49,6 +71,7 @@ TENS = { 9: ('dziewiętnaście',), } + TWENTIES = { 2: ('dwadzieścia',), 3: ('trzydzieści',), @@ -60,6 +83,17 @@ TWENTIES = { 9: ('dziewięćdzisiąt',), } +TWENTIES_ORDINALS = { + 2: ('dwudziesty', "dwudziesto"), + 3: ('trzydziesty', "trzydiesto"), + 4: ('czterdziesty', "czterdziesto"), + 5: ('pięćdziesiąty', "pięćdziesięcio"), + 6: ('sześćdziesiąty', "sześćdziesięcio"), + 7: ('siedemdziesiąty', "siedemdziesięcio"), + 8: ('osiemdziesiąty', "osiemdziesięcio"), + 9: ('dziewięćdzisiąty', "dziewięćdziesięcio"), +} + HUNDREDS = { 1: ('sto',), 2: ('dwieście',), @@ -72,10 +106,28 @@ HUNDREDS = { 9: ('dziewięćset',), } +HUNDREDS_ORDINALS = { + 1: ('setny', "stu"), + 2: ('dwusetny', "dwustu"), + 3: ('trzysetny', "trzystu"), + 4: ('czterysetny', "czterystu"), + 5: ('pięćsetny', "pięcset"), + 6: ('sześćsetny', "sześćset"), + 7: ('siedemsetny', "siedemset"), + 8: ('osiemsetny', "ośiemset"), + 9: ('dziewięćsetny', "dziewięćset"), +} + THOUSANDS = { 1: ('tysiąc', 'tysiące', 'tysięcy'), # 10^3 } +prefixes_ordinal = { + 1: "tysięczny", + 2: "milionowy", + 3: "milairdowy" +} + prefixes = ( # 10^(6*x) "mi", # 10^6 "bi", # 10^12 @@ -130,8 +182,48 @@ class Num2Word_PL(Num2Word_Base): form = 2 return forms[form] + def last_fragment_to_ordinal(self, last, words, level): + n1, n2, n3 = get_digits(last) + last_two = n2*10+n1 + if last_two == 0: + words.append(HUNDREDS_ORDINALS[n3][level]) + elif level == 1 and last == 1: + return + elif last_two < 20: + if n3 > 0: + words.append(HUNDREDS[n3][level]) + words.append(ONES_ORDINALS[last_two][level]) + elif last_two % 10 == 0: + if n3 > 0: + words.append(HUNDREDS[n3][level]) + words.append(TWENTIES_ORDINALS[n2][level]) + else: + if n3 > 0: + words.append(HUNDREDS[n3][0]) + words.append(TWENTIES_ORDINALS[n2][0]) + words.append(ONES_ORDINALS[n1][0]) + def to_ordinal(self, number): - raise NotImplementedError() + if number % 1 != 0: + raise NotImplementedError() + words = [] + fragments = list(splitbyx(str(number), 3)) + level = 0 + last = fragments[-1] + while last == 0: + level = level+1 + fragments.pop() + last = fragments[-1] + if len(fragments) > 1: + pre_part = self._int2word(number-(last*1000**level)) + words.append(pre_part) + self.last_fragment_to_ordinal(last, words, 0 if level == 0 else 1) + output = " ".join(words) + if last == 1 and level > 0 and output != "": + output = output + " " + if level > 0: + output = output + prefixes_ordinal[level] + return output def _int2word(self, n): if n == 0: diff --git a/tests/test_pl.py b/tests/test_pl.py index ec76ed8..a268c26 100644 --- a/tests/test_pl.py +++ b/tests/test_pl.py @@ -83,9 +83,32 @@ class Num2WordsPLTest(TestCase): ) def test_to_ordinal(self): - # @TODO: implement to_ordinal - with self.assertRaises(NotImplementedError): - num2words(1, lang='pl', to='ordinal') + self.assertEqual(num2words(100, lang='pl', to='ordinal'), "setny") + self.assertEqual( + num2words(101, lang='pl', to='ordinal'), "sto pierwszy") + self.assertEqual(num2words(121, lang='pl', to='ordinal'), + "sto dwudziesty pierwszy") + self.assertEqual( + num2words(115, lang='pl', to='ordinal'), "sto piętnasty") + self.assertEqual( + num2words(25, lang='pl', to='ordinal'), "dwudziesty piąty") + self.assertEqual(num2words(1021, lang='pl', to='ordinal'), + "tysiąc dwudziesty pierwszy") + self.assertEqual( + num2words(120, lang='pl', to='ordinal'), "sto dwudziesty") + self.assertEqual(num2words(1000021, lang='pl', + to='ordinal'), "milion dwudziesty pierwszy") + self.assertEqual(num2words(1000, lang='pl', to='ordinal'), "tysięczny") + self.assertEqual(num2words(10000, lang='pl', + to='ordinal'), "dziesięciotysięczny") + self.assertEqual(num2words(100000000, lang='pl', + to='ordinal'), "stumilionowy") + self.assertEqual(num2words(1002000, lang='pl', + to='ordinal'), "milion dwutysięczny") + self.assertEqual(num2words(1001000, lang='pl', + to='ordinal'), "milion tysięczny") + self.assertEqual(num2words(1000000, lang='pl', + to='ordinal'), "milionowy") def test_currency(self): self.assertEqual( From 79a9abfaba0c1bdb0ba07a70010835672afeba35 Mon Sep 17 00:00:00 2001 From: cyriaka90 Date: Fri, 7 May 2021 17:05:01 +0200 Subject: [PATCH 20/76] [tr] return Turkish 0 ordinal and cardinal (#347) * [tr] return Turkish 0 ordinal and cardinal * add str_to_number to Turkish * try rather use Num2Word_Base --- num2words/lang_TR.py | 8 +++++++- tests/test_tr.py | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 51f415b..7fba871 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -18,8 +18,10 @@ from __future__ import unicode_literals +from .base import Num2Word_Base -class Num2Word_TR(object): + +class Num2Word_TR(Num2Word_Base): def __init__(self): self.precision = 2 self.negword = u"eksi" @@ -152,6 +154,8 @@ class Num2Word_TR(object): wrd += self.CARDINAL_ONES.get( self.integers_to_read[0][0], "" ) + if self.integers_to_read[0][0] == "0": + return self.ZERO return wrd if self.total_digits_outside_triplets == 0: @@ -507,6 +511,8 @@ class Num2Word_TR(object): wrd += self.ORDINAL_ONES.get( self.integers_to_read[0][0], "" ) + if self.integers_to_read[0][0] == "0": + return u"sıfırıncı" return wrd if self.total_digits_outside_triplets == 0: diff --git a/tests/test_tr.py b/tests/test_tr.py index a6fc968..8425262 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -36,6 +36,7 @@ class Num2WordsTRTest(TestCase): "expected": u"birmilyonikibinbirlira"}, {"test": 1100000, "to": "currency", "expected": u"birmilyonyüzbinlira"}, + {"test": 0, "to": "ordinal", "expected": u"sıfırıncı"}, {"test": 1, "to": "ordinal", "expected": u"birinci"}, {"test": 2, "to": "ordinal", "expected": u"ikinci"}, {"test": 9, "to": "ordinal", "expected": u"dokuzuncu"}, @@ -108,6 +109,7 @@ class Num2WordsTRTest(TestCase): "expected": u"birmilyonüçbininci"}, {"test": 1200000, "to": "ordinal", "expected": u"birmilyonikiyüzbininci"}, + {"test": 0, "to": "cardinal", "expected": u"sıfır"}, {"test": 1, "to": "cardinal", "expected": u"bir"}, {"test": 2, "to": "cardinal", "expected": u"iki"}, {"test": 9, "to": "cardinal", "expected": u"dokuz"}, From 6bf14bee7b8187d99ed8c0f59b6acd3eb0ed648f Mon Sep 17 00:00:00 2001 From: Rostyslav Ivanyk Date: Wed, 30 Jun 2021 20:23:46 +0300 Subject: [PATCH 21/76] Improve Ukrainian support and minor fixes in CZ, KZ, LT, LV, PL, RU, SR languages (#400) * Fix English char 'i' in Ukrainian words * Fix the feminine currency processing for UAH in lang_UK.py * Fix test_ua.py * Fix the feminine currency processing for UAH in lang_RU.py * Add tests for UAH in test_ru.py * Add world currencies to lang_UK.py; Add test cases to test_uk.py for world currencies * Fix incorrect handling of zeros after decimal point for CZ, KZ, LT, LV, PL, RU, SR and UK languages * Add ukrainian ordinal numbers * Fix too long lines of code * Add test for negative cardinal number --- num2words/base.py | 6 +- num2words/lang_CZ.py | 5 +- num2words/lang_KZ.py | 3 +- num2words/lang_LT.py | 5 +- num2words/lang_LV.py | 5 +- num2words/lang_PL.py | 5 +- num2words/lang_RU.py | 10 +- num2words/lang_SR.py | 5 +- num2words/lang_UK.py | 749 ++++++++- tests/test_cz.py | 8 + tests/test_kz.py | 8 + tests/test_lt.py | 8 + tests/test_lv.py | 8 + tests/test_pl.py | 8 + tests/test_ru.py | 69 +- tests/test_sr.py | 8 + tests/test_uk.py | 3438 ++++++++++++++++++++++++++++++++++++++++-- 17 files changed, 4192 insertions(+), 156 deletions(-) diff --git a/num2words/base.py b/num2words/base.py index ccf5248..0929cb9 100644 --- a/num2words/base.py +++ b/num2words/base.py @@ -257,6 +257,9 @@ class Num2Word_Base(object): """ raise NotImplementedError + def _money_verbose(self, number, currency): + return self.to_cardinal(number) + def _cents_verbose(self, number, currency): return self.to_cardinal(number) @@ -290,12 +293,13 @@ class Num2Word_Base(object): cr1 = prefix_currency(self.CURRENCY_ADJECTIVES[currency], cr1) minus_str = "%s " % self.negword if is_negative else "" + money_str = self._money_verbose(left, currency) cents_str = self._cents_verbose(right, currency) \ if cents else self._cents_terse(right, currency) return u'%s%s %s%s %s %s' % ( minus_str, - self.to_cardinal(left), + money_str, self.pluralize(left, cr1), separator, cents_str, diff --git a/num2words/lang_CZ.py b/num2words/lang_CZ.py index 548c48b..04c44a0 100644 --- a/num2words/lang_CZ.py +++ b/num2words/lang_CZ.py @@ -102,10 +102,13 @@ class Num2Word_CZ(Num2Word_Base): n = str(number).replace(',', '.') if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right))) return u'%s %s %s' % ( self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + decimal_part ) else: return self._int2word(int(n)) diff --git a/num2words/lang_KZ.py b/num2words/lang_KZ.py index 2486325..67df20e 100644 --- a/num2words/lang_KZ.py +++ b/num2words/lang_KZ.py @@ -77,10 +77,11 @@ class Num2Word_KZ(Num2Word_Base): n = str(number).replace(',', '.') if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) return u'%s %s %s' % ( self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + (ZERO + ' ') * leading_zero_count + self._int2word(int(right)) ) else: return self._int2word(int(n)) diff --git a/num2words/lang_LT.py b/num2words/lang_LT.py index 8c6623e..8f723e8 100644 --- a/num2words/lang_LT.py +++ b/num2words/lang_LT.py @@ -124,11 +124,14 @@ class Num2Word_LT(Num2Word_Base): base_str, n = self.parse_minus(n) if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right))) return '%s%s %s %s' % ( base_str, self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + decimal_part ) else: return "%s%s" % (base_str, self._int2word(int(n))) diff --git a/num2words/lang_LV.py b/num2words/lang_LV.py index 289c37f..6e71c60 100644 --- a/num2words/lang_LV.py +++ b/num2words/lang_LV.py @@ -132,11 +132,14 @@ class Num2Word_LV(Num2Word_Base): base_str, n = self.parse_minus(n) if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right))) return '%s%s %s %s' % ( base_str, self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + decimal_part ) else: return "%s%s" % (base_str, self._int2word(int(n))) diff --git a/num2words/lang_PL.py b/num2words/lang_PL.py index 0f2bd75..1fb1fdc 100644 --- a/num2words/lang_PL.py +++ b/num2words/lang_PL.py @@ -165,10 +165,13 @@ class Num2Word_PL(Num2Word_Base): n = str(number).replace(',', '.') if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right))) return u'%s %s %s' % ( self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + decimal_part ) else: return self._int2word(int(n)) diff --git a/num2words/lang_RU.py b/num2words/lang_RU.py index e822d38..8e6c875 100644 --- a/num2words/lang_RU.py +++ b/num2words/lang_RU.py @@ -144,10 +144,13 @@ class Num2Word_RU(Num2Word_Base): n = str(number).replace(',', '.') if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right))) return u'%s %s %s' % ( self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + decimal_part ) else: return self._int2word(int(n)) @@ -201,8 +204,11 @@ class Num2Word_RU(Num2Word_Base): outwords[-1] = self.title(lastword) return " ".join(outwords).strip() + def _money_verbose(self, number, currency): + return self._int2word(number, currency == 'UAH') + def _cents_verbose(self, number, currency): - return self._int2word(number, currency == 'RUB') + return self._int2word(number, currency in ('UAH', 'RUB')) def _int2word(self, n, feminine=False): if n < 0: diff --git a/num2words/lang_SR.py b/num2words/lang_SR.py index 74ff0f0..254209f 100644 --- a/num2words/lang_SR.py +++ b/num2words/lang_SR.py @@ -110,10 +110,13 @@ class Num2Word_SR(Num2Word_Base): n = str(number).replace(',', '.') if '.' in n: left, right = n.split('.') + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right), feminine)) return u'%s %s %s' % ( self._int2word(int(left), feminine), self.pointword, - self._int2word(int(right), feminine) + decimal_part ) else: return self._int2word(int(n), feminine) diff --git a/num2words/lang_UK.py b/num2words/lang_UK.py index 45f8712..a6c0a3b 100644 --- a/num2words/lang_UK.py +++ b/num2words/lang_UK.py @@ -24,13 +24,13 @@ ZERO = ('нуль',) ONES_FEMININE = { 1: ('одна',), - 2: ('двi',), + 2: ('дві',), 3: ('три',), 4: ('чотири',), 5: ('п\'ять',), - 6: ('шiсть',), - 7: ('сiм',), - 8: ('вiсiм',), + 6: ('шість',), + 7: ('сім',), + 8: ('вісім',), 9: ('дев\'ять',), } @@ -40,12 +40,34 @@ ONES = { 3: ('три',), 4: ('чотири',), 5: ('п\'ять',), - 6: ('шiсть',), - 7: ('сiм',), - 8: ('вiсiм',), + 6: ('шість',), + 7: ('сім',), + 8: ('вісім',), 9: ('дев\'ять',), } +ONES_ORDINALS = { + 1: ("перший", "одно"), + 2: ("другий", "двох"), + 3: ("третій", "трьох"), + 4: ("четвертий", "чотирьох"), + 5: ("п'ятий", "п'яти"), + 6: ("шостий", "шести"), + 7: ("сьомий", "семи"), + 8: ("восьмий", "восьми"), + 9: ("дев'ятий", "дев'яти"), + 10: ("десятий", "десяти"), + 11: ("одинадцятий", "одинадцяти"), + 12: ("дванадцятий", "дванадцяти"), + 13: ("тринадцятий", "тринадцяти"), + 14: ("чотирнадцятий", "чотирнадцяти"), + 15: ("п'ятнадцятий", "п'ятнадцяти"), + 16: ("шістнадцятий", "шістнадцяти"), + 17: ("сімнадцятий", "сімнадцяти"), + 18: ("вісімнадцятий", "вісімнадцяти"), + 19: ("дев'ятнадцятий", "дев'ятнадцяти"), +} + TENS = { 0: ('десять',), 1: ('одинадцять',), @@ -53,9 +75,9 @@ TENS = { 3: ('тринадцять',), 4: ('чотирнадцять',), 5: ('п\'ятнадцять',), - 6: ('шiстнадцять',), - 7: ('сiмнадцять',), - 8: ('вiсiмнадцять',), + 6: ('шістнадцять',), + 7: ('сімнадцять',), + 8: ('вісімнадцять',), 9: ('дев\'ятнадцять',), } @@ -64,61 +86,642 @@ TWENTIES = { 3: ('тридцять',), 4: ('сорок',), 5: ('п\'ятдесят',), - 6: ('шiстдесят',), - 7: ('сiмдесят',), - 8: ('вiсiмдесят',), + 6: ('шістдесят',), + 7: ('сімдесят',), + 8: ('вісімдесят',), 9: ('дев\'яносто',), } +TWENTIES_ORDINALS = { + 2: ("двадцятий", "двадцяти"), + 3: ("тридцятий", "тридцяти"), + 4: ("сороковий", "сорока"), + 5: ("п'ятдесятий", "п'ятдесяти"), + 6: ("шістдесятий", "шістдесяти"), + 7: ("сімдесятий", "сімдесяти"), + 8: ("вісімдесятий", "вісімдесяти"), + 9: ("дев'яностий", "дев'яности"), +} + HUNDREDS = { 1: ('сто',), - 2: ('двiстi',), + 2: ('двісті',), 3: ('триста',), 4: ('чотириста',), 5: ('п\'ятсот',), - 6: ('шiстсот',), - 7: ('сiмсот',), - 8: ('вiсiмсот',), + 6: ('шістсот',), + 7: ('сімсот',), + 8: ('вісімсот',), 9: ('дев\'ятсот',), } -THOUSANDS = { - 1: ('тисяча', 'тисячi', 'тисяч'), # 10^3 - 2: ('мiльйон', 'мiльйони', 'мiльйонiв'), # 10^6 - 3: ('мiльярд', 'мiльярди', 'мiльярдiв'), # 10^9 - 4: ('трильйон', 'трильйони', 'трильйонiв'), # 10^12 - 5: ('квадрильйон', 'квадрильйони', 'квадрильйонiв'), # 10^15 - 6: ('квiнтильйон', 'квiнтильйони', 'квiнтильйонiв'), # 10^18 - 7: ('секстильйон', 'секстильйони', 'секстильйонiв'), # 10^21 - 8: ('септильйон', 'септильйони', 'септильйонiв'), # 10^24 - 9: ('октильйон', 'октильйони', 'октильйонiв'), # 10^27 - 10: ('нонiльйон', 'нонiльйони', 'нонiльйонiв'), # 10^30 +HUNDREDS_ORDINALS = { + 1: ("сотий", "сто"), + 2: ("двохсотий", "двохсот"), + 3: ("трьохсотий", "трьохсот"), + 4: ("чотирьохсотий", "чотирьохсот"), + 5: ("п'ятисотий", "п'ятсот"), + 6: ("шестисотий", "шістсот"), + 7: ("семисотий", "сімсот"), + 8: ("восьмисотий", "вісімсот"), + 9: ("дев'ятисотий", "дев'ятсот"), } +THOUSANDS = { + 1: ('тисяча', 'тисячі', 'тисяч'), # 10^3 + 2: ('мільйон', 'мільйони', 'мільйонів'), # 10^6 + 3: ('мільярд', 'мільярди', 'мільярдів'), # 10^9 + 4: ('трильйон', 'трильйони', 'трильйонів'), # 10^12 + 5: ('квадрильйон', 'квадрильйони', 'квадрильйонів'), # 10^15 + 6: ('квінтильйон', 'квінтильйони', 'квінтильйонів'), # 10^18 + 7: ('секстильйон', 'секстильйони', 'секстильйонів'), # 10^21 + 8: ('септильйон', 'септильйони', 'септильйонів'), # 10^24 + 9: ('октильйон', 'октильйони', 'октильйонів'), # 10^27 + 10: ('нонільйон', 'нонільйони', 'нонільйонів'), # 10^30 +} + +prefixes_ordinal = { + 1: "тисячний", + 2: "мільйонний", + 3: "мільярдний", + 4: "трильйонний", + 5: "квадрильйонний", + 6: "квінтильйонний", + 7: "секстильйонний", + 8: "септильйонний", + 9: "октильйонний", + 10: "нонільйонний", +} + +FEMININE_MONEY = ('AOA', 'BAM', 'BDT', 'BWP', 'CZK', 'DKK', + 'ERN', 'HNL', 'HRK', 'IDR', 'INR', 'ISK', + 'JPY', 'KPW', 'KRW', 'LKR', 'MOP', 'MRU', + 'MUR', 'MVR', 'MWK', 'NGN', 'NIO', 'NOK', + 'NPR', 'PKR', 'SCR', 'SEK', 'STN', 'TRY', + 'WST', 'UAH', 'ZMW') +FEMININE_CENTS = ('ALL', 'BDT', 'BGN', 'BYN', 'GHS', 'HRK', + 'ILS', 'INR', 'NPR', 'OMR', 'OMR', 'PKR', + 'RSD', 'RUB', 'UAH') + +GENERIC_DOLLARS = ('долар', 'долари', 'доларів') +GENERIC_CENTS = ('цент', 'центи', 'центів') + class Num2Word_UK(Num2Word_Base): CURRENCY_FORMS = { - 'UAH': ( - ('гривня', 'гривнi', 'гривень'), - ('копiйка', 'копiйки', 'копiйок') + 'AED': ( + ('дирхам', 'дирхами', 'дирхамів'), + ('філс', 'філси', 'філсів') + ), + 'AFN': ( + ('афгані', 'афгані', 'афгані'), + ('пул', 'пули', 'пулів') + ), + 'ALL': ( + ('лек', 'леки', 'леків'), + ('кіндарка', 'кіндарки', 'кіндарок') + ), + 'AMD': ( + ('драм', 'драми', 'драмів'), + ('лум', 'лум', 'лум') + ), + 'ANG': ( + ('гульден', 'гульдени', 'гульденів'), + GENERIC_CENTS + ), + 'AOA': ( + ('кванза', 'кванзи', 'кванз'), + ('сентимо', 'сентимо', 'сентимо') + ), + 'ARS': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'AUD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'AWG': ( + ('флорин', 'флорини', 'флоринів'), + GENERIC_CENTS + ), + 'AZN': ( + ('манат', 'манати', 'манатів'), + ('гяпік', 'гяпіки', 'гяпіків') + ), + 'BAM': ( + ('марка', 'марки', 'марок'), + ('фенінг', 'фенінги', 'фенінгів') + ), + 'BBD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BDT': ( + ('така', 'таки', 'так'), + ('пойша', 'пойші', 'пойш') + ), + 'BGN': ( + ('лев', 'леви', 'левів'), + ('стотинка', 'стотинки', 'стотинок') + ), + 'BHD': ( + ('динар', 'динари', 'динарів'), + ('філс', 'філси', 'філсів') + ), + 'BIF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'BMD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BND': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BOB': ( + ('болівіано', 'болівіано', 'болівіано'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'BRL': ( + ('реал', 'реали', 'реалів'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'BSD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'BTN': ( + ('нгултрум', 'нгултруми', 'нгултрумів'), + ('четрум', 'четруми', 'четрумів') + ), + 'BWP': ( + ('пула', 'пули', 'пул'), + ('тхебе', 'тхебе', 'тхебе') + ), + 'BYN': ( + ('рубель', 'рублі', 'рублів'), + ('копійка', 'копійки', 'копійок') + ), + 'BZD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'CAD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'CDF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'CHF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'CLP': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'CNY': ( + ('юань', 'юані', 'юанів'), + ('финь', 'фині', 'финів') + ), + 'COP': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'CRC': ( + ('колон', 'колони', 'колонів'), + ('сентімо', 'сентімо', 'сентімо') + ), + 'CUC': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'CUP': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'CVE': ( + ('ескудо', 'ескудо', 'ескудо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'CZK': ( + ('крона', 'крони', 'крон'), + ('гелер', 'гелери', 'гелерів') + ), + 'DJF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'DKK': ( + ('крона', 'крони', 'крон'), + ('ере', 'ере', 'ере') + ), + 'DOP': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'DZD': ( + ('динар', 'динари', 'динарів'), + ('сантим', 'сантими', 'сантимів') + ), + 'EGP': ( + ('фунт', 'фунти', 'фунтів'), + ('піастр', 'піастри', 'піастрів') + ), + 'ERN': ( + ('накфа', 'накфи', 'накф'), + GENERIC_CENTS + ), + 'ETB': ( + ('бир', 'бири', 'бирів'), + GENERIC_CENTS ), 'EUR': ( - ('євро', 'євро', 'євро'), ('цент', 'центи', 'центiв') + ('євро', 'євро', 'євро'), + GENERIC_CENTS + ), + 'FJD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'FKP': ( + ('фунт', 'фунти', 'фунтів'), + ('пенс', 'пенси', 'пенсів') + ), + 'GBP': ( + ('фунт', 'фунти', 'фунтів'), + ('пенс', 'пенси', 'пенсів') + ), + 'GEL': ( + ('ларі', 'ларі', 'ларі'), + ('тетрі', 'тетрі', 'тетрі') + ), + 'GHS': ( + ('седі', 'седі', 'седі'), + ('песева', 'песеви', 'песев') + ), + 'GIP': ( + ('фунт', 'фунти', 'фунтів'), + ('пенс', 'пенси', 'пенсів') + ), + 'GMD': ( + ('даласі', 'даласі', 'даласі'), + ('бутут', 'бутути', 'бутутів') + ), + 'GNF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'GTQ': ( + ('кетсаль', 'кетсалі', 'кетсалів'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'GYD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'HKD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'HNL': ( + ('лемпіра', 'лемпіри', 'лемпір'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'HRK': ( + ('куна', 'куни', 'кун'), + ('ліпа', 'ліпи', 'ліп') + ), + 'HTG': ( + ('гурд', 'гурди', 'гурдів'), + ('сантим', 'сантими', 'сантимів') + ), + 'HUF': ( + ('форинт', 'форинти', 'форинтів'), + ('філлер', 'філлери', 'філлерів') + ), + 'IDR': ( + ('рупія', 'рупії', 'рупій'), + GENERIC_CENTS + ), + 'ILS': ( + ('шекель', 'шекелі', 'шекелів'), + ('агора', 'агори', 'агор') + ), + 'INR': ( + ('рупія', 'рупії', 'рупій'), + ('пайса', 'пайси', 'пайс') + ), + 'IQD': ( + ('динар', 'динари', 'динарів'), + ('філс', 'філси', 'філсів') + ), + 'IRR': ( + ('ріал', 'ріали', 'ріалів'), + ('динар', 'динари', 'динарів') + ), + 'ISK': ( + ('крона', 'крони', 'крон'), + ('ейре', 'ейре', 'ейре') + ), + 'JMD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'JOD': ( + ('динар', 'динари', 'динарів'), + ('філс', 'філси', 'філсів') + ), + 'JPY': ( + ('єна', 'єни', 'єн'), + ('сен', 'сен', 'сен') + ), + 'KES': ( + ('шилінг', 'шилінги', 'шилінгів'), + GENERIC_CENTS + ), + 'KGS': ( + ('сом', 'соми', 'сомів'), + ('тиїн', 'тиїни', 'тиїнів') + ), + 'KHR': ( + ('рієль', 'рієлі', 'рієлів'), + ('су', 'су', 'су') + ), + 'KMF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'KPW': ( + ('вона', 'вони', 'вон'), + ('чон', 'чони', 'чонів') + ), + 'KRW': ( + ('вона', 'вони', 'вон'), + ('джеон', 'джеони', 'джеонів') + ), + 'KWD': ( + ('динар', 'динари', 'динарів'), + ('філс', 'філси', 'філсів') + ), + 'KYD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'KZT': ( + ('теньге', 'теньге', 'теньге'), + ('тиїн', 'тиїни', 'тиїнів')), + 'LAK': ( + ('кіп', 'кіпи', 'кіпів'), + ('ат', 'ати', 'атів') + ), + 'LBP': ( + ('фунт', 'фунти', 'фунтів'), + ('піастр', 'піастри', 'піастрів') + ), + 'LKR': ( + ('рупія', 'рупії', 'рупій'), + GENERIC_CENTS + ), + 'LRD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'LSL': ( + ('лоті', 'малоті', 'малоті'), + ('сенте', 'лісенте', 'лісенте') + ), + 'LYD': ( + ('динар', 'динари', 'динарів'), + ('дирхам', 'дирхами', 'дирхамів') + ), + 'MAD': ( + ('дирхам', 'дирхами', 'дирхамів'), + ('сантим', 'сантими', 'сантимів') + ), + 'MDL': ( + ('лей', 'леї', 'леї'), + ('бан', 'бані', 'бані') + ), + 'MGA': ( + ('аріарі', 'аріарі', 'аріарі'), + ('іраймбіланья', 'іраймбіланья', 'іраймбіланья') + ), + 'MKD': ( + ('денар', 'денари', 'денарів'), + ('дені', 'дені', 'дені') + ), + 'MMK': ( + ('к\'ят', 'к\'ят', 'к\'ят'), + ('п\'я', 'п\'я', 'п\'я') + ), + 'MNT': ( + ('тугрик', 'тугрики', 'тугриків'), + ('мунгу', 'мунгу', 'мунгу') + ), + 'MOP': ( + ('патака', 'патакі', 'патак'), + ('аво', 'аво', 'аво') + ), + 'MRU': ( + ('угія', 'угії', 'угій'), + ('хумс', 'хумс', 'хумс') + ), + 'MUR': ( + ('рупія', 'рупії', 'рупій'), + GENERIC_CENTS + ), + 'MVR': ( + ('руфія', 'руфії', 'руфій'), + ('ларі', 'ларі', 'ларі') + ), + 'MWK': ( + ('квача', 'квачі', 'квач'), + ('тамбала', 'тамбала', 'тамбала') + ), + 'MXN': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'MYR': ( + ('рингіт', 'рингіти', 'рингітів'), + GENERIC_CENTS + ), + 'MZN': ( + ('метікал', 'метікали', 'метікалів'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'NAD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'NGN': ( + ('найра', 'найри', 'найр'), + ('кобо', 'кобо', 'кобо') + ), + 'NIO': ( + ('кордоба', 'кордоби', 'кордоб'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'NOK': ( + ('крона', 'крони', 'крон'), + ('ере', 'ере', 'ере') + ), + 'NPR': ( + ('рупія', 'рупії', 'рупій'), + ('пайса', 'пайси', 'пайс') + ), + 'NZD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'OMR': ( + ('ріал', 'ріали', 'ріалів'), + ('байза', 'байзи', 'байз') + ), + 'PAB': ( + ('бальбоа', 'бальбоа', 'бальбоа'), + ('сентесімо', 'сентесімо', 'сентесімо') + ), + 'PEN': ( + ('соль', 'соль', 'соль'), + ('сентімо', 'сентімо', 'сентімо') + ), + 'PGK': ( + ('кіна', 'кіна', 'кіна'), + ('тойя', 'тойя', 'тойя') + ), + 'PHP': ( + ('песо', 'песо', 'песо'), + ('сентаво', 'сентаво', 'сентаво') + ), + 'PKR': ( + ('рупія', 'рупії', 'рупій'), + ('пайса', 'пайси', 'пайс') + ), + 'PLN': ( + ('злотий', 'злоті', 'злотих'), + ('грош', 'гроші', 'грошів') + ), + 'PYG': ( + ('гуарані', 'гуарані', 'гуарані'), + ('сентімо', 'сентімо', 'сентімо') + ), + 'QAR': ( + ('ріал', 'ріали', 'ріалів'), + ('дирхам', 'дирхами', 'дирхамів') + ), + 'RON': ( + ('лей', 'леї', 'леї'), + ('бан', 'бані', 'бані') + ), + 'RSD': ( + ('динар', 'динари', 'динарів'), + ('пара', 'пари', 'пар') + ), + 'RUB': ( + ('рубль', 'рублі', 'рублів'), + ('копійка', 'копійки', 'копійок') + ), + 'RWF': ( + ('франк', 'франки', 'франків'), + ('сантим', 'сантими', 'сантимів') + ), + 'SAR': ( + ('ріал', 'ріали', 'ріалів'), + ('халал', 'халали', 'халалів') + ), + 'SBD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'SCR': ( + ('рупія', 'рупії', 'рупій'), + GENERIC_CENTS + ), + 'SDG': ( + ('фунт', 'фунти', 'фунтів'), + ('піастр', 'піастри', 'піастрів') + ), + 'SEK': ( + ('крона', 'крони', 'крон'), + ('ере', 'ере', 'ере') + ), + 'SGD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'SHP': ( + ('фунт', 'фунти', 'фунтів'), + ('пенс', 'пенси', 'пенсів') + ), + 'SLL': ( + ('леоне', 'леоне', 'леоне'), + GENERIC_CENTS + ), + 'SOS': ( + ('шилінг', 'шилінги', 'шилінгів'), + GENERIC_CENTS + ), + 'SRD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'SSP': ( + ('фунт', 'фунти', 'фунтів'), + ('піастр', 'піастри', 'піастрів') + ), + 'STN': ( + ('добра', 'добри', 'добр'), + ('сентімо', 'сентімо', 'сентімо') + ), + 'SYP': ( + ('фунт', 'фунти', 'фунтів'), + ('піастр', 'піастри', 'піастрів') + ), + 'SZL': ( + ('ліланґені', 'ліланґені', 'ліланґені'), + GENERIC_CENTS + ), + 'THB': ( + ('бат', 'бати', 'батів'), + ('сатанг', 'сатанги', 'сатангів') + ), + 'TJS': ( + ('сомоні', 'сомоні', 'сомоні'), + ('дірам', 'дірами', 'дірамів') + ), + 'TMT': ( + ('манат', 'манати', 'манатів'), + ('тенге', 'тенге', 'тенге') + ), + 'TND': ( + ('динар', 'динари', 'динарів'), + ('міллім', 'мілліми', 'міллімів') + ), + 'TOP': ( + ('паанга', 'паанга', 'паанга'), + ('сеніті', 'сеніті', 'сеніті') + ), + 'TRY': ( + ('ліра', 'ліри', 'лір'), + ('куруш', 'куруші', 'курушів') + ), + 'TTD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'TWD': ( + ('новий долар', 'нові долари', 'нових доларів'), + GENERIC_CENTS + ), + 'TZS': ( + ('шилінг', 'шилінги', 'шилінгів'), + GENERIC_CENTS + ), + 'UAH': ( + ('гривня', 'гривні', 'гривень'), + ('копійка', 'копійки', 'копійок') + ), + 'UGX': ( + ('шилінг', 'шилінги', 'шилінгів'), + GENERIC_CENTS + ), + 'USD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'UYU': ( + ('песо', 'песо', 'песо'), + ('сентесімо', 'сентесімо', 'сентесімо') + ), + 'UZS': ( + ('сум', 'суми', 'сумів'), + ('тиїн', 'тиїни', 'тиїнів') + ), + 'VND': ( + ('донг', 'донги', 'донгів'), + ('су', 'су', 'су') + ), + 'WST': ( + ('тала', 'тали', 'тал'), + ('сене', 'сене', 'сене') + ), + 'XCD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'YER': ( + ('ріал', 'ріали', 'ріалів'), + ('філс', 'філси', 'філсів') + ), + 'ZAR': ( + ('ранд', 'ранди', 'рандів'), + GENERIC_CENTS + ), + 'ZMW': ( + ('квача', 'квачі', 'квач'), + ('нгве', 'нгве', 'нгве') ), } def setup(self): - self.negword = "мiнус" + self.negword = "мінус" self.pointword = "кома" def to_cardinal(self, number): n = str(number).replace(',', '.') if '.' in n: left, right = n.split('.') - return '%s %s %s' % ( + leading_zero_count = len(right) - len(right.lstrip('0')) + decimal_part = ((ZERO[0] + ' ') * leading_zero_count + + self._int2word(int(right))) + return u'%s %s %s' % ( self._int2word(int(left)), self.pointword, - self._int2word(int(right)) + decimal_part ) else: return self._int2word(int(n)) @@ -136,7 +739,7 @@ class Num2Word_UK(Num2Word_Base): return forms[form] - def _int2word(self, n, feminine=True): + def _int2word(self, n, feminine=False): if n < 0: return ' '.join([self.negword, self._int2word(abs(n))]) @@ -172,8 +775,78 @@ class Num2Word_UK(Num2Word_Base): return ' '.join(words) + def _money_verbose(self, number, currency): + return self._int2word(number, currency in FEMININE_MONEY) + def _cents_verbose(self, number, currency): - return self._int2word(number, currency == 'UAH') + return self._int2word(number, currency in FEMININE_CENTS) + + @staticmethod + def last_fragment_to_ordinal(last, words, level): + n1, n2, n3 = get_digits(last) + last_two = n2*10+n1 + if last_two == 0: + words.append(HUNDREDS_ORDINALS[n3][level]) + elif level == 1 and last == 1: + return + elif last_two < 20: + if level == 0: + if n3 > 0: + words.append(HUNDREDS[n3][0]) + words.append(ONES_ORDINALS[last_two][0]) + else: + last_fragment_string = '' + if n3 > 0: + last_fragment_string += HUNDREDS_ORDINALS[n3][1] + last_fragment_string += ONES_ORDINALS[last_two][1] + words.append(last_fragment_string) + elif last_two % 10 == 0: + if level == 0: + if n3 > 0: + words.append(HUNDREDS[n3][0]) + words.append(TWENTIES_ORDINALS[n2][0]) + else: + last_fragment_string = '' + if n3 > 0: + last_fragment_string += HUNDREDS_ORDINALS[n3][1] + last_fragment_string += TWENTIES_ORDINALS[n2][1] + words.append(last_fragment_string) + else: + if level == 0: + if n3 > 0: + words.append(HUNDREDS[n3][0]) + words.append(TWENTIES[n2][0]) + words.append(ONES_ORDINALS[n1][0]) + else: + last_fragment_string = '' + if n3 > 0: + last_fragment_string += HUNDREDS_ORDINALS[n3][1] + last_fragment_string += TWENTIES_ORDINALS[n2][1] + last_fragment_string += ONES_ORDINALS[n1][1] + words.append(last_fragment_string) def to_ordinal(self, number): - raise NotImplementedError() + self.verify_ordinal(number) + + words = [] + fragments = list(splitbyx(str(number), 3)) + level = 0 + last = fragments[-1] + while last == 0: + level = level + 1 + fragments.pop() + last = fragments[-1] + if len(fragments) > 1: + pre_part = self._int2word(number - (last * 1000 ** level)) + words.append(pre_part) + Num2Word_UK.last_fragment_to_ordinal( + last, + words, + 0 if level == 0 else 1 + ) + output = " ".join(words) + if last == 1 and level > 0 and output != "": + output = output + " " + if level > 0: + output = output + prefixes_ordinal[level] + return output diff --git a/tests/test_cz.py b/tests/test_cz.py index 660919b..1801e8f 100644 --- a/tests/test_cz.py +++ b/tests/test_cz.py @@ -32,6 +32,14 @@ class Num2WordsCZTest(TestCase): self.assertEqual(num2words(1000, lang='cz'), "tisíc") self.assertEqual(num2words(1001, lang='cz'), "tisíc jedna") self.assertEqual(num2words(2012, lang='cz'), "dva tisíce dvanáct") + self.assertEqual( + num2words(10.02, lang='cz'), + "deset celá nula dva" + ) + self.assertEqual( + num2words(15.007, lang='cz'), + "patnáct celá nula nula sedm" + ) self.assertEqual( num2words(12519.85, lang='cz'), "dvanáct tisíc pětset devatenáct celá osmdesát pět" diff --git a/tests/test_kz.py b/tests/test_kz.py index 68f71f2..8343564 100644 --- a/tests/test_kz.py +++ b/tests/test_kz.py @@ -44,6 +44,14 @@ class Num2WordsKZTest(TestCase): self.assertEqual(num2words(100.67, lang="kz"), "жүз бүтін алпыс жеті") self.assertEqual(num2words(0.7, lang="kz"), "нөл бүтін жеті") self.assertEqual(num2words(1.73, lang="kz"), "бір бүтін жетпіс үш") + self.assertEqual( + num2words(10.02, lang='kz'), + "он бүтін нөл екі" + ) + self.assertEqual( + num2words(15.007, lang='kz'), + "он бес бүтін нөл нөл жеті" + ) def test_to_ordinal(self): with self.assertRaises(NotImplementedError): diff --git a/tests/test_lt.py b/tests/test_lt.py index 3c11e4a..e8ddbb8 100644 --- a/tests/test_lt.py +++ b/tests/test_lt.py @@ -68,6 +68,14 @@ class Num2WordsLTTest(TestCase): num2words(-5000.22, lang='lt'), 'minus penki tūkstančiai kablelis dvidešimt du', ) + self.assertEqual( + num2words(10.02, lang='lt'), + "dešimt kablelis nulis du" + ) + self.assertEqual( + num2words(15.007, lang='lt'), + "penkiolika kablelis nulis nulis septyni" + ) def test_to_ordinal(self): # @TODO: implement to_ordinal diff --git a/tests/test_lv.py b/tests/test_lv.py index 754ca62..d0f69d2 100644 --- a/tests/test_lv.py +++ b/tests/test_lv.py @@ -63,6 +63,14 @@ class Num2WordsLVTest(TestCase): num2words(-5000.22, lang='lv'), 'mīnus pieci tūkstoši komats divdesmit divi', ) + self.assertEqual( + num2words(10.02, lang='lv'), + "desmit komats nulle divi" + ) + self.assertEqual( + num2words(15.007, lang='lv'), + "piecpadsmit komats nulle nulle septiņi" + ) self.assertEqual(num2words(0, lang='lv'), 'nulle') self.assertEqual(num2words(5, lang='lv'), "pieci") diff --git a/tests/test_pl.py b/tests/test_pl.py index a268c26..147a747 100644 --- a/tests/test_pl.py +++ b/tests/test_pl.py @@ -32,6 +32,14 @@ class Num2WordsPLTest(TestCase): self.assertEqual(num2words(1000, lang='pl'), "tysiąc") self.assertEqual(num2words(1001, lang='pl'), "tysiąc jeden") self.assertEqual(num2words(2012, lang='pl'), "dwa tysiące dwanaście") + self.assertEqual( + num2words(10.02, lang='pl'), + "dziesięć przecinek zero dwa" + ) + self.assertEqual( + num2words(15.007, lang='pl'), + "piętnaście przecinek zero zero siedem" + ) self.assertEqual( num2words(12519.85, lang='pl'), "dwanaście tysięcy pięćset dziewiętnaście przecinek " diff --git a/tests/test_ru.py b/tests/test_ru.py index f2415ae..dc47975 100644 --- a/tests/test_ru.py +++ b/tests/test_ru.py @@ -75,6 +75,14 @@ class Num2WordsRUTest(TestCase): def test_floating_point(self): self.assertEqual(num2words(5.2, lang='ru'), "пять запятая два") + self.assertEqual( + num2words(10.02, lang='ru'), + "десять запятая ноль два" + ) + self.assertEqual( + num2words(15.007, lang='ru'), + "пятнадцать запятая ноль ноль семь" + ) self.assertEqual( num2words(561.42, lang='ru'), "пятьсот шестьдесят один запятая сорок два" @@ -160,6 +168,10 @@ class Num2WordsRUTest(TestCase): num2words(1.0, lang='ru', to='currency', currency='RUB'), 'один рубль, ноль копеек' ) + self.assertEqual( + num2words(1.0, lang='ru', to='currency', currency='UAH'), + 'одна гривна, ноль копеек' + ) self.assertEqual( num2words(1234.56, lang='ru', to='currency', currency='EUR'), 'одна тысяча двести тридцать четыре евро, пятьдесят шесть центов' @@ -168,36 +180,85 @@ class Num2WordsRUTest(TestCase): num2words(1234.56, lang='ru', to='currency', currency='RUB'), 'одна тысяча двести тридцать четыре рубля, пятьдесят шесть копеек' ) + self.assertEqual( + num2words(1234.56, lang='ru', to='currency', currency='UAH'), + 'одна тысяча двести тридцать четыре гривны, пятьдесят шесть копеек' + ) self.assertEqual( num2words(10111, lang='ru', to='currency', currency='EUR', separator=' и'), 'сто один евро и одиннадцать центов' ) self.assertEqual( - num2words(10121, lang='ru', to='currency', currency='RUB', + num2words(10111, lang='ru', to='currency', currency='RUB', separator=' и'), - 'сто один рубль и двадцать одна копейка' + 'сто один рубль и одиннадцать копеек' ) self.assertEqual( - num2words(10122, lang='ru', to='currency', currency='RUB', + num2words(10111, lang='ru', to='currency', currency='UAH', separator=' и'), - 'сто один рубль и двадцать две копейки' + 'сто одна гривна и одиннадцать копеек' ) self.assertEqual( num2words(10121, lang='ru', to='currency', currency='EUR', separator=' и'), 'сто один евро и двадцать один цент' ) + self.assertEqual( + num2words(10121, lang='ru', to='currency', currency='RUB', + separator=' и'), + 'сто один рубль и двадцать одна копейка' + ) + self.assertEqual( + num2words(10121, lang='ru', to='currency', currency='UAH', + separator=' и'), + 'сто одна гривна и двадцать одна копейка' + ) + self.assertEqual( + num2words(10122, lang='ru', to='currency', currency='EUR', + separator=' и'), + 'сто один евро и двадцать два цента' + ) + self.assertEqual( + num2words(10122, lang='ru', to='currency', currency='RUB', + separator=' и'), + 'сто один рубль и двадцать две копейки' + ) + self.assertEqual( + num2words(10122, lang='ru', to='currency', currency='UAH', + separator=' и'), + 'сто одна гривна и двадцать две копейки' + ) self.assertEqual( num2words(-1251985, lang='ru', to='currency', currency='EUR', cents=False), 'минус двенадцать тысяч пятьсот девятнадцать евро, 85 центов' ) + self.assertEqual( + num2words(-1251985, lang='ru', to='currency', currency='RUB', + cents=False), + 'минус двенадцать тысяч пятьсот девятнадцать рублей, 85 копеек' + ) + self.assertEqual( + num2words(-1251985, lang='ru', to='currency', currency='UAH', + cents=False), + 'минус двенадцать тысяч пятьсот девятнадцать гривен, 85 копеек' + ) self.assertEqual( num2words('38.4', lang='ru', to='currency', separator=' и', cents=False, currency='EUR'), "тридцать восемь евро и 40 центов" ) + self.assertEqual( + num2words('38.4', lang='ru', to='currency', separator=' и', + cents=False, currency='RUB'), + "тридцать восемь рублей и 40 копеек" + ) + self.assertEqual( + num2words('38.4', lang='ru', to='currency', separator=' и', + cents=False, currency='UAH'), + "тридцать восемь гривен и 40 копеек" + ) self.assertEqual( num2words('1230.56', lang='ru', to='currency', currency='USD'), 'одна тысяча двести тридцать долларов, пятьдесят шесть центов' diff --git a/tests/test_sr.py b/tests/test_sr.py index c97a093..50f379b 100644 --- a/tests/test_sr.py +++ b/tests/test_sr.py @@ -86,6 +86,14 @@ class Num2WordsSRTest(TestCase): def test_floating_point(self): self.assertEqual("pet zapeta dva", num2words(5.2, lang='sr')) + self.assertEqual( + num2words(10.02, lang='sr'), + "deset zapeta nula dva" + ) + self.assertEqual( + num2words(15.007, lang='sr'), + "petnaest zapeta nula nula sedam" + ) self.assertEqual( "petsto šezdeset jedan zapeta četrdeset dva", num2words(561.42, lang='sr') diff --git a/tests/test_uk.py b/tests/test_uk.py index 6934212..84fb770 100644 --- a/tests/test_uk.py +++ b/tests/test_uk.py @@ -21,115 +21,3343 @@ from unittest import TestCase from num2words import num2words +TEST_CASES_CARDINAL = ( + (1, "один"), + (2, "два"), + (3, "три"), + (4, "чотири"), + (5, "п'ять"), + (6, "шість"), + (7, "сім"), + (8, "вісім"), + (9, "дев'ять"), + (10, "десять"), + (10.02, "десять кома нуль два"), + (11, "одинадцять"), + (12, "дванадцять"), + (12.40, "дванадцять кома чотири"), + (13, "тринадцять"), + (14, "чотирнадцять"), + (14.13, "чотирнадцять кома тринадцять"), + (15, "п'ятнадцять"), + (16, "шістнадцять"), + (17, "сімнадцять"), + (17.31, "сімнадцять кома тридцять один"), + (18, "вісімнадцять"), + (19, "дев'ятнадцять"), + (20, "двадцять"), + (21, "двадцять один"), + (21.20, "двадцять один кома два"), + (30, "тридцять"), + (32, "тридцять два"), + (40, "сорок"), + (43, "сорок три"), + (43.007, "сорок три кома нуль нуль сім"), + (50, "п'ятдесят"), + (54, "п'ятдесят чотири"), + (60, "шістдесят"), + (60.059, "шістдесят кома нуль п'ятдесят дев'ять"), + (65, "шістдесят п'ять"), + (70, "сімдесят"), + (76, "сімдесят шість"), + (80, "вісімдесят"), + (87, "вісімдесят сім"), + (90, "дев'яносто"), + (98, "дев'яносто вісім"), + (99, "дев'яносто дев'ять"), + (100, "сто"), + (101, "сто один"), + (199, "сто дев'яносто дев'ять"), + (200, "двісті"), + (203, "двісті три"), + (300, "триста"), + (356, "триста п'ятдесят шість"), + (400, "чотириста"), + (434, "чотириста тридцять чотири"), + (500, "п'ятсот"), + (578, "п'ятсот сімдесят вісім"), + (600, "шістсот"), + (689, "шістсот вісімдесят дев'ять"), + (700, "сімсот"), + (729, "сімсот двадцять дев'ять"), + (800, "вісімсот"), + (894, "вісімсот дев'яносто чотири"), + (900, "дев'ятсот"), + (999, "дев'ятсот дев'яносто дев'ять"), + (1000, "одна тисяча"), + (1001, "одна тисяча один"), + (2012, "дві тисячі дванадцять"), + (12519, "дванадцять тисяч п'ятсот дев'ятнадцять"), + (12519.85, "дванадцять тисяч п'ятсот дев'ятнадцять кома вісімдесят п'ять"), + (-260000, "мінус двісті шістдесят тисяч"), + (1000000, "один мільйон"), + (1000000000, "один мільярд"), + (1234567890, "один мільярд двісті тридцять чотири мільйони " + "п'ятсот шістдесят сім тисяч вісімсот дев'яносто"), + (1000000000000, "один трильйон"), + (1000000000000000, "один квадрильйон"), + (1000000000000000000, "один квінтильйон"), + (1000000000000000000000, "один секстильйон"), + (1000000000000000000000000, "один септильйон"), + (1000000000000000000000000000, "один октильйон"), + (1000000000000000000000000000000, "один нонільйон"), + (215461407892039002157189883901676, + "двісті п'ятнадцять нонільйонів чотириста шістдесят один " + "октильйон чотириста сім септильйонів вісімсот дев'яносто " + "два секстильйони тридцять дев'ять квінтильйонів два " + "квадрильйони сто п'ятдесят сім трильйонів сто вісімдесят " + "дев'ять мільярдів вісімсот вісімдесят три мільйони " + "дев'ятсот одна тисяча шістсот сімдесят шість"), + (719094234693663034822824384220291, + "сімсот дев'ятнадцять нонільйонів дев'яносто чотири октильйони " + "двісті тридцять чотири септильйони шістсот дев'яносто три " + "секстильйони шістсот шістдесят три квінтильйони тридцять " + "чотири квадрильйони вісімсот двадцять два трильйони вісімсот " + "двадцять чотири мільярди триста вісімдесят чотири мільйони " + "двісті двадцять тисяч двісті дев'яносто один") +) + +TEST_CASES_ORDINAL = ( + (1, "перший"), + (2, "другий"), + (3, "третій"), + (4, "четвертий"), + (5, "п'ятий"), + (6, "шостий"), + (7, "сьомий"), + (8, "восьмий"), + (9, "дев'ятий"), + (10, "десятий"), + (11, "одинадцятий"), + (12, "дванадцятий"), + (13, "тринадцятий"), + (14, "чотирнадцятий"), + (15, "п'ятнадцятий"), + (16, "шістнадцятий"), + (17, "сімнадцятий"), + (18, "вісімнадцятий"), + (19, "дев'ятнадцятий"), + (20, "двадцятий"), + (21, "двадцять перший"), + (30, "тридцятий"), + (32, "тридцять другий"), + (40, "сороковий"), + (43, "сорок третій"), + (50, "п'ятдесятий"), + (54, "п'ятдесят четвертий"), + (60, "шістдесятий"), + (65, "шістдесят п'ятий"), + (70, "сімдесятий"), + (76, "сімдесят шостий"), + (80, "вісімдесятий"), + (87, "вісімдесят сьомий"), + (90, "дев'яностий"), + (98, "дев'яносто восьмий"), + (100, "сотий"), + (101, "сто перший"), + (199, "сто дев'яносто дев'ятий"), + (200, "двохсотий"), + (203, "двісті третій"), + (300, "трьохсотий"), + (356, "триста п'ятдесят шостий"), + (400, "чотирьохсотий"), + (434, "чотириста тридцять четвертий"), + (500, "п'ятисотий"), + (578, "п'ятсот сімдесят восьмий"), + (600, "шестисотий"), + (690, "шістсот дев'яностий"), + (700, "семисотий"), + (729, "сімсот двадцять дев'ятий"), + (800, "восьмисотий"), + (894, "вісімсот дев'яносто четвертий"), + (900, "дев'ятисотий"), + (999, "дев'ятсот дев'яносто дев'ятий"), + (1000, "тисячний"), + (1001, "одна тисяча перший"), + (2000, "двохтисячний"), + (2312, "дві тисячі триста дванадцятий"), + (12000, "дванадцятитисячний"), + (25000, "двадцятип'ятитисячний"), + (213000, "двохсоттринадцятитисячний"), + (256000, "двохсотп'ятдесятишеститисячний"), + (260000, "двохсотшістдесятитисячний"), + (1000000, "мільйонний"), + (589000000, "п'ятсотвісімдесятидев'ятимільйонний"), + (1000000000, "мільярдний"), + (1234567890, "один мільярд двісті тридцять чотири мільйони " + "п'ятсот шістдесят сім тисяч вісімсот дев'яностий"), + (1000000000000, "трильйонний"), + (1000000000000000, "квадрильйонний"), + (1000000000000000000, "квінтильйонний"), + (1000000000000000000000, "секстильйонний"), + (1000000000000000000000000, "септильйонний"), + (1000000000000000000000000000, "октильйонний"), + (1000000000000000000000000000000, "нонільйонний"), + (956000000000000000000000000000000, + "дев'ятсотп'ятдесятишестинонільйонний"), +) + +TEST_CASES_TO_CURRENCY_AED = ( + (0.00, "нуль дирхамів, нуль філсів"), + (1.00, "один дирхам, нуль філсів"), + (2.00, "два дирхами, нуль філсів"), + (5.00, "п'ять дирхамів, нуль філсів"), + (11.00, "одинадцять дирхамів, нуль філсів"), + (16.01, "шістнадцять дирхамів, один філс"), + (21.00, "двадцять один дирхам, нуль філсів"), + (37.73, "тридцять сім дирхамів, сімдесят три філси"), + (81.25, "вісімдесят один дирхам, двадцять п'ять філсів"), + (100.00, "сто дирхамів, нуль філсів"), + (101.11, "сто один дирхам, одинадцять філсів"), + (10222, "сто два дирхами, двадцять два філси"), + +) + +TEST_CASES_TO_CURRENCY_AFN = ( + (0.00, "нуль афгані, нуль пулів"), + (1.00, "один афгані, нуль пулів"), + (2.00, "два афгані, нуль пулів"), + (5.00, "п'ять афгані, нуль пулів"), + (11.00, "одинадцять афгані, нуль пулів"), + (16.01, "шістнадцять афгані, один пул"), + (21.00, "двадцять один афгані, нуль пулів"), + (37.73, "тридцять сім афгані, сімдесят три пули"), + (81.25, "вісімдесят один афгані, двадцять п'ять пулів"), + (100.00, "сто афгані, нуль пулів"), + (101.11, "сто один афгані, одинадцять пулів"), + (10222, "сто два афгані, двадцять два пули"), +) + +TEST_CASES_TO_CURRENCY_ALL = ( + (0.00, "нуль леків, нуль кіндарок"), + (1.00, "один лек, нуль кіндарок"), + (2.00, "два леки, нуль кіндарок"), + (5.00, "п'ять леків, нуль кіндарок"), + (11.00, "одинадцять леків, нуль кіндарок"), + (16.01, "шістнадцять леків, одна кіндарка"), + (21.00, "двадцять один лек, нуль кіндарок"), + (37.73, "тридцять сім леків, сімдесят три кіндарки"), + (81.25, "вісімдесят один лек, двадцять п'ять кіндарок"), + (100.00, "сто леків, нуль кіндарок"), + (101.11, "сто один лек, одинадцять кіндарок"), + (10222, "сто два леки, двадцять дві кіндарки"), +) + +TEST_CASES_TO_CURRENCY_AMD = ( + (0.00, "нуль драмів, нуль лум"), + (1.00, "один драм, нуль лум"), + (2.00, "два драми, нуль лум"), + (5.00, "п'ять драмів, нуль лум"), + (11.00, "одинадцять драмів, нуль лум"), + (16.01, "шістнадцять драмів, один лум"), + (21.00, "двадцять один драм, нуль лум"), + (37.73, "тридцять сім драмів, сімдесят три лум"), + (81.25, "вісімдесят один драм, двадцять п'ять лум"), + (100.00, "сто драмів, нуль лум"), + (101.11, "сто один драм, одинадцять лум"), + (10222, "сто два драми, двадцять два лум"), +) + +TEST_CASES_TO_CURRENCY_ANG = ( + (0.00, "нуль гульденів, нуль центів"), + (1.00, "один гульден, нуль центів"), + (2.00, "два гульдени, нуль центів"), + (5.00, "п'ять гульденів, нуль центів"), + (11.00, "одинадцять гульденів, нуль центів"), + (16.01, "шістнадцять гульденів, один цент"), + (21.00, "двадцять один гульден, нуль центів"), + (37.73, "тридцять сім гульденів, сімдесят три центи"), + (81.25, "вісімдесят один гульден, двадцять п'ять центів"), + (100.00, "сто гульденів, нуль центів"), + (101.11, "сто один гульден, одинадцять центів"), + (10222, "сто два гульдени, двадцять два центи"), +) +# +TEST_CASES_TO_CURRENCY_AOA = ( + (0.00, "нуль кванз, нуль сентимо"), + (1.00, "одна кванза, нуль сентимо"), + (2.00, "дві кванзи, нуль сентимо"), + (5.00, "п'ять кванз, нуль сентимо"), + (11.00, "одинадцять кванз, нуль сентимо"), + (16.01, "шістнадцять кванз, один сентимо"), + (21.00, "двадцять одна кванза, нуль сентимо"), + (37.73, "тридцять сім кванз, сімдесят три сентимо"), + (81.25, "вісімдесят одна кванза, двадцять п'ять сентимо"), + (100.00, "сто кванз, нуль сентимо"), + (101.11, "сто одна кванза, одинадцять сентимо"), + (10222, "сто дві кванзи, двадцять два сентимо"), +) +# +TEST_CASES_TO_CURRENCY_ARS = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) +# +TEST_CASES_TO_CURRENCY_AUD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) +# +TEST_CASES_TO_CURRENCY_AWG = ( + (0.00, "нуль флоринів, нуль центів"), + (1.00, "один флорин, нуль центів"), + (2.00, "два флорини, нуль центів"), + (5.00, "п'ять флоринів, нуль центів"), + (11.00, "одинадцять флоринів, нуль центів"), + (16.01, "шістнадцять флоринів, один цент"), + (21.00, "двадцять один флорин, нуль центів"), + (37.73, "тридцять сім флоринів, сімдесят три центи"), + (81.25, "вісімдесят один флорин, двадцять п'ять центів"), + (100.00, "сто флоринів, нуль центів"), + (101.11, "сто один флорин, одинадцять центів"), + (10222, "сто два флорини, двадцять два центи"), +) +# +TEST_CASES_TO_CURRENCY_AZN = ( + (0.00, "нуль манатів, нуль гяпіків"), + (1.00, "один манат, нуль гяпіків"), + (2.00, "два манати, нуль гяпіків"), + (5.00, "п'ять манатів, нуль гяпіків"), + (11.00, "одинадцять манатів, нуль гяпіків"), + (16.01, "шістнадцять манатів, один гяпік"), + (21.00, "двадцять один манат, нуль гяпіків"), + (37.73, "тридцять сім манатів, сімдесят три гяпіки"), + (81.25, "вісімдесят один манат, двадцять п'ять гяпіків"), + (100.00, "сто манатів, нуль гяпіків"), + (101.11, "сто один манат, одинадцять гяпіків"), + (10222, "сто два манати, двадцять два гяпіки"), +) +# +TEST_CASES_TO_CURRENCY_BAM = ( + (0.00, "нуль марок, нуль фенінгів"), + (1.00, "одна марка, нуль фенінгів"), + (2.00, "дві марки, нуль фенінгів"), + (5.00, "п'ять марок, нуль фенінгів"), + (11.00, "одинадцять марок, нуль фенінгів"), + (16.01, "шістнадцять марок, один фенінг"), + (21.00, "двадцять одна марка, нуль фенінгів"), + (37.73, "тридцять сім марок, сімдесят три фенінги"), + (81.25, "вісімдесят одна марка, двадцять п'ять фенінгів"), + (100.00, "сто марок, нуль фенінгів"), + (101.11, "сто одна марка, одинадцять фенінгів"), + (10222, "сто дві марки, двадцять два фенінги"), +) +# +TEST_CASES_TO_CURRENCY_BBD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_BDT = ( + (0.00, "нуль так, нуль пойш"), + (1.00, "одна така, нуль пойш"), + (2.00, "дві таки, нуль пойш"), + (5.00, "п'ять так, нуль пойш"), + (11.00, "одинадцять так, нуль пойш"), + (16.01, "шістнадцять так, одна пойша"), + (21.00, "двадцять одна така, нуль пойш"), + (37.73, "тридцять сім так, сімдесят три пойші"), + (81.25, "вісімдесят одна така, двадцять п'ять пойш"), + (100.00, "сто так, нуль пойш"), + (101.11, "сто одна така, одинадцять пойш"), + (10222, "сто дві таки, двадцять дві пойші"), +) + +TEST_CASES_TO_CURRENCY_BGN = ( + (0.00, "нуль левів, нуль стотинок"), + (1.00, "один лев, нуль стотинок"), + (2.00, "два леви, нуль стотинок"), + (5.00, "п'ять левів, нуль стотинок"), + (11.00, "одинадцять левів, нуль стотинок"), + (16.01, "шістнадцять левів, одна стотинка"), + (21.00, "двадцять один лев, нуль стотинок"), + (37.73, "тридцять сім левів, сімдесят три стотинки"), + (81.25, "вісімдесят один лев, двадцять п'ять стотинок"), + (100.00, "сто левів, нуль стотинок"), + (101.11, "сто один лев, одинадцять стотинок"), + (10222, "сто два леви, двадцять дві стотинки"), +) + +TEST_CASES_TO_CURRENCY_BHD = ( + (0.00, "нуль динарів, нуль філсів"), + (1.00, "один динар, нуль філсів"), + (2.00, "два динари, нуль філсів"), + (5.00, "п'ять динарів, нуль філсів"), + (11.00, "одинадцять динарів, нуль філсів"), + (16.01, "шістнадцять динарів, один філс"), + (21.00, "двадцять один динар, нуль філсів"), + (37.73, "тридцять сім динарів, сімдесят три філси"), + (81.25, "вісімдесят один динар, двадцять п'ять філсів"), + (100.00, "сто динарів, нуль філсів"), + (101.11, "сто один динар, одинадцять філсів"), + (10222, "сто два динари, двадцять два філси"), +) + +TEST_CASES_TO_CURRENCY_BIF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_BMD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_BND = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_BOB = ( + (0.00, "нуль болівіано, нуль сентаво"), + (1.00, "один болівіано, нуль сентаво"), + (2.00, "два болівіано, нуль сентаво"), + (5.00, "п'ять болівіано, нуль сентаво"), + (11.00, "одинадцять болівіано, нуль сентаво"), + (16.01, "шістнадцять болівіано, один сентаво"), + (21.00, "двадцять один болівіано, нуль сентаво"), + (37.73, "тридцять сім болівіано, сімдесят три сентаво"), + (81.25, "вісімдесят один болівіано, двадцять п'ять сентаво"), + (100.00, "сто болівіано, нуль сентаво"), + (101.11, "сто один болівіано, одинадцять сентаво"), + (10222, "сто два болівіано, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_BRL = ( + (0.00, "нуль реалів, нуль сентаво"), + (1.00, "один реал, нуль сентаво"), + (2.00, "два реали, нуль сентаво"), + (5.00, "п'ять реалів, нуль сентаво"), + (11.00, "одинадцять реалів, нуль сентаво"), + (16.01, "шістнадцять реалів, один сентаво"), + (21.00, "двадцять один реал, нуль сентаво"), + (37.73, "тридцять сім реалів, сімдесят три сентаво"), + (81.25, "вісімдесят один реал, двадцять п'ять сентаво"), + (100.00, "сто реалів, нуль сентаво"), + (101.11, "сто один реал, одинадцять сентаво"), + (10222, "сто два реали, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_BSD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_BTN = ( + (0.00, "нуль нгултрумів, нуль четрумів"), + (1.00, "один нгултрум, нуль четрумів"), + (2.00, "два нгултруми, нуль четрумів"), + (5.00, "п'ять нгултрумів, нуль четрумів"), + (11.00, "одинадцять нгултрумів, нуль четрумів"), + (16.01, "шістнадцять нгултрумів, один четрум"), + (21.00, "двадцять один нгултрум, нуль четрумів"), + (37.73, "тридцять сім нгултрумів, сімдесят три четруми"), + (81.25, "вісімдесят один нгултрум, двадцять п'ять четрумів"), + (100.00, "сто нгултрумів, нуль четрумів"), + (101.11, "сто один нгултрум, одинадцять четрумів"), + (10222, "сто два нгултруми, двадцять два четруми"), +) + +TEST_CASES_TO_CURRENCY_BWP = ( + (0.00, "нуль пул, нуль тхебе"), + (1.00, "одна пула, нуль тхебе"), + (2.00, "дві пули, нуль тхебе"), + (5.00, "п'ять пул, нуль тхебе"), + (11.00, "одинадцять пул, нуль тхебе"), + (16.01, "шістнадцять пул, один тхебе"), + (21.00, "двадцять одна пула, нуль тхебе"), + (37.73, "тридцять сім пул, сімдесят три тхебе"), + (81.25, "вісімдесят одна пула, двадцять п'ять тхебе"), + (100.00, "сто пул, нуль тхебе"), + (101.11, "сто одна пула, одинадцять тхебе"), + (10222, "сто дві пули, двадцять два тхебе"), +) + +TEST_CASES_TO_CURRENCY_BYN = ( + (0.00, "нуль рублів, нуль копійок"), + (1.00, "один рубель, нуль копійок"), + (2.00, "два рублі, нуль копійок"), + (5.00, "п'ять рублів, нуль копійок"), + (11.00, "одинадцять рублів, нуль копійок"), + (16.01, "шістнадцять рублів, одна копійка"), + (21.00, "двадцять один рубель, нуль копійок"), + (37.73, "тридцять сім рублів, сімдесят три копійки"), + (81.25, "вісімдесят один рубель, двадцять п'ять копійок"), + (100.00, "сто рублів, нуль копійок"), + (101.11, "сто один рубель, одинадцять копійок"), + (10222, "сто два рублі, двадцять дві копійки"), +) + +TEST_CASES_TO_CURRENCY_BZD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_CAD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_CDF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_CHF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_CLP = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_CNY = ( + (0.00, "нуль юанів, нуль финів"), + (1.00, "один юань, нуль финів"), + (2.00, "два юані, нуль финів"), + (5.00, "п'ять юанів, нуль финів"), + (11.00, "одинадцять юанів, нуль финів"), + (16.01, "шістнадцять юанів, один финь"), + (21.00, "двадцять один юань, нуль финів"), + (37.73, "тридцять сім юанів, сімдесят три фині"), + (81.25, "вісімдесят один юань, двадцять п'ять финів"), + (100.00, "сто юанів, нуль финів"), + (101.11, "сто один юань, одинадцять финів"), + (10222, "сто два юані, двадцять два фині"), +) + +TEST_CASES_TO_CURRENCY_COP = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_CRC = ( + (0.00, "нуль колонів, нуль сентімо"), + (1.00, "один колон, нуль сентімо"), + (2.00, "два колони, нуль сентімо"), + (5.00, "п'ять колонів, нуль сентімо"), + (11.00, "одинадцять колонів, нуль сентімо"), + (16.01, "шістнадцять колонів, один сентімо"), + (21.00, "двадцять один колон, нуль сентімо"), + (37.73, "тридцять сім колонів, сімдесят три сентімо"), + (81.25, "вісімдесят один колон, двадцять п'ять сентімо"), + (100.00, "сто колонів, нуль сентімо"), + (101.11, "сто один колон, одинадцять сентімо"), + (10222, "сто два колони, двадцять два сентімо"), +) + +TEST_CASES_TO_CURRENCY_CUC = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_CUP = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_CVE = ( + (0.00, "нуль ескудо, нуль сентаво"), + (1.00, "один ескудо, нуль сентаво"), + (2.00, "два ескудо, нуль сентаво"), + (5.00, "п'ять ескудо, нуль сентаво"), + (11.00, "одинадцять ескудо, нуль сентаво"), + (16.01, "шістнадцять ескудо, один сентаво"), + (21.00, "двадцять один ескудо, нуль сентаво"), + (37.73, "тридцять сім ескудо, сімдесят три сентаво"), + (81.25, "вісімдесят один ескудо, двадцять п'ять сентаво"), + (100.00, "сто ескудо, нуль сентаво"), + (101.11, "сто один ескудо, одинадцять сентаво"), + (10222, "сто два ескудо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_CZK = ( + (0.00, "нуль крон, нуль гелерів"), + (1.00, "одна крона, нуль гелерів"), + (2.00, "дві крони, нуль гелерів"), + (5.00, "п'ять крон, нуль гелерів"), + (11.00, "одинадцять крон, нуль гелерів"), + (16.01, "шістнадцять крон, один гелер"), + (21.00, "двадцять одна крона, нуль гелерів"), + (37.73, "тридцять сім крон, сімдесят три гелери"), + (81.25, "вісімдесят одна крона, двадцять п'ять гелерів"), + (100.00, "сто крон, нуль гелерів"), + (101.11, "сто одна крона, одинадцять гелерів"), + (10222, "сто дві крони, двадцять два гелери"), +) + +TEST_CASES_TO_CURRENCY_DJF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_DKK = ( + (0.00, "нуль крон, нуль ере"), + (1.00, "одна крона, нуль ере"), + (2.00, "дві крони, нуль ере"), + (5.00, "п'ять крон, нуль ере"), + (11.00, "одинадцять крон, нуль ере"), + (16.01, "шістнадцять крон, один ере"), + (21.00, "двадцять одна крона, нуль ере"), + (37.73, "тридцять сім крон, сімдесят три ере"), + (81.25, "вісімдесят одна крона, двадцять п'ять ере"), + (100.00, "сто крон, нуль ере"), + (101.11, "сто одна крона, одинадцять ере"), + (10222, "сто дві крони, двадцять два ере"), +) + +TEST_CASES_TO_CURRENCY_DOP = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_DZD = ( + (0.00, "нуль динарів, нуль сантимів"), + (1.00, "один динар, нуль сантимів"), + (2.00, "два динари, нуль сантимів"), + (5.00, "п'ять динарів, нуль сантимів"), + (11.00, "одинадцять динарів, нуль сантимів"), + (16.01, "шістнадцять динарів, один сантим"), + (21.00, "двадцять один динар, нуль сантимів"), + (37.73, "тридцять сім динарів, сімдесят три сантими"), + (81.25, "вісімдесят один динар, двадцять п'ять сантимів"), + (100.00, "сто динарів, нуль сантимів"), + (101.11, "сто один динар, одинадцять сантимів"), + (10222, "сто два динари, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_EGP = ( + (0.00, "нуль фунтів, нуль піастрів"), + (1.00, "один фунт, нуль піастрів"), + (2.00, "два фунти, нуль піастрів"), + (5.00, "п'ять фунтів, нуль піастрів"), + (11.00, "одинадцять фунтів, нуль піастрів"), + (16.01, "шістнадцять фунтів, один піастр"), + (21.00, "двадцять один фунт, нуль піастрів"), + (37.73, "тридцять сім фунтів, сімдесят три піастри"), + (81.25, "вісімдесят один фунт, двадцять п'ять піастрів"), + (100.00, "сто фунтів, нуль піастрів"), + (101.11, "сто один фунт, одинадцять піастрів"), + (10222, "сто два фунти, двадцять два піастри"), +) + +TEST_CASES_TO_CURRENCY_ERN = ( + (0.00, "нуль накф, нуль центів"), + (1.00, "одна накфа, нуль центів"), + (2.00, "дві накфи, нуль центів"), + (5.00, "п'ять накф, нуль центів"), + (11.00, "одинадцять накф, нуль центів"), + (16.01, "шістнадцять накф, один цент"), + (21.00, "двадцять одна накфа, нуль центів"), + (37.73, "тридцять сім накф, сімдесят три центи"), + (81.25, "вісімдесят одна накфа, двадцять п'ять центів"), + (100.00, "сто накф, нуль центів"), + (101.11, "сто одна накфа, одинадцять центів"), + (10222, "сто дві накфи, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_ETB = ( + (0.00, "нуль бирів, нуль центів"), + (1.00, "один бир, нуль центів"), + (2.00, "два бири, нуль центів"), + (5.00, "п'ять бирів, нуль центів"), + (11.00, "одинадцять бирів, нуль центів"), + (16.01, "шістнадцять бирів, один цент"), + (21.00, "двадцять один бир, нуль центів"), + (37.73, "тридцять сім бирів, сімдесят три центи"), + (81.25, "вісімдесят один бир, двадцять п'ять центів"), + (100.00, "сто бирів, нуль центів"), + (101.11, "сто один бир, одинадцять центів"), + (10222, "сто два бири, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_EUR = ( + (0.00, "нуль євро, нуль центів"), + (1.00, "один євро, нуль центів"), + (2.00, "два євро, нуль центів"), + (5.00, "п'ять євро, нуль центів"), + (11.00, "одинадцять євро, нуль центів"), + (16.01, "шістнадцять євро, один цент"), + (21.00, "двадцять один євро, нуль центів"), + (37.73, "тридцять сім євро, сімдесят три центи"), + (81.25, "вісімдесят один євро, двадцять п'ять центів"), + (100.00, "сто євро, нуль центів"), + (101.11, "сто один євро, одинадцять центів"), + (10222, "сто два євро, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_FJD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_FKP = ( + (0.00, "нуль фунтів, нуль пенсів"), + (1.00, "один фунт, нуль пенсів"), + (2.00, "два фунти, нуль пенсів"), + (5.00, "п'ять фунтів, нуль пенсів"), + (11.00, "одинадцять фунтів, нуль пенсів"), + (16.01, "шістнадцять фунтів, один пенс"), + (21.00, "двадцять один фунт, нуль пенсів"), + (37.73, "тридцять сім фунтів, сімдесят три пенси"), + (81.25, "вісімдесят один фунт, двадцять п'ять пенсів"), + (100.00, "сто фунтів, нуль пенсів"), + (101.11, "сто один фунт, одинадцять пенсів"), + (10222, "сто два фунти, двадцять два пенси"), +) + +TEST_CASES_TO_CURRENCY_GBP = ( + (0.00, "нуль фунтів, нуль пенсів"), + (1.00, "один фунт, нуль пенсів"), + (2.00, "два фунти, нуль пенсів"), + (5.00, "п'ять фунтів, нуль пенсів"), + (11.00, "одинадцять фунтів, нуль пенсів"), + (16.01, "шістнадцять фунтів, один пенс"), + (21.00, "двадцять один фунт, нуль пенсів"), + (37.73, "тридцять сім фунтів, сімдесят три пенси"), + (81.25, "вісімдесят один фунт, двадцять п'ять пенсів"), + (100.00, "сто фунтів, нуль пенсів"), + (101.11, "сто один фунт, одинадцять пенсів"), + (10222, "сто два фунти, двадцять два пенси"), +) + +TEST_CASES_TO_CURRENCY_GEL = ( + (0.00, "нуль ларі, нуль тетрі"), + (1.00, "один ларі, нуль тетрі"), + (2.00, "два ларі, нуль тетрі"), + (5.00, "п'ять ларі, нуль тетрі"), + (11.00, "одинадцять ларі, нуль тетрі"), + (16.01, "шістнадцять ларі, один тетрі"), + (21.00, "двадцять один ларі, нуль тетрі"), + (37.73, "тридцять сім ларі, сімдесят три тетрі"), + (81.25, "вісімдесят один ларі, двадцять п'ять тетрі"), + (100.00, "сто ларі, нуль тетрі"), + (101.11, "сто один ларі, одинадцять тетрі"), + (10222, "сто два ларі, двадцять два тетрі"), +) + +TEST_CASES_TO_CURRENCY_GHS = ( + (0.00, "нуль седі, нуль песев"), + (1.00, "один седі, нуль песев"), + (2.00, "два седі, нуль песев"), + (5.00, "п'ять седі, нуль песев"), + (11.00, "одинадцять седі, нуль песев"), + (16.01, "шістнадцять седі, одна песева"), + (21.00, "двадцять один седі, нуль песев"), + (37.73, "тридцять сім седі, сімдесят три песеви"), + (81.25, "вісімдесят один седі, двадцять п'ять песев"), + (100.00, "сто седі, нуль песев"), + (101.11, "сто один седі, одинадцять песев"), + (10222, "сто два седі, двадцять дві песеви"), +) + +TEST_CASES_TO_CURRENCY_GIP = ( + (0.00, "нуль фунтів, нуль пенсів"), + (1.00, "один фунт, нуль пенсів"), + (2.00, "два фунти, нуль пенсів"), + (5.00, "п'ять фунтів, нуль пенсів"), + (11.00, "одинадцять фунтів, нуль пенсів"), + (16.01, "шістнадцять фунтів, один пенс"), + (21.00, "двадцять один фунт, нуль пенсів"), + (37.73, "тридцять сім фунтів, сімдесят три пенси"), + (81.25, "вісімдесят один фунт, двадцять п'ять пенсів"), + (100.00, "сто фунтів, нуль пенсів"), + (101.11, "сто один фунт, одинадцять пенсів"), + (10222, "сто два фунти, двадцять два пенси"), +) + +TEST_CASES_TO_CURRENCY_GMD = ( + (0.00, "нуль даласі, нуль бутутів"), + (1.00, "один даласі, нуль бутутів"), + (2.00, "два даласі, нуль бутутів"), + (5.00, "п'ять даласі, нуль бутутів"), + (11.00, "одинадцять даласі, нуль бутутів"), + (16.01, "шістнадцять даласі, один бутут"), + (21.00, "двадцять один даласі, нуль бутутів"), + (37.73, "тридцять сім даласі, сімдесят три бутути"), + (81.25, "вісімдесят один даласі, двадцять п'ять бутутів"), + (100.00, "сто даласі, нуль бутутів"), + (101.11, "сто один даласі, одинадцять бутутів"), + (10222, "сто два даласі, двадцять два бутути"), +) + +TEST_CASES_TO_CURRENCY_GNF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_GTQ = ( + (0.00, "нуль кетсалів, нуль сентаво"), + (1.00, "один кетсаль, нуль сентаво"), + (2.00, "два кетсалі, нуль сентаво"), + (5.00, "п'ять кетсалів, нуль сентаво"), + (11.00, "одинадцять кетсалів, нуль сентаво"), + (16.01, "шістнадцять кетсалів, один сентаво"), + (21.00, "двадцять один кетсаль, нуль сентаво"), + (37.73, "тридцять сім кетсалів, сімдесят три сентаво"), + (81.25, "вісімдесят один кетсаль, двадцять п'ять сентаво"), + (100.00, "сто кетсалів, нуль сентаво"), + (101.11, "сто один кетсаль, одинадцять сентаво"), + (10222, "сто два кетсалі, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_GYD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_HKD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_HNL = ( + (0.00, "нуль лемпір, нуль сентаво"), + (1.00, "одна лемпіра, нуль сентаво"), + (2.00, "дві лемпіри, нуль сентаво"), + (5.00, "п'ять лемпір, нуль сентаво"), + (11.00, "одинадцять лемпір, нуль сентаво"), + (16.01, "шістнадцять лемпір, один сентаво"), + (21.00, "двадцять одна лемпіра, нуль сентаво"), + (37.73, "тридцять сім лемпір, сімдесят три сентаво"), + (81.25, "вісімдесят одна лемпіра, двадцять п'ять сентаво"), + (100.00, "сто лемпір, нуль сентаво"), + (101.11, "сто одна лемпіра, одинадцять сентаво"), + (10222, "сто дві лемпіри, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_HRK = ( + (0.00, "нуль кун, нуль ліп"), + (1.00, "одна куна, нуль ліп"), + (2.00, "дві куни, нуль ліп"), + (5.00, "п'ять кун, нуль ліп"), + (11.00, "одинадцять кун, нуль ліп"), + (16.01, "шістнадцять кун, одна ліпа"), + (21.00, "двадцять одна куна, нуль ліп"), + (37.73, "тридцять сім кун, сімдесят три ліпи"), + (81.25, "вісімдесят одна куна, двадцять п'ять ліп"), + (100.00, "сто кун, нуль ліп"), + (101.11, "сто одна куна, одинадцять ліп"), + (10222, "сто дві куни, двадцять дві ліпи"), +) + +TEST_CASES_TO_CURRENCY_HTG = ( + (0.00, "нуль гурдів, нуль сантимів"), + (1.00, "один гурд, нуль сантимів"), + (2.00, "два гурди, нуль сантимів"), + (5.00, "п'ять гурдів, нуль сантимів"), + (11.00, "одинадцять гурдів, нуль сантимів"), + (16.01, "шістнадцять гурдів, один сантим"), + (21.00, "двадцять один гурд, нуль сантимів"), + (37.73, "тридцять сім гурдів, сімдесят три сантими"), + (81.25, "вісімдесят один гурд, двадцять п'ять сантимів"), + (100.00, "сто гурдів, нуль сантимів"), + (101.11, "сто один гурд, одинадцять сантимів"), + (10222, "сто два гурди, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_HUF = ( + (0.00, "нуль форинтів, нуль філлерів"), + (1.00, "один форинт, нуль філлерів"), + (2.00, "два форинти, нуль філлерів"), + (5.00, "п'ять форинтів, нуль філлерів"), + (11.00, "одинадцять форинтів, нуль філлерів"), + (16.01, "шістнадцять форинтів, один філлер"), + (21.00, "двадцять один форинт, нуль філлерів"), + (37.73, "тридцять сім форинтів, сімдесят три філлери"), + (81.25, "вісімдесят один форинт, двадцять п'ять філлерів"), + (100.00, "сто форинтів, нуль філлерів"), + (101.11, "сто один форинт, одинадцять філлерів"), + (10222, "сто два форинти, двадцять два філлери"), +) + +TEST_CASES_TO_CURRENCY_IDR = ( + (0.00, "нуль рупій, нуль центів"), + (1.00, "одна рупія, нуль центів"), + (2.00, "дві рупії, нуль центів"), + (5.00, "п'ять рупій, нуль центів"), + (11.00, "одинадцять рупій, нуль центів"), + (16.01, "шістнадцять рупій, один цент"), + (21.00, "двадцять одна рупія, нуль центів"), + (37.73, "тридцять сім рупій, сімдесят три центи"), + (81.25, "вісімдесят одна рупія, двадцять п'ять центів"), + (100.00, "сто рупій, нуль центів"), + (101.11, "сто одна рупія, одинадцять центів"), + (10222, "сто дві рупії, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_ILS = ( + (0.00, "нуль шекелів, нуль агор"), + (1.00, "один шекель, нуль агор"), + (2.00, "два шекелі, нуль агор"), + (5.00, "п'ять шекелів, нуль агор"), + (11.00, "одинадцять шекелів, нуль агор"), + (16.01, "шістнадцять шекелів, одна агора"), + (21.00, "двадцять один шекель, нуль агор"), + (37.73, "тридцять сім шекелів, сімдесят три агори"), + (81.25, "вісімдесят один шекель, двадцять п'ять агор"), + (100.00, "сто шекелів, нуль агор"), + (101.11, "сто один шекель, одинадцять агор"), + (10222, "сто два шекелі, двадцять дві агори"), +) + +TEST_CASES_TO_CURRENCY_INR = ( + (0.00, "нуль рупій, нуль пайс"), + (1.00, "одна рупія, нуль пайс"), + (2.00, "дві рупії, нуль пайс"), + (5.00, "п'ять рупій, нуль пайс"), + (11.00, "одинадцять рупій, нуль пайс"), + (16.01, "шістнадцять рупій, одна пайса"), + (21.00, "двадцять одна рупія, нуль пайс"), + (37.73, "тридцять сім рупій, сімдесят три пайси"), + (81.25, "вісімдесят одна рупія, двадцять п'ять пайс"), + (100.00, "сто рупій, нуль пайс"), + (101.11, "сто одна рупія, одинадцять пайс"), + (10222, "сто дві рупії, двадцять дві пайси"), +) + +TEST_CASES_TO_CURRENCY_IQD = ( + (0.00, "нуль динарів, нуль філсів"), + (1.00, "один динар, нуль філсів"), + (2.00, "два динари, нуль філсів"), + (5.00, "п'ять динарів, нуль філсів"), + (11.00, "одинадцять динарів, нуль філсів"), + (16.01, "шістнадцять динарів, один філс"), + (21.00, "двадцять один динар, нуль філсів"), + (37.73, "тридцять сім динарів, сімдесят три філси"), + (81.25, "вісімдесят один динар, двадцять п'ять філсів"), + (100.00, "сто динарів, нуль філсів"), + (101.11, "сто один динар, одинадцять філсів"), + (10222, "сто два динари, двадцять два філси"), +) + +TEST_CASES_TO_CURRENCY_IRR = ( + (0.00, "нуль ріалів, нуль динарів"), + (1.00, "один ріал, нуль динарів"), + (2.00, "два ріали, нуль динарів"), + (5.00, "п'ять ріалів, нуль динарів"), + (11.00, "одинадцять ріалів, нуль динарів"), + (16.01, "шістнадцять ріалів, один динар"), + (21.00, "двадцять один ріал, нуль динарів"), + (37.73, "тридцять сім ріалів, сімдесят три динари"), + (81.25, "вісімдесят один ріал, двадцять п'ять динарів"), + (100.00, "сто ріалів, нуль динарів"), + (101.11, "сто один ріал, одинадцять динарів"), + (10222, "сто два ріали, двадцять два динари"), +) + +TEST_CASES_TO_CURRENCY_ISK = ( + (0.00, "нуль крон, нуль ейре"), + (1.00, "одна крона, нуль ейре"), + (2.00, "дві крони, нуль ейре"), + (5.00, "п'ять крон, нуль ейре"), + (11.00, "одинадцять крон, нуль ейре"), + (16.01, "шістнадцять крон, один ейре"), + (21.00, "двадцять одна крона, нуль ейре"), + (37.73, "тридцять сім крон, сімдесят три ейре"), + (81.25, "вісімдесят одна крона, двадцять п'ять ейре"), + (100.00, "сто крон, нуль ейре"), + (101.11, "сто одна крона, одинадцять ейре"), + (10222, "сто дві крони, двадцять два ейре"), +) + +TEST_CASES_TO_CURRENCY_JMD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_JOD = ( + (0.00, "нуль динарів, нуль філсів"), + (1.00, "один динар, нуль філсів"), + (2.00, "два динари, нуль філсів"), + (5.00, "п'ять динарів, нуль філсів"), + (11.00, "одинадцять динарів, нуль філсів"), + (16.01, "шістнадцять динарів, один філс"), + (21.00, "двадцять один динар, нуль філсів"), + (37.73, "тридцять сім динарів, сімдесят три філси"), + (81.25, "вісімдесят один динар, двадцять п'ять філсів"), + (100.00, "сто динарів, нуль філсів"), + (101.11, "сто один динар, одинадцять філсів"), + (10222, "сто два динари, двадцять два філси"), +) + +TEST_CASES_TO_CURRENCY_JPY = ( + (0.00, "нуль єн, нуль сен"), + (1.00, "одна єна, нуль сен"), + (2.00, "дві єни, нуль сен"), + (5.00, "п'ять єн, нуль сен"), + (11.00, "одинадцять єн, нуль сен"), + (16.01, "шістнадцять єн, один сен"), + (21.00, "двадцять одна єна, нуль сен"), + (37.73, "тридцять сім єн, сімдесят три сен"), + (81.25, "вісімдесят одна єна, двадцять п'ять сен"), + (100.00, "сто єн, нуль сен"), + (101.11, "сто одна єна, одинадцять сен"), + (10222, "сто дві єни, двадцять два сен"), +) + +TEST_CASES_TO_CURRENCY_KES = ( + (0.00, "нуль шилінгів, нуль центів"), + (1.00, "один шилінг, нуль центів"), + (2.00, "два шилінги, нуль центів"), + (5.00, "п'ять шилінгів, нуль центів"), + (11.00, "одинадцять шилінгів, нуль центів"), + (16.01, "шістнадцять шилінгів, один цент"), + (21.00, "двадцять один шилінг, нуль центів"), + (37.73, "тридцять сім шилінгів, сімдесят три центи"), + (81.25, "вісімдесят один шилінг, двадцять п'ять центів"), + (100.00, "сто шилінгів, нуль центів"), + (101.11, "сто один шилінг, одинадцять центів"), + (10222, "сто два шилінги, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_KGS = ( + (0.00, "нуль сомів, нуль тиїнів"), + (1.00, "один сом, нуль тиїнів"), + (2.00, "два соми, нуль тиїнів"), + (5.00, "п'ять сомів, нуль тиїнів"), + (11.00, "одинадцять сомів, нуль тиїнів"), + (16.01, "шістнадцять сомів, один тиїн"), + (21.00, "двадцять один сом, нуль тиїнів"), + (37.73, "тридцять сім сомів, сімдесят три тиїни"), + (81.25, "вісімдесят один сом, двадцять п'ять тиїнів"), + (100.00, "сто сомів, нуль тиїнів"), + (101.11, "сто один сом, одинадцять тиїнів"), + (10222, "сто два соми, двадцять два тиїни"), +) + +TEST_CASES_TO_CURRENCY_KHR = ( + (0.00, "нуль рієлів, нуль су"), + (1.00, "один рієль, нуль су"), + (2.00, "два рієлі, нуль су"), + (5.00, "п'ять рієлів, нуль су"), + (11.00, "одинадцять рієлів, нуль су"), + (16.01, "шістнадцять рієлів, один су"), + (21.00, "двадцять один рієль, нуль су"), + (37.73, "тридцять сім рієлів, сімдесят три су"), + (81.25, "вісімдесят один рієль, двадцять п'ять су"), + (100.00, "сто рієлів, нуль су"), + (101.11, "сто один рієль, одинадцять су"), + (10222, "сто два рієлі, двадцять два су"), +) + +TEST_CASES_TO_CURRENCY_KMF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_KPW = ( + (0.00, "нуль вон, нуль чонів"), + (1.00, "одна вона, нуль чонів"), + (2.00, "дві вони, нуль чонів"), + (5.00, "п'ять вон, нуль чонів"), + (11.00, "одинадцять вон, нуль чонів"), + (16.01, "шістнадцять вон, один чон"), + (21.00, "двадцять одна вона, нуль чонів"), + (37.73, "тридцять сім вон, сімдесят три чони"), + (81.25, "вісімдесят одна вона, двадцять п'ять чонів"), + (100.00, "сто вон, нуль чонів"), + (101.11, "сто одна вона, одинадцять чонів"), + (10222, "сто дві вони, двадцять два чони"), +) + +TEST_CASES_TO_CURRENCY_KRW = ( + (0.00, "нуль вон, нуль джеонів"), + (1.00, "одна вона, нуль джеонів"), + (2.00, "дві вони, нуль джеонів"), + (5.00, "п'ять вон, нуль джеонів"), + (11.00, "одинадцять вон, нуль джеонів"), + (16.01, "шістнадцять вон, один джеон"), + (21.00, "двадцять одна вона, нуль джеонів"), + (37.73, "тридцять сім вон, сімдесят три джеони"), + (81.25, "вісімдесят одна вона, двадцять п'ять джеонів"), + (100.00, "сто вон, нуль джеонів"), + (101.11, "сто одна вона, одинадцять джеонів"), + (10222, "сто дві вони, двадцять два джеони"), +) + +TEST_CASES_TO_CURRENCY_KWD = ( + (0.00, "нуль динарів, нуль філсів"), + (1.00, "один динар, нуль філсів"), + (2.00, "два динари, нуль філсів"), + (5.00, "п'ять динарів, нуль філсів"), + (11.00, "одинадцять динарів, нуль філсів"), + (16.01, "шістнадцять динарів, один філс"), + (21.00, "двадцять один динар, нуль філсів"), + (37.73, "тридцять сім динарів, сімдесят три філси"), + (81.25, "вісімдесят один динар, двадцять п'ять філсів"), + (100.00, "сто динарів, нуль філсів"), + (101.11, "сто один динар, одинадцять філсів"), + (10222, "сто два динари, двадцять два філси"), +) + +TEST_CASES_TO_CURRENCY_KYD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_KZT = ( + (0.00, "нуль теньге, нуль тиїнів"), + (1.00, "один теньге, нуль тиїнів"), + (2.00, "два теньге, нуль тиїнів"), + (5.00, "п'ять теньге, нуль тиїнів"), + (11.00, "одинадцять теньге, нуль тиїнів"), + (16.01, "шістнадцять теньге, один тиїн"), + (21.00, "двадцять один теньге, нуль тиїнів"), + (37.73, "тридцять сім теньге, сімдесят три тиїни"), + (81.25, "вісімдесят один теньге, двадцять п'ять тиїнів"), + (100.00, "сто теньге, нуль тиїнів"), + (101.11, "сто один теньге, одинадцять тиїнів"), + (10222, "сто два теньге, двадцять два тиїни"), +) + +TEST_CASES_TO_CURRENCY_LAK = ( + (0.00, "нуль кіпів, нуль атів"), + (1.00, "один кіп, нуль атів"), + (2.00, "два кіпи, нуль атів"), + (5.00, "п'ять кіпів, нуль атів"), + (11.00, "одинадцять кіпів, нуль атів"), + (16.01, "шістнадцять кіпів, один ат"), + (21.00, "двадцять один кіп, нуль атів"), + (37.73, "тридцять сім кіпів, сімдесят три ати"), + (81.25, "вісімдесят один кіп, двадцять п'ять атів"), + (100.00, "сто кіпів, нуль атів"), + (101.11, "сто один кіп, одинадцять атів"), + (10222, "сто два кіпи, двадцять два ати"), +) + +TEST_CASES_TO_CURRENCY_LBP = ( + (0.00, "нуль фунтів, нуль піастрів"), + (1.00, "один фунт, нуль піастрів"), + (2.00, "два фунти, нуль піастрів"), + (5.00, "п'ять фунтів, нуль піастрів"), + (11.00, "одинадцять фунтів, нуль піастрів"), + (16.01, "шістнадцять фунтів, один піастр"), + (21.00, "двадцять один фунт, нуль піастрів"), + (37.73, "тридцять сім фунтів, сімдесят три піастри"), + (81.25, "вісімдесят один фунт, двадцять п'ять піастрів"), + (100.00, "сто фунтів, нуль піастрів"), + (101.11, "сто один фунт, одинадцять піастрів"), + (10222, "сто два фунти, двадцять два піастри"), +) + +TEST_CASES_TO_CURRENCY_LKR = ( + (0.00, "нуль рупій, нуль центів"), + (1.00, "одна рупія, нуль центів"), + (2.00, "дві рупії, нуль центів"), + (5.00, "п'ять рупій, нуль центів"), + (11.00, "одинадцять рупій, нуль центів"), + (16.01, "шістнадцять рупій, один цент"), + (21.00, "двадцять одна рупія, нуль центів"), + (37.73, "тридцять сім рупій, сімдесят три центи"), + (81.25, "вісімдесят одна рупія, двадцять п'ять центів"), + (100.00, "сто рупій, нуль центів"), + (101.11, "сто одна рупія, одинадцять центів"), + (10222, "сто дві рупії, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_LRD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_LSL = ( + (0.00, "нуль малоті, нуль лісенте"), + (1.00, "один лоті, нуль лісенте"), + (2.00, "два малоті, нуль лісенте"), + (5.00, "п'ять малоті, нуль лісенте"), + (11.00, "одинадцять малоті, нуль лісенте"), + (16.01, "шістнадцять малоті, один сенте"), + (21.00, "двадцять один лоті, нуль лісенте"), + (37.73, "тридцять сім малоті, сімдесят три лісенте"), + (81.25, "вісімдесят один лоті, двадцять п'ять лісенте"), + (100.00, "сто малоті, нуль лісенте"), + (101.11, "сто один лоті, одинадцять лісенте"), + (10222, "сто два малоті, двадцять два лісенте"), +) + +TEST_CASES_TO_CURRENCY_LYD = ( + (0.00, "нуль динарів, нуль дирхамів"), + (1.00, "один динар, нуль дирхамів"), + (2.00, "два динари, нуль дирхамів"), + (5.00, "п'ять динарів, нуль дирхамів"), + (11.00, "одинадцять динарів, нуль дирхамів"), + (16.01, "шістнадцять динарів, один дирхам"), + (21.00, "двадцять один динар, нуль дирхамів"), + (37.73, "тридцять сім динарів, сімдесят три дирхами"), + (81.25, "вісімдесят один динар, двадцять п'ять дирхамів"), + (100.00, "сто динарів, нуль дирхамів"), + (101.11, "сто один динар, одинадцять дирхамів"), + (10222, "сто два динари, двадцять два дирхами"), +) + +TEST_CASES_TO_CURRENCY_MAD = ( + (0.00, "нуль дирхамів, нуль сантимів"), + (1.00, "один дирхам, нуль сантимів"), + (2.00, "два дирхами, нуль сантимів"), + (5.00, "п'ять дирхамів, нуль сантимів"), + (11.00, "одинадцять дирхамів, нуль сантимів"), + (16.01, "шістнадцять дирхамів, один сантим"), + (21.00, "двадцять один дирхам, нуль сантимів"), + (37.73, "тридцять сім дирхамів, сімдесят три сантими"), + (81.25, "вісімдесят один дирхам, двадцять п'ять сантимів"), + (100.00, "сто дирхамів, нуль сантимів"), + (101.11, "сто один дирхам, одинадцять сантимів"), + (10222, "сто два дирхами, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_MDL = ( + (0.00, "нуль леї, нуль бані"), + (1.00, "один лей, нуль бані"), + (2.00, "два леї, нуль бані"), + (5.00, "п'ять леї, нуль бані"), + (11.00, "одинадцять леї, нуль бані"), + (16.01, "шістнадцять леї, один бан"), + (21.00, "двадцять один лей, нуль бані"), + (37.73, "тридцять сім леї, сімдесят три бані"), + (81.25, "вісімдесят один лей, двадцять п'ять бані"), + (100.00, "сто леї, нуль бані"), + (101.11, "сто один лей, одинадцять бані"), + (10222, "сто два леї, двадцять два бані"), +) + +TEST_CASES_TO_CURRENCY_MGA = ( + (0.00, "нуль аріарі, нуль іраймбіланья"), + (1.00, "один аріарі, нуль іраймбіланья"), + (2.00, "два аріарі, нуль іраймбіланья"), + (5.00, "п'ять аріарі, нуль іраймбіланья"), + (11.00, "одинадцять аріарі, нуль іраймбіланья"), + (16.01, "шістнадцять аріарі, один іраймбіланья"), + (21.00, "двадцять один аріарі, нуль іраймбіланья"), + (37.73, "тридцять сім аріарі, сімдесят три іраймбіланья"), + (81.25, "вісімдесят один аріарі, двадцять п'ять іраймбіланья"), + (100.00, "сто аріарі, нуль іраймбіланья"), + (101.11, "сто один аріарі, одинадцять іраймбіланья"), + (10222, "сто два аріарі, двадцять два іраймбіланья"), +) + +TEST_CASES_TO_CURRENCY_MKD = ( + (0.00, "нуль денарів, нуль дені"), + (1.00, "один денар, нуль дені"), + (2.00, "два денари, нуль дені"), + (5.00, "п'ять денарів, нуль дені"), + (11.00, "одинадцять денарів, нуль дені"), + (16.01, "шістнадцять денарів, один дені"), + (21.00, "двадцять один денар, нуль дені"), + (37.73, "тридцять сім денарів, сімдесят три дені"), + (81.25, "вісімдесят один денар, двадцять п'ять дені"), + (100.00, "сто денарів, нуль дені"), + (101.11, "сто один денар, одинадцять дені"), + (10222, "сто два денари, двадцять два дені"), +) + +TEST_CASES_TO_CURRENCY_MMK = ( + (0.00, "нуль к'ят, нуль п'я"), + (1.00, "один к'ят, нуль п'я"), + (2.00, "два к'ят, нуль п'я"), + (5.00, "п'ять к'ят, нуль п'я"), + (11.00, "одинадцять к'ят, нуль п'я"), + (16.01, "шістнадцять к'ят, один п'я"), + (21.00, "двадцять один к'ят, нуль п'я"), + (37.73, "тридцять сім к'ят, сімдесят три п'я"), + (81.25, "вісімдесят один к'ят, двадцять п'ять п'я"), + (100.00, "сто к'ят, нуль п'я"), + (101.11, "сто один к'ят, одинадцять п'я"), + (10222, "сто два к'ят, двадцять два п'я"), +) + +TEST_CASES_TO_CURRENCY_MNT = ( + (0.00, "нуль тугриків, нуль мунгу"), + (1.00, "один тугрик, нуль мунгу"), + (2.00, "два тугрики, нуль мунгу"), + (5.00, "п'ять тугриків, нуль мунгу"), + (11.00, "одинадцять тугриків, нуль мунгу"), + (16.01, "шістнадцять тугриків, один мунгу"), + (21.00, "двадцять один тугрик, нуль мунгу"), + (37.73, "тридцять сім тугриків, сімдесят три мунгу"), + (81.25, "вісімдесят один тугрик, двадцять п'ять мунгу"), + (100.00, "сто тугриків, нуль мунгу"), + (101.11, "сто один тугрик, одинадцять мунгу"), + (10222, "сто два тугрики, двадцять два мунгу"), +) + +TEST_CASES_TO_CURRENCY_MOP = ( + (0.00, "нуль патак, нуль аво"), + (1.00, "одна патака, нуль аво"), + (2.00, "дві патакі, нуль аво"), + (5.00, "п'ять патак, нуль аво"), + (11.00, "одинадцять патак, нуль аво"), + (16.01, "шістнадцять патак, один аво"), + (21.00, "двадцять одна патака, нуль аво"), + (37.73, "тридцять сім патак, сімдесят три аво"), + (81.25, "вісімдесят одна патака, двадцять п'ять аво"), + (100.00, "сто патак, нуль аво"), + (101.11, "сто одна патака, одинадцять аво"), + (10222, "сто дві патакі, двадцять два аво"), +) + +TEST_CASES_TO_CURRENCY_MRU = ( + (0.00, "нуль угій, нуль хумс"), + (1.00, "одна угія, нуль хумс"), + (2.00, "дві угії, нуль хумс"), + (5.00, "п'ять угій, нуль хумс"), + (11.00, "одинадцять угій, нуль хумс"), + (16.01, "шістнадцять угій, один хумс"), + (21.00, "двадцять одна угія, нуль хумс"), + (37.73, "тридцять сім угій, сімдесят три хумс"), + (81.25, "вісімдесят одна угія, двадцять п'ять хумс"), + (100.00, "сто угій, нуль хумс"), + (101.11, "сто одна угія, одинадцять хумс"), + (10222, "сто дві угії, двадцять два хумс"), +) + +TEST_CASES_TO_CURRENCY_MUR = ( + (0.00, "нуль рупій, нуль центів"), + (1.00, "одна рупія, нуль центів"), + (2.00, "дві рупії, нуль центів"), + (5.00, "п'ять рупій, нуль центів"), + (11.00, "одинадцять рупій, нуль центів"), + (16.01, "шістнадцять рупій, один цент"), + (21.00, "двадцять одна рупія, нуль центів"), + (37.73, "тридцять сім рупій, сімдесят три центи"), + (81.25, "вісімдесят одна рупія, двадцять п'ять центів"), + (100.00, "сто рупій, нуль центів"), + (101.11, "сто одна рупія, одинадцять центів"), + (10222, "сто дві рупії, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_MVR = ( + (0.00, "нуль руфій, нуль ларі"), + (1.00, "одна руфія, нуль ларі"), + (2.00, "дві руфії, нуль ларі"), + (5.00, "п'ять руфій, нуль ларі"), + (11.00, "одинадцять руфій, нуль ларі"), + (16.01, "шістнадцять руфій, один ларі"), + (21.00, "двадцять одна руфія, нуль ларі"), + (37.73, "тридцять сім руфій, сімдесят три ларі"), + (81.25, "вісімдесят одна руфія, двадцять п'ять ларі"), + (100.00, "сто руфій, нуль ларі"), + (101.11, "сто одна руфія, одинадцять ларі"), + (10222, "сто дві руфії, двадцять два ларі"), +) + +TEST_CASES_TO_CURRENCY_MWK = ( + (0.00, "нуль квач, нуль тамбала"), + (1.00, "одна квача, нуль тамбала"), + (2.00, "дві квачі, нуль тамбала"), + (5.00, "п'ять квач, нуль тамбала"), + (11.00, "одинадцять квач, нуль тамбала"), + (16.01, "шістнадцять квач, один тамбала"), + (21.00, "двадцять одна квача, нуль тамбала"), + (37.73, "тридцять сім квач, сімдесят три тамбала"), + (81.25, "вісімдесят одна квача, двадцять п'ять тамбала"), + (100.00, "сто квач, нуль тамбала"), + (101.11, "сто одна квача, одинадцять тамбала"), + (10222, "сто дві квачі, двадцять два тамбала"), +) + +TEST_CASES_TO_CURRENCY_MXN = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_MYR = ( + (0.00, "нуль рингітів, нуль центів"), + (1.00, "один рингіт, нуль центів"), + (2.00, "два рингіти, нуль центів"), + (5.00, "п'ять рингітів, нуль центів"), + (11.00, "одинадцять рингітів, нуль центів"), + (16.01, "шістнадцять рингітів, один цент"), + (21.00, "двадцять один рингіт, нуль центів"), + (37.73, "тридцять сім рингітів, сімдесят три центи"), + (81.25, "вісімдесят один рингіт, двадцять п'ять центів"), + (100.00, "сто рингітів, нуль центів"), + (101.11, "сто один рингіт, одинадцять центів"), + (10222, "сто два рингіти, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_MZN = ( + (0.00, "нуль метікалів, нуль сентаво"), + (1.00, "один метікал, нуль сентаво"), + (2.00, "два метікали, нуль сентаво"), + (5.00, "п'ять метікалів, нуль сентаво"), + (11.00, "одинадцять метікалів, нуль сентаво"), + (16.01, "шістнадцять метікалів, один сентаво"), + (21.00, "двадцять один метікал, нуль сентаво"), + (37.73, "тридцять сім метікалів, сімдесят три сентаво"), + (81.25, "вісімдесят один метікал, двадцять п'ять сентаво"), + (100.00, "сто метікалів, нуль сентаво"), + (101.11, "сто один метікал, одинадцять сентаво"), + (10222, "сто два метікали, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_NAD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_NGN = ( + (0.00, "нуль найр, нуль кобо"), + (1.00, "одна найра, нуль кобо"), + (2.00, "дві найри, нуль кобо"), + (5.00, "п'ять найр, нуль кобо"), + (11.00, "одинадцять найр, нуль кобо"), + (16.01, "шістнадцять найр, один кобо"), + (21.00, "двадцять одна найра, нуль кобо"), + (37.73, "тридцять сім найр, сімдесят три кобо"), + (81.25, "вісімдесят одна найра, двадцять п'ять кобо"), + (100.00, "сто найр, нуль кобо"), + (101.11, "сто одна найра, одинадцять кобо"), + (10222, "сто дві найри, двадцять два кобо"), +) + +TEST_CASES_TO_CURRENCY_NIO = ( + (0.00, "нуль кордоб, нуль сентаво"), + (1.00, "одна кордоба, нуль сентаво"), + (2.00, "дві кордоби, нуль сентаво"), + (5.00, "п'ять кордоб, нуль сентаво"), + (11.00, "одинадцять кордоб, нуль сентаво"), + (16.01, "шістнадцять кордоб, один сентаво"), + (21.00, "двадцять одна кордоба, нуль сентаво"), + (37.73, "тридцять сім кордоб, сімдесят три сентаво"), + (81.25, "вісімдесят одна кордоба, двадцять п'ять сентаво"), + (100.00, "сто кордоб, нуль сентаво"), + (101.11, "сто одна кордоба, одинадцять сентаво"), + (10222, "сто дві кордоби, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_NOK = ( + (0.00, "нуль крон, нуль ере"), + (1.00, "одна крона, нуль ере"), + (2.00, "дві крони, нуль ере"), + (5.00, "п'ять крон, нуль ере"), + (11.00, "одинадцять крон, нуль ере"), + (16.01, "шістнадцять крон, один ере"), + (21.00, "двадцять одна крона, нуль ере"), + (37.73, "тридцять сім крон, сімдесят три ере"), + (81.25, "вісімдесят одна крона, двадцять п'ять ере"), + (100.00, "сто крон, нуль ере"), + (101.11, "сто одна крона, одинадцять ере"), + (10222, "сто дві крони, двадцять два ере"), +) + +TEST_CASES_TO_CURRENCY_NPR = ( + (0.00, "нуль рупій, нуль пайс"), + (1.00, "одна рупія, нуль пайс"), + (2.00, "дві рупії, нуль пайс"), + (5.00, "п'ять рупій, нуль пайс"), + (11.00, "одинадцять рупій, нуль пайс"), + (16.01, "шістнадцять рупій, одна пайса"), + (21.00, "двадцять одна рупія, нуль пайс"), + (37.73, "тридцять сім рупій, сімдесят три пайси"), + (81.25, "вісімдесят одна рупія, двадцять п'ять пайс"), + (100.00, "сто рупій, нуль пайс"), + (101.11, "сто одна рупія, одинадцять пайс"), + (10222, "сто дві рупії, двадцять дві пайси"), +) + +TEST_CASES_TO_CURRENCY_NZD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_OMR = ( + (0.00, "нуль ріалів, нуль байз"), + (1.00, "один ріал, нуль байз"), + (2.00, "два ріали, нуль байз"), + (5.00, "п'ять ріалів, нуль байз"), + (11.00, "одинадцять ріалів, нуль байз"), + (16.01, "шістнадцять ріалів, одна байза"), + (21.00, "двадцять один ріал, нуль байз"), + (37.73, "тридцять сім ріалів, сімдесят три байзи"), + (81.25, "вісімдесят один ріал, двадцять п'ять байз"), + (100.00, "сто ріалів, нуль байз"), + (101.11, "сто один ріал, одинадцять байз"), + (10222, "сто два ріали, двадцять дві байзи"), +) + +TEST_CASES_TO_CURRENCY_PAB = ( + (0.00, "нуль бальбоа, нуль сентесімо"), + (1.00, "один бальбоа, нуль сентесімо"), + (2.00, "два бальбоа, нуль сентесімо"), + (5.00, "п'ять бальбоа, нуль сентесімо"), + (11.00, "одинадцять бальбоа, нуль сентесімо"), + (16.01, "шістнадцять бальбоа, один сентесімо"), + (21.00, "двадцять один бальбоа, нуль сентесімо"), + (37.73, "тридцять сім бальбоа, сімдесят три сентесімо"), + (81.25, "вісімдесят один бальбоа, двадцять п'ять сентесімо"), + (100.00, "сто бальбоа, нуль сентесімо"), + (101.11, "сто один бальбоа, одинадцять сентесімо"), + (10222, "сто два бальбоа, двадцять два сентесімо"), +) + +TEST_CASES_TO_CURRENCY_PEN = ( + (0.00, "нуль соль, нуль сентімо"), + (1.00, "один соль, нуль сентімо"), + (2.00, "два соль, нуль сентімо"), + (5.00, "п'ять соль, нуль сентімо"), + (11.00, "одинадцять соль, нуль сентімо"), + (16.01, "шістнадцять соль, один сентімо"), + (21.00, "двадцять один соль, нуль сентімо"), + (37.73, "тридцять сім соль, сімдесят три сентімо"), + (81.25, "вісімдесят один соль, двадцять п'ять сентімо"), + (100.00, "сто соль, нуль сентімо"), + (101.11, "сто один соль, одинадцять сентімо"), + (10222, "сто два соль, двадцять два сентімо"), +) + +TEST_CASES_TO_CURRENCY_PGK = ( + (0.00, "нуль кіна, нуль тойя"), + (1.00, "один кіна, нуль тойя"), + (2.00, "два кіна, нуль тойя"), + (5.00, "п'ять кіна, нуль тойя"), + (11.00, "одинадцять кіна, нуль тойя"), + (16.01, "шістнадцять кіна, один тойя"), + (21.00, "двадцять один кіна, нуль тойя"), + (37.73, "тридцять сім кіна, сімдесят три тойя"), + (81.25, "вісімдесят один кіна, двадцять п'ять тойя"), + (100.00, "сто кіна, нуль тойя"), + (101.11, "сто один кіна, одинадцять тойя"), + (10222, "сто два кіна, двадцять два тойя"), +) + +TEST_CASES_TO_CURRENCY_PHP = ( + (0.00, "нуль песо, нуль сентаво"), + (1.00, "один песо, нуль сентаво"), + (2.00, "два песо, нуль сентаво"), + (5.00, "п'ять песо, нуль сентаво"), + (11.00, "одинадцять песо, нуль сентаво"), + (16.01, "шістнадцять песо, один сентаво"), + (21.00, "двадцять один песо, нуль сентаво"), + (37.73, "тридцять сім песо, сімдесят три сентаво"), + (81.25, "вісімдесят один песо, двадцять п'ять сентаво"), + (100.00, "сто песо, нуль сентаво"), + (101.11, "сто один песо, одинадцять сентаво"), + (10222, "сто два песо, двадцять два сентаво"), +) + +TEST_CASES_TO_CURRENCY_PKR = ( + (0.00, "нуль рупій, нуль пайс"), + (1.00, "одна рупія, нуль пайс"), + (2.00, "дві рупії, нуль пайс"), + (5.00, "п'ять рупій, нуль пайс"), + (11.00, "одинадцять рупій, нуль пайс"), + (16.01, "шістнадцять рупій, одна пайса"), + (21.00, "двадцять одна рупія, нуль пайс"), + (37.73, "тридцять сім рупій, сімдесят три пайси"), + (81.25, "вісімдесят одна рупія, двадцять п'ять пайс"), + (100.00, "сто рупій, нуль пайс"), + (101.11, "сто одна рупія, одинадцять пайс"), + (10222, "сто дві рупії, двадцять дві пайси"), +) + +TEST_CASES_TO_CURRENCY_PLN = ( + (0.00, "нуль злотих, нуль грошів"), + (1.00, "один злотий, нуль грошів"), + (2.00, "два злоті, нуль грошів"), + (5.00, "п'ять злотих, нуль грошів"), + (11.00, "одинадцять злотих, нуль грошів"), + (16.01, "шістнадцять злотих, один грош"), + (21.00, "двадцять один злотий, нуль грошів"), + (37.73, "тридцять сім злотих, сімдесят три гроші"), + (81.25, "вісімдесят один злотий, двадцять п'ять грошів"), + (100.00, "сто злотих, нуль грошів"), + (101.11, "сто один злотий, одинадцять грошів"), + (10222, "сто два злоті, двадцять два гроші"), +) + +TEST_CASES_TO_CURRENCY_PYG = ( + (0.00, "нуль гуарані, нуль сентімо"), + (1.00, "один гуарані, нуль сентімо"), + (2.00, "два гуарані, нуль сентімо"), + (5.00, "п'ять гуарані, нуль сентімо"), + (11.00, "одинадцять гуарані, нуль сентімо"), + (16.01, "шістнадцять гуарані, один сентімо"), + (21.00, "двадцять один гуарані, нуль сентімо"), + (37.73, "тридцять сім гуарані, сімдесят три сентімо"), + (81.25, "вісімдесят один гуарані, двадцять п'ять сентімо"), + (100.00, "сто гуарані, нуль сентімо"), + (101.11, "сто один гуарані, одинадцять сентімо"), + (10222, "сто два гуарані, двадцять два сентімо"), +) + +TEST_CASES_TO_CURRENCY_QAR = ( + (0.00, "нуль ріалів, нуль дирхамів"), + (1.00, "один ріал, нуль дирхамів"), + (2.00, "два ріали, нуль дирхамів"), + (5.00, "п'ять ріалів, нуль дирхамів"), + (11.00, "одинадцять ріалів, нуль дирхамів"), + (16.01, "шістнадцять ріалів, один дирхам"), + (21.00, "двадцять один ріал, нуль дирхамів"), + (37.73, "тридцять сім ріалів, сімдесят три дирхами"), + (81.25, "вісімдесят один ріал, двадцять п'ять дирхамів"), + (100.00, "сто ріалів, нуль дирхамів"), + (101.11, "сто один ріал, одинадцять дирхамів"), + (10222, "сто два ріали, двадцять два дирхами"), +) + +TEST_CASES_TO_CURRENCY_RON = ( + (0.00, "нуль леї, нуль бані"), + (1.00, "один лей, нуль бані"), + (2.00, "два леї, нуль бані"), + (5.00, "п'ять леї, нуль бані"), + (11.00, "одинадцять леї, нуль бані"), + (16.01, "шістнадцять леї, один бан"), + (21.00, "двадцять один лей, нуль бані"), + (37.73, "тридцять сім леї, сімдесят три бані"), + (81.25, "вісімдесят один лей, двадцять п'ять бані"), + (100.00, "сто леї, нуль бані"), + (101.11, "сто один лей, одинадцять бані"), + (10222, "сто два леї, двадцять два бані"), +) + +TEST_CASES_TO_CURRENCY_RSD = ( + (0.00, "нуль динарів, нуль пар"), + (1.00, "один динар, нуль пар"), + (2.00, "два динари, нуль пар"), + (5.00, "п'ять динарів, нуль пар"), + (11.00, "одинадцять динарів, нуль пар"), + (16.01, "шістнадцять динарів, одна пара"), + (21.00, "двадцять один динар, нуль пар"), + (37.73, "тридцять сім динарів, сімдесят три пари"), + (81.25, "вісімдесят один динар, двадцять п'ять пар"), + (100.00, "сто динарів, нуль пар"), + (101.11, "сто один динар, одинадцять пар"), + (10222, "сто два динари, двадцять дві пари"), +) + +TEST_CASES_TO_CURRENCY_RUB = ( + (0.00, "нуль рублів, нуль копійок"), + (1.00, "один рубль, нуль копійок"), + (2.00, "два рублі, нуль копійок"), + (5.00, "п'ять рублів, нуль копійок"), + (11.00, "одинадцять рублів, нуль копійок"), + (16.01, "шістнадцять рублів, одна копійка"), + (21.00, "двадцять один рубль, нуль копійок"), + (37.73, "тридцять сім рублів, сімдесят три копійки"), + (81.25, "вісімдесят один рубль, двадцять п'ять копійок"), + (100.00, "сто рублів, нуль копійок"), + (101.11, "сто один рубль, одинадцять копійок"), +) + +TEST_CASES_TO_CURRENCY_RWF = ( + (0.00, "нуль франків, нуль сантимів"), + (1.00, "один франк, нуль сантимів"), + (2.00, "два франки, нуль сантимів"), + (5.00, "п'ять франків, нуль сантимів"), + (11.00, "одинадцять франків, нуль сантимів"), + (16.01, "шістнадцять франків, один сантим"), + (21.00, "двадцять один франк, нуль сантимів"), + (37.73, "тридцять сім франків, сімдесят три сантими"), + (81.25, "вісімдесят один франк, двадцять п'ять сантимів"), + (100.00, "сто франків, нуль сантимів"), + (101.11, "сто один франк, одинадцять сантимів"), + (10222, "сто два франки, двадцять два сантими"), +) + +TEST_CASES_TO_CURRENCY_SAR = ( + (0.00, "нуль ріалів, нуль халалів"), + (1.00, "один ріал, нуль халалів"), + (2.00, "два ріали, нуль халалів"), + (5.00, "п'ять ріалів, нуль халалів"), + (11.00, "одинадцять ріалів, нуль халалів"), + (16.01, "шістнадцять ріалів, один халал"), + (21.00, "двадцять один ріал, нуль халалів"), + (37.73, "тридцять сім ріалів, сімдесят три халали"), + (81.25, "вісімдесят один ріал, двадцять п'ять халалів"), + (100.00, "сто ріалів, нуль халалів"), + (101.11, "сто один ріал, одинадцять халалів"), + (10222, "сто два ріали, двадцять два халали"), +) + +TEST_CASES_TO_CURRENCY_SBD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_SCR = ( + (0.00, "нуль рупій, нуль центів"), + (1.00, "одна рупія, нуль центів"), + (2.00, "дві рупії, нуль центів"), + (5.00, "п'ять рупій, нуль центів"), + (11.00, "одинадцять рупій, нуль центів"), + (16.01, "шістнадцять рупій, один цент"), + (21.00, "двадцять одна рупія, нуль центів"), + (37.73, "тридцять сім рупій, сімдесят три центи"), + (81.25, "вісімдесят одна рупія, двадцять п'ять центів"), + (100.00, "сто рупій, нуль центів"), + (101.11, "сто одна рупія, одинадцять центів"), + (10222, "сто дві рупії, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_SDG = ( + (0.00, "нуль фунтів, нуль піастрів"), + (1.00, "один фунт, нуль піастрів"), + (2.00, "два фунти, нуль піастрів"), + (5.00, "п'ять фунтів, нуль піастрів"), + (11.00, "одинадцять фунтів, нуль піастрів"), + (16.01, "шістнадцять фунтів, один піастр"), + (21.00, "двадцять один фунт, нуль піастрів"), + (37.73, "тридцять сім фунтів, сімдесят три піастри"), + (81.25, "вісімдесят один фунт, двадцять п'ять піастрів"), + (100.00, "сто фунтів, нуль піастрів"), + (101.11, "сто один фунт, одинадцять піастрів"), + (10222, "сто два фунти, двадцять два піастри"), +) + +TEST_CASES_TO_CURRENCY_SEK = ( + (0.00, "нуль крон, нуль ере"), + (1.00, "одна крона, нуль ере"), + (2.00, "дві крони, нуль ере"), + (5.00, "п'ять крон, нуль ере"), + (11.00, "одинадцять крон, нуль ере"), + (16.01, "шістнадцять крон, один ере"), + (21.00, "двадцять одна крона, нуль ере"), + (37.73, "тридцять сім крон, сімдесят три ере"), + (81.25, "вісімдесят одна крона, двадцять п'ять ере"), + (100.00, "сто крон, нуль ере"), + (101.11, "сто одна крона, одинадцять ере"), + (10222, "сто дві крони, двадцять два ере"), +) + +TEST_CASES_TO_CURRENCY_SGD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_SHP = ( + (0.00, "нуль фунтів, нуль пенсів"), + (1.00, "один фунт, нуль пенсів"), + (2.00, "два фунти, нуль пенсів"), + (5.00, "п'ять фунтів, нуль пенсів"), + (11.00, "одинадцять фунтів, нуль пенсів"), + (16.01, "шістнадцять фунтів, один пенс"), + (21.00, "двадцять один фунт, нуль пенсів"), + (37.73, "тридцять сім фунтів, сімдесят три пенси"), + (81.25, "вісімдесят один фунт, двадцять п'ять пенсів"), + (100.00, "сто фунтів, нуль пенсів"), + (101.11, "сто один фунт, одинадцять пенсів"), + (10222, "сто два фунти, двадцять два пенси"), +) + +TEST_CASES_TO_CURRENCY_SLL = ( + (0.00, "нуль леоне, нуль центів"), + (1.00, "один леоне, нуль центів"), + (2.00, "два леоне, нуль центів"), + (5.00, "п'ять леоне, нуль центів"), + (11.00, "одинадцять леоне, нуль центів"), + (16.01, "шістнадцять леоне, один цент"), + (21.00, "двадцять один леоне, нуль центів"), + (37.73, "тридцять сім леоне, сімдесят три центи"), + (81.25, "вісімдесят один леоне, двадцять п'ять центів"), + (100.00, "сто леоне, нуль центів"), + (101.11, "сто один леоне, одинадцять центів"), + (10222, "сто два леоне, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_SOS = ( + (0.00, "нуль шилінгів, нуль центів"), + (1.00, "один шилінг, нуль центів"), + (2.00, "два шилінги, нуль центів"), + (5.00, "п'ять шилінгів, нуль центів"), + (11.00, "одинадцять шилінгів, нуль центів"), + (16.01, "шістнадцять шилінгів, один цент"), + (21.00, "двадцять один шилінг, нуль центів"), + (37.73, "тридцять сім шилінгів, сімдесят три центи"), + (81.25, "вісімдесят один шилінг, двадцять п'ять центів"), + (100.00, "сто шилінгів, нуль центів"), + (101.11, "сто один шилінг, одинадцять центів"), + (10222, "сто два шилінги, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_SRD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_SSP = ( + (0.00, "нуль фунтів, нуль піастрів"), + (1.00, "один фунт, нуль піастрів"), + (2.00, "два фунти, нуль піастрів"), + (5.00, "п'ять фунтів, нуль піастрів"), + (11.00, "одинадцять фунтів, нуль піастрів"), + (16.01, "шістнадцять фунтів, один піастр"), + (21.00, "двадцять один фунт, нуль піастрів"), + (37.73, "тридцять сім фунтів, сімдесят три піастри"), + (81.25, "вісімдесят один фунт, двадцять п'ять піастрів"), + (100.00, "сто фунтів, нуль піастрів"), + (101.11, "сто один фунт, одинадцять піастрів"), + (10222, "сто два фунти, двадцять два піастри"), +) + +TEST_CASES_TO_CURRENCY_STN = ( + (0.00, "нуль добр, нуль сентімо"), + (1.00, "одна добра, нуль сентімо"), + (2.00, "дві добри, нуль сентімо"), + (5.00, "п'ять добр, нуль сентімо"), + (11.00, "одинадцять добр, нуль сентімо"), + (16.01, "шістнадцять добр, один сентімо"), + (21.00, "двадцять одна добра, нуль сентімо"), + (37.73, "тридцять сім добр, сімдесят три сентімо"), + (81.25, "вісімдесят одна добра, двадцять п'ять сентімо"), + (100.00, "сто добр, нуль сентімо"), + (101.11, "сто одна добра, одинадцять сентімо"), + (10222, "сто дві добри, двадцять два сентімо"), +) + +TEST_CASES_TO_CURRENCY_SYP = ( + (0.00, "нуль фунтів, нуль піастрів"), + (1.00, "один фунт, нуль піастрів"), + (2.00, "два фунти, нуль піастрів"), + (5.00, "п'ять фунтів, нуль піастрів"), + (11.00, "одинадцять фунтів, нуль піастрів"), + (16.01, "шістнадцять фунтів, один піастр"), + (21.00, "двадцять один фунт, нуль піастрів"), + (37.73, "тридцять сім фунтів, сімдесят три піастри"), + (81.25, "вісімдесят один фунт, двадцять п'ять піастрів"), + (100.00, "сто фунтів, нуль піастрів"), + (101.11, "сто один фунт, одинадцять піастрів"), + (10222, "сто два фунти, двадцять два піастри"), +) + +TEST_CASES_TO_CURRENCY_SZL = ( + (0.00, "нуль ліланґені, нуль центів"), + (1.00, "один ліланґені, нуль центів"), + (2.00, "два ліланґені, нуль центів"), + (5.00, "п'ять ліланґені, нуль центів"), + (11.00, "одинадцять ліланґені, нуль центів"), + (16.01, "шістнадцять ліланґені, один цент"), + (21.00, "двадцять один ліланґені, нуль центів"), + (37.73, "тридцять сім ліланґені, сімдесят три центи"), + (81.25, "вісімдесят один ліланґені, двадцять п'ять центів"), + (100.00, "сто ліланґені, нуль центів"), + (101.11, "сто один ліланґені, одинадцять центів"), + (10222, "сто два ліланґені, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_THB = ( + (0.00, "нуль батів, нуль сатангів"), + (1.00, "один бат, нуль сатангів"), + (2.00, "два бати, нуль сатангів"), + (5.00, "п'ять батів, нуль сатангів"), + (11.00, "одинадцять батів, нуль сатангів"), + (16.01, "шістнадцять батів, один сатанг"), + (21.00, "двадцять один бат, нуль сатангів"), + (37.73, "тридцять сім батів, сімдесят три сатанги"), + (81.25, "вісімдесят один бат, двадцять п'ять сатангів"), + (100.00, "сто батів, нуль сатангів"), + (101.11, "сто один бат, одинадцять сатангів"), + (10222, "сто два бати, двадцять два сатанги"), +) + +TEST_CASES_TO_CURRENCY_TJS = ( + (0.00, "нуль сомоні, нуль дірамів"), + (1.00, "один сомоні, нуль дірамів"), + (2.00, "два сомоні, нуль дірамів"), + (5.00, "п'ять сомоні, нуль дірамів"), + (11.00, "одинадцять сомоні, нуль дірамів"), + (16.01, "шістнадцять сомоні, один дірам"), + (21.00, "двадцять один сомоні, нуль дірамів"), + (37.73, "тридцять сім сомоні, сімдесят три дірами"), + (81.25, "вісімдесят один сомоні, двадцять п'ять дірамів"), + (100.00, "сто сомоні, нуль дірамів"), + (101.11, "сто один сомоні, одинадцять дірамів"), + (10222, "сто два сомоні, двадцять два дірами"), +) + +TEST_CASES_TO_CURRENCY_TMT = ( + (0.00, "нуль манатів, нуль тенге"), + (1.00, "один манат, нуль тенге"), + (2.00, "два манати, нуль тенге"), + (5.00, "п'ять манатів, нуль тенге"), + (11.00, "одинадцять манатів, нуль тенге"), + (16.01, "шістнадцять манатів, один тенге"), + (21.00, "двадцять один манат, нуль тенге"), + (37.73, "тридцять сім манатів, сімдесят три тенге"), + (81.25, "вісімдесят один манат, двадцять п'ять тенге"), + (100.00, "сто манатів, нуль тенге"), + (101.11, "сто один манат, одинадцять тенге"), + (10222, "сто два манати, двадцять два тенге"), +) + +TEST_CASES_TO_CURRENCY_TND = ( + (0.00, "нуль динарів, нуль міллімів"), + (1.00, "один динар, нуль міллімів"), + (2.00, "два динари, нуль міллімів"), + (5.00, "п'ять динарів, нуль міллімів"), + (11.00, "одинадцять динарів, нуль міллімів"), + (16.01, "шістнадцять динарів, один міллім"), + (21.00, "двадцять один динар, нуль міллімів"), + (37.73, "тридцять сім динарів, сімдесят три мілліми"), + (81.25, "вісімдесят один динар, двадцять п'ять міллімів"), + (100.00, "сто динарів, нуль міллімів"), + (101.11, "сто один динар, одинадцять міллімів"), + (10222, "сто два динари, двадцять два мілліми"), +) + +TEST_CASES_TO_CURRENCY_TOP = ( + (0.00, "нуль паанга, нуль сеніті"), + (1.00, "один паанга, нуль сеніті"), + (2.00, "два паанга, нуль сеніті"), + (5.00, "п'ять паанга, нуль сеніті"), + (11.00, "одинадцять паанга, нуль сеніті"), + (16.01, "шістнадцять паанга, один сеніті"), + (21.00, "двадцять один паанга, нуль сеніті"), + (37.73, "тридцять сім паанга, сімдесят три сеніті"), + (81.25, "вісімдесят один паанга, двадцять п'ять сеніті"), + (100.00, "сто паанга, нуль сеніті"), + (101.11, "сто один паанга, одинадцять сеніті"), + (10222, "сто два паанга, двадцять два сеніті"), +) + +TEST_CASES_TO_CURRENCY_TRY = ( + (0.00, "нуль лір, нуль курушів"), + (1.00, "одна ліра, нуль курушів"), + (2.00, "дві ліри, нуль курушів"), + (5.00, "п'ять лір, нуль курушів"), + (11.00, "одинадцять лір, нуль курушів"), + (16.01, "шістнадцять лір, один куруш"), + (21.00, "двадцять одна ліра, нуль курушів"), + (37.73, "тридцять сім лір, сімдесят три куруші"), + (81.25, "вісімдесят одна ліра, двадцять п'ять курушів"), + (100.00, "сто лір, нуль курушів"), + (101.11, "сто одна ліра, одинадцять курушів"), + (10222, "сто дві ліри, двадцять два куруші"), +) + +TEST_CASES_TO_CURRENCY_TTD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_TWD = ( + (0.00, "нуль нових доларів, нуль центів"), + (1.00, "один новий долар, нуль центів"), + (2.00, "два нові долари, нуль центів"), + (5.00, "п'ять нових доларів, нуль центів"), + (11.00, "одинадцять нових доларів, нуль центів"), + (16.01, "шістнадцять нових доларів, один цент"), + (21.00, "двадцять один новий долар, нуль центів"), + (37.73, "тридцять сім нових доларів, сімдесят три центи"), + (81.25, "вісімдесят один новий долар, двадцять п'ять центів"), + (100.00, "сто нових доларів, нуль центів"), + (101.11, "сто один новий долар, одинадцять центів"), + (10222, "сто два нові долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_TZS = ( + (0.00, "нуль шилінгів, нуль центів"), + (1.00, "один шилінг, нуль центів"), + (2.00, "два шилінги, нуль центів"), + (5.00, "п'ять шилінгів, нуль центів"), + (11.00, "одинадцять шилінгів, нуль центів"), + (16.01, "шістнадцять шилінгів, один цент"), + (21.00, "двадцять один шилінг, нуль центів"), + (37.73, "тридцять сім шилінгів, сімдесят три центи"), + (81.25, "вісімдесят один шилінг, двадцять п'ять центів"), + (100.00, "сто шилінгів, нуль центів"), + (101.11, "сто один шилінг, одинадцять центів"), + (10222, "сто два шилінги, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_UAH = ( + (0.00, "нуль гривень, нуль копійок"), + (1.00, "одна гривня, нуль копійок"), + (2.00, "дві гривні, нуль копійок"), + (5.00, "п'ять гривень, нуль копійок"), + (11.00, "одинадцять гривень, нуль копійок"), + (16.01, "шістнадцять гривень, одна копійка"), + (21.00, "двадцять одна гривня, нуль копійок"), + (37.73, "тридцять сім гривень, сімдесят три копійки"), + (81.25, "вісімдесят одна гривня, двадцять п'ять копійок"), + (100.00, "сто гривень, нуль копійок"), + (101.11, "сто одна гривня, одинадцять копійок"), + (10222, "сто дві гривні, двадцять дві копійки"), +) + +TEST_CASES_TO_CURRENCY_UGX = ( + (0.00, "нуль шилінгів, нуль центів"), + (1.00, "один шилінг, нуль центів"), + (2.00, "два шилінги, нуль центів"), + (5.00, "п'ять шилінгів, нуль центів"), + (11.00, "одинадцять шилінгів, нуль центів"), + (16.01, "шістнадцять шилінгів, один цент"), + (21.00, "двадцять один шилінг, нуль центів"), + (37.73, "тридцять сім шилінгів, сімдесят три центи"), + (81.25, "вісімдесят один шилінг, двадцять п'ять центів"), + (100.00, "сто шилінгів, нуль центів"), + (101.11, "сто один шилінг, одинадцять центів"), + (10222, "сто два шилінги, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_USD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_UYU = ( + (0.00, "нуль песо, нуль сентесімо"), + (1.00, "один песо, нуль сентесімо"), + (2.00, "два песо, нуль сентесімо"), + (5.00, "п'ять песо, нуль сентесімо"), + (11.00, "одинадцять песо, нуль сентесімо"), + (16.01, "шістнадцять песо, один сентесімо"), + (21.00, "двадцять один песо, нуль сентесімо"), + (37.73, "тридцять сім песо, сімдесят три сентесімо"), + (81.25, "вісімдесят один песо, двадцять п'ять сентесімо"), + (100.00, "сто песо, нуль сентесімо"), + (101.11, "сто один песо, одинадцять сентесімо"), + (10222, "сто два песо, двадцять два сентесімо"), +) + +TEST_CASES_TO_CURRENCY_UZS = ( + (0.00, "нуль сумів, нуль тиїнів"), + (1.00, "один сум, нуль тиїнів"), + (2.00, "два суми, нуль тиїнів"), + (5.00, "п'ять сумів, нуль тиїнів"), + (11.00, "одинадцять сумів, нуль тиїнів"), + (16.01, "шістнадцять сумів, один тиїн"), + (21.00, "двадцять один сум, нуль тиїнів"), + (37.73, "тридцять сім сумів, сімдесят три тиїни"), + (81.25, "вісімдесят один сум, двадцять п'ять тиїнів"), + (100.00, "сто сумів, нуль тиїнів"), + (101.11, "сто один сум, одинадцять тиїнів"), + (10222, "сто два суми, двадцять два тиїни"), +) + +TEST_CASES_TO_CURRENCY_VND = ( + (0.00, "нуль донгів, нуль су"), + (1.00, "один донг, нуль су"), + (2.00, "два донги, нуль су"), + (5.00, "п'ять донгів, нуль су"), + (11.00, "одинадцять донгів, нуль су"), + (16.01, "шістнадцять донгів, один су"), + (21.00, "двадцять один донг, нуль су"), + (37.73, "тридцять сім донгів, сімдесят три су"), + (81.25, "вісімдесят один донг, двадцять п'ять су"), + (100.00, "сто донгів, нуль су"), + (101.11, "сто один донг, одинадцять су"), + (10222, "сто два донги, двадцять два су"), +) + +TEST_CASES_TO_CURRENCY_WST = ( + (0.00, "нуль тал, нуль сене"), + (1.00, "одна тала, нуль сене"), + (2.00, "дві тали, нуль сене"), + (5.00, "п'ять тал, нуль сене"), + (11.00, "одинадцять тал, нуль сене"), + (16.01, "шістнадцять тал, один сене"), + (21.00, "двадцять одна тала, нуль сене"), + (37.73, "тридцять сім тал, сімдесят три сене"), + (81.25, "вісімдесят одна тала, двадцять п'ять сене"), + (100.00, "сто тал, нуль сене"), + (101.11, "сто одна тала, одинадцять сене"), + (10222, "сто дві тали, двадцять два сене"), +) + +TEST_CASES_TO_CURRENCY_XCD = ( + (0.00, "нуль доларів, нуль центів"), + (1.00, "один долар, нуль центів"), + (2.00, "два долари, нуль центів"), + (5.00, "п'ять доларів, нуль центів"), + (11.00, "одинадцять доларів, нуль центів"), + (16.01, "шістнадцять доларів, один цент"), + (21.00, "двадцять один долар, нуль центів"), + (37.73, "тридцять сім доларів, сімдесят три центи"), + (81.25, "вісімдесят один долар, двадцять п'ять центів"), + (100.00, "сто доларів, нуль центів"), + (101.11, "сто один долар, одинадцять центів"), + (10222, "сто два долари, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_YER = ( + (0.00, "нуль ріалів, нуль філсів"), + (1.00, "один ріал, нуль філсів"), + (2.00, "два ріали, нуль філсів"), + (5.00, "п'ять ріалів, нуль філсів"), + (11.00, "одинадцять ріалів, нуль філсів"), + (16.01, "шістнадцять ріалів, один філс"), + (21.00, "двадцять один ріал, нуль філсів"), + (37.73, "тридцять сім ріалів, сімдесят три філси"), + (81.25, "вісімдесят один ріал, двадцять п'ять філсів"), + (100.00, "сто ріалів, нуль філсів"), + (101.11, "сто один ріал, одинадцять філсів"), + (10222, "сто два ріали, двадцять два філси"), +) + +TEST_CASES_TO_CURRENCY_ZAR = ( + (0.00, "нуль рандів, нуль центів"), + (1.00, "один ранд, нуль центів"), + (2.00, "два ранди, нуль центів"), + (5.00, "п'ять рандів, нуль центів"), + (11.00, "одинадцять рандів, нуль центів"), + (16.01, "шістнадцять рандів, один цент"), + (21.00, "двадцять один ранд, нуль центів"), + (37.73, "тридцять сім рандів, сімдесят три центи"), + (81.25, "вісімдесят один ранд, двадцять п'ять центів"), + (100.00, "сто рандів, нуль центів"), + (101.11, "сто один ранд, одинадцять центів"), + (10222, "сто два ранди, двадцять два центи"), +) + +TEST_CASES_TO_CURRENCY_ZMW = ( + (0.00, "нуль квач, нуль нгве"), + (1.00, "одна квача, нуль нгве"), + (2.00, "дві квачі, нуль нгве"), + (5.00, "п'ять квач, нуль нгве"), + (11.00, "одинадцять квач, нуль нгве"), + (16.01, "шістнадцять квач, один нгве"), + (21.00, "двадцять одна квача, нуль нгве"), + (37.73, "тридцять сім квач, сімдесят три нгве"), + (81.25, "вісімдесят одна квача, двадцять п'ять нгве"), + (100.00, "сто квач, нуль нгве"), + (101.11, "сто одна квача, одинадцять нгве"), + (10222, "сто дві квачі, двадцять два нгве"), +) + class Num2WordsUKTest(TestCase): def test_to_cardinal(self): - self.maxDiff = None - self.assertEqual(num2words(100, lang='uk'), 'сто') - # self.assertEqual(num2words(101, lang='uk'), 'сто один') - self.assertEqual(num2words(110, lang='uk'), 'сто десять') - self.assertEqual(num2words(115, lang='uk'), "сто п'ятнадцять") - self.assertEqual(num2words(123, lang='uk'), 'сто двадцять три') - self.assertEqual(num2words(1000, lang='uk'), 'одна тисяча') - # self.assertEqual(num2words(1001, lang='uk'), 'одна тисяча один') - self.assertEqual(num2words(2012, lang='uk'), 'двi тисячi дванадцять') - self.assertEqual( - num2words(12519.85, lang='uk'), - "дванадцять тисяч п'ятсот дев'ятнадцять кома вiсiмдесят п'ять") - # self.assertEqual( - # num2words(1234567890, lang='uk'), - # "мiльярд двiстi тридцать чотири мiльйона п'ятсот шiстдесят сiмь " - # "тисяч вiсiмсот дев'яносто") - # self.assertEqual( - # num2words(215461407892039002157189883901676, lang='uk'), - # "двiстi п'ятнадцять нонiльйонiв чотириста шiстдесят один " - # "октильйон чотириста сiм септильйонiв вiсiмсот дев'яносто " - # "два секстильйони тридцять дев'ять квiнтильйонiв два " - # "квадрильйони сто п'ятдесят сiм трильйонiв сто вiсiмдесят " - # "дев'ять мiльярдiв вiсiмсот вiсiмдесят три мiльйона " - # "дев'ятсот одна тисяча шiстсот " - # "сiмдесят шiсть") - # self.assertEqual( - # num2words(719094234693663034822824384220291, lang='uk'), - # "сiмсот дев'ятнадцять нонiльйонiв дев'яносто чотири октильйони " - # "двiстi тридцять чотири септильйони шiстсот дев'яносто три " - # "секстильйони шiстсот шiстдесят три квiнтильйони тридцять " - # "чотири квадрильйони вiсiмсот двадцять два трильйони вiсiмсот " - # "двадцять чотири мiльярди триста вiсiмдесят чотири мiльйона " - # "двiстi двадцять тисяч двiстi дев'яносто один") - - def test_and_join_199(self): - self.assertEqual(num2words(187, lang='uk'), "сто вiсiмдесят сiм") - - def test_cardinal_for_float_number(self): - self.assertEqual( - num2words(12.40, lang='uk'), "дванадцять кома чотири" - ) - self.assertEqual( - num2words(17.31, lang='uk'), "сiмнадцять кома тридцять одна" - ) - self.assertEqual( - num2words(14.13, lang='uk'), "чотирнадцять кома тринадцять" - ) - self.assertEqual( - num2words(12.31, lang='uk'), "дванадцять кома тридцять одна" - ) + for test in TEST_CASES_CARDINAL: + self.assertEqual(num2words(test[0], lang='uk'), test[1]) def test_to_ordinal(self): - # @TODO: implement to_ordinal - with self.assertRaises(NotImplementedError): - num2words(1, lang='uk', to='ordinal') + for test in TEST_CASES_ORDINAL: + self.assertEqual( + num2words(test[0], lang='uk', to='ordinal'), + test[1] + ) def test_to_currency(self): - # self.assertEqual( - # num2words(1.0, lang='uk', to='currency', currency='EUR'), - # "один євро, нуль центiв" - # ) - self.assertEqual( - num2words(1.0, lang='uk', to='currency', currency='UAH'), - "одна гривня, нуль копiйок" - ) - self.assertEqual( - num2words(1234.56, lang='uk', to='currency', currency='EUR'), - "одна тисяча двiстi тридцять чотири євро, п'ятдесят шiсть центiв" - ) - self.assertEqual( - num2words(1234.56, lang='uk', to='currency', currency='UAH'), - "одна тисяча двiстi тридцять чотири гривнi, п'ятдесят шiсть " - "копiйок" - ) - # self.assertEqual( - # num2words(10111, lang='uk', to='currency', currency='EUR', - # separator=u' та'), - # "сто один євро та одинадцять центiв" - # ) - self.assertEqual( - num2words(10121, lang='uk', to='currency', currency='UAH', - separator=u' та'), - "сто одна гривня та двадцять одна копiйка" - ) - self.assertEqual( - num2words(10121, lang='uk', to='currency', currency='UAH', - separator=u' та'), - "сто одна гривня та двадцять одна копiйка" - ) - self.assertEqual( - num2words(10122, lang='uk', to='currency', currency='UAH', - separator=u' та'), - "сто одна гривня та двадцять двi копiйки" - ) - # self.assertEqual( - # num2words(10121, lang='uk', to='currency', currency='EUR', - # separator=u' та'), - # "сто один євро та двадцять один цент" - # ) - self.assertEqual( - num2words(-1251985, lang='uk', to='currency', currency='EUR', - cents=False), - "мiнус дванадцять тисяч п'ятсот дев'ятнадцять євро, 85 центiв" - ) - self.assertEqual( - num2words('38.4', lang='uk', to='currency', separator=' и', - cents=False, currency='EUR'), - "тридцять вiсiм євро и 40 центiв" - ) + for test in TEST_CASES_TO_CURRENCY_AED: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AED"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_AFN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AFN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ALL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ALL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_AMD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AMD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ANG: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ANG"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_AOA: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AOA"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ARS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ARS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_AUD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AUD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_AWG: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AWG"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_AZN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="AZN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BAM: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BAM"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BBD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BBD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BDT: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BDT"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BGN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BGN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BHD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BHD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BIF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BIF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BMD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BMD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BND: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BND"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BOB: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BOB"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BRL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BRL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BSD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BSD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BTN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BTN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BWP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BWP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BYN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BYN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_BZD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="BZD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CAD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CAD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CDF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CDF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CHF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CHF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CLP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CLP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CNY: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CNY"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_COP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="COP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CRC: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CRC"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CUC: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CUC"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CUP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CUP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CVE: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CVE"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_CZK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="CZK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_DJF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="DJF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_DKK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="DKK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_DOP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="DOP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_DZD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="DZD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_EGP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="EGP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ERN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ERN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ETB: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ETB"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_EUR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="EUR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_FJD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="FJD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_FKP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="FKP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GBP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GBP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GEL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GEL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GHS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GHS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GIP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GIP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GMD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GMD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GNF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GNF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GTQ: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GTQ"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_GYD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="GYD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_HKD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="HKD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_HNL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="HNL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_HRK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="HRK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_HTG: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="HTG"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_HUF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="HUF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_IDR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="IDR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ILS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ILS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_INR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="INR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_IQD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="IQD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_IRR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="IRR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ISK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ISK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_JMD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="JMD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_JOD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="JOD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_JPY: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="JPY"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KES: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KES"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KGS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KGS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KHR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KHR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KMF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KMF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KPW: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KPW"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KRW: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KRW"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KWD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KWD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KYD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KYD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_KZT: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="KZT"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_LAK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="LAK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_LBP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="LBP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_LKR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="LKR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_LRD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="LRD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_LSL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="LSL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_LYD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="LYD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MAD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MAD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MDL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MDL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MGA: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MGA"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MKD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MKD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MMK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MMK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MNT: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MNT"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MOP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MOP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MRU: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MRU"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MUR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MUR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MVR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MVR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MWK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MWK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MXN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MXN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MYR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MYR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_MZN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="MZN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_NAD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="NAD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_NGN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="NGN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_NIO: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="NIO"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_NOK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="NOK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_NPR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="NPR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_NZD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="NZD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_OMR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="OMR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PAB: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PAB"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PEN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PEN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PGK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PGK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PHP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PHP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PKR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PKR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PLN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PLN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_PYG: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="PYG"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_QAR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="QAR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_RON: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="RON"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_RSD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="RSD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_RUB: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="RUB"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_RWF: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="RWF"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SAR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SAR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SBD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SBD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SCR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SCR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SDG: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SDG"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SEK: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SEK"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SGD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SGD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SHP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SHP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SLL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SLL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SOS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SOS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SRD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SRD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SSP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SSP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_STN: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="STN"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SYP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SYP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_SZL: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="SZL"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_THB: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="THB"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TJS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TJS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TMT: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TMT"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TND: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TND"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TOP: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TOP"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TRY: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TRY"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TTD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TTD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TWD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TWD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_TZS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="TZS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_UAH: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="UAH"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_UGX: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="UGX"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="USD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_UYU: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="UYU"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_UZS: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="UZS"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_VND: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="VND"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_WST: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="WST"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_XCD: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="XCD"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_YER: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="YER"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ZAR: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ZAR"), + test[1] + ) + for test in TEST_CASES_TO_CURRENCY_ZMW: + self.assertEqual( + num2words(test[0], lang='uk', to='currency', + currency="ZMW"), + test[1] + ) From b5875b81f7399ec567eb10034172a23c89b8252f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20Eski?= Date: Tue, 12 Oct 2021 10:09:49 +0300 Subject: [PATCH 22/76] [ADD] to ordinal number for Turkish --- num2words/lang_TR.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 7fba871..59393c2 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -806,6 +806,10 @@ class Num2Word_TR(Num2Word_Base): return wrd + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)[-4:]) + def to_splitnum(self, val): float_digits = str(int(val * 10 ** self.precision)) if not int(val) == 0: From 3b27a09a305fa6c4b461cb01667000e6c584ede5 Mon Sep 17 00:00:00 2001 From: ismail eski Date: Wed, 17 Aug 2022 18:09:07 +0300 Subject: [PATCH 23/76] [FIX] /num2words/lang_TR.py:812:1: W293 blank line contains whitespace --- num2words/lang_TR.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/lang_TR.py b/num2words/lang_TR.py index 59393c2..ee1d6d4 100644 --- a/num2words/lang_TR.py +++ b/num2words/lang_TR.py @@ -809,7 +809,7 @@ class Num2Word_TR(Num2Word_Base): def to_ordinal_num(self, value): self.verify_ordinal(value) return "%s%s" % (value, self.to_ordinal(value)[-4:]) - + def to_splitnum(self, val): float_digits = str(int(val * 10 ** self.precision)) if not int(val) == 0: From 5a8a17d1445943192ec4f16357bd2385763caeb0 Mon Sep 17 00:00:00 2001 From: Marlon Rodriguez Date: Sat, 19 Mar 2022 19:12:19 -0400 Subject: [PATCH 24/76] feat: ci: replace travis by github workflows --- .github/workflows/ci.yml | 45 ++++++++++++++++++++++++++++++++++++++++ .travis.yml | 20 ------------------ requirements-test.txt | 1 + tox.ini | 19 ++++++++++------- 4 files changed, 58 insertions(+), 27 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9bc095e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: CI + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6, 3.7, 3.8, 3.9, '3.10'] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install tox tox-gh-actions coveralls + pip install -r requirements-test.txt + - name: Test with tox + run: | + tox + - name: Upload coverage data to coveralls.io + run: coveralls --service=github + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_FLAG_NAME: ${{ matrix.python-version }} + COVERALLS_PARALLEL: true + + coveralls: + name: Indicate completion to coveralls.io + needs: build + runs-on: ubuntu-latest + container: python:3-slim + steps: + - name: Finished + run: | + pip3 install --upgrade coveralls + coveralls --service=github --finish + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index aa600d0..0000000 --- a/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -sudo: false -language: python -python: - - "2.7" - - "3.4" - - "3.5" - - "3.6" -matrix: - include: - - { python: 3.6, env: TOXENV=flake8 } - - { python: 3.6, env: TOXENV=isort } - # Py37 requires xenial distrubution and sudo - # See travis-ci/travis-ci#9069 - - { python: 3.7, dist: xenial, sudo: true } - -install: - - pip install tox-travis - - pip install coveralls -script: tox -after_success: if [ -e .coverage ]; then coveralls; fi diff --git a/requirements-test.txt b/requirements-test.txt index 7165ac7..3d9b3a2 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -1,3 +1,4 @@ +tox flake8 flake8-copyright isort diff --git a/tox.ini b/tox.ini index 11c8f61..11cf12a 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,17 @@ [tox] -envlist = flake8,isort,py27,py34,py35,py36,py37 +envlist = py36,py37,py38,py39,py310,flake8,isort + +[gh-actions] +python = + 3.6: py36 + 3.7: py37 + 3.8: py38 + 3.9: py39 + 3.10: isort, flake8, py310 + [testenv] -passenv = TRAVIS TRAVIS_* +passenv = GITHUB_* deps = coverage delegator.py @@ -25,8 +34,4 @@ deps = isort delegator.py commands = - isort --check-only --recursive --diff num2words tests - -[testenv:py27] -setenv = - PYTHONIOENCODING = UTF-8 + isort --check-only --float-to-top --diff num2words tests From 0b896c5c7d8ec92f57993a050901853c629f6d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7al?= <11833677+gonsalet@users.noreply.github.com> Date: Wed, 16 Feb 2022 17:09:55 +0100 Subject: [PATCH 25/76] =?UTF-8?q?Orthography=20fixes:=20added=202=20missin?= =?UTF-8?q?g=20accents=20(dieciseis->diecis=C3=A9is=20;=20dolar->d=C3=B3la?= =?UTF-8?q?r)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- num2words/lang_ES.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index d6fa77a..18e6da5 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -21,7 +21,7 @@ import math from .lang_EU import Num2Word_EU -GENERIC_DOLLARS = ('dolar', 'dólares') +GENERIC_DOLLARS = ('dólar', 'dólares') GENERIC_CENTS = ('centavo', 'centavos') CURRENCIES_UNA = ('SLL', 'SEK', 'NOK', 'CZK', 'DKK', 'ISK', 'SKK', 'GBP', 'CYP', 'EGP', 'FKP', 'GIP', @@ -230,7 +230,7 @@ class Num2Word_ES(Num2Word_EU): "veintiséis", "veinticinco", "veinticuatro", "veintitrés", "veintidós", "veintiuno", "veinte", "diecinueve", "dieciocho", "diecisiete", - "dieciseis", "quince", "catorce", "trece", "doce", + "dieciséis", "quince", "catorce", "trece", "doce", "once", "diez", "nueve", "ocho", "siete", "seis", "cinco", "cuatro", "tres", "dos", "uno", "cero"] self.ords = {1: "primer", From a61760bd28faf7894933747e3975d7952197b0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7al?= <11833677+gonsalet@users.noreply.github.com> Date: Wed, 16 Feb 2022 17:57:46 +0100 Subject: [PATCH 26/76] =?UTF-8?q?Orthography=20fix:=20added=20accent=20vei?= =?UTF-8?q?ntiun->veinti=C3=BAn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- num2words/lang_ES.py | 1 + 1 file changed, 1 insertion(+) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index 18e6da5..6291fd7 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -363,4 +363,5 @@ class Num2Word_ES(Num2Word_EU): list_result[0] = list_result[0].replace("uno", "una") result = " ".join(list_result) result = result.replace("uno", "un") + result = result.replace("veintiun", "veintiún") # correct orthography for this specific case return result From 1cea15170dfde2e3c1df1e38877cc06707bd3351 Mon Sep 17 00:00:00 2001 From: gonzy Date: Wed, 16 Feb 2022 18:03:51 +0100 Subject: [PATCH 27/76] =?UTF-8?q?Orthography=20fixes:=20added=20missing=20?= =?UTF-8?q?accent=20(nuevos=20dolares->nuevos=20d=C3=B3lares);=20fixed=20a?= =?UTF-8?q?ccents=20in=20test=5Fes.py=20(diecis=C3=A9is,=20d=C3=B3lar,=20d?= =?UTF-8?q?=C3=B3lares,=20veinti=C3=BAn)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- num2words/lang_ES.py | 2 +- tests/test_es.py | 282 +++++++++++++++++++++---------------------- 2 files changed, 142 insertions(+), 142 deletions(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index 6291fd7..ba22d13 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -184,7 +184,7 @@ class Num2Word_ES(Num2Word_EU): 'TND': (('dinar', 'dinares'), ('milésimo', 'milésimos')), 'TOP': (('paanga', 'paangas'), ('céntimo', 'céntimos')), 'TTD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), - 'TWD': (('nuevo dólar', 'nuevos dolares'), ('céntimo', 'céntimos')), + 'TWD': (('nuevo dólar', 'nuevos dólares'), ('céntimo', 'céntimos')), 'TZS': (('chelín', 'chelines'), ('céntimo', 'céntimos')), 'UAG': (('hryvnia', 'hryvnias'), ('kopiyka', 'kopiykas')), 'UGX': (('chelín', 'chelines'), ('céntimo', 'céntimos')), diff --git a/tests/test_es.py b/tests/test_es.py index cf3a8c2..da7ff35 100644 --- a/tests/test_es.py +++ b/tests/test_es.py @@ -28,7 +28,7 @@ TEST_CASES_CARDINAL = ( (5.5, 'cinco punto cinco'), (11, 'once'), (12, 'doce'), - (16, 'dieciseis'), + (16, 'dieciséis'), (17.42, 'diecisiete punto cuatro dos'), (19, 'diecinueve'), (20, 'veinte'), @@ -117,7 +117,7 @@ TEST_CASES_TO_CURRENCY = ( (2.00, 'dos euros con cero céntimos'), (8.00, 'ocho euros con cero céntimos'), (12.00, 'doce euros con cero céntimos'), - (21.00, 'veintiun euros con cero céntimos'), + (21.00, 'veintiún euros con cero céntimos'), (81.25, 'ochenta y un euros con veinticinco céntimos'), (350.90, 'trescientos cincuenta euros con noventa céntimos'), (100.00, 'cien euros con cero céntimos'), @@ -128,18 +128,18 @@ TEST_CASES_TO_CURRENCY_ESP = ( (2.00, 'dos pesetas con cero céntimos'), (8.00, 'ocho pesetas con cero céntimos'), (12.00, 'doce pesetas con cero céntimos'), - (21.00, 'veintiun pesetas con cero céntimos'), + (21.00, 'veintiún pesetas con cero céntimos'), (81.25, 'ochenta y un pesetas con veinticinco céntimos'), (350.90, 'trescientos cincuenta pesetas con noventa céntimos'), (100.00, 'cien pesetas con cero céntimos'), ) TEST_CASES_TO_CURRENCY_USD = ( - (1.00, 'un dolar con cero centavos'), + (1.00, 'un dólar con cero centavos'), (2.00, 'dos dólares con cero centavos'), (8.00, 'ocho dólares con cero centavos'), (12.00, 'doce dólares con cero centavos'), - (21.00, 'veintiun dólares con cero centavos'), + (21.00, 'veintiún dólares con cero centavos'), (81.25, 'ochenta y un dólares con veinticinco centavos'), (350.90, 'trescientos cincuenta dólares con noventa centavos'), (100.00, 'cien dólares con cero centavos'), @@ -150,7 +150,7 @@ TEST_CASES_TO_CURRENCY_PEN = ( (2.00, 'dos soles con cero céntimos'), (8.00, 'ocho soles con cero céntimos'), (12.00, 'doce soles con cero céntimos'), - (21.00, 'veintiun soles con cero céntimos'), + (21.00, 'veintiún soles con cero céntimos'), (81.25, 'ochenta y un soles con veinticinco céntimos'), (350.90, 'trescientos cincuenta soles con noventa céntimos'), (100.00, 'cien soles con cero céntimos'), @@ -161,7 +161,7 @@ TEST_CASES_TO_CURRENCY_CRC = ( (2.00, 'dos colones con cero centavos'), (8.00, 'ocho colones con cero centavos'), (12.00, 'doce colones con cero centavos'), - (21.00, 'veintiun colones con cero centavos'), + (21.00, 'veintiún colones con cero centavos'), (81.25, 'ochenta y un colones con veinticinco centavos'), (350.90, 'trescientos cincuenta colones con noventa centavos'), (100.00, 'cien colones con cero centavos'), @@ -174,7 +174,7 @@ TEST_CASES_TO_CURRENCY_GBP = ( (2.00, 'dos libras con cero pence'), (8.00, 'ocho libras con cero pence'), (12.00, 'doce libras con cero pence'), - (21.00, 'veintiun libras con cero pence'), + (21.00, 'veintiún libras con cero pence'), (81.25, 'ochenta y un libras con veinticinco pence'), (350.90, 'trescientos cincuenta libras con noventa pence'), (100.00, 'cien libras con cero pence'), @@ -187,7 +187,7 @@ TEST_CASES_TO_CURRENCY_RUB = ( (2.00, 'dos rublos con cero kopeykas'), (8.00, 'ocho rublos con cero kopeykas'), (12.00, 'doce rublos con cero kopeykas'), - (21.00, 'veintiun rublos con cero kopeykas'), + (21.00, 'veintiún rublos con cero kopeykas'), (81.25, 'ochenta y un rublos con veinticinco kopeykas'), (350.90, 'trescientos cincuenta rublos con noventa kopeykas'), (100.00, 'cien rublos con cero kopeykas'), @@ -200,7 +200,7 @@ TEST_CASES_TO_CURRENCY_SEK = ( (2.00, 'dos coronas con cero öre'), (8.00, 'ocho coronas con cero öre'), (12.00, 'doce coronas con cero öre'), - (21.00, 'veintiun coronas con cero öre'), + (21.00, 'veintiún coronas con cero öre'), (81.25, 'ochenta y un coronas con veinticinco öre'), (350.90, 'trescientos cincuenta coronas con noventa öre'), (100.00, 'cien coronas con cero öre'), @@ -213,7 +213,7 @@ TEST_CASES_TO_CURRENCY_NOK = ( (2.00, 'dos coronas con cero øre'), (8.00, 'ocho coronas con cero øre'), (12.00, 'doce coronas con cero øre'), - (21.00, 'veintiun coronas con cero øre'), + (21.00, 'veintiún coronas con cero øre'), (81.25, 'ochenta y un coronas con veinticinco øre'), (350.90, 'trescientos cincuenta coronas con noventa øre'), (100.00, 'cien coronas con cero øre'), @@ -226,7 +226,7 @@ TEST_CASES_TO_CURRENCY_PLN = ( (2.00, 'dos zlotys con cero groszy'), (8.00, 'ocho zlotys con cero groszy'), (12.00, 'doce zlotys con cero groszy'), - (21.00, 'veintiun zlotys con cero groszy'), + (21.00, 'veintiún zlotys con cero groszy'), (81.25, 'ochenta y un zlotys con veinticinco groszy'), (350.90, 'trescientos cincuenta zlotys con noventa groszy'), (100.00, 'cien zlotys con cero groszy'), @@ -239,7 +239,7 @@ TEST_CASES_TO_CURRENCY_MXN = ( (2.00, 'dos pesos con cero centavos'), (8.00, 'ocho pesos con cero centavos'), (12.00, 'doce pesos con cero centavos'), - (21.00, 'veintiun pesos con cero centavos'), + (21.00, 'veintiún pesos con cero centavos'), (81.25, 'ochenta y un pesos con veinticinco centavos'), (350.90, 'trescientos cincuenta pesos con noventa centavos'), (100.00, 'cien pesos con cero centavos'), @@ -252,7 +252,7 @@ TEST_CASES_TO_CURRENCY_RON = ( (2.00, 'dos leus con cero bani'), (8.00, 'ocho leus con cero bani'), (12.00, 'doce leus con cero bani'), - (21.00, 'veintiun leus con cero bani'), + (21.00, 'veintiún leus con cero bani'), (81.25, 'ochenta y un leus con veinticinco bani'), (350.90, 'trescientos cincuenta leus con noventa bani'), (100.00, 'cien leus con cero bani'), @@ -265,7 +265,7 @@ TEST_CASES_TO_CURRENCY_INR = ( (2.00, 'dos rupias con cero paisas'), (8.00, 'ocho rupias con cero paisas'), (12.00, 'doce rupias con cero paisas'), - (21.00, 'veintiun rupias con cero paisas'), + (21.00, 'veintiún rupias con cero paisas'), (81.25, 'ochenta y un rupias con veinticinco paisas'), (350.90, 'trescientos cincuenta rupias con noventa paisas'), (100.00, 'cien rupias con cero paisas'), @@ -278,7 +278,7 @@ TEST_CASES_TO_CURRENCY_HUF = ( (2.00, 'dos florines con cero fillér'), (8.00, 'ocho florines con cero fillér'), (12.00, 'doce florines con cero fillér'), - (21.00, 'veintiun florines con cero fillér'), + (21.00, 'veintiún florines con cero fillér'), (81.25, 'ochenta y un florines con veinticinco fillér'), (350.90, 'trescientos cincuenta florines con noventa fillér'), (100.00, 'cien florines con cero fillér'), @@ -291,7 +291,7 @@ TEST_CASES_TO_CURRENCY_FRF = ( (2.00, 'dos francos con cero céntimos'), (8.00, 'ocho francos con cero céntimos'), (12.00, 'doce francos con cero céntimos'), - (21.00, 'veintiun francos con cero céntimos'), + (21.00, 'veintiún francos con cero céntimos'), (81.25, 'ochenta y un francos con veinticinco céntimos'), (350.90, 'trescientos cincuenta francos con noventa céntimos'), (100.00, 'cien francos con cero céntimos'), @@ -304,7 +304,7 @@ TEST_CASES_TO_CURRENCY_CNY = ( (2.00, 'dos yuanes con cero jiaos'), (8.00, 'ocho yuanes con cero jiaos'), (12.00, 'doce yuanes con cero jiaos'), - (21.00, 'veintiun yuanes con cero jiaos'), + (21.00, 'veintiún yuanes con cero jiaos'), (81.25, 'ochenta y un yuanes con veinticinco jiaos'), (350.90, 'trescientos cincuenta yuanes con noventa jiaos'), (100.00, 'cien yuanes con cero jiaos'), @@ -317,7 +317,7 @@ TEST_CASES_TO_CURRENCY_CZK = ( (2.00, 'dos coronas con cero haléř'), (8.00, 'ocho coronas con cero haléř'), (12.00, 'doce coronas con cero haléř'), - (21.00, 'veintiun coronas con cero haléř'), + (21.00, 'veintiún coronas con cero haléř'), (81.25, 'ochenta y un coronas con veinticinco haléř'), (350.90, 'trescientos cincuenta coronas con noventa haléř'), (100.00, 'cien coronas con cero haléř'), @@ -330,7 +330,7 @@ TEST_CASES_TO_CURRENCY_NIO = ( (2.00, 'dos córdobas con cero centavos'), (8.00, 'ocho córdobas con cero centavos'), (12.00, 'doce córdobas con cero centavos'), - (21.00, 'veintiun córdobas con cero centavos'), + (21.00, 'veintiún córdobas con cero centavos'), (81.25, 'ochenta y un córdobas con veinticinco centavos'), (350.90, 'trescientos cincuenta córdobas con noventa centavos'), (100.00, 'cien córdobas con cero centavos'), @@ -343,7 +343,7 @@ TEST_CASES_TO_CURRENCY_VES = ( (2.00, 'dos bolívares con cero céntimos'), (8.00, 'ocho bolívares con cero céntimos'), (12.00, 'doce bolívares con cero céntimos'), - (21.00, 'veintiun bolívares con cero céntimos'), + (21.00, 'veintiún bolívares con cero céntimos'), (81.25, 'ochenta y un bolívares con veinticinco céntimos'), (350.90, 'trescientos cincuenta bolívares con noventa céntimos'), (100.00, 'cien bolívares con cero céntimos'), @@ -356,7 +356,7 @@ TEST_CASES_TO_CURRENCY_BRL = ( (2.00, 'dos reales con cero centavos'), (8.00, 'ocho reales con cero centavos'), (12.00, 'doce reales con cero centavos'), - (21.00, 'veintiun reales con cero centavos'), + (21.00, 'veintiún reales con cero centavos'), (81.25, 'ochenta y un reales con veinticinco centavos'), (350.90, 'trescientos cincuenta reales con noventa centavos'), (100.00, 'cien reales con cero centavos'), @@ -369,7 +369,7 @@ TEST_CASES_TO_CURRENCY_JPY = ( (2.00, 'dos yenes con cero sen'), (8.00, 'ocho yenes con cero sen'), (12.00, 'doce yenes con cero sen'), - (21.00, 'veintiun yenes con cero sen'), + (21.00, 'veintiún yenes con cero sen'), (81.25, 'ochenta y un yenes con veinticinco sen'), (350.90, 'trescientos cincuenta yenes con noventa sen'), (100.00, 'cien yenes con cero sen'), @@ -382,7 +382,7 @@ TEST_CASES_TO_CURRENCY_KRW = ( (2.00, 'dos wones con cero jeon'), (8.00, 'ocho wones con cero jeon'), (12.00, 'doce wones con cero jeon'), - (21.00, 'veintiun wones con cero jeon'), + (21.00, 'veintiún wones con cero jeon'), (81.25, 'ochenta y un wones con veinticinco jeon'), (350.90, 'trescientos cincuenta wones con noventa jeon'), (100.00, 'cien wones con cero jeon'), @@ -395,7 +395,7 @@ TEST_CASES_TO_CURRENCY_KPW = ( (2.00, 'dos wones con cero chon'), (8.00, 'ocho wones con cero chon'), (12.00, 'doce wones con cero chon'), - (21.00, 'veintiun wones con cero chon'), + (21.00, 'veintiún wones con cero chon'), (81.25, 'ochenta y un wones con veinticinco chon'), (350.90, 'trescientos cincuenta wones con noventa chon'), (100.00, 'cien wones con cero chon'), @@ -408,7 +408,7 @@ TEST_CASES_TO_CURRENCY_TRY = ( (2.00, 'dos liras con cero kuruş'), (8.00, 'ocho liras con cero kuruş'), (12.00, 'doce liras con cero kuruş'), - (21.00, 'veintiun liras con cero kuruş'), + (21.00, 'veintiún liras con cero kuruş'), (81.25, 'ochenta y un liras con veinticinco kuruş'), (350.90, 'trescientos cincuenta liras con noventa kuruş'), (100.00, 'cien liras con cero kuruş'), @@ -421,7 +421,7 @@ TEST_CASES_TO_CURRENCY_ZAR = ( (2.00, 'dos rands con cero céntimos'), (8.00, 'ocho rands con cero céntimos'), (12.00, 'doce rands con cero céntimos'), - (21.00, 'veintiun rands con cero céntimos'), + (21.00, 'veintiún rands con cero céntimos'), (81.25, 'ochenta y un rands con veinticinco céntimos'), (350.90, 'trescientos cincuenta rands con noventa céntimos'), (100.00, 'cien rands con cero céntimos'), @@ -434,7 +434,7 @@ TEST_CASES_TO_CURRENCY_KZT = ( (2.00, 'dos tenges con cero tïın'), (8.00, 'ocho tenges con cero tïın'), (12.00, 'doce tenges con cero tïın'), - (21.00, 'veintiun tenges con cero tïın'), + (21.00, 'veintiún tenges con cero tïın'), (81.25, 'ochenta y un tenges con veinticinco tïın'), (350.90, 'trescientos cincuenta tenges con noventa tïın'), (100.00, 'cien tenges con cero tïın'), @@ -447,7 +447,7 @@ TEST_CASES_TO_CURRENCY_UAH = ( (2.00, 'dos hryvnias con cero kopiykas'), (8.00, 'ocho hryvnias con cero kopiykas'), (12.00, 'doce hryvnias con cero kopiykas'), - (21.00, 'veintiun hryvnias con cero kopiykas'), + (21.00, 'veintiún hryvnias con cero kopiykas'), (81.25, 'ochenta y un hryvnias con veinticinco kopiykas'), (350.90, 'trescientos cincuenta hryvnias con noventa kopiykas'), (100.00, 'cien hryvnias con cero kopiykas'), @@ -460,7 +460,7 @@ TEST_CASES_TO_CURRENCY_THB = ( (2.00, 'dos bahts con cero satang'), (8.00, 'ocho bahts con cero satang'), (12.00, 'doce bahts con cero satang'), - (21.00, 'veintiun bahts con cero satang'), + (21.00, 'veintiún bahts con cero satang'), (81.25, 'ochenta y un bahts con veinticinco satang'), (350.90, 'trescientos cincuenta bahts con noventa satang'), (100.00, 'cien bahts con cero satang'), @@ -473,7 +473,7 @@ TEST_CASES_TO_CURRENCY_AED = ( (2.00, 'dos dirhams con cero fils'), (8.00, 'ocho dirhams con cero fils'), (12.00, 'doce dirhams con cero fils'), - (21.00, 'veintiun dirhams con cero fils'), + (21.00, 'veintiún dirhams con cero fils'), (81.25, 'ochenta y un dirhams con veinticinco fils'), (350.90, 'trescientos cincuenta dirhams con noventa fils'), (100.00, 'cien dirhams con cero fils'), @@ -486,7 +486,7 @@ TEST_CASES_TO_CURRENCY_AFN = ( (2.00, 'dos afghanis con cero puls'), (8.00, 'ocho afghanis con cero puls'), (12.00, 'doce afghanis con cero puls'), - (21.00, 'veintiun afghanis con cero puls'), + (21.00, 'veintiún afghanis con cero puls'), (81.25, 'ochenta y un afghanis con veinticinco puls'), (350.90, 'trescientos cincuenta afghanis con noventa puls'), (100.00, 'cien afghanis con cero puls'), @@ -499,7 +499,7 @@ TEST_CASES_TO_CURRENCY_ALL = ( (2.00, 'dos leke con cero qindarka'), (8.00, 'ocho leke con cero qindarka'), (12.00, 'doce leke con cero qindarka'), - (21.00, 'veintiun leke con cero qindarka'), + (21.00, 'veintiún leke con cero qindarka'), (81.25, 'ochenta y un leke con veinticinco qindarka'), (350.90, 'trescientos cincuenta leke con noventa qindarka'), (100.00, 'cien leke con cero qindarka'), @@ -512,7 +512,7 @@ TEST_CASES_TO_CURRENCY_AMD = ( (2.00, 'dos drams con cero lumas'), (8.00, 'ocho drams con cero lumas'), (12.00, 'doce drams con cero lumas'), - (21.00, 'veintiun drams con cero lumas'), + (21.00, 'veintiún drams con cero lumas'), (81.25, 'ochenta y un drams con veinticinco lumas'), (350.90, 'trescientos cincuenta drams con noventa lumas'), (100.00, 'cien drams con cero lumas'), @@ -525,7 +525,7 @@ TEST_CASES_TO_CURRENCY_ANG = ( (2.00, 'dos florines con cero centavos'), (8.00, 'ocho florines con cero centavos'), (12.00, 'doce florines con cero centavos'), - (21.00, 'veintiun florines con cero centavos'), + (21.00, 'veintiún florines con cero centavos'), (81.25, 'ochenta y un florines con veinticinco centavos'), (350.90, 'trescientos cincuenta florines con noventa centavos'), (100.00, 'cien florines con cero centavos'), @@ -538,7 +538,7 @@ TEST_CASES_TO_CURRENCY_AOA = ( (2.00, 'dos kwanzas con cero céntimos'), (8.00, 'ocho kwanzas con cero céntimos'), (12.00, 'doce kwanzas con cero céntimos'), - (21.00, 'veintiun kwanzas con cero céntimos'), + (21.00, 'veintiún kwanzas con cero céntimos'), (81.25, 'ochenta y un kwanzas con veinticinco céntimos'), (350.90, 'trescientos cincuenta kwanzas con noventa céntimos'), (100.00, 'cien kwanzas con cero céntimos'), @@ -551,7 +551,7 @@ TEST_CASES_TO_CURRENCY_AWG = ( (2.00, 'dos florines con cero centavos'), (8.00, 'ocho florines con cero centavos'), (12.00, 'doce florines con cero centavos'), - (21.00, 'veintiun florines con cero centavos'), + (21.00, 'veintiún florines con cero centavos'), (81.25, 'ochenta y un florines con veinticinco centavos'), (350.90, 'trescientos cincuenta florines con noventa centavos'), (100.00, 'cien florines con cero centavos'), @@ -564,7 +564,7 @@ TEST_CASES_TO_CURRENCY_AZN = ( (2.00, 'dos manat con cero qəpik'), (8.00, 'ocho manat con cero qəpik'), (12.00, 'doce manat con cero qəpik'), - (21.00, 'veintiun manat con cero qəpik'), + (21.00, 'veintiún manat con cero qəpik'), (81.25, 'ochenta y un manat con veinticinco qəpik'), (350.90, 'trescientos cincuenta manat con noventa qəpik'), (100.00, 'cien manat con cero qəpik'), @@ -577,7 +577,7 @@ TEST_CASES_TO_CURRENCY_BDT = ( (2.00, 'dos takas con cero paisas'), (8.00, 'ocho takas con cero paisas'), (12.00, 'doce takas con cero paisas'), - (21.00, 'veintiun takas con cero paisas'), + (21.00, 'veintiún takas con cero paisas'), (81.25, 'ochenta y un takas con veinticinco paisas'), (350.90, 'trescientos cincuenta takas con noventa paisas'), (100.00, 'cien takas con cero paisas'), @@ -590,7 +590,7 @@ TEST_CASES_TO_CURRENCY_BGN = ( (2.00, 'dos leva con cero stotinki'), (8.00, 'ocho leva con cero stotinki'), (12.00, 'doce leva con cero stotinki'), - (21.00, 'veintiun leva con cero stotinki'), + (21.00, 'veintiún leva con cero stotinki'), (81.25, 'ochenta y un leva con veinticinco stotinki'), (350.90, 'trescientos cincuenta leva con noventa stotinki'), (100.00, 'cien leva con cero stotinki'), @@ -603,7 +603,7 @@ TEST_CASES_TO_CURRENCY_BHD = ( (2.00, 'dos dinares con cero fils'), (8.00, 'ocho dinares con cero fils'), (12.00, 'doce dinares con cero fils'), - (21.00, 'veintiun dinares con cero fils'), + (21.00, 'veintiún dinares con cero fils'), (81.25, 'ochenta y un dinares con veinticinco fils'), (350.90, 'trescientos cincuenta dinares con noventa fils'), (100.00, 'cien dinares con cero fils'), @@ -616,7 +616,7 @@ TEST_CASES_TO_CURRENCY_BOB = ( (2.00, 'dos bolivianos con cero centavos'), (8.00, 'ocho bolivianos con cero centavos'), (12.00, 'doce bolivianos con cero centavos'), - (21.00, 'veintiun bolivianos con cero centavos'), + (21.00, 'veintiún bolivianos con cero centavos'), (81.25, 'ochenta y un bolivianos con veinticinco centavos'), (350.90, 'trescientos cincuenta bolivianos con noventa centavos'), (100.00, 'cien bolivianos con cero centavos'), @@ -629,7 +629,7 @@ TEST_CASES_TO_CURRENCY_BTN = ( (2.00, 'dos ngultrum con cero chetrum'), (8.00, 'ocho ngultrum con cero chetrum'), (12.00, 'doce ngultrum con cero chetrum'), - (21.00, 'veintiun ngultrum con cero chetrum'), + (21.00, 'veintiún ngultrum con cero chetrum'), (81.25, 'ochenta y un ngultrum con veinticinco chetrum'), (350.90, 'trescientos cincuenta ngultrum con noventa chetrum'), (100.00, 'cien ngultrum con cero chetrum'), @@ -642,7 +642,7 @@ TEST_CASES_TO_CURRENCY_BWP = ( (2.00, 'dos pulas con cero thebes'), (8.00, 'ocho pulas con cero thebes'), (12.00, 'doce pulas con cero thebes'), - (21.00, 'veintiun pulas con cero thebes'), + (21.00, 'veintiún pulas con cero thebes'), (81.25, 'ochenta y un pulas con veinticinco thebes'), (350.90, 'trescientos cincuenta pulas con noventa thebes'), (100.00, 'cien pulas con cero thebes'), @@ -655,7 +655,7 @@ TEST_CASES_TO_CURRENCY_BYN = ( (2.00, 'dos rublos con cero kópeks'), (8.00, 'ocho rublos con cero kópeks'), (12.00, 'doce rublos con cero kópeks'), - (21.00, 'veintiun rublos con cero kópeks'), + (21.00, 'veintiún rublos con cero kópeks'), (81.25, 'ochenta y un rublos con veinticinco kópeks'), (350.90, 'trescientos cincuenta rublos con noventa kópeks'), (100.00, 'cien rublos con cero kópeks'), @@ -668,7 +668,7 @@ TEST_CASES_TO_CURRENCY_BYR = ( (2.00, 'dos rublos con cero kópeks'), (8.00, 'ocho rublos con cero kópeks'), (12.00, 'doce rublos con cero kópeks'), - (21.00, 'veintiun rublos con cero kópeks'), + (21.00, 'veintiún rublos con cero kópeks'), (81.25, 'ochenta y un rublos con veinticinco kópeks'), (350.90, 'trescientos cincuenta rublos con noventa kópeks'), (100.00, 'cien rublos con cero kópeks'), @@ -677,11 +677,11 @@ TEST_CASES_TO_CURRENCY_BYR = ( ) TEST_CASES_TO_CURRENCY_BZD = ( - (1.00, 'un dolar con cero céntimos'), + (1.00, 'un dólar con cero céntimos'), (2.00, 'dos dólares con cero céntimos'), (8.00, 'ocho dólares con cero céntimos'), (12.00, 'doce dólares con cero céntimos'), - (21.00, 'veintiun dólares con cero céntimos'), + (21.00, 'veintiún dólares con cero céntimos'), (81.25, 'ochenta y un dólares con veinticinco céntimos'), (350.90, 'trescientos cincuenta dólares con noventa céntimos'), (100.00, 'cien dólares con cero céntimos'), @@ -694,7 +694,7 @@ TEST_CASES_TO_CURRENCY_CVE = ( (2.00, 'dos escudos con cero centavos'), (8.00, 'ocho escudos con cero centavos'), (12.00, 'doce escudos con cero centavos'), - (21.00, 'veintiun escudos con cero centavos'), + (21.00, 'veintiún escudos con cero centavos'), (81.25, 'ochenta y un escudos con veinticinco centavos'), (350.90, 'trescientos cincuenta escudos con noventa centavos'), (100.00, 'cien escudos con cero centavos'), @@ -707,7 +707,7 @@ TEST_CASES_TO_CURRENCY_CYP = ( (2.00, 'dos libras con cero céntimos'), (8.00, 'ocho libras con cero céntimos'), (12.00, 'doce libras con cero céntimos'), - (21.00, 'veintiun libras con cero céntimos'), + (21.00, 'veintiún libras con cero céntimos'), (81.25, 'ochenta y un libras con veinticinco céntimos'), (350.90, 'trescientos cincuenta libras con noventa céntimos'), (100.00, 'cien libras con cero céntimos'), @@ -720,7 +720,7 @@ TEST_CASES_TO_CURRENCY_DKK = ( (2.00, 'dos coronas con cero øre'), (8.00, 'ocho coronas con cero øre'), (12.00, 'doce coronas con cero øre'), - (21.00, 'veintiun coronas con cero øre'), + (21.00, 'veintiún coronas con cero øre'), (81.25, 'ochenta y un coronas con veinticinco øre'), (350.90, 'trescientos cincuenta coronas con noventa øre'), (100.00, 'cien coronas con cero øre'), @@ -733,7 +733,7 @@ TEST_CASES_TO_CURRENCY_DZD = ( (2.00, 'dos dinares con cero céntimos'), (8.00, 'ocho dinares con cero céntimos'), (12.00, 'doce dinares con cero céntimos'), - (21.00, 'veintiun dinares con cero céntimos'), + (21.00, 'veintiún dinares con cero céntimos'), (81.25, 'ochenta y un dinares con veinticinco céntimos'), (350.90, 'trescientos cincuenta dinares con noventa céntimos'), (100.00, 'cien dinares con cero céntimos'), @@ -746,7 +746,7 @@ TEST_CASES_TO_CURRENCY_ECS = ( (2.00, 'dos sucres con cero centavos'), (8.00, 'ocho sucres con cero centavos'), (12.00, 'doce sucres con cero centavos'), - (21.00, 'veintiun sucres con cero centavos'), + (21.00, 'veintiún sucres con cero centavos'), (81.25, 'ochenta y un sucres con veinticinco centavos'), (350.90, 'trescientos cincuenta sucres con noventa centavos'), (100.00, 'cien sucres con cero centavos'), @@ -759,7 +759,7 @@ TEST_CASES_TO_CURRENCY_EGP = ( (2.00, 'dos libras con cero piastras'), (8.00, 'ocho libras con cero piastras'), (12.00, 'doce libras con cero piastras'), - (21.00, 'veintiun libras con cero piastras'), + (21.00, 'veintiún libras con cero piastras'), (81.25, 'ochenta y un libras con veinticinco piastras'), (350.90, 'trescientos cincuenta libras con noventa piastras'), (100.00, 'cien libras con cero piastras'), @@ -772,7 +772,7 @@ TEST_CASES_TO_CURRENCY_ERN = ( (2.00, 'dos nakfas con cero céntimos'), (8.00, 'ocho nakfas con cero céntimos'), (12.00, 'doce nakfas con cero céntimos'), - (21.00, 'veintiun nakfas con cero céntimos'), + (21.00, 'veintiún nakfas con cero céntimos'), (81.25, 'ochenta y un nakfas con veinticinco céntimos'), (350.90, 'trescientos cincuenta nakfas con noventa céntimos'), (100.00, 'cien nakfas con cero céntimos'), @@ -785,7 +785,7 @@ TEST_CASES_TO_CURRENCY_ETB = ( (2.00, 'dos birrs con cero céntimos'), (8.00, 'ocho birrs con cero céntimos'), (12.00, 'doce birrs con cero céntimos'), - (21.00, 'veintiun birrs con cero céntimos'), + (21.00, 'veintiún birrs con cero céntimos'), (81.25, 'ochenta y un birrs con veinticinco céntimos'), (350.90, 'trescientos cincuenta birrs con noventa céntimos'), (100.00, 'cien birrs con cero céntimos'), @@ -798,7 +798,7 @@ TEST_CASES_TO_CURRENCY_FKP = ( (2.00, 'dos libras con cero peniques'), (8.00, 'ocho libras con cero peniques'), (12.00, 'doce libras con cero peniques'), - (21.00, 'veintiun libras con cero peniques'), + (21.00, 'veintiún libras con cero peniques'), (81.25, 'ochenta y un libras con veinticinco peniques'), (350.90, 'trescientos cincuenta libras con noventa peniques'), (100.00, 'cien libras con cero peniques'), @@ -811,7 +811,7 @@ TEST_CASES_TO_CURRENCY_GEL = ( (2.00, 'dos laris con cero tetris'), (8.00, 'ocho laris con cero tetris'), (12.00, 'doce laris con cero tetris'), - (21.00, 'veintiun laris con cero tetris'), + (21.00, 'veintiún laris con cero tetris'), (81.25, 'ochenta y un laris con veinticinco tetris'), (350.90, 'trescientos cincuenta laris con noventa tetris'), (100.00, 'cien laris con cero tetris'), @@ -824,7 +824,7 @@ TEST_CASES_TO_CURRENCY_GHS = ( (2.00, 'dos cedis con cero pesewas'), (8.00, 'ocho cedis con cero pesewas'), (12.00, 'doce cedis con cero pesewas'), - (21.00, 'veintiun cedis con cero pesewas'), + (21.00, 'veintiún cedis con cero pesewas'), (81.25, 'ochenta y un cedis con veinticinco pesewas'), (350.90, 'trescientos cincuenta cedis con noventa pesewas'), (100.00, 'cien cedis con cero pesewas'), @@ -837,7 +837,7 @@ TEST_CASES_TO_CURRENCY_GMD = ( (2.00, 'dos dalasis con cero bututs'), (8.00, 'ocho dalasis con cero bututs'), (12.00, 'doce dalasis con cero bututs'), - (21.00, 'veintiun dalasis con cero bututs'), + (21.00, 'veintiún dalasis con cero bututs'), (81.25, 'ochenta y un dalasis con veinticinco bututs'), (350.90, 'trescientos cincuenta dalasis con noventa bututs'), (100.00, 'cien dalasis con cero bututs'), @@ -850,7 +850,7 @@ TEST_CASES_TO_CURRENCY_GTQ = ( (2.00, 'dos quetzales con cero centavos'), (8.00, 'ocho quetzales con cero centavos'), (12.00, 'doce quetzales con cero centavos'), - (21.00, 'veintiun quetzales con cero centavos'), + (21.00, 'veintiún quetzales con cero centavos'), (81.25, 'ochenta y un quetzales con veinticinco centavos'), (350.90, 'trescientos cincuenta quetzales con noventa centavos'), (100.00, 'cien quetzales con cero centavos'), @@ -863,7 +863,7 @@ TEST_CASES_TO_CURRENCY_HNL = ( (2.00, 'dos lempiras con cero centavos'), (8.00, 'ocho lempiras con cero centavos'), (12.00, 'doce lempiras con cero centavos'), - (21.00, 'veintiun lempiras con cero centavos'), + (21.00, 'veintiún lempiras con cero centavos'), (81.25, 'ochenta y un lempiras con veinticinco centavos'), (350.90, 'trescientos cincuenta lempiras con noventa centavos'), (100.00, 'cien lempiras con cero centavos'), @@ -876,7 +876,7 @@ TEST_CASES_TO_CURRENCY_HRK = ( (2.00, 'dos kunas con cero lipas'), (8.00, 'ocho kunas con cero lipas'), (12.00, 'doce kunas con cero lipas'), - (21.00, 'veintiun kunas con cero lipas'), + (21.00, 'veintiún kunas con cero lipas'), (81.25, 'ochenta y un kunas con veinticinco lipas'), (350.90, 'trescientos cincuenta kunas con noventa lipas'), (100.00, 'cien kunas con cero lipas'), @@ -889,7 +889,7 @@ TEST_CASES_TO_CURRENCY_HTG = ( (2.00, 'dos gourdes con cero céntimos'), (8.00, 'ocho gourdes con cero céntimos'), (12.00, 'doce gourdes con cero céntimos'), - (21.00, 'veintiun gourdes con cero céntimos'), + (21.00, 'veintiún gourdes con cero céntimos'), (81.25, 'ochenta y un gourdes con veinticinco céntimos'), (350.90, 'trescientos cincuenta gourdes con noventa céntimos'), (100.00, 'cien gourdes con cero céntimos'), @@ -902,7 +902,7 @@ TEST_CASES_TO_CURRENCY_IDR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiun rupias con cero céntimos'), + (21.00, 'veintiún rupias con cero céntimos'), (81.25, 'ochenta y un rupias con veinticinco céntimos'), (350.90, 'trescientos cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), @@ -915,7 +915,7 @@ TEST_CASES_TO_CURRENCY_ILS = ( (2.00, 'dos séqueles con cero agoras'), (8.00, 'ocho séqueles con cero agoras'), (12.00, 'doce séqueles con cero agoras'), - (21.00, 'veintiun séqueles con cero agoras'), + (21.00, 'veintiún séqueles con cero agoras'), (81.25, 'ochenta y un séqueles con veinticinco agoras'), (350.90, 'trescientos cincuenta séqueles con noventa agoras'), (100.00, 'cien séqueles con cero agoras'), @@ -928,7 +928,7 @@ TEST_CASES_TO_CURRENCY_IQD = ( (2.00, 'dos dinares con cero fils'), (8.00, 'ocho dinares con cero fils'), (12.00, 'doce dinares con cero fils'), - (21.00, 'veintiun dinares con cero fils'), + (21.00, 'veintiún dinares con cero fils'), (81.25, 'ochenta y un dinares con veinticinco fils'), (350.90, 'trescientos cincuenta dinares con noventa fils'), (100.00, 'cien dinares con cero fils'), @@ -941,7 +941,7 @@ TEST_CASES_TO_CURRENCY_IRR = ( (2.00, 'dos riales con cero dinares'), (8.00, 'ocho riales con cero dinares'), (12.00, 'doce riales con cero dinares'), - (21.00, 'veintiun riales con cero dinares'), + (21.00, 'veintiún riales con cero dinares'), (81.25, 'ochenta y un riales con veinticinco dinares'), (350.90, 'trescientos cincuenta riales con noventa dinares'), (100.00, 'cien riales con cero dinares'), @@ -954,7 +954,7 @@ TEST_CASES_TO_CURRENCY_ISK = ( (2.00, 'dos coronas con cero aurar'), (8.00, 'ocho coronas con cero aurar'), (12.00, 'doce coronas con cero aurar'), - (21.00, 'veintiun coronas con cero aurar'), + (21.00, 'veintiún coronas con cero aurar'), (81.25, 'ochenta y un coronas con veinticinco aurar'), (350.90, 'trescientos cincuenta coronas con noventa aurar'), (100.00, 'cien coronas con cero aurar'), @@ -967,7 +967,7 @@ TEST_CASES_TO_CURRENCY_ITL = ( (2.00, 'dos liras con cero céntimos'), (8.00, 'ocho liras con cero céntimos'), (12.00, 'doce liras con cero céntimos'), - (21.00, 'veintiun liras con cero céntimos'), + (21.00, 'veintiún liras con cero céntimos'), (81.25, 'ochenta y un liras con veinticinco céntimos'), (350.90, 'trescientos cincuenta liras con noventa céntimos'), (100.00, 'cien liras con cero céntimos'), @@ -980,7 +980,7 @@ TEST_CASES_TO_CURRENCY_JOD = ( (2.00, 'dos dinares con cero piastras'), (8.00, 'ocho dinares con cero piastras'), (12.00, 'doce dinares con cero piastras'), - (21.00, 'veintiun dinares con cero piastras'), + (21.00, 'veintiún dinares con cero piastras'), (81.25, 'ochenta y un dinares con veinticinco piastras'), (350.90, 'trescientos cincuenta dinares con noventa piastras'), (100.00, 'cien dinares con cero piastras'), @@ -993,7 +993,7 @@ TEST_CASES_TO_CURRENCY_KES = ( (2.00, 'dos chelines con cero céntimos'), (8.00, 'ocho chelines con cero céntimos'), (12.00, 'doce chelines con cero céntimos'), - (21.00, 'veintiun chelines con cero céntimos'), + (21.00, 'veintiún chelines con cero céntimos'), (81.25, 'ochenta y un chelines con veinticinco céntimos'), (350.90, 'trescientos cincuenta chelines con noventa céntimos'), (100.00, 'cien chelines con cero céntimos'), @@ -1006,7 +1006,7 @@ TEST_CASES_TO_CURRENCY_KGS = ( (2.00, 'dos som con cero tyiyn'), (8.00, 'ocho som con cero tyiyn'), (12.00, 'doce som con cero tyiyn'), - (21.00, 'veintiun som con cero tyiyn'), + (21.00, 'veintiún som con cero tyiyn'), (81.25, 'ochenta y un som con veinticinco tyiyn'), (350.90, 'trescientos cincuenta som con noventa tyiyn'), (100.00, 'cien som con cero tyiyn'), @@ -1019,7 +1019,7 @@ TEST_CASES_TO_CURRENCY_KHR = ( (2.00, 'dos rieles con cero céntimos'), (8.00, 'ocho rieles con cero céntimos'), (12.00, 'doce rieles con cero céntimos'), - (21.00, 'veintiun rieles con cero céntimos'), + (21.00, 'veintiún rieles con cero céntimos'), (81.25, 'ochenta y un rieles con veinticinco céntimos'), (350.90, 'trescientos cincuenta rieles con noventa céntimos'), (100.00, 'cien rieles con cero céntimos'), @@ -1032,7 +1032,7 @@ TEST_CASES_TO_CURRENCY_KWD = ( (2.00, 'dos dinares con cero fils'), (8.00, 'ocho dinares con cero fils'), (12.00, 'doce dinares con cero fils'), - (21.00, 'veintiun dinares con cero fils'), + (21.00, 'veintiún dinares con cero fils'), (81.25, 'ochenta y un dinares con veinticinco fils'), (350.90, 'trescientos cincuenta dinares con noventa fils'), (100.00, 'cien dinares con cero fils'), @@ -1045,7 +1045,7 @@ TEST_CASES_TO_CURRENCY_LAK = ( (2.00, 'dos kips con cero att'), (8.00, 'ocho kips con cero att'), (12.00, 'doce kips con cero att'), - (21.00, 'veintiun kips con cero att'), + (21.00, 'veintiún kips con cero att'), (81.25, 'ochenta y un kips con veinticinco att'), (350.90, 'trescientos cincuenta kips con noventa att'), (100.00, 'cien kips con cero att'), @@ -1058,7 +1058,7 @@ TEST_CASES_TO_CURRENCY_LKR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiun rupias con cero céntimos'), + (21.00, 'veintiún rupias con cero céntimos'), (81.25, 'ochenta y un rupias con veinticinco céntimos'), (350.90, 'trescientos cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), @@ -1071,7 +1071,7 @@ TEST_CASES_TO_CURRENCY_LSL = ( (2.00, 'dos lotis con cero céntimos'), (8.00, 'ocho lotis con cero céntimos'), (12.00, 'doce lotis con cero céntimos'), - (21.00, 'veintiun lotis con cero céntimos'), + (21.00, 'veintiún lotis con cero céntimos'), (81.25, 'ochenta y un lotis con veinticinco céntimos'), (350.90, 'trescientos cincuenta lotis con noventa céntimos'), (100.00, 'cien lotis con cero céntimos'), @@ -1084,7 +1084,7 @@ TEST_CASES_TO_CURRENCY_LTL = ( (2.00, 'dos litas con cero céntimos'), (8.00, 'ocho litas con cero céntimos'), (12.00, 'doce litas con cero céntimos'), - (21.00, 'veintiun litas con cero céntimos'), + (21.00, 'veintiún litas con cero céntimos'), (81.25, 'ochenta y un litas con veinticinco céntimos'), (350.90, 'trescientos cincuenta litas con noventa céntimos'), (100.00, 'cien litas con cero céntimos'), @@ -1097,7 +1097,7 @@ TEST_CASES_TO_CURRENCY_LVL = ( (2.00, 'dos lats con cero céntimos'), (8.00, 'ocho lats con cero céntimos'), (12.00, 'doce lats con cero céntimos'), - (21.00, 'veintiun lats con cero céntimos'), + (21.00, 'veintiún lats con cero céntimos'), (81.25, 'ochenta y un lats con veinticinco céntimos'), (350.90, 'trescientos cincuenta lats con noventa céntimos'), (100.00, 'cien lats con cero céntimos'), @@ -1110,7 +1110,7 @@ TEST_CASES_TO_CURRENCY_LYD = ( (2.00, 'dos dinares con cero dírhams'), (8.00, 'ocho dinares con cero dírhams'), (12.00, 'doce dinares con cero dírhams'), - (21.00, 'veintiun dinares con cero dírhams'), + (21.00, 'veintiún dinares con cero dírhams'), (81.25, 'ochenta y un dinares con veinticinco dírhams'), (350.90, 'trescientos cincuenta dinares con noventa dírhams'), (100.00, 'cien dinares con cero dírhams'), @@ -1123,7 +1123,7 @@ TEST_CASES_TO_CURRENCY_MAD = ( (2.00, 'dos dirhams con cero céntimos'), (8.00, 'ocho dirhams con cero céntimos'), (12.00, 'doce dirhams con cero céntimos'), - (21.00, 'veintiun dirhams con cero céntimos'), + (21.00, 'veintiún dirhams con cero céntimos'), (81.25, 'ochenta y un dirhams con veinticinco céntimos'), (350.90, 'trescientos cincuenta dirhams con noventa céntimos'), (100.00, 'cien dirhams con cero céntimos'), @@ -1136,7 +1136,7 @@ TEST_CASES_TO_CURRENCY_MDL = ( (2.00, 'dos lei con cero bani'), (8.00, 'ocho lei con cero bani'), (12.00, 'doce lei con cero bani'), - (21.00, 'veintiun lei con cero bani'), + (21.00, 'veintiún lei con cero bani'), (81.25, 'ochenta y un lei con veinticinco bani'), (350.90, 'trescientos cincuenta lei con noventa bani'), (100.00, 'cien lei con cero bani'), @@ -1149,7 +1149,7 @@ TEST_CASES_TO_CURRENCY_MGA = ( (2.00, 'dos ariaris con cero iraimbilanja'), (8.00, 'ocho ariaris con cero iraimbilanja'), (12.00, 'doce ariaris con cero iraimbilanja'), - (21.00, 'veintiun ariaris con cero iraimbilanja'), + (21.00, 'veintiún ariaris con cero iraimbilanja'), (81.25, 'ochenta y un ariaris con veinticinco iraimbilanja'), (350.90, 'trescientos cincuenta ariaris con noventa iraimbilanja'), (100.00, 'cien ariaris con cero iraimbilanja'), @@ -1162,7 +1162,7 @@ TEST_CASES_TO_CURRENCY_MKD = ( (2.00, 'dos denares con cero denis'), (8.00, 'ocho denares con cero denis'), (12.00, 'doce denares con cero denis'), - (21.00, 'veintiun denares con cero denis'), + (21.00, 'veintiún denares con cero denis'), (81.25, 'ochenta y un denares con veinticinco denis'), (350.90, 'trescientos cincuenta denares con noventa denis'), (100.00, 'cien denares con cero denis'), @@ -1175,7 +1175,7 @@ TEST_CASES_TO_CURRENCY_MMK = ( (2.00, 'dos kiats con cero pyas'), (8.00, 'ocho kiats con cero pyas'), (12.00, 'doce kiats con cero pyas'), - (21.00, 'veintiun kiats con cero pyas'), + (21.00, 'veintiún kiats con cero pyas'), (81.25, 'ochenta y un kiats con veinticinco pyas'), (350.90, 'trescientos cincuenta kiats con noventa pyas'), (100.00, 'cien kiats con cero pyas'), @@ -1188,7 +1188,7 @@ TEST_CASES_TO_CURRENCY_MNT = ( (2.00, 'dos tugriks con cero möngö'), (8.00, 'ocho tugriks con cero möngö'), (12.00, 'doce tugriks con cero möngö'), - (21.00, 'veintiun tugriks con cero möngö'), + (21.00, 'veintiún tugriks con cero möngö'), (81.25, 'ochenta y un tugriks con veinticinco möngö'), (350.90, 'trescientos cincuenta tugriks con noventa möngö'), (100.00, 'cien tugriks con cero möngö'), @@ -1201,7 +1201,7 @@ TEST_CASES_TO_CURRENCY_MOP = ( (2.00, 'dos patacas con cero avos'), (8.00, 'ocho patacas con cero avos'), (12.00, 'doce patacas con cero avos'), - (21.00, 'veintiun patacas con cero avos'), + (21.00, 'veintiún patacas con cero avos'), (81.25, 'ochenta y un patacas con veinticinco avos'), (350.90, 'trescientos cincuenta patacas con noventa avos'), (100.00, 'cien patacas con cero avos'), @@ -1214,7 +1214,7 @@ TEST_CASES_TO_CURRENCY_MRO = ( (2.00, 'dos ouguiyas con cero khoums'), (8.00, 'ocho ouguiyas con cero khoums'), (12.00, 'doce ouguiyas con cero khoums'), - (21.00, 'veintiun ouguiyas con cero khoums'), + (21.00, 'veintiún ouguiyas con cero khoums'), (81.25, 'ochenta y un ouguiyas con veinticinco khoums'), (350.90, 'trescientos cincuenta ouguiyas con noventa khoums'), (100.00, 'cien ouguiyas con cero khoums'), @@ -1227,7 +1227,7 @@ TEST_CASES_TO_CURRENCY_MRU = ( (2.00, 'dos ouguiyas con cero khoums'), (8.00, 'ocho ouguiyas con cero khoums'), (12.00, 'doce ouguiyas con cero khoums'), - (21.00, 'veintiun ouguiyas con cero khoums'), + (21.00, 'veintiún ouguiyas con cero khoums'), (81.25, 'ochenta y un ouguiyas con veinticinco khoums'), (350.90, 'trescientos cincuenta ouguiyas con noventa khoums'), (100.00, 'cien ouguiyas con cero khoums'), @@ -1240,7 +1240,7 @@ TEST_CASES_TO_CURRENCY_MUR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiun rupias con cero céntimos'), + (21.00, 'veintiún rupias con cero céntimos'), (81.25, 'ochenta y un rupias con veinticinco céntimos'), (350.90, 'trescientos cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), @@ -1253,7 +1253,7 @@ TEST_CASES_TO_CURRENCY_MVR = ( (2.00, 'dos rufiyaas con cero laari'), (8.00, 'ocho rufiyaas con cero laari'), (12.00, 'doce rufiyaas con cero laari'), - (21.00, 'veintiun rufiyaas con cero laari'), + (21.00, 'veintiún rufiyaas con cero laari'), (81.25, 'ochenta y un rufiyaas con veinticinco laari'), (350.90, 'trescientos cincuenta rufiyaas con noventa laari'), (100.00, 'cien rufiyaas con cero laari'), @@ -1266,7 +1266,7 @@ TEST_CASES_TO_CURRENCY_MWK = ( (2.00, 'dos kuachas con cero tambalas'), (8.00, 'ocho kuachas con cero tambalas'), (12.00, 'doce kuachas con cero tambalas'), - (21.00, 'veintiun kuachas con cero tambalas'), + (21.00, 'veintiún kuachas con cero tambalas'), (81.25, 'ochenta y un kuachas con veinticinco tambalas'), (350.90, 'trescientos cincuenta kuachas con noventa tambalas'), (100.00, 'cien kuachas con cero tambalas'), @@ -1279,7 +1279,7 @@ TEST_CASES_TO_CURRENCY_MYR = ( (2.00, 'dos ringgit con cero céntimos'), (8.00, 'ocho ringgit con cero céntimos'), (12.00, 'doce ringgit con cero céntimos'), - (21.00, 'veintiun ringgit con cero céntimos'), + (21.00, 'veintiún ringgit con cero céntimos'), (81.25, 'ochenta y un ringgit con veinticinco céntimos'), (350.90, 'trescientos cincuenta ringgit con noventa céntimos'), (100.00, 'cien ringgit con cero céntimos'), @@ -1292,7 +1292,7 @@ TEST_CASES_TO_CURRENCY_MZN = ( (2.00, 'dos metical con cero centavos'), (8.00, 'ocho metical con cero centavos'), (12.00, 'doce metical con cero centavos'), - (21.00, 'veintiun metical con cero centavos'), + (21.00, 'veintiún metical con cero centavos'), (81.25, 'ochenta y un metical con veinticinco centavos'), (350.90, 'trescientos cincuenta metical con noventa centavos'), (100.00, 'cien metical con cero centavos'), @@ -1305,7 +1305,7 @@ TEST_CASES_TO_CURRENCY_NGN = ( (2.00, 'dos nairas con cero kobo'), (8.00, 'ocho nairas con cero kobo'), (12.00, 'doce nairas con cero kobo'), - (21.00, 'veintiun nairas con cero kobo'), + (21.00, 'veintiún nairas con cero kobo'), (81.25, 'ochenta y un nairas con veinticinco kobo'), (350.90, 'trescientos cincuenta nairas con noventa kobo'), (100.00, 'cien nairas con cero kobo'), @@ -1318,7 +1318,7 @@ TEST_CASES_TO_CURRENCY_NPR = ( (2.00, 'dos rupias con cero paisas'), (8.00, 'ocho rupias con cero paisas'), (12.00, 'doce rupias con cero paisas'), - (21.00, 'veintiun rupias con cero paisas'), + (21.00, 'veintiún rupias con cero paisas'), (81.25, 'ochenta y un rupias con veinticinco paisas'), (350.90, 'trescientos cincuenta rupias con noventa paisas'), (100.00, 'cien rupias con cero paisas'), @@ -1331,7 +1331,7 @@ TEST_CASES_TO_CURRENCY_OMR = ( (2.00, 'dos riales con cero baisa'), (8.00, 'ocho riales con cero baisa'), (12.00, 'doce riales con cero baisa'), - (21.00, 'veintiun riales con cero baisa'), + (21.00, 'veintiún riales con cero baisa'), (81.25, 'ochenta y un riales con veinticinco baisa'), (350.90, 'trescientos cincuenta riales con noventa baisa'), (100.00, 'cien riales con cero baisa'), @@ -1344,7 +1344,7 @@ TEST_CASES_TO_CURRENCY_PAB = ( (2.00, 'dos balboas con cero centésimos'), (8.00, 'ocho balboas con cero centésimos'), (12.00, 'doce balboas con cero centésimos'), - (21.00, 'veintiun balboas con cero centésimos'), + (21.00, 'veintiún balboas con cero centésimos'), (81.25, 'ochenta y un balboas con veinticinco centésimos'), (350.90, 'trescientos cincuenta balboas con noventa centésimos'), (100.00, 'cien balboas con cero centésimos'), @@ -1357,7 +1357,7 @@ TEST_CASES_TO_CURRENCY_PGK = ( (2.00, 'dos kinas con cero toea'), (8.00, 'ocho kinas con cero toea'), (12.00, 'doce kinas con cero toea'), - (21.00, 'veintiun kinas con cero toea'), + (21.00, 'veintiún kinas con cero toea'), (81.25, 'ochenta y un kinas con veinticinco toea'), (350.90, 'trescientos cincuenta kinas con noventa toea'), (100.00, 'cien kinas con cero toea'), @@ -1370,7 +1370,7 @@ TEST_CASES_TO_CURRENCY_PKR = ( (2.00, 'dos rupias con cero paisas'), (8.00, 'ocho rupias con cero paisas'), (12.00, 'doce rupias con cero paisas'), - (21.00, 'veintiun rupias con cero paisas'), + (21.00, 'veintiún rupias con cero paisas'), (81.25, 'ochenta y un rupias con veinticinco paisas'), (350.90, 'trescientos cincuenta rupias con noventa paisas'), (100.00, 'cien rupias con cero paisas'), @@ -1383,7 +1383,7 @@ TEST_CASES_TO_CURRENCY_PLZ = ( (2.00, 'dos zlotys con cero groszy'), (8.00, 'ocho zlotys con cero groszy'), (12.00, 'doce zlotys con cero groszy'), - (21.00, 'veintiun zlotys con cero groszy'), + (21.00, 'veintiún zlotys con cero groszy'), (81.25, 'ochenta y un zlotys con veinticinco groszy'), (350.90, 'trescientos cincuenta zlotys con noventa groszy'), (100.00, 'cien zlotys con cero groszy'), @@ -1396,7 +1396,7 @@ TEST_CASES_TO_CURRENCY_PYG = ( (2.00, 'dos guaranís con cero céntimos'), (8.00, 'ocho guaranís con cero céntimos'), (12.00, 'doce guaranís con cero céntimos'), - (21.00, 'veintiun guaranís con cero céntimos'), + (21.00, 'veintiún guaranís con cero céntimos'), (81.25, 'ochenta y un guaranís con veinticinco céntimos'), (350.90, 'trescientos cincuenta guaranís con noventa céntimos'), (100.00, 'cien guaranís con cero céntimos'), @@ -1409,7 +1409,7 @@ TEST_CASES_TO_CURRENCY_QAR = ( (2.00, 'dos riales con cero dírhams'), (8.00, 'ocho riales con cero dírhams'), (12.00, 'doce riales con cero dírhams'), - (21.00, 'veintiun riales con cero dírhams'), + (21.00, 'veintiún riales con cero dírhams'), (81.25, 'ochenta y un riales con veinticinco dírhams'), (350.90, 'trescientos cincuenta riales con noventa dírhams'), (100.00, 'cien riales con cero dírhams'), @@ -1422,7 +1422,7 @@ TEST_CASES_TO_CURRENCY_RSD = ( (2.00, 'dos dinares con cero para'), (8.00, 'ocho dinares con cero para'), (12.00, 'doce dinares con cero para'), - (21.00, 'veintiun dinares con cero para'), + (21.00, 'veintiún dinares con cero para'), (81.25, 'ochenta y un dinares con veinticinco para'), (350.90, 'trescientos cincuenta dinares con noventa para'), (100.00, 'cien dinares con cero para'), @@ -1435,7 +1435,7 @@ TEST_CASES_TO_CURRENCY_RUR = ( (2.00, 'dos rublos con cero kopeks'), (8.00, 'ocho rublos con cero kopeks'), (12.00, 'doce rublos con cero kopeks'), - (21.00, 'veintiun rublos con cero kopeks'), + (21.00, 'veintiún rublos con cero kopeks'), (81.25, 'ochenta y un rublos con veinticinco kopeks'), (350.90, 'trescientos cincuenta rublos con noventa kopeks'), (100.00, 'cien rublos con cero kopeks'), @@ -1448,7 +1448,7 @@ TEST_CASES_TO_CURRENCY_SAR = ( (2.00, 'dos riales con cero halalas'), (8.00, 'ocho riales con cero halalas'), (12.00, 'doce riales con cero halalas'), - (21.00, 'veintiun riales con cero halalas'), + (21.00, 'veintiún riales con cero halalas'), (81.25, 'ochenta y un riales con veinticinco halalas'), (350.90, 'trescientos cincuenta riales con noventa halalas'), (100.00, 'cien riales con cero halalas'), @@ -1461,7 +1461,7 @@ TEST_CASES_TO_CURRENCY_SCR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiun rupias con cero céntimos'), + (21.00, 'veintiún rupias con cero céntimos'), (81.25, 'ochenta y un rupias con veinticinco céntimos'), (350.90, 'trescientos cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), @@ -1474,7 +1474,7 @@ TEST_CASES_TO_CURRENCY_SHP = ( (2.00, 'dos libras con cero peniques'), (8.00, 'ocho libras con cero peniques'), (12.00, 'doce libras con cero peniques'), - (21.00, 'veintiun libras con cero peniques'), + (21.00, 'veintiún libras con cero peniques'), (81.25, 'ochenta y un libras con veinticinco peniques'), (350.90, 'trescientos cincuenta libras con noventa peniques'), (100.00, 'cien libras con cero peniques'), @@ -1487,7 +1487,7 @@ TEST_CASES_TO_CURRENCY_SKK = ( (2.00, 'dos coronas con cero haliers'), (8.00, 'ocho coronas con cero haliers'), (12.00, 'doce coronas con cero haliers'), - (21.00, 'veintiun coronas con cero haliers'), + (21.00, 'veintiún coronas con cero haliers'), (81.25, 'ochenta y un coronas con veinticinco haliers'), (350.90, 'trescientos cincuenta coronas con noventa haliers'), (100.00, 'cien coronas con cero haliers'), @@ -1500,7 +1500,7 @@ TEST_CASES_TO_CURRENCY_SLL = ( (2.00, 'dos leonas con cero céntimos'), (8.00, 'ocho leonas con cero céntimos'), (12.00, 'doce leonas con cero céntimos'), - (21.00, 'veintiun leonas con cero céntimos'), + (21.00, 'veintiún leonas con cero céntimos'), (81.25, 'ochenta y un leonas con veinticinco céntimos'), (350.90, 'trescientos cincuenta leonas con noventa céntimos'), (100.00, 'cien leonas con cero céntimos'), @@ -1513,7 +1513,7 @@ TEST_CASES_TO_CURRENCY_STD = ( (2.00, 'dos dobras con cero céntimos'), (8.00, 'ocho dobras con cero céntimos'), (12.00, 'doce dobras con cero céntimos'), - (21.00, 'veintiun dobras con cero céntimos'), + (21.00, 'veintiún dobras con cero céntimos'), (81.25, 'ochenta y un dobras con veinticinco céntimos'), (350.90, 'trescientos cincuenta dobras con noventa céntimos'), (100.00, 'cien dobras con cero céntimos'), @@ -1526,7 +1526,7 @@ TEST_CASES_TO_CURRENCY_SVC = ( (2.00, 'dos colones con cero centavos'), (8.00, 'ocho colones con cero centavos'), (12.00, 'doce colones con cero centavos'), - (21.00, 'veintiun colones con cero centavos'), + (21.00, 'veintiún colones con cero centavos'), (81.25, 'ochenta y un colones con veinticinco centavos'), (350.90, 'trescientos cincuenta colones con noventa centavos'), (100.00, 'cien colones con cero centavos'), @@ -1539,7 +1539,7 @@ TEST_CASES_TO_CURRENCY_SZL = ( (2.00, 'dos emalangeni con cero céntimos'), (8.00, 'ocho emalangeni con cero céntimos'), (12.00, 'doce emalangeni con cero céntimos'), - (21.00, 'veintiun emalangeni con cero céntimos'), + (21.00, 'veintiún emalangeni con cero céntimos'), (81.25, 'ochenta y un emalangeni con veinticinco céntimos'), (350.90, 'trescientos cincuenta emalangeni con noventa céntimos'), (100.00, 'cien emalangeni con cero céntimos'), @@ -1552,7 +1552,7 @@ TEST_CASES_TO_CURRENCY_TJS = ( (2.00, 'dos somonis con cero dirames'), (8.00, 'ocho somonis con cero dirames'), (12.00, 'doce somonis con cero dirames'), - (21.00, 'veintiun somonis con cero dirames'), + (21.00, 'veintiún somonis con cero dirames'), (81.25, 'ochenta y un somonis con veinticinco dirames'), (350.90, 'trescientos cincuenta somonis con noventa dirames'), (100.00, 'cien somonis con cero dirames'), @@ -1565,7 +1565,7 @@ TEST_CASES_TO_CURRENCY_TMT = ( (2.00, 'dos manat con cero tenge'), (8.00, 'ocho manat con cero tenge'), (12.00, 'doce manat con cero tenge'), - (21.00, 'veintiun manat con cero tenge'), + (21.00, 'veintiún manat con cero tenge'), (81.25, 'ochenta y un manat con veinticinco tenge'), (350.90, 'trescientos cincuenta manat con noventa tenge'), (100.00, 'cien manat con cero tenge'), @@ -1578,7 +1578,7 @@ TEST_CASES_TO_CURRENCY_TND = ( (2.00, 'dos dinares con cero milésimos'), (8.00, 'ocho dinares con cero milésimos'), (12.00, 'doce dinares con cero milésimos'), - (21.00, 'veintiun dinares con cero milésimos'), + (21.00, 'veintiún dinares con cero milésimos'), (81.25, 'ochenta y un dinares con veinticinco milésimos'), (350.90, 'trescientos cincuenta dinares con noventa milésimos'), (100.00, 'cien dinares con cero milésimos'), @@ -1591,7 +1591,7 @@ TEST_CASES_TO_CURRENCY_TOP = ( (2.00, 'dos paangas con cero céntimos'), (8.00, 'ocho paangas con cero céntimos'), (12.00, 'doce paangas con cero céntimos'), - (21.00, 'veintiun paangas con cero céntimos'), + (21.00, 'veintiún paangas con cero céntimos'), (81.25, 'ochenta y un paangas con veinticinco céntimos'), (350.90, 'trescientos cincuenta paangas con noventa céntimos'), (100.00, 'cien paangas con cero céntimos'), @@ -1600,17 +1600,17 @@ TEST_CASES_TO_CURRENCY_TOP = ( ) wordamount = "{} {}".format("cuatro mil ciento cincuenta", - "nuevos dolares con ochenta y tres céntimos") + "nuevos dólares con ochenta y tres céntimos") TEST_CASES_TO_CURRENCY_TWD = ( (1.00, 'un nuevo dólar con cero céntimos'), - (2.00, 'dos nuevos dolares con cero céntimos'), - (8.00, 'ocho nuevos dolares con cero céntimos'), - (12.00, 'doce nuevos dolares con cero céntimos'), - (21.00, 'veintiun nuevos dolares con cero céntimos'), - (81.25, 'ochenta y un nuevos dolares con veinticinco céntimos'), - (350.90, 'trescientos cincuenta nuevos dolares con noventa céntimos'), - (100.00, 'cien nuevos dolares con cero céntimos'), + (2.00, 'dos nuevos dólares con cero céntimos'), + (8.00, 'ocho nuevos dólares con cero céntimos'), + (12.00, 'doce nuevos dólares con cero céntimos'), + (21.00, 'veintiún nuevos dólares con cero céntimos'), + (81.25, 'ochenta y un nuevos dólares con veinticinco céntimos'), + (350.90, 'trescientos cincuenta nuevos dólares con noventa céntimos'), + (100.00, 'cien nuevos dólares con cero céntimos'), (4150.83, wordamount), ) @@ -1619,7 +1619,7 @@ TEST_CASES_TO_CURRENCY_TZS = ( (2.00, 'dos chelines con cero céntimos'), (8.00, 'ocho chelines con cero céntimos'), (12.00, 'doce chelines con cero céntimos'), - (21.00, 'veintiun chelines con cero céntimos'), + (21.00, 'veintiún chelines con cero céntimos'), (81.25, 'ochenta y un chelines con veinticinco céntimos'), (350.90, 'trescientos cincuenta chelines con noventa céntimos'), (100.00, 'cien chelines con cero céntimos'), @@ -1632,7 +1632,7 @@ TEST_CASES_TO_CURRENCY_UAG = ( (2.00, 'dos hryvnias con cero kopiykas'), (8.00, 'ocho hryvnias con cero kopiykas'), (12.00, 'doce hryvnias con cero kopiykas'), - (21.00, 'veintiun hryvnias con cero kopiykas'), + (21.00, 'veintiún hryvnias con cero kopiykas'), (81.25, 'ochenta y un hryvnias con veinticinco kopiykas'), (350.90, 'trescientos cincuenta hryvnias con noventa kopiykas'), (100.00, 'cien hryvnias con cero kopiykas'), @@ -1645,7 +1645,7 @@ TEST_CASES_TO_CURRENCY_UGX = ( (2.00, 'dos chelines con cero céntimos'), (8.00, 'ocho chelines con cero céntimos'), (12.00, 'doce chelines con cero céntimos'), - (21.00, 'veintiun chelines con cero céntimos'), + (21.00, 'veintiún chelines con cero céntimos'), (81.25, 'ochenta y un chelines con veinticinco céntimos'), (350.90, 'trescientos cincuenta chelines con noventa céntimos'), (100.00, 'cien chelines con cero céntimos'), @@ -1658,7 +1658,7 @@ TEST_CASES_TO_CURRENCY_UYU = ( (2.00, 'dos pesos con cero centésimos'), (8.00, 'ocho pesos con cero centésimos'), (12.00, 'doce pesos con cero centésimos'), - (21.00, 'veintiun pesos con cero centésimos'), + (21.00, 'veintiún pesos con cero centésimos'), (81.25, 'ochenta y un pesos con veinticinco centésimos'), (350.90, 'trescientos cincuenta pesos con noventa centésimos'), (100.00, 'cien pesos con cero centésimos'), @@ -1671,7 +1671,7 @@ TEST_CASES_TO_CURRENCY_UZS = ( (2.00, 'dos sum con cero tiyin'), (8.00, 'ocho sum con cero tiyin'), (12.00, 'doce sum con cero tiyin'), - (21.00, 'veintiun sum con cero tiyin'), + (21.00, 'veintiún sum con cero tiyin'), (81.25, 'ochenta y un sum con veinticinco tiyin'), (350.90, 'trescientos cincuenta sum con noventa tiyin'), (100.00, 'cien sum con cero tiyin'), @@ -1687,7 +1687,7 @@ TEST_CASES_TO_CURRENCY_VEF = ( (2.00, 'dos bolívares fuertes con cero céntimos'), (8.00, 'ocho bolívares fuertes con cero céntimos'), (12.00, 'doce bolívares fuertes con cero céntimos'), - (21.00, 'veintiun bolívares fuertes con cero céntimos'), + (21.00, 'veintiún bolívares fuertes con cero céntimos'), (81.25, 'ochenta y un bolívares fuertes con veinticinco céntimos'), (350.90, 'trescientos cincuenta bolívares fuertes con noventa céntimos'), (100.00, 'cien bolívares fuertes con cero céntimos'), @@ -1699,7 +1699,7 @@ TEST_CASES_TO_CURRENCY_VND = ( (2.00, 'dos dongs con cero xu'), (8.00, 'ocho dongs con cero xu'), (12.00, 'doce dongs con cero xu'), - (21.00, 'veintiun dongs con cero xu'), + (21.00, 'veintiún dongs con cero xu'), (81.25, 'ochenta y un dongs con veinticinco xu'), (350.90, 'trescientos cincuenta dongs con noventa xu'), (100.00, 'cien dongs con cero xu'), @@ -1712,7 +1712,7 @@ TEST_CASES_TO_CURRENCY_VUV = ( (2.00, 'dos vatu con cero nenhum'), (8.00, 'ocho vatu con cero nenhum'), (12.00, 'doce vatu con cero nenhum'), - (21.00, 'veintiun vatu con cero nenhum'), + (21.00, 'veintiún vatu con cero nenhum'), (81.25, 'ochenta y un vatu con veinticinco nenhum'), (350.90, 'trescientos cincuenta vatu con noventa nenhum'), (100.00, 'cien vatu con cero nenhum'), @@ -1725,7 +1725,7 @@ TEST_CASES_TO_CURRENCY_WST = ( (2.00, 'dos tala con cero centavos'), (8.00, 'ocho tala con cero centavos'), (12.00, 'doce tala con cero centavos'), - (21.00, 'veintiun tala con cero centavos'), + (21.00, 'veintiún tala con cero centavos'), (81.25, 'ochenta y un tala con veinticinco centavos'), (350.90, 'trescientos cincuenta tala con noventa centavos'), (100.00, 'cien tala con cero centavos'), @@ -1738,7 +1738,7 @@ TEST_CASES_TO_CURRENCY_XAF = ( (2.00, 'dos francos CFA con cero céntimos'), (8.00, 'ocho francos CFA con cero céntimos'), (12.00, 'doce francos CFA con cero céntimos'), - (21.00, 'veintiun francos CFA con cero céntimos'), + (21.00, 'veintiún francos CFA con cero céntimos'), (81.25, 'ochenta y un francos CFA con veinticinco céntimos'), (350.90, 'trescientos cincuenta francos CFA con noventa céntimos'), (100.00, 'cien francos CFA con cero céntimos'), @@ -1751,7 +1751,7 @@ TEST_CASES_TO_CURRENCY_XPF = ( (2.00, 'dos francos CFP con cero céntimos'), (8.00, 'ocho francos CFP con cero céntimos'), (12.00, 'doce francos CFP con cero céntimos'), - (21.00, 'veintiun francos CFP con cero céntimos'), + (21.00, 'veintiún francos CFP con cero céntimos'), (81.25, 'ochenta y un francos CFP con veinticinco céntimos'), (350.90, 'trescientos cincuenta francos CFP con noventa céntimos'), (100.00, 'cien francos CFP con cero céntimos'), @@ -1764,7 +1764,7 @@ TEST_CASES_TO_CURRENCY_YER = ( (2.00, 'dos riales con cero fils'), (8.00, 'ocho riales con cero fils'), (12.00, 'doce riales con cero fils'), - (21.00, 'veintiun riales con cero fils'), + (21.00, 'veintiún riales con cero fils'), (81.25, 'ochenta y un riales con veinticinco fils'), (350.90, 'trescientos cincuenta riales con noventa fils'), (100.00, 'cien riales con cero fils'), @@ -1777,7 +1777,7 @@ TEST_CASES_TO_CURRENCY_YUM = ( (2.00, 'dos dinares con cero para'), (8.00, 'ocho dinares con cero para'), (12.00, 'doce dinares con cero para'), - (21.00, 'veintiun dinares con cero para'), + (21.00, 'veintiún dinares con cero para'), (81.25, 'ochenta y un dinares con veinticinco para'), (350.90, 'trescientos cincuenta dinares con noventa para'), (100.00, 'cien dinares con cero para'), @@ -1790,7 +1790,7 @@ TEST_CASES_TO_CURRENCY_ZMW = ( (2.00, 'dos kwachas con cero ngwee'), (8.00, 'ocho kwachas con cero ngwee'), (12.00, 'doce kwachas con cero ngwee'), - (21.00, 'veintiun kwachas con cero ngwee'), + (21.00, 'veintiún kwachas con cero ngwee'), (81.25, 'ochenta y un kwachas con veinticinco ngwee'), (350.90, 'trescientos cincuenta kwachas con noventa ngwee'), (100.00, 'cien kwachas con cero ngwee'), @@ -1803,7 +1803,7 @@ TEST_CASES_TO_CURRENCY_ZRZ = ( (2.00, 'dos zaires con cero makuta'), (8.00, 'ocho zaires con cero makuta'), (12.00, 'doce zaires con cero makuta'), - (21.00, 'veintiun zaires con cero makuta'), + (21.00, 'veintiún zaires con cero makuta'), (81.25, 'ochenta y un zaires con veinticinco makuta'), (350.90, 'trescientos cincuenta zaires con noventa makuta'), (100.00, 'cien zaires con cero makuta'), From 4afc68f233c24e59493391f83b5712e7d443744e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7al?= <11833677+gonsalet@users.noreply.github.com> Date: Wed, 16 Feb 2022 18:25:37 +0100 Subject: [PATCH 28/76] flake8 fix: fixed comment style Fixed: ./num2words/lang_ES.py:366:56: E261 at least two spaces before inline comment ./num2words/lang_ES.py:366:80: E501 line too long (100 > 79 characters) --- num2words/lang_ES.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index ba22d13..ed66cbe 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -363,5 +363,6 @@ class Num2Word_ES(Num2Word_EU): list_result[0] = list_result[0].replace("uno", "una") result = " ".join(list_result) result = result.replace("uno", "un") - result = result.replace("veintiun", "veintiún") # correct orthography for this specific case + # correct orthography for the specific case of "veintiún": + result = result.replace("veintiun", "veintiún") return result From fc0c15c4b22d131bee2e7d6c3450cb318475ab30 Mon Sep 17 00:00:00 2001 From: gonzy Date: Wed, 16 Feb 2022 18:52:37 +0100 Subject: [PATCH 29/76] Fixed pound cents: penny->penique, pence->peniques; fixed tests accordingly --- num2words/lang_ES.py | 6 +++--- tests/test_es.py | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index ed66cbe..80a630f 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -39,7 +39,7 @@ class Num2Word_ES(Num2Word_EU): 'CRC': (('colón', 'colones'), GENERIC_CENTS), 'AUD': (GENERIC_DOLLARS, GENERIC_CENTS), 'CAD': (GENERIC_DOLLARS, GENERIC_CENTS), - 'GBP': (('libra', 'libras'), ('penny', 'pence')), + 'GBP': (('libra', 'libras'), ('penique', 'peniques')), 'RUB': (('rublo', 'rublos'), ('kopeyka', 'kopeykas')), 'SEK': (('corona', 'coronas'), ('öre', 'öre')), 'NOK': (('corona', 'coronas'), ('øre', 'øre')), @@ -101,7 +101,7 @@ class Num2Word_ES(Num2Word_EU): 'ERN': (('nakfa', 'nakfas'), ('céntimo', 'céntimos')), 'ETB': (('birr', 'birrs'), ('céntimo', 'céntimos')), 'FJD': (GENERIC_DOLLARS, GENERIC_CENTS), - 'FKP': (('libra', 'libras'), ('penny', 'peniques')), + 'FKP': (('libra', 'libras'), ('penique', 'peniques')), 'GEL': (('lari', 'laris'), ('tetri', 'tetris')), 'GHS': (('cedi', 'cedis'), ('pesewa', 'pesewas')), 'GIP': (('libra', 'libras'), ('penique', 'peniques')), @@ -170,7 +170,7 @@ class Num2Word_ES(Num2Word_EU): 'SCR': (('rupia', 'rupias'), ('céntimo', 'céntimos')), 'SDG': (('libra', 'libras'), ('piastra', 'piastras')), 'SGD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), - 'SHP': (('libra', 'libras'), ('penny', 'peniques')), + 'SHP': (('libra', 'libras'), ('penique', 'peniques')), 'SKK': (('corona', 'coronas'), ('halier', 'haliers')), 'SLL': (('leona', 'leonas'), ('céntimo', 'céntimos')), 'SRD': (GENERIC_DOLLARS, ('céntimo', 'céntimos')), diff --git a/tests/test_es.py b/tests/test_es.py index da7ff35..2ac5f12 100644 --- a/tests/test_es.py +++ b/tests/test_es.py @@ -170,16 +170,16 @@ TEST_CASES_TO_CURRENCY_CRC = ( ) TEST_CASES_TO_CURRENCY_GBP = ( - (1.00, 'una libra con cero pence'), - (2.00, 'dos libras con cero pence'), - (8.00, 'ocho libras con cero pence'), - (12.00, 'doce libras con cero pence'), - (21.00, 'veintiún libras con cero pence'), - (81.25, 'ochenta y un libras con veinticinco pence'), - (350.90, 'trescientos cincuenta libras con noventa pence'), - (100.00, 'cien libras con cero pence'), + (1.00, 'una libra con cero peniques'), + (2.00, 'dos libras con cero peniques'), + (8.00, 'ocho libras con cero peniques'), + (12.00, 'doce libras con cero peniques'), + (21.00, 'veintiún libras con cero peniques'), + (81.25, 'ochenta y un libras con veinticinco peniques'), + (350.90, 'trescientos cincuenta libras con noventa peniques'), + (100.00, 'cien libras con cero peniques'), (4150.83, - 'cuatro mil ciento cincuenta libras con ochenta y tres pence'), + 'cuatro mil ciento cincuenta libras con ochenta y tres peniques'), ) TEST_CASES_TO_CURRENCY_RUB = ( From 0ee149a4c89c7b432ad62075b35ce89e4e3b1d4e Mon Sep 17 00:00:00 2001 From: gonzy Date: Wed, 16 Feb 2022 18:56:55 +0100 Subject: [PATCH 30/76] Added test covering new fix penny->penique --- tests/test_es.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_es.py b/tests/test_es.py index 2ac5f12..9032354 100644 --- a/tests/test_es.py +++ b/tests/test_es.py @@ -171,6 +171,7 @@ TEST_CASES_TO_CURRENCY_CRC = ( TEST_CASES_TO_CURRENCY_GBP = ( (1.00, 'una libra con cero peniques'), + (1.01, 'una libra con un penique'), (2.00, 'dos libras con cero peniques'), (8.00, 'ocho libras con cero peniques'), (12.00, 'doce libras con cero peniques'), From d4c979ea52dfdb94e2252f4bdbd790a399b0a24c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7al?= <11833677+gonsalet@users.noreply.github.com> Date: Sun, 6 Mar 2022 00:36:40 +0100 Subject: [PATCH 31/76] =?UTF-8?q?Fixed=20accent=20in=20examples=20("centim?= =?UTF-8?q?os"->"c=C3=A9ntimos")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed accent in Spanish examples ("centimos"->"céntimos"), thus making the example consistent with actual current behaviour. --- bin/num2words | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/num2words b/bin/num2words index 068abf2..02cfc69 100755 --- a/bin/num2words +++ b/bin/num2words @@ -46,7 +46,7 @@ Examples: veinticuatro mil ciento veinte punto uno $num2words 2.14 -l es --to currency - dos euros con catorce centimos + dos euros con catorce céntimos """ from __future__ import print_function, unicode_literals From db5e1d175fedee3240854b0beac2deb88868fc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7al=20Garc=C3=A9s=20D=C3=ADaz-Mun=C3=ADo?= <11833677+gonsalet@users.noreply.github.com> Date: Mon, 21 Mar 2022 16:33:07 +0100 Subject: [PATCH 32/76] Fixed accent in Spanish command line examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed accent in Spanish command line examples ("centimos"->"céntimos"), thus making the example consistent with actual current behaviour. --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index ab4cf65..282aef2 100644 --- a/README.rst +++ b/README.rst @@ -51,7 +51,7 @@ Command line:: $ num2words 24,120.10 -l es veinticuatro mil ciento veinte punto uno $num2words 2.14 -l es --to currency - dos euros con catorce centimos + dos euros con catorce céntimos In code there's only one function to use:: From 62eba317786396147ded2d9eaa6ac29de573e81b Mon Sep 17 00:00:00 2001 From: gonzy <11833677+gonsalet@users.noreply.github.com> Date: Wed, 23 Mar 2022 04:34:52 +0100 Subject: [PATCH 33/76] lang_ES: improved currency gender handling, improved error messages; test_es: updated accordingly --- num2words/lang_ES.py | 70 +++++++++++++++++----- tests/test_es.py | 137 ++++++++++++++++++++++--------------------- 2 files changed, 124 insertions(+), 83 deletions(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index 80a630f..5d086d8 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -27,7 +27,8 @@ CURRENCIES_UNA = ('SLL', 'SEK', 'NOK', 'CZK', 'DKK', 'ISK', 'SKK', 'GBP', 'CYP', 'EGP', 'FKP', 'GIP', 'LBP', 'SDG', 'SHP', 'SSP', 'SYP', 'INR', 'IDR', 'LKR', 'MUR', 'NPR', 'PKR', 'SCR', - 'ESP') + 'ESP', 'TRY', 'ITL') +CENTS_UNA = ('EGP', 'JOD', 'LBP', 'SDG', 'SSP', 'SYP') class Num2Word_ES(Num2Word_EU): @@ -216,9 +217,13 @@ class Num2Word_ES(Num2Word_EU): self.high_numwords = self.gen_high_numwords([], [], lows) self.negword = "menos " self.pointword = "punto" - self.errmsg_nonnum = "Solo números pueden ser convertidos a palabras." + self.errmsg_nonnum = "type(%s) no es [long, int, float]" + self.errmsg_floatord = "El float %s no puede ser tratado como un" \ + " ordinal." + self.errmsg_negord = "El número negativo %s no puede ser tratado" \ + " como un ordinal." self.errmsg_toobig = ( - "Numero muy grande para ser convertido a palabras." + "abs(%s) deber ser inferior a %s." ) self.gender_stem = "o" self.exclude_title = ["y", "menos", "punto"] @@ -352,17 +357,52 @@ class Num2Word_ES(Num2Word_EU): result = super(Num2Word_ES, self).to_currency( val, currency=currency, cents=cents, separator=separator, adjective=adjective) - # Handle exception, in spanish is "un euro" and not "uno euro" - # except in this currencies: leona, corona, - # libra, rupia, lempira, peseta, is 'una' - # but only when it's first word, otherwise - # it's replaced in others words like 'veintiun' + # Handle exception: In Spanish it's "un euro" and not "uno euro", + # except in these currencies, where it's "una": leona, corona, + # libra, lira, rupia, lempira, peseta. + # The same goes for "veintiuna", "treinta y una"... + # Also, this needs to be handled separately for "dollars" and + # "cents". + # All "cents" are masculine except for: piastra. + # Source: https://www.rae.es/dpd/una (section 2.2) + + # split "dollars" part from "cents" part + list_result = result.split(" con ") + + # "DOLLARS" PART (list_result[0]) + + # Feminine currencies ("una libra", "trescientas libras"...) if currency in CURRENCIES_UNA: - list_result = result.split(" ") - if list_result[0] == "uno": - list_result[0] = list_result[0].replace("uno", "una") - result = " ".join(list_result) - result = result.replace("uno", "un") - # correct orthography for the specific case of "veintiún": - result = result.replace("veintiun", "veintiún") + + # "una libra", "veintiuna libras", "treinta y una libras"... + list_result[0] = list_result[0].replace("uno", "una") + + # "doscientas libras", "trescientas libras"... + list_result[0] = list_result[0].replace("cientos", "cientas") + + # Masc.: Correct orthography for the specific case of "veintiún": + list_result[0] = list_result[0].replace("veintiuno", "veintiún") + + # Masculine currencies: general case ("un euro", "treinta y un + # euros"...): + list_result[0] = list_result[0].replace("uno", "un") + + # "CENTS" PART (list_result[1]) + + # Feminine "cents" ("una piastra", "veintiuna piastras"...) + if currency in CENTS_UNA: + + # "una piastra", "veintiuna piastras", "treinta y una piastras"... + list_result[1] = list_result[1].replace("uno", "una") + + # Masc.: Correct orthography for the specific case of "veintiún": + list_result[1] = list_result[1].replace("veintiuno", "veintiún") + + # Masculine "cents": general case ("un centavo", "treinta y un + # centavos"...): + list_result[1] = list_result[1].replace("uno", "un") + + # join back "dollars" part with "cents" part + result = " con ".join(list_result) + return result diff --git a/tests/test_es.py b/tests/test_es.py index 9032354..e014b81 100644 --- a/tests/test_es.py +++ b/tests/test_es.py @@ -128,9 +128,9 @@ TEST_CASES_TO_CURRENCY_ESP = ( (2.00, 'dos pesetas con cero céntimos'), (8.00, 'ocho pesetas con cero céntimos'), (12.00, 'doce pesetas con cero céntimos'), - (21.00, 'veintiún pesetas con cero céntimos'), - (81.25, 'ochenta y un pesetas con veinticinco céntimos'), - (350.90, 'trescientos cincuenta pesetas con noventa céntimos'), + (21.00, 'veintiuna pesetas con cero céntimos'), + (81.25, 'ochenta y una pesetas con veinticinco céntimos'), + (350.90, 'trescientas cincuenta pesetas con noventa céntimos'), (100.00, 'cien pesetas con cero céntimos'), ) @@ -175,9 +175,9 @@ TEST_CASES_TO_CURRENCY_GBP = ( (2.00, 'dos libras con cero peniques'), (8.00, 'ocho libras con cero peniques'), (12.00, 'doce libras con cero peniques'), - (21.00, 'veintiún libras con cero peniques'), - (81.25, 'ochenta y un libras con veinticinco peniques'), - (350.90, 'trescientos cincuenta libras con noventa peniques'), + (21.00, 'veintiuna libras con cero peniques'), + (81.25, 'ochenta y una libras con veinticinco peniques'), + (350.90, 'trescientas cincuenta libras con noventa peniques'), (100.00, 'cien libras con cero peniques'), (4150.83, 'cuatro mil ciento cincuenta libras con ochenta y tres peniques'), @@ -201,9 +201,9 @@ TEST_CASES_TO_CURRENCY_SEK = ( (2.00, 'dos coronas con cero öre'), (8.00, 'ocho coronas con cero öre'), (12.00, 'doce coronas con cero öre'), - (21.00, 'veintiún coronas con cero öre'), - (81.25, 'ochenta y un coronas con veinticinco öre'), - (350.90, 'trescientos cincuenta coronas con noventa öre'), + (21.00, 'veintiuna coronas con cero öre'), + (81.25, 'ochenta y una coronas con veinticinco öre'), + (350.90, 'trescientas cincuenta coronas con noventa öre'), (100.00, 'cien coronas con cero öre'), (4150.83, 'cuatro mil ciento cincuenta coronas con ochenta y tres öre'), @@ -214,9 +214,9 @@ TEST_CASES_TO_CURRENCY_NOK = ( (2.00, 'dos coronas con cero øre'), (8.00, 'ocho coronas con cero øre'), (12.00, 'doce coronas con cero øre'), - (21.00, 'veintiún coronas con cero øre'), - (81.25, 'ochenta y un coronas con veinticinco øre'), - (350.90, 'trescientos cincuenta coronas con noventa øre'), + (21.00, 'veintiuna coronas con cero øre'), + (81.25, 'ochenta y una coronas con veinticinco øre'), + (350.90, 'trescientas cincuenta coronas con noventa øre'), (100.00, 'cien coronas con cero øre'), (4150.83, 'cuatro mil ciento cincuenta coronas con ochenta y tres øre'), @@ -266,9 +266,9 @@ TEST_CASES_TO_CURRENCY_INR = ( (2.00, 'dos rupias con cero paisas'), (8.00, 'ocho rupias con cero paisas'), (12.00, 'doce rupias con cero paisas'), - (21.00, 'veintiún rupias con cero paisas'), - (81.25, 'ochenta y un rupias con veinticinco paisas'), - (350.90, 'trescientos cincuenta rupias con noventa paisas'), + (21.00, 'veintiuna rupias con cero paisas'), + (81.25, 'ochenta y una rupias con veinticinco paisas'), + (350.90, 'trescientas cincuenta rupias con noventa paisas'), (100.00, 'cien rupias con cero paisas'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres paisas'), @@ -318,9 +318,9 @@ TEST_CASES_TO_CURRENCY_CZK = ( (2.00, 'dos coronas con cero haléř'), (8.00, 'ocho coronas con cero haléř'), (12.00, 'doce coronas con cero haléř'), - (21.00, 'veintiún coronas con cero haléř'), - (81.25, 'ochenta y un coronas con veinticinco haléř'), - (350.90, 'trescientos cincuenta coronas con noventa haléř'), + (21.00, 'veintiuna coronas con cero haléř'), + (81.25, 'ochenta y una coronas con veinticinco haléř'), + (350.90, 'trescientas cincuenta coronas con noventa haléř'), (100.00, 'cien coronas con cero haléř'), (4150.83, 'cuatro mil ciento cincuenta coronas con ochenta y tres haléř'), @@ -405,13 +405,13 @@ TEST_CASES_TO_CURRENCY_KPW = ( ) TEST_CASES_TO_CURRENCY_TRY = ( - (1.00, 'un lira con cero kuruş'), + (1.00, 'una lira con cero kuruş'), (2.00, 'dos liras con cero kuruş'), (8.00, 'ocho liras con cero kuruş'), (12.00, 'doce liras con cero kuruş'), - (21.00, 'veintiún liras con cero kuruş'), - (81.25, 'ochenta y un liras con veinticinco kuruş'), - (350.90, 'trescientos cincuenta liras con noventa kuruş'), + (21.00, 'veintiuna liras con cero kuruş'), + (81.25, 'ochenta y una liras con veinticinco kuruş'), + (350.90, 'trescientas cincuenta liras con noventa kuruş'), (100.00, 'cien liras con cero kuruş'), (4150.83, 'cuatro mil ciento cincuenta liras con ochenta y tres kuruş'), @@ -708,9 +708,9 @@ TEST_CASES_TO_CURRENCY_CYP = ( (2.00, 'dos libras con cero céntimos'), (8.00, 'ocho libras con cero céntimos'), (12.00, 'doce libras con cero céntimos'), - (21.00, 'veintiún libras con cero céntimos'), - (81.25, 'ochenta y un libras con veinticinco céntimos'), - (350.90, 'trescientos cincuenta libras con noventa céntimos'), + (21.00, 'veintiuna libras con cero céntimos'), + (81.25, 'ochenta y una libras con veinticinco céntimos'), + (350.90, 'trescientas cincuenta libras con noventa céntimos'), (100.00, 'cien libras con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta libras con ochenta y tres céntimos'), @@ -721,9 +721,9 @@ TEST_CASES_TO_CURRENCY_DKK = ( (2.00, 'dos coronas con cero øre'), (8.00, 'ocho coronas con cero øre'), (12.00, 'doce coronas con cero øre'), - (21.00, 'veintiún coronas con cero øre'), - (81.25, 'ochenta y un coronas con veinticinco øre'), - (350.90, 'trescientos cincuenta coronas con noventa øre'), + (21.00, 'veintiuna coronas con cero øre'), + (81.25, 'ochenta y una coronas con veinticinco øre'), + (350.90, 'trescientas cincuenta coronas con noventa øre'), (100.00, 'cien coronas con cero øre'), (4150.83, 'cuatro mil ciento cincuenta coronas con ochenta y tres øre'), @@ -760,9 +760,10 @@ TEST_CASES_TO_CURRENCY_EGP = ( (2.00, 'dos libras con cero piastras'), (8.00, 'ocho libras con cero piastras'), (12.00, 'doce libras con cero piastras'), - (21.00, 'veintiún libras con cero piastras'), - (81.25, 'ochenta y un libras con veinticinco piastras'), - (350.90, 'trescientos cincuenta libras con noventa piastras'), + (21.00, 'veintiuna libras con cero piastras'), + (81.21, 'ochenta y una libras con veintiuna piastras'), + (81.25, 'ochenta y una libras con veinticinco piastras'), + (350.90, 'trescientas cincuenta libras con noventa piastras'), (100.00, 'cien libras con cero piastras'), (4150.83, 'cuatro mil ciento cincuenta libras con ochenta y tres piastras'), @@ -799,9 +800,9 @@ TEST_CASES_TO_CURRENCY_FKP = ( (2.00, 'dos libras con cero peniques'), (8.00, 'ocho libras con cero peniques'), (12.00, 'doce libras con cero peniques'), - (21.00, 'veintiún libras con cero peniques'), - (81.25, 'ochenta y un libras con veinticinco peniques'), - (350.90, 'trescientos cincuenta libras con noventa peniques'), + (21.00, 'veintiuna libras con cero peniques'), + (81.25, 'ochenta y una libras con veinticinco peniques'), + (350.90, 'trescientas cincuenta libras con noventa peniques'), (100.00, 'cien libras con cero peniques'), (4150.83, 'cuatro mil ciento cincuenta libras con ochenta y tres peniques'), @@ -903,9 +904,9 @@ TEST_CASES_TO_CURRENCY_IDR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiún rupias con cero céntimos'), - (81.25, 'ochenta y un rupias con veinticinco céntimos'), - (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (21.00, 'veintiuna rupias con cero céntimos'), + (81.25, 'ochenta y una rupias con veinticinco céntimos'), + (350.90, 'trescientas cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), @@ -955,22 +956,22 @@ TEST_CASES_TO_CURRENCY_ISK = ( (2.00, 'dos coronas con cero aurar'), (8.00, 'ocho coronas con cero aurar'), (12.00, 'doce coronas con cero aurar'), - (21.00, 'veintiún coronas con cero aurar'), - (81.25, 'ochenta y un coronas con veinticinco aurar'), - (350.90, 'trescientos cincuenta coronas con noventa aurar'), + (21.00, 'veintiuna coronas con cero aurar'), + (81.25, 'ochenta y una coronas con veinticinco aurar'), + (350.90, 'trescientas cincuenta coronas con noventa aurar'), (100.00, 'cien coronas con cero aurar'), (4150.83, 'cuatro mil ciento cincuenta coronas con ochenta y tres aurar'), ) TEST_CASES_TO_CURRENCY_ITL = ( - (1.00, 'un lira con cero céntimos'), + (1.00, 'una lira con cero céntimos'), (2.00, 'dos liras con cero céntimos'), (8.00, 'ocho liras con cero céntimos'), (12.00, 'doce liras con cero céntimos'), - (21.00, 'veintiún liras con cero céntimos'), - (81.25, 'ochenta y un liras con veinticinco céntimos'), - (350.90, 'trescientos cincuenta liras con noventa céntimos'), + (21.00, 'veintiuna liras con cero céntimos'), + (81.25, 'ochenta y una liras con veinticinco céntimos'), + (350.90, 'trescientas cincuenta liras con noventa céntimos'), (100.00, 'cien liras con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta liras con ochenta y tres céntimos'), @@ -1059,9 +1060,9 @@ TEST_CASES_TO_CURRENCY_LKR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiún rupias con cero céntimos'), - (81.25, 'ochenta y un rupias con veinticinco céntimos'), - (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (21.00, 'veintiuna rupias con cero céntimos'), + (81.25, 'ochenta y una rupias con veinticinco céntimos'), + (350.90, 'trescientas cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), @@ -1241,9 +1242,9 @@ TEST_CASES_TO_CURRENCY_MUR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiún rupias con cero céntimos'), - (81.25, 'ochenta y un rupias con veinticinco céntimos'), - (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (21.00, 'veintiuna rupias con cero céntimos'), + (81.25, 'ochenta y una rupias con veinticinco céntimos'), + (350.90, 'trescientas cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), @@ -1319,9 +1320,9 @@ TEST_CASES_TO_CURRENCY_NPR = ( (2.00, 'dos rupias con cero paisas'), (8.00, 'ocho rupias con cero paisas'), (12.00, 'doce rupias con cero paisas'), - (21.00, 'veintiún rupias con cero paisas'), - (81.25, 'ochenta y un rupias con veinticinco paisas'), - (350.90, 'trescientos cincuenta rupias con noventa paisas'), + (21.00, 'veintiuna rupias con cero paisas'), + (81.25, 'ochenta y una rupias con veinticinco paisas'), + (350.90, 'trescientas cincuenta rupias con noventa paisas'), (100.00, 'cien rupias con cero paisas'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres paisas'), @@ -1371,9 +1372,9 @@ TEST_CASES_TO_CURRENCY_PKR = ( (2.00, 'dos rupias con cero paisas'), (8.00, 'ocho rupias con cero paisas'), (12.00, 'doce rupias con cero paisas'), - (21.00, 'veintiún rupias con cero paisas'), - (81.25, 'ochenta y un rupias con veinticinco paisas'), - (350.90, 'trescientos cincuenta rupias con noventa paisas'), + (21.00, 'veintiuna rupias con cero paisas'), + (81.25, 'ochenta y una rupias con veinticinco paisas'), + (350.90, 'trescientas cincuenta rupias con noventa paisas'), (100.00, 'cien rupias con cero paisas'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres paisas'), @@ -1462,9 +1463,9 @@ TEST_CASES_TO_CURRENCY_SCR = ( (2.00, 'dos rupias con cero céntimos'), (8.00, 'ocho rupias con cero céntimos'), (12.00, 'doce rupias con cero céntimos'), - (21.00, 'veintiún rupias con cero céntimos'), - (81.25, 'ochenta y un rupias con veinticinco céntimos'), - (350.90, 'trescientos cincuenta rupias con noventa céntimos'), + (21.00, 'veintiuna rupias con cero céntimos'), + (81.25, 'ochenta y una rupias con veinticinco céntimos'), + (350.90, 'trescientas cincuenta rupias con noventa céntimos'), (100.00, 'cien rupias con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta rupias con ochenta y tres céntimos'), @@ -1475,9 +1476,9 @@ TEST_CASES_TO_CURRENCY_SHP = ( (2.00, 'dos libras con cero peniques'), (8.00, 'ocho libras con cero peniques'), (12.00, 'doce libras con cero peniques'), - (21.00, 'veintiún libras con cero peniques'), - (81.25, 'ochenta y un libras con veinticinco peniques'), - (350.90, 'trescientos cincuenta libras con noventa peniques'), + (21.00, 'veintiuna libras con cero peniques'), + (81.25, 'ochenta y una libras con veinticinco peniques'), + (350.90, 'trescientas cincuenta libras con noventa peniques'), (100.00, 'cien libras con cero peniques'), (4150.83, 'cuatro mil ciento cincuenta libras con ochenta y tres peniques'), @@ -1488,9 +1489,9 @@ TEST_CASES_TO_CURRENCY_SKK = ( (2.00, 'dos coronas con cero haliers'), (8.00, 'ocho coronas con cero haliers'), (12.00, 'doce coronas con cero haliers'), - (21.00, 'veintiún coronas con cero haliers'), - (81.25, 'ochenta y un coronas con veinticinco haliers'), - (350.90, 'trescientos cincuenta coronas con noventa haliers'), + (21.00, 'veintiuna coronas con cero haliers'), + (81.25, 'ochenta y una coronas con veinticinco haliers'), + (350.90, 'trescientas cincuenta coronas con noventa haliers'), (100.00, 'cien coronas con cero haliers'), (4150.83, 'cuatro mil ciento cincuenta coronas con ochenta y tres haliers'), @@ -1501,9 +1502,9 @@ TEST_CASES_TO_CURRENCY_SLL = ( (2.00, 'dos leonas con cero céntimos'), (8.00, 'ocho leonas con cero céntimos'), (12.00, 'doce leonas con cero céntimos'), - (21.00, 'veintiún leonas con cero céntimos'), - (81.25, 'ochenta y un leonas con veinticinco céntimos'), - (350.90, 'trescientos cincuenta leonas con noventa céntimos'), + (21.00, 'veintiuna leonas con cero céntimos'), + (81.25, 'ochenta y una leonas con veinticinco céntimos'), + (350.90, 'trescientas cincuenta leonas con noventa céntimos'), (100.00, 'cien leonas con cero céntimos'), (4150.83, 'cuatro mil ciento cincuenta leonas con ochenta y tres céntimos'), From 12e8402da4138f4bf4ab52cb985d5166518f8a2f Mon Sep 17 00:00:00 2001 From: gonzy <11833677+gonsalet@users.noreply.github.com> Date: Thu, 24 Mar 2022 00:37:53 +0100 Subject: [PATCH 34/76] Improved currency gender handling, now splitting 'dollars' and 'cents' parts on --- num2words/lang_ES.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/num2words/lang_ES.py b/num2words/lang_ES.py index 5d086d8..de2d1e1 100644 --- a/num2words/lang_ES.py +++ b/num2words/lang_ES.py @@ -367,7 +367,7 @@ class Num2Word_ES(Num2Word_EU): # Source: https://www.rae.es/dpd/una (section 2.2) # split "dollars" part from "cents" part - list_result = result.split(" con ") + list_result = result.split(separator + " ") # "DOLLARS" PART (list_result[0]) @@ -403,6 +403,6 @@ class Num2Word_ES(Num2Word_EU): list_result[1] = list_result[1].replace("uno", "un") # join back "dollars" part with "cents" part - result = " con ".join(list_result) + result = (separator + " ").join(list_result) return result From b8a215a9916346f732a0176fc7277b6333a0a77d Mon Sep 17 00:00:00 2001 From: gonzy <11833677+gonsalet@users.noreply.github.com> Date: Thu, 24 Mar 2022 00:54:22 +0100 Subject: [PATCH 35/76] Added tests for every currency gender combination (dollars, cents) --- tests/test_es.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_es.py b/tests/test_es.py index e014b81..68a14e0 100644 --- a/tests/test_es.py +++ b/tests/test_es.py @@ -114,6 +114,7 @@ TEST_CASES_ORDINAL_NUM = ( TEST_CASES_TO_CURRENCY = ( (1.00, 'un euro con cero céntimos'), + (1.01, 'un euro con un céntimo'), (2.00, 'dos euros con cero céntimos'), (8.00, 'ocho euros con cero céntimos'), (12.00, 'doce euros con cero céntimos'), @@ -125,6 +126,7 @@ TEST_CASES_TO_CURRENCY = ( TEST_CASES_TO_CURRENCY_ESP = ( (1.00, 'una peseta con cero céntimos'), + (1.01, 'una peseta con un céntimo'), (2.00, 'dos pesetas con cero céntimos'), (8.00, 'ocho pesetas con cero céntimos'), (12.00, 'doce pesetas con cero céntimos'), From 2cb98d3af1097d75e795c0fd67bdd8037d2b5339 Mon Sep 17 00:00:00 2001 From: Marlon Rodriguez Garcia Date: Wed, 3 Aug 2022 14:49:06 -0400 Subject: [PATCH 36/76] Added new release --- CHANGES.rst | 28 ++++++++++++++++++++++++++++ README.rst | 2 +- bin/num2words | 2 +- num2words/lang_KO.py | 2 +- setup.py | 10 +++++++--- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 298f9db..9f3a7b2 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,34 @@ Changelog ========= +Version 0.5.11 -- 2022/08/03 +---------------------------- + +* Add KZT and UAH currencies to lang RU (#264) +* Add es_NI currency (#276) +* Update .gitignore to add .eggs/ directory (#280) +* Fix Hebrew support (#289) +* Update test_tr.py to increase coverage (#298) +* Add ordinal 12,345 to ES test suite to increase coverage (#287) +* Add simple tests for lang_DK.py (#286) +* Add testcase for lang_EN.py (#288) +* Add more tests to base.py (#283) +* Fixed misspelling of 21 (cardinal and ordinal number) in IT language (#270) +* Romanian issues 259 (#260) +* Adding Language Support for Telugu / Bug Fix in Kannada (#263) +* Add support of Kazakh language (KZ) (#306) +* Update README.rst (#307) +* Added support for Hungarian language (#310) +* [UPD] Readme file (#363) +* [ADD] num2words: add traslation to spanish of several currencies (#356) +* added swedish language including test cases (#352) +* Remove dupplicated line in lang_PT_BR (#355) +* Fix ordinal_num output for Dutch (NL) (#369) +* Polishordinals (#367) +* [tr] return Turkish 0 ordinal and cardinal (#347) +* Improve Ukrainian support and minor fixes in CZ, KZ, LT, LV, PL, RU, SR languages (#400) +* feat: ci: replace travis by github workflows (#448) +* [ES] Added missing accents ("dieciséis", "dólar", "dólares", "veintiún"), improved currency gender handling, fixed pound cent names (#443) Version 0.5.10 -- 2019/05/12 ---------------------------- diff --git a/README.rst b/README.rst index 282aef2..9978a20 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,5 @@ num2words library - Convert numbers to words in multiple languages -========================================================== +================================================================== .. image:: https://img.shields.io/pypi/v/num2words.svg :target: https://pypi.python.org/pypi/num2words diff --git a/bin/num2words b/bin/num2words index 02cfc69..2a20b22 100755 --- a/bin/num2words +++ b/bin/num2words @@ -55,7 +55,7 @@ import sys from docopt import docopt import num2words -__version__ = "0.5.10" +__version__ = "0.5.11" __license__ = "LGPL" diff --git a/num2words/lang_KO.py b/num2words/lang_KO.py index e4e01b5..65f4531 100644 --- a/num2words/lang_KO.py +++ b/num2words/lang_KO.py @@ -93,7 +93,7 @@ class Num2Word_KO(Num2Word_Base): def to_ordinal(self, value): self.verify_ordinal(value) - if(value == 1): + if value == 1: return "첫 번째" outwords = self.to_cardinal(value).split(" ") lastwords = outwords[-1].split("백") diff --git a/setup.py b/setup.py index fbc34f7..3565f62 100644 --- a/setup.py +++ b/setup.py @@ -27,8 +27,11 @@ CLASSIFIERS = [ 'Intended Audience :: Developers', 'License :: OSI Approved :: GNU Library or Lesser General Public License ' '(LGPL)', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Topic :: Software Development :: Internationalization', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Software Development :: Localization', @@ -61,11 +64,12 @@ setup( version=find_version("bin/num2words"), description='Modules to convert numbers to words. Easily extensible.', long_description=LONG_DESC, + long_description_content_type="text/markdown", license='LGPL', author='Taro Ogawa ', author_email='tos@users.sourceforge.net', maintainer='Savoir-faire Linux inc.', - maintainer_email='istvan.szalai@savoirfairelinux.com', + maintainer_email='support@savoirfairelinux.com', keywords=' number word numbers words convert conversion i18n ' 'localisation localization internationalisation ' 'internationalization', From f2acbc2873bb7791857c77b9836357215d064e15 Mon Sep 17 00:00:00 2001 From: Marlon Rodriguez Garcia Date: Thu, 4 Aug 2022 12:10:25 -0400 Subject: [PATCH 37/76] Add new check to base --- tests/test_base.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_base.py b/tests/test_base.py index bd9cbd1..6500db6 100644 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -58,3 +58,8 @@ class Num2WordBaseTest(TestCase): self.base.title("one"), "One" ) + self.base.exclude_title.append('one') + self.assertEqual( + self.base.title("one"), + "one" + ) From 112e91c35a9da5075190fa948dd635515187d230 Mon Sep 17 00:00:00 2001 From: gshekler Date: Sat, 3 Oct 2020 15:02:49 +0300 Subject: [PATCH 38/76] fix pluralize --- num2words/lang_HE.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/num2words/lang_HE.py b/num2words/lang_HE.py index 34b2ec8..2b96dc1 100644 --- a/num2words/lang_HE.py +++ b/num2words/lang_HE.py @@ -81,11 +81,7 @@ AND = u'ו' def pluralize(n, forms): - # gettext implementation: - # (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2) - - form = 0 if (n % 10 == 1 and n % 100 != 11) else 1 if n != 0 else 2 - + form = 1 if n == 0 else 0 if n == 1 else 1 return forms[form] @@ -151,6 +147,9 @@ class Num2Word_HE(Num2Word_Base): def to_ordinal(self, number): raise NotImplementedError() + def pluralize(self, n, forms): + return pluralize(n, forms) + if __name__ == '__main__': yo = Num2Word_HE() From 07ea1baca273101156cc2fb3c273eb34c502fbe1 Mon Sep 17 00:00:00 2001 From: gshekler Date: Sat, 3 Oct 2020 15:03:43 +0300 Subject: [PATCH 39/76] implement currency for HE --- num2words/lang_HE.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/num2words/lang_HE.py b/num2words/lang_HE.py index 2b96dc1..f987192 100644 --- a/num2words/lang_HE.py +++ b/num2words/lang_HE.py @@ -136,11 +136,13 @@ def n2w(n): return int2word(int(n)) -def to_currency(n, currency='EUR', cents=True, separator=','): - raise NotImplementedError() - - class Num2Word_HE(Num2Word_Base): + CURRENCY_FORMS = { + 'NIS': (('שקל', 'שקלים'), ('אגורה', 'אגורות')), + 'EUR': (('אירו', 'אירו'), ('סנט', 'סנט')), + 'USD': (('דולר', 'דולרים'), ('סנט', 'סנט')), + } + def to_cardinal(self, number): return n2w(number) @@ -150,6 +152,14 @@ class Num2Word_HE(Num2Word_Base): def pluralize(self, n, forms): return pluralize(n, forms) + def to_currency(self, val, currency='NIS', cents=True, separator=' ו', + adjective=False): + result = super(Num2Word_HE, self).to_currency( + val, currency=currency, cents=cents, separator=separator, + adjective=adjective) + # In Hebrew the separator is along with the following word + return result.replace(" ו ", " ו") + if __name__ == '__main__': yo = Num2Word_HE() From f820ee5ec1d92c9196679e8cc966323eeb697956 Mon Sep 17 00:00:00 2001 From: gshekler Date: Sat, 3 Oct 2020 15:03:57 +0300 Subject: [PATCH 40/76] add unit tests --- tests/test_he.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/test_he.py b/tests/test_he.py index 206d7cc..5a17694 100644 --- a/tests/test_he.py +++ b/tests/test_he.py @@ -20,6 +20,7 @@ from __future__ import unicode_literals from unittest import TestCase from num2words import num2words +from num2words.lang_HE import Num2Word_HE class Num2WordsHETest(TestCase): @@ -71,3 +72,39 @@ class Num2WordsHETest(TestCase): self.assertEqual( num2words(6870, lang="he"), u'ששת אלפים שמונה מאות ושבעים' ) + + def test_pluralize(self): + n = Num2Word_HE() + cr1, cr2 = n.CURRENCY_FORMS['NIS'] + self.assertEqual(n.pluralize(1, cr1), 'שקל') + self.assertEqual(n.pluralize(2, cr1), 'שקלים') + self.assertEqual(n.pluralize(1, cr2), 'אגורה') + self.assertEqual(n.pluralize(2, cr2), 'אגורות') + + cr1, cr2 = n.CURRENCY_FORMS['USD'] + self.assertEqual(n.pluralize(1, cr1), 'דולר') + self.assertEqual(n.pluralize(2, cr1), 'דולרים') + self.assertEqual(n.pluralize(1, cr2), 'סנט') + self.assertEqual(n.pluralize(2, cr2), 'סנט') + + def test_currency_(self): + n = Num2Word_HE() + self.assertEqual(n.to_currency(20.0 ,currency='NIS'), 'עשרים שקלים ואפס אגורות') + self.assertEqual(n.to_currency(100.0 ,currency='NIS'), 'מאה שקלים ואפס אגורות') + self.assertEqual(n.to_currency(100.50 ,currency='NIS'), 'מאה שקלים וחמישים אגורות') + + def test_to_cardinal(self): + n = Num2Word_HE() + self.assertEqual(n.to_cardinal(1500), u'אלף וחמש מאות') + + +class Num2WordsHETestNotImplementedMethofs(TestCase): + n = Num2Word_HE() + + def test_to_ordinal(self): + with self.assertRaises(NotImplementedError): + self.n.to_ordinal('1') + + def test_large_number(self): + with self.assertRaises(NotImplementedError): + num2words(2000000, lang="he") From 7993ca5023a7a24ef8d2aeed62aa98fa7c59744d Mon Sep 17 00:00:00 2001 From: gshekler Date: Sat, 3 Oct 2020 15:14:21 +0300 Subject: [PATCH 41/76] typo --- tests/test_he.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_he.py b/tests/test_he.py index 5a17694..688bbf0 100644 --- a/tests/test_he.py +++ b/tests/test_he.py @@ -87,7 +87,7 @@ class Num2WordsHETest(TestCase): self.assertEqual(n.pluralize(1, cr2), 'סנט') self.assertEqual(n.pluralize(2, cr2), 'סנט') - def test_currency_(self): + def test_to_currency(self): n = Num2Word_HE() self.assertEqual(n.to_currency(20.0 ,currency='NIS'), 'עשרים שקלים ואפס אגורות') self.assertEqual(n.to_currency(100.0 ,currency='NIS'), 'מאה שקלים ואפס אגורות') From c11927b353d111ed6609b57fd9f43e47e6424d54 Mon Sep 17 00:00:00 2001 From: Gabriel Shekler <46564521+gs202@users.noreply.github.com> Date: Sat, 6 Aug 2022 13:51:57 +0300 Subject: [PATCH 42/76] fix flake issues --- tests/test_he.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/test_he.py b/tests/test_he.py index 688bbf0..2ce6797 100644 --- a/tests/test_he.py +++ b/tests/test_he.py @@ -89,9 +89,15 @@ class Num2WordsHETest(TestCase): def test_to_currency(self): n = Num2Word_HE() - self.assertEqual(n.to_currency(20.0 ,currency='NIS'), 'עשרים שקלים ואפס אגורות') - self.assertEqual(n.to_currency(100.0 ,currency='NIS'), 'מאה שקלים ואפס אגורות') - self.assertEqual(n.to_currency(100.50 ,currency='NIS'), 'מאה שקלים וחמישים אגורות') + self.assertEqual( + n.to_currency(20.0, currency='NIS'), 'עשרים שקלים ואפס אגורות' + ) + self.assertEqual( + (n.to_currency(100.0, currency='NIS'), 'מאה שקלים ואפס אגורות' + ) + self.assertEqual( + (n.to_currency(100.50, currency='NIS'), 'מאה שקלים וחמישים אגורות' + ) def test_to_cardinal(self): n = Num2Word_HE() From b01c44e33cc4bfe75042ca9461adaf556be85b63 Mon Sep 17 00:00:00 2001 From: Gabriel Shekler <46564521+gs202@users.noreply.github.com> Date: Sat, 6 Aug 2022 13:53:14 +0300 Subject: [PATCH 43/76] typo --- tests/test_he.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_he.py b/tests/test_he.py index 2ce6797..e50a6a2 100644 --- a/tests/test_he.py +++ b/tests/test_he.py @@ -93,10 +93,10 @@ class Num2WordsHETest(TestCase): n.to_currency(20.0, currency='NIS'), 'עשרים שקלים ואפס אגורות' ) self.assertEqual( - (n.to_currency(100.0, currency='NIS'), 'מאה שקלים ואפס אגורות' + n.to_currency(100.0, currency='NIS'), 'מאה שקלים ואפס אגורות' ) self.assertEqual( - (n.to_currency(100.50, currency='NIS'), 'מאה שקלים וחמישים אגורות' + n.to_currency(100.50, currency='NIS'), 'מאה שקלים וחמישים אגורות' ) def test_to_cardinal(self): From 9f59c5c8940f01095c80e94d8c26a0916e110a52 Mon Sep 17 00:00:00 2001 From: hamidreza kalbasi Date: Wed, 16 Dec 2020 21:11:52 +0330 Subject: [PATCH 44/76] add basic farsi support --- README.rst | 1 + num2words/__init__.py | 3 +- num2words/lang_FA.py | 165 ++++++++++++++++++++++++++++++++++++++++++ tests/test_fa.py | 85 ++++++++++++++++++++++ 4 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 num2words/lang_FA.py create mode 100644 tests/test_fa.py diff --git a/README.rst b/README.rst index 9978a20..0414531 100644 --- a/README.rst +++ b/README.rst @@ -86,6 +86,7 @@ Besides the numerical argument, there are two main optional arguments. * ``es_CO`` (Spanish - Colombia) * ``es_VE`` (Spanish - Venezuela) * ``eu`` (EURO) +* ``fa`` (Farsi) * ``fi`` (Finnish) * ``fr`` (French) * ``fr_CH`` (French - Switzerland) diff --git a/num2words/__init__.py b/num2words/__init__.py index a8c4737..1909054 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -18,7 +18,7 @@ from __future__ import unicode_literals from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, - lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, lang_FI, lang_FR, + lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, lang_FA, lang_FI, lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, @@ -30,6 +30,7 @@ CONVERTER_CLASSES = { 'cz': lang_CZ.Num2Word_CZ(), 'en': lang_EN.Num2Word_EN(), 'en_IN': lang_EN_IN.Num2Word_EN_IN(), + 'fa': lang_FA.Num2Word_FA(), 'fr': lang_FR.Num2Word_FR(), 'fr_CH': lang_FR_CH.Num2Word_FR_CH(), 'fr_BE': lang_FR_BE.Num2Word_FR_BE(), diff --git a/num2words/lang_FA.py b/num2words/lang_FA.py new file mode 100644 index 0000000..9e232a7 --- /dev/null +++ b/num2words/lang_FA.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. +# Copyright (c) 2018, Abdullah Alhazmy, Alhazmy13. All Rights Reserved. +# Copyright (c) 2020, Hamidreza Kalbasi. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +import re +from decimal import Decimal +from math import floor + +farsiOnes = [ + "", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", + "نه", + "ده", + "یازده", + "دوازده", + "سیزده", + "چهارده", + "پونزده", + "شونزده", + "هیفده", + "هیجده", + "نوزده", +] + +farsiTens = [ + "", + "ده", + "بیست", + "سی", + "چهل", + "پنجاه", + "شصت", + "هفتاد", + "هشتاد", + "نود", +] + +farsiHundreds = [ + "", + "صد", + "دویست", + "سیصد", + "چهارصد", + "پانصد", + "ششصد", + "هفتصد", + "هشتصد", + "نهصد", +] + +farsiBig = [ + '', + ' هزار', + ' میلیون', + " میلیارد", + ' تریلیون', + " تریلیارد", +] + +farsiFrac = ["", "دهم", "صدم"] +farsiFracBig = ["", "هزارم", "میلیونیم", "میلیاردیم"] + +farsiSeperator = ' و ' + +class Num2Word_FA(object): + errmsg_too_big = "Too large" + max_num = 10 ** 36 + + def __init__(self): + self.number = 0 + + def float2tuple(self, value): + pre = int(value) + + # Simple way of finding decimal places to update the precision + self.precision = abs(Decimal(str(value)).as_tuple().exponent) + + post = abs(value - pre) * 10**self.precision + if abs(round(post) - post) < 0.01: + # We generally floor all values beyond our precision (rather than + # rounding), but in cases where we have something like 1.239999999, + # which is probably due to python's handling of floats, we actually + # want to consider it as 1.24 instead of 1.23 + post = int(round(post)) + else: + post = int(math.floor(post)) + + return pre, post, self.precision + + + def cardinal3(self, number): + if (number < 19): + return farsiOnes[number] + if (number < 100): + x, y = divmod(number, 10) + if y == 0: + return farsiTens[x] + return farsiTens[x] + farsiSeperator + farsiOnes[y] + x, y = divmod(number, 100) + if y == 0: + return farsiHundreds[x] + return farsiHundreds[x] + farsiSeperator + self.cardinal3(y) + + def cardinalPos(self, number): + x = number + res = '' + for b in farsiBig: + x, y = divmod(x, 1000) + if (y == 0): + continue + yx = self.cardinal3(y) + b + if (res == ''): + res = yx + else: + res = yx + farsiSeperator + return res + + def fractional(self, number, l): + if (number == 5): + return "نیم" + x = self.cardinalPos(number) + ld3, lm3 = divmod(l, 3) + ltext = (farsiFrac[lm3] + " " + farsiFracBig[ld3]).strip() + return x + " " + ltext + + def to_currency(self, value): + return self.to_cardinal(value) + " تومان" + + def to_ordinal(self, number): + r = self.to_cardinal(number) + if (r[-1] == 'ه' and r[-2] == 'س'): + return r[:-1] + 'وم' + return r + 'م' + + def to_year(self, value): + return self.to_cardinal(value) + + def to_ordinal_num(self, value): + return str(value)+"م" + + def to_cardinal(self, number): + if number < 0: + return "منفی " + self.to_cardinal(-number) + if (number == 0): + return "صفر" + x, y, l = self.float2tuple(number) + if y == 0: + return self.cardinalPos(x) + if x == 0: + return self.fractional(y, l) + return self.cardinalPos(x) + farsiSeperator + self.fractional(y, l) \ No newline at end of file diff --git a/tests/test_fa.py b/tests/test_fa.py new file mode 100644 index 0000000..dbe9574 --- /dev/null +++ b/tests/test_fa.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. +# Copyright (c) 2020, Hamidreza Kalbasi. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from unittest import TestCase + +from num2words import num2words + + +class Num2WordsFATest(TestCase): + def test_and_join_199(self): + self.assertEqual(num2words(199, lang='fa'), "صد و نود و نه") + + def test_ordinal(self): + self.assertEqual( + num2words(0, lang='fa', to='ordinal'), + 'صفرم' + ) + self.assertEqual( + num2words(1, lang='fa', to='ordinal'), + 'یکم' + ) + self.assertEqual( + num2words(13, lang='fa', to='ordinal'), + 'سیزدهم' + ) + self.assertEqual( + num2words(23, lang='fa', to='ordinal'), + 'بیست و سوم' + ) + self.assertEqual( + num2words(12, lang='fa', to='ordinal'), + 'دوازدهم' + ) + self.assertEqual( + num2words(113, lang='fa', to='ordinal'), + 'صد و سیزدهم' + ) + self.assertEqual( + num2words(103, lang='fa', to='ordinal'), + 'صد و سوم' + ) + + def test_cardinal(self): + self.assertEqual(num2words(130000, lang='fa'), "صد و سی هزار") + self.assertEqual(num2words(242, lang='fa'), "دویست و چهل و دو") + + + + def test_ordinal_num(self): + self.assertEqual(num2words(10, lang='fa', to='ordinal_num'), '10م') + self.assertEqual(num2words(21, lang='fa', to='ordinal_num'), '21م') + self.assertEqual(num2words(102, lang='fa', to='ordinal_num'), '102م') + self.assertEqual(num2words(73, lang='fa', to='ordinal_num'), '73م') + + def test_cardinal_for_float_number(self): + self.assertEqual(num2words(12.5, lang='fa'), "دوازده و نیم") + self.assertEqual(num2words(0.75, lang='fa'), "هفتاد و پنج صدم") + self.assertEqual(num2words(12.51, lang='fa'), "دوازده و پنجاه و یک صدم") + self.assertEqual(num2words(12.53, lang='fa'), "دوازده و پنجاه و سه صدم") + self.assertEqual(num2words(12.59, lang='fa'), "دوازده و پنجاه و نه صدم") + self.assertEqual(num2words(0.000001, lang='fa'), "یک میلیونیم") + + def test_overflow(self): + with self.assertRaises(OverflowError): + num2words("1000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000") From bbd9de8299aa6d390e2d897c8c7b7cd60142e293 Mon Sep 17 00:00:00 2001 From: hamidreza kalbasi Date: Sun, 24 Jan 2021 10:10:24 +0330 Subject: [PATCH 45/76] fix test coverage --- num2words/lang_FA.py | 4 +++- tests/test_fa.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/num2words/lang_FA.py b/num2words/lang_FA.py index 9e232a7..ca7004c 100644 --- a/num2words/lang_FA.py +++ b/num2words/lang_FA.py @@ -123,10 +123,12 @@ class Num2Word_FA(object): if (y == 0): continue yx = self.cardinal3(y) + b + if b == ' هزار' and y == 1: + yx = 'هزار' if (res == ''): res = yx else: - res = yx + farsiSeperator + res = yx + farsiSeperator + res return res def fractional(self, number, l): diff --git a/tests/test_fa.py b/tests/test_fa.py index dbe9574..4082e7f 100644 --- a/tests/test_fa.py +++ b/tests/test_fa.py @@ -58,8 +58,24 @@ class Num2WordsFATest(TestCase): def test_cardinal(self): self.assertEqual(num2words(130000, lang='fa'), "صد و سی هزار") self.assertEqual(num2words(242, lang='fa'), "دویست و چهل و دو") + self.assertEqual(num2words(800, lang='fa'), "هشتصد") + self.assertEqual(num2words(-203, lang='fa'), "منفی دویست و سه") + self.assertEqual( + num2words(1234567890, lang='fa'), + "یک میلیارد و دویست و سی و چهار میلیون و پانصد و شصت و هفت هزار و هشتصد و نود" + ) + + def test_year(self): + self.assertEqual(num2words(1398, lang='fa', to='year'), "هزار و سیصد و نود و هشت") + self.assertEqual(num2words(1399, lang='fa', to='year'), "هزار و سیصد و نود و نه") + self.assertEqual(num2words(1400, lang='fa', to='year'), "هزار و چهارصد") - + def test_currency(self): + self.assertEqual(num2words(1000, lang='fa', to='currency'), 'هزار تومان') + self.assertEqual( + num2words(1500000, lang='fa', to='currency'), + 'یک میلیون و پانصد هزار تومان' + ) def test_ordinal_num(self): self.assertEqual(num2words(10, lang='fa', to='ordinal_num'), '10م') From a1f0392beb8f976e1e1e444d2d668600f95b4390 Mon Sep 17 00:00:00 2001 From: hamidreza kalbasi Date: Sun, 24 Jan 2021 10:30:06 +0330 Subject: [PATCH 46/76] remove unneccery if --- num2words/lang_FA.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/num2words/lang_FA.py b/num2words/lang_FA.py index ca7004c..9c5ff74 100644 --- a/num2words/lang_FA.py +++ b/num2words/lang_FA.py @@ -90,14 +90,7 @@ class Num2Word_FA(object): self.precision = abs(Decimal(str(value)).as_tuple().exponent) post = abs(value - pre) * 10**self.precision - if abs(round(post) - post) < 0.01: - # We generally floor all values beyond our precision (rather than - # rounding), but in cases where we have something like 1.239999999, - # which is probably due to python's handling of floats, we actually - # want to consider it as 1.24 instead of 1.23 - post = int(round(post)) - else: - post = int(math.floor(post)) + post = int(math.floor(post)) return pre, post, self.precision From 3d2fa184cfbfca6443998a572d1ac8181b2626c7 Mon Sep 17 00:00:00 2001 From: hamidreza kalbasi Date: Mon, 25 Jan 2021 00:14:05 +0330 Subject: [PATCH 47/76] try fix test failure --- num2words/lang_FA.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/num2words/lang_FA.py b/num2words/lang_FA.py index 9c5ff74..f49b5f3 100644 --- a/num2words/lang_FA.py +++ b/num2words/lang_FA.py @@ -90,8 +90,14 @@ class Num2Word_FA(object): self.precision = abs(Decimal(str(value)).as_tuple().exponent) post = abs(value - pre) * 10**self.precision - post = int(math.floor(post)) - + if abs(round(post) - post) < 0.01: + # We generally floor all values beyond our precision (rather than + # rounding), but in cases where we have something like 1.239999999, + # which is probably due to python's handling of floats, we actually + # want to consider it as 1.24 instead of 1.23 + post = int(round(post)) + else: + post = int(floor(post)) return pre, post, self.precision From 464f9ed7afd347dcb6b7e71a17fb4deed3138526 Mon Sep 17 00:00:00 2001 From: hamidreza kalbasi Date: Mon, 25 Jan 2021 10:34:01 +0330 Subject: [PATCH 48/76] fix flake8 problems --- num2words/lang_FA.py | 17 ++++++++--------- tests/test_fa.py | 26 +++++++++++++++++--------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/num2words/lang_FA.py b/num2words/lang_FA.py index f49b5f3..96e9e52 100644 --- a/num2words/lang_FA.py +++ b/num2words/lang_FA.py @@ -17,7 +17,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301 USA -import re from decimal import Decimal from math import floor @@ -76,6 +75,7 @@ farsiFracBig = ["", "هزارم", "میلیونیم", "میلیاردیم"] farsiSeperator = ' و ' + class Num2Word_FA(object): errmsg_too_big = "Too large" max_num = 10 ** 36 @@ -100,7 +100,6 @@ class Num2Word_FA(object): post = int(floor(post)) return pre, post, self.precision - def cardinal3(self, number): if (number < 19): return farsiOnes[number] @@ -108,12 +107,12 @@ class Num2Word_FA(object): x, y = divmod(number, 10) if y == 0: return farsiTens[x] - return farsiTens[x] + farsiSeperator + farsiOnes[y] + return farsiTens[x] + farsiSeperator + farsiOnes[y] x, y = divmod(number, 100) if y == 0: return farsiHundreds[x] return farsiHundreds[x] + farsiSeperator + self.cardinal3(y) - + def cardinalPos(self, number): x = number res = '' @@ -130,11 +129,11 @@ class Num2Word_FA(object): res = yx + farsiSeperator + res return res - def fractional(self, number, l): + def fractional(self, number, level): if (number == 5): return "نیم" x = self.cardinalPos(number) - ld3, lm3 = divmod(l, 3) + ld3, lm3 = divmod(level, 3) ltext = (farsiFrac[lm3] + " " + farsiFracBig[ld3]).strip() return x + " " + ltext @@ -158,9 +157,9 @@ class Num2Word_FA(object): return "منفی " + self.to_cardinal(-number) if (number == 0): return "صفر" - x, y, l = self.float2tuple(number) + x, y, level = self.float2tuple(number) if y == 0: return self.cardinalPos(x) if x == 0: - return self.fractional(y, l) - return self.cardinalPos(x) + farsiSeperator + self.fractional(y, l) \ No newline at end of file + return self.fractional(y, level) + return self.cardinalPos(x) + farsiSeperator + self.fractional(y, level) diff --git a/tests/test_fa.py b/tests/test_fa.py index 4082e7f..9a9c4ea 100644 --- a/tests/test_fa.py +++ b/tests/test_fa.py @@ -62,16 +62,21 @@ class Num2WordsFATest(TestCase): self.assertEqual(num2words(-203, lang='fa'), "منفی دویست و سه") self.assertEqual( num2words(1234567890, lang='fa'), - "یک میلیارد و دویست و سی و چهار میلیون و پانصد و شصت و هفت هزار و هشتصد و نود" + "یک میلیارد و دویست و سی و چهار میلیون و" + " پانصد و شصت و هفت هزار و هشتصد و نود" ) def test_year(self): - self.assertEqual(num2words(1398, lang='fa', to='year'), "هزار و سیصد و نود و هشت") - self.assertEqual(num2words(1399, lang='fa', to='year'), "هزار و سیصد و نود و نه") - self.assertEqual(num2words(1400, lang='fa', to='year'), "هزار و چهارصد") - + self.assertEqual(num2words(1398, lang='fa', to='year'), + "هزار و سیصد و نود و هشت") + self.assertEqual(num2words(1399, lang='fa', to='year'), + "هزار و سیصد و نود و نه") + self.assertEqual( + num2words(1400, lang='fa', to='year'), "هزار و چهارصد") + def test_currency(self): - self.assertEqual(num2words(1000, lang='fa', to='currency'), 'هزار تومان') + self.assertEqual( + num2words(1000, lang='fa', to='currency'), 'هزار تومان') self.assertEqual( num2words(1500000, lang='fa', to='currency'), 'یک میلیون و پانصد هزار تومان' @@ -86,9 +91,12 @@ class Num2WordsFATest(TestCase): def test_cardinal_for_float_number(self): self.assertEqual(num2words(12.5, lang='fa'), "دوازده و نیم") self.assertEqual(num2words(0.75, lang='fa'), "هفتاد و پنج صدم") - self.assertEqual(num2words(12.51, lang='fa'), "دوازده و پنجاه و یک صدم") - self.assertEqual(num2words(12.53, lang='fa'), "دوازده و پنجاه و سه صدم") - self.assertEqual(num2words(12.59, lang='fa'), "دوازده و پنجاه و نه صدم") + self.assertEqual(num2words(12.51, lang='fa'), + "دوازده و پنجاه و یک صدم") + self.assertEqual(num2words(12.53, lang='fa'), + "دوازده و پنجاه و سه صدم") + self.assertEqual(num2words(12.59, lang='fa'), + "دوازده و پنجاه و نه صدم") self.assertEqual(num2words(0.000001, lang='fa'), "یک میلیونیم") def test_overflow(self): From 4e6a5732482d6d17536e2d4d6c91e3f8d867c928 Mon Sep 17 00:00:00 2001 From: Katsuya Iida Date: Fri, 20 Aug 2021 17:29:01 +0900 Subject: [PATCH 49/76] =?UTF-8?q?Support=20Japanese=20Reiwa=20(=E4=BB=A4?= =?UTF-8?q?=E5=92=8C/=E3=82=8C=E3=81=84=E3=82=8F)=20era.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- num2words/lang_JA.py | 1 + tests/test_ja.py | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/num2words/lang_JA.py b/num2words/lang_JA.py index 58a2946..1e0e622 100644 --- a/num2words/lang_JA.py +++ b/num2words/lang_JA.py @@ -335,6 +335,7 @@ ERA_START = [ (1912, ("大正", "たいしょう")), (1926, ("昭和", "しょうわ")), (1989, ("平成", "へいせい")), + (2019, ("令和", "れいわ")), ] diff --git a/tests/test_ja.py b/tests/test_ja.py index eaac20b..42da144 100644 --- a/tests/test_ja.py +++ b/tests/test_ja.py @@ -163,6 +163,21 @@ class Num2WordsJATest(TestCase): "はちじゅうきゅうえん") def test_year(self): + self.assertEqual(n2j(2021, to="year"), "令和三年") + self.assertEqual(n2j(2021, to="year", reading=True), + "れいわさんねん") + self.assertEqual(n2j(2021, to="year", reading="arabic"), + "令和3年") + self.assertEqual(n2j(2019, to="year"), "令和元年") + self.assertEqual(n2j(2019, to="year", reading=True), + "れいわがんねん") + self.assertEqual(n2j(2019, to="year", reading="arabic"), + "令和1年") + self.assertEqual(n2j(2018, to="year"), "平成三十年") + self.assertEqual(n2j(2018, to="year", reading=True), + "へいせいさんじゅうねん") + self.assertEqual(n2j(2018, to="year", reading="arabic"), + "平成30年") self.assertEqual(n2j(2017, to="year"), "平成二十九年") self.assertEqual(n2j(2017, to="year", reading=True), "へいせいにじゅうくねん") @@ -176,8 +191,6 @@ class Num2WordsJATest(TestCase): "にせんねん") self.assertEqual(n2j(645, to="year"), "大化元年") self.assertEqual(n2j(645, to="year", reading=True), "たいかがんねん") - self.assertEqual(n2j(645, to="year"), "大化元年") - self.assertEqual(n2j(645, to="year", reading=True), "たいかがんねん") self.assertEqual(n2j(-99, to="year", era=False), "紀元前九十九年") self.assertEqual(n2j(-99, to="year", era=False, reading=True), "きげんぜんきゅうじゅうくねん") From 5d1e3c7d1aaad9e8df0796a547fe0c7ea2fe2c23 Mon Sep 17 00:00:00 2001 From: Marlon Rodriguez Garcia <47992153+mrodriguezg1991@users.noreply.github.com> Date: Thu, 4 Aug 2022 16:17:58 -0400 Subject: [PATCH 50/76] Update __init__.py remove space --- num2words/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/__init__.py b/num2words/__init__.py index 1909054..ee54e5c 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -24,7 +24,7 @@ from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, lang_TR, lang_UK, lang_VI) - + CONVERTER_CLASSES = { 'ar': lang_AR.Num2Word_AR(), 'cz': lang_CZ.Num2Word_CZ(), From 16229a31a485e415b8e5c58a3951b7a089dbb1f2 Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Sun, 7 Aug 2022 22:19:49 +0300 Subject: [PATCH 51/76] Add Amharic language --- num2words/lang_AM.py | 107 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 num2words/lang_AM.py diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py new file mode 100644 index 0000000..5d1e7bb --- /dev/null +++ b/num2words/lang_AM.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import division, print_function, unicode_literals + +from . import lang_EU + + +class Num2Word_AM(lang_EU.Num2Word_EU): + def set_high_numwords(self, high): + max = 3 + 3 * len(high) + for word, n in zip(high, range(max, 3, -3)): + self.cards[10 ** n] = word + "ሊዮን" + + def setup(self): + super(Num2Word_AM, self).setup() + + self.negword = "አሉታዊ " + self.pointword = "ነጥብ" + self.exclude_title = ["እና", "ነጥብ", "አሉታዊ"] + + self.mid_numwords = [(1000, "ሺህ"), (100, "መቶ"), (90, "ዘጠና"), + (80, "ሰማኒያ"), (70, "ሰባ"), (60, "ስድሳ"), + (50, "አምሳ"), (40, "አርባ"), (30, "ሠላሳ")] + self.low_numwords = ["ሃያ", "አሥራ ዘጠኝ", "አሥራ ስምንት", "አሥራ ሰባት", + "አስራ ስድስት", "አሥራ አምስት", "አሥራ አራት", "አሥራ ሦስት", + "አሥራ ሁለት", "አሥራ አንድ", "አሥር", "ዘጠኝ", "ስምንት", + "ሰባት", "ስድስት", "አምስት", "አራት", "ሦስት", "ሁለት", + "አንድ", "ዜሮ"] + self.ords = {"አንድ": "አንደኛ", + "ሁለት": "ሁለተኛ", + "ሦስት": "ሦስተኛ", + "አራት": "አራተኛ", + "አምስት": "አምስተኛ", + "ስድስት": "ስድስተኛ", + "ሰባት": "ሰባተኛ", + "ስምንት": "ስምንተኛ", + "ዘጠኝ": "ዘጠነኛ", + "አሥር": "አሥረኛ", + "አሥራ አንድ": "አሥራ አንድ", + "አሥራ ሁለት": "አሥራ ሁለተኛ", + "አሥራ ሦስት": "አሥራ ሦስተኛ", + "አሥራ አራት": "አሥራ አራተኛ", + "አሥራ አምስት": "አሥራ አምስተኛ", + "አሥራ ስድስት": "አሥራ ስድስተኛ", + "አሥራ ሰባት": "አሥራ ሰባተኛ", + "አሥራ ስምንት": "አሥራ ስምንተኛ", + "አሥራ ዘጠኝ": "አሥራ ዘጠነኛ"} + + def merge(self, lpair, rpair): + ltext, lnum = lpair + rtext, rnum = rpair + if lnum == 1 and rnum < 100: + return (rtext, rnum) + elif 100 > lnum > rnum: + return ("%s-%s" % (ltext, rtext), lnum + rnum) + elif lnum >= 100 > rnum: + return ("%s እና %s" % (ltext, rtext), lnum + rnum) + elif rnum > lnum: + return ("%s %s" % (ltext, rtext), lnum * rnum) + return ("%s, %s" % (ltext, rtext), lnum + rnum) + + def to_ordinal(self, value): + self.verify_ordinal(value) + outwords = self.to_cardinal(value).split(" ") + lastwords = outwords[-1].split("-") + lastword = lastwords[-1].lower() + try: + lastword = self.ords[lastword] + except KeyError: + if lastword[-1] == "y": + lastword = lastword[:-1] + "ie" + lastword += "th" + lastwords[-1] = self.title(lastword) + outwords[-1] = "-".join(lastwords) + return " ".join(outwords) + + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)[-2:]) + + def to_currency(self, val, currency='ብር', cents=True, separator='.', + adjective=False): + result = super(Num2Word_AM, self).to_currency( + val, currency=currency, cents=cents, separator=separator, + adjective=adjective) + return result + + def to_year(self, val, longval=True): + if not (val // 100) % 10: + return self.to_cardinal(val) + return self.to_splitnum(val, hightxt="መቶ", longval=longval) \ + .replace(' ', '') From 4355e11637359439609528f6c2f201375857b037 Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Sun, 7 Aug 2022 22:30:30 +0300 Subject: [PATCH 52/76] Update init for Amharic language --- num2words/__init__.py | 15 ++++++++------- tests/test_am.py | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 tests/test_am.py diff --git a/num2words/__init__.py b/num2words/__init__.py index ee54e5c..baba5bd 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -18,15 +18,16 @@ from __future__ import unicode_literals from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, - lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, lang_FA, lang_FI, lang_FR, - lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, lang_ID, - lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, - lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, - lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, lang_TR, - lang_UK, lang_VI) - + lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, lang_FA, lang_FI, + lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, + lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, + lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, + lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, + lang_TR, lang_UK, lang_VI, lang_AM) + CONVERTER_CLASSES = { 'ar': lang_AR.Num2Word_AR(), + 'am': lang_AM.Num2Word_AM(), 'cz': lang_CZ.Num2Word_CZ(), 'en': lang_EN.Num2Word_EN(), 'en_IN': lang_EN_IN.Num2Word_EN_IN(), diff --git a/tests/test_am.py b/tests/test_am.py new file mode 100644 index 0000000..1a8436c --- /dev/null +++ b/tests/test_am.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from unittest import TestCase + +from num2words import num2words + + +class Num2WordsAMTest(TestCase): From 736db5149e25c3b575c45113c69a7d4dfd3a031a Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Sun, 7 Aug 2022 22:34:49 +0300 Subject: [PATCH 53/76] Update Amharic language --- num2words/lang_AM.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py index 5d1e7bb..6e4f2f9 100644 --- a/num2words/lang_AM.py +++ b/num2words/lang_AM.py @@ -67,9 +67,9 @@ class Num2Word_AM(lang_EU.Num2Word_EU): if lnum == 1 and rnum < 100: return (rtext, rnum) elif 100 > lnum > rnum: - return ("%s-%s" % (ltext, rtext), lnum + rnum) + return ("%s %s" % (ltext, rtext), lnum + rnum) elif lnum >= 100 > rnum: - return ("%s እና %s" % (ltext, rtext), lnum + rnum) + return ("%s %s" % (ltext, rtext), lnum + rnum) elif rnum > lnum: return ("%s %s" % (ltext, rtext), lnum * rnum) return ("%s, %s" % (ltext, rtext), lnum + rnum) @@ -86,7 +86,7 @@ class Num2Word_AM(lang_EU.Num2Word_EU): lastword = lastword[:-1] + "ie" lastword += "th" lastwords[-1] = self.title(lastword) - outwords[-1] = "-".join(lastwords) + outwords[-1] = " ".join(lastwords) return " ".join(outwords) def to_ordinal_num(self, value): From 770cd6d1d53abbb3c497a8db1e07c9a4e395e6e9 Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Sun, 7 Aug 2022 23:02:25 +0300 Subject: [PATCH 54/76] Add Amharic currency form --- num2words/lang_AM.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py index 6e4f2f9..024e3e1 100644 --- a/num2words/lang_AM.py +++ b/num2words/lang_AM.py @@ -21,6 +21,8 @@ from . import lang_EU class Num2Word_AM(lang_EU.Num2Word_EU): + CURRENCY_FORMS = {'ETB': (('ብር', 'ብር'), ('ሳንቲም', 'ሳንቲም'))} + def set_high_numwords(self, high): max = 3 + 3 * len(high) for word, n in zip(high, range(max, 3, -3)): @@ -93,8 +95,8 @@ class Num2Word_AM(lang_EU.Num2Word_EU): self.verify_ordinal(value) return "%s%s" % (value, self.to_ordinal(value)[-2:]) - def to_currency(self, val, currency='ብር', cents=True, separator='.', - adjective=False): + def to_currency(self, val, currency='ብር', cents=True, separator=' ከ', + adjective=True): result = super(Num2Word_AM, self).to_currency( val, currency=currency, cents=cents, separator=separator, adjective=adjective) From a5a812d4210147a9255a935a2188469b6afa18c7 Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Sun, 7 Aug 2022 23:06:48 +0300 Subject: [PATCH 55/76] Add test cases --- num2words/lang_AM.py | 3 +-- tests/test_am.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py index 024e3e1..4072559 100644 --- a/num2words/lang_AM.py +++ b/num2words/lang_AM.py @@ -105,5 +105,4 @@ class Num2Word_AM(lang_EU.Num2Word_EU): def to_year(self, val, longval=True): if not (val // 100) % 10: return self.to_cardinal(val) - return self.to_splitnum(val, hightxt="መቶ", longval=longval) \ - .replace(' ', '') + return self.to_splitnum(val, hightxt="መቶ", longval=longval) diff --git a/tests/test_am.py b/tests/test_am.py index 1a8436c..6c47955 100644 --- a/tests/test_am.py +++ b/tests/test_am.py @@ -21,3 +21,46 @@ from num2words import num2words class Num2WordsAMTest(TestCase): + def test_and_join_199(self): + self.assertEqual(num2words(199, lang='am'), "አንድ መቶ ዘጠና ዘጠኝ") + + def test_ordinal(self): + self.assertEqual( + num2words(1, lang='am', to='ordinal'), + 'አንደኛ' + ) + self.assertEqual( + num2words(13, lang='am', to='ordinal'), + 'አሥራ ሦስተኛ' + ) + self.assertEqual( + num2words(22, lang='am', to='ordinal'), + 'ሃያ ሁለተኛ' + ) + + def test_to_currency(self): + self.assertEqual( + num2words('38.4', lang='am', to='currency', cents=False, currency='ETB'), + "ሠላሳ ስምንት ብር ከ 40 ሳንቲም" + ) + self.assertEqual( + num2words('0', lang='am', to='currency', separator=' እና', cents=True, currency='ETB'), + "ዜሮ ብር እና ዜሮ ሳንቲም" + ) + + self.assertEqual( + num2words('1.50', lang='am', to='currency', cents=True, currency='ETB'), + "አንድ ብር ከ አምሳ ሳንቲም" + ) + + def test_to_year(self): + self.assertEqual(num2words(1990, lang='am', to='year'), + 'አሥራ ዘጠኝ መቶ ዘጠና') + self.assertEqual(num2words(5555, lang='am', to='year'), + 'አምሳ አምስት መቶ አምሳ አምስት') + self.assertEqual(num2words(2017, lang='am', to='year'), + 'ሁለት ሺህ አሥራ ሰባት') + self.assertEqual(num2words(1066, lang='am', to='year'), + 'አንድ ሺህ ስድሳ ስድስት') + self.assertEqual(num2words(1865, lang='am', to='year'), + 'አሥራ ስምንት መቶ ስድሳ አምስት') From 5948065b368fa4c21f6f25a9cde5c46d61e7f17a Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Tue, 9 Aug 2022 11:14:40 +0300 Subject: [PATCH 56/76] Fix flake 8 requirements in python3.1 and increase test coverage. --- num2words/__init__.py | 16 ++++++++-------- num2words/lang_AM.py | 2 +- tests/test_am.py | 31 +++++++++++++++++++++++++------ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/num2words/__init__.py b/num2words/__init__.py index baba5bd..dc42220 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -17,17 +17,17 @@ from __future__ import unicode_literals -from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, - lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, lang_FA, lang_FI, - lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, - lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, - lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, - lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, lang_TH, - lang_TR, lang_UK, lang_VI, lang_AM) +from . import (lang_AM, lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, + lang_EN_IN, lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, + lang_FA, lang_FI, lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, + lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, + lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, + lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, + lang_TH, lang_TR, lang_UK, lang_VI) CONVERTER_CLASSES = { - 'ar': lang_AR.Num2Word_AR(), 'am': lang_AM.Num2Word_AM(), + 'ar': lang_AR.Num2Word_AR(), 'cz': lang_CZ.Num2Word_CZ(), 'en': lang_EN.Num2Word_EN(), 'en_IN': lang_EN_IN.Num2Word_EN_IN(), diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py index 4072559..4e40bda 100644 --- a/num2words/lang_AM.py +++ b/num2words/lang_AM.py @@ -93,7 +93,7 @@ class Num2Word_AM(lang_EU.Num2Word_EU): def to_ordinal_num(self, value): self.verify_ordinal(value) - return "%s%s" % (value, self.to_ordinal(value)[-2:]) + return "%s%s" % (value, self.to_ordinal(value)[-1:]) def to_currency(self, val, currency='ብር', cents=True, separator=' ከ', adjective=True): diff --git a/tests/test_am.py b/tests/test_am.py index 6c47955..a3dc95d 100644 --- a/tests/test_am.py +++ b/tests/test_am.py @@ -38,19 +38,38 @@ class Num2WordsAMTest(TestCase): 'ሃያ ሁለተኛ' ) + def test_ordinal_num(self): + self.assertEqual(num2words(10, lang='am', to='ordinal_num'), '10ኛ') + self.assertEqual(num2words(21, lang='am', to='ordinal_num'), '21ኛ') + self.assertEqual(num2words(102, lang='am', to='ordinal_num'), '102ኛ') + + def test_cardinal_for_float_number(self): + self.assertEqual(num2words(12.5, lang='am'), "አሥራ ሁለት ነጥብ አምስት") + self.assertEqual(num2words(12.51, lang='am'), "አሥራ ሁለት ነጥብ አምስት አንድ") + self.assertEqual(num2words(12.53, lang='am'), "አሥራ ሁለት ነጥብ አምስት ሦስት") + + def test_overflow(self): + with self.assertRaises(OverflowError): + num2words("1000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000", lang='am') + def test_to_currency(self): self.assertEqual( - num2words('38.4', lang='am', to='currency', cents=False, currency='ETB'), - "ሠላሳ ስምንት ብር ከ 40 ሳንቲም" + num2words('38.4', lang='am', to='currency', cents=False, + currency='ETB'), "ሠላሳ ስምንት ብር ከ 40 ሳንቲም" ) self.assertEqual( - num2words('0', lang='am', to='currency', separator=' እና', cents=True, currency='ETB'), - "ዜሮ ብር እና ዜሮ ሳንቲም" + num2words('0', lang='am', to='currency', separator=' እና', + cents=True, currency='ETB'), "ዜሮ ብር እና ዜሮ ሳንቲም" ) self.assertEqual( - num2words('1.50', lang='am', to='currency', cents=True, currency='ETB'), - "አንድ ብር ከ አምሳ ሳንቲም" + num2words('1.50', lang='am', to='currency', cents=True, + currency='ETB'), "አንድ ብር ከ አምሳ ሳንቲም" ) def test_to_year(self): From 83203ed98e512765b75ca604a3480a82d513d99f Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Tue, 9 Aug 2022 17:00:56 +0300 Subject: [PATCH 57/76] Fix line too long __init__.py --- num2words/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/num2words/__init__.py b/num2words/__init__.py index dc42220..86f1b63 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -22,8 +22,8 @@ from . import (lang_AM, lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_FA, lang_FI, lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, - lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, lang_TE, - lang_TH, lang_TR, lang_UK, lang_VI) + lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, + lang_TE, lang_TH, lang_TR, lang_UK, lang_VI) CONVERTER_CLASSES = { 'am': lang_AM.Num2Word_AM(), From 8ed54f332d9a2044642b1947ab554cdb52c2f768 Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Tue, 9 Aug 2022 21:13:53 +0300 Subject: [PATCH 58/76] Update Amharic language support --- README.rst | 3 +- num2words/lang_AM.py | 120 ++++++++++++++++++++++++++----------------- tests/test_am.py | 39 ++++++++------ 3 files changed, 98 insertions(+), 64 deletions(-) diff --git a/README.rst b/README.rst index 0414531..7b9b487 100644 --- a/README.rst +++ b/README.rst @@ -76,6 +76,7 @@ Besides the numerical argument, there are two main optional arguments. **lang:** The language in which to convert the number. Supported values are: * ``en`` (English, default) +* ``am`` (Amharic) * ``ar`` (Arabic) * ``cz`` (Czech) * ``de`` (German) @@ -149,4 +150,4 @@ added Lithuanian support, but didn't take over maintenance of the project. I am thus basing myself on Marius Grigaitis' improvements and re-publishing ``pynum2word`` as ``num2words``. -Virgil Dupras, Savoir-faire Linux +Virgil Dupras, Savoir-faire Linux \ No newline at end of file diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py index 4e40bda..3efd9c2 100644 --- a/num2words/lang_AM.py +++ b/num2words/lang_AM.py @@ -23,45 +23,73 @@ from . import lang_EU class Num2Word_AM(lang_EU.Num2Word_EU): CURRENCY_FORMS = {'ETB': (('ብር', 'ብር'), ('ሳንቲም', 'ሳንቲም'))} + GIGA_SUFFIX = 'ቢሊዮን' + MEGA_SUFFIX = 'ሚሊዮን' + def set_high_numwords(self, high): - max = 3 + 3 * len(high) - for word, n in zip(high, range(max, 3, -3)): - self.cards[10 ** n] = word + "ሊዮን" + cap = 3 * (len(high) + 1) + + for word, n in zip(high, range(cap, 5, -3)): + if n == 9: + self.cards[10 ** n] = word + self.GIGA_SUFFIX + else: + self.cards[10 ** n] = word + self.MEGA_SUFFIX def setup(self): super(Num2Word_AM, self).setup() - self.negword = "አሉታዊ " - self.pointword = "ነጥብ" - self.exclude_title = ["እና", "ነጥብ", "አሉታዊ"] + self.negword = 'አሉታዊ ' + self.pointword = 'ነጥብ' + self.exclude_title = ['እና', 'ነጥብ', 'አሉታዊ'] - self.mid_numwords = [(1000, "ሺህ"), (100, "መቶ"), (90, "ዘጠና"), - (80, "ሰማኒያ"), (70, "ሰባ"), (60, "ስድሳ"), - (50, "አምሳ"), (40, "አርባ"), (30, "ሠላሳ")] - self.low_numwords = ["ሃያ", "አሥራ ዘጠኝ", "አሥራ ስምንት", "አሥራ ሰባት", - "አስራ ስድስት", "አሥራ አምስት", "አሥራ አራት", "አሥራ ሦስት", - "አሥራ ሁለት", "አሥራ አንድ", "አሥር", "ዘጠኝ", "ስምንት", - "ሰባት", "ስድስት", "አምስት", "አራት", "ሦስት", "ሁለት", - "አንድ", "ዜሮ"] - self.ords = {"አንድ": "አንደኛ", - "ሁለት": "ሁለተኛ", - "ሦስት": "ሦስተኛ", - "አራት": "አራተኛ", - "አምስት": "አምስተኛ", - "ስድስት": "ስድስተኛ", - "ሰባት": "ሰባተኛ", - "ስምንት": "ስምንተኛ", - "ዘጠኝ": "ዘጠነኛ", - "አሥር": "አሥረኛ", - "አሥራ አንድ": "አሥራ አንድ", - "አሥራ ሁለት": "አሥራ ሁለተኛ", - "አሥራ ሦስት": "አሥራ ሦስተኛ", - "አሥራ አራት": "አሥራ አራተኛ", - "አሥራ አምስት": "አሥራ አምስተኛ", - "አሥራ ስድስት": "አሥራ ስድስተኛ", - "አሥራ ሰባት": "አሥራ ሰባተኛ", - "አሥራ ስምንት": "አሥራ ስምንተኛ", - "አሥራ ዘጠኝ": "አሥራ ዘጠነኛ"} + self.mid_numwords = [(1000, 'ሺህ'), (100, 'መቶ'), (90, 'ዘጠና'), + (80, 'ሰማኒያ'), (70, 'ሰባ'), (60, 'ስድሳ'), + (50, 'አምሳ'), (40, 'አርባ'), (30, 'ሠላሳ')] + self.low_numwords = ['ሃያ', 'አሥራ ዘጠኝ', 'አሥራ ስምንት', 'አሥራ ሰባት', + 'አስራ ስድስት', 'አሥራ አምስት', 'አሥራ አራት', 'አሥራ ሦስት', + 'አሥራ ሁለት', 'አሥራ አንድ', 'አሥር', 'ዘጠኝ', 'ስምንት', + 'ሰባት', 'ስድስት', 'አምስት', 'አራት', 'ሦስት', 'ሁለት', + 'አንድ', 'ዜሮ'] + self.ords = {'አንድ': 'አንደኛ', + 'ሁለት': 'ሁለተኛ', + 'ሦስት': 'ሦስተኛ', + 'አራት': 'አራተኛ', + 'አምስት': 'አምስተኛ', + 'ስድስት': 'ስድስተኛ', + 'ሰባት': 'ሰባተኛ', + 'ስምንት': 'ስምንተኛ', + 'ዘጠኝ': 'ዘጠነኛ', + 'አሥር': 'አሥረኛ', + 'አሥራ አንድ': 'አሥራ አንድ', + 'አሥራ ሁለት': 'አሥራ ሁለተኛ', + 'አሥራ ሦስት': 'አሥራ ሦስተኛ', + 'አሥራ አራት': 'አሥራ አራተኛ', + 'አሥራ አምስት': 'አሥራ አምስተኛ', + 'አሥራ ስድስት': 'አሥራ ስድስተኛ', + 'አሥራ ሰባት': 'አሥራ ሰባተኛ', + 'አሥራ ስምንት': 'አሥራ ስምንተኛ', + 'አሥራ ዘጠኝ': 'አሥራ ዘጠነኛ'} + + def to_cardinal(self, value): + try: + assert int(value) == value + except (ValueError, TypeError, AssertionError): + return self.to_cardinal_float(value) + + out = '' + if value < 0: + value = abs(value) + out = self.negword + + if value >= self.MAXVAL: + raise OverflowError(self.errmsg_toobig % (value, self.MAXVAL)) + + if value == 100: + return self.title(out + 'መቶ') + else: + val = self.splitnum(value) + words, num = self.clean(val) + return self.title(out + words) def merge(self, lpair, rpair): ltext, lnum = lpair @@ -69,31 +97,31 @@ class Num2Word_AM(lang_EU.Num2Word_EU): if lnum == 1 and rnum < 100: return (rtext, rnum) elif 100 > lnum > rnum: - return ("%s %s" % (ltext, rtext), lnum + rnum) + return ('%s %s' % (ltext, rtext), lnum + rnum) elif lnum >= 100 > rnum: - return ("%s %s" % (ltext, rtext), lnum + rnum) + return ('%s %s' % (ltext, rtext), lnum + rnum) elif rnum > lnum: - return ("%s %s" % (ltext, rtext), lnum * rnum) - return ("%s, %s" % (ltext, rtext), lnum + rnum) + return ('%s %s' % (ltext, rtext), lnum * rnum) + return ('%s, %s' % (ltext, rtext), lnum + rnum) def to_ordinal(self, value): self.verify_ordinal(value) - outwords = self.to_cardinal(value).split(" ") - lastwords = outwords[-1].split("-") + outwords = self.to_cardinal(value).split(' ') + lastwords = outwords[-1].split('-') lastword = lastwords[-1].lower() try: lastword = self.ords[lastword] except KeyError: - if lastword[-1] == "y": - lastword = lastword[:-1] + "ie" - lastword += "th" + if lastword[-1] == 'y': + lastword = lastword[:-1] + 'ie' + lastword += 'th' lastwords[-1] = self.title(lastword) - outwords[-1] = " ".join(lastwords) - return " ".join(outwords) + outwords[-1] = ' '.join(lastwords) + return ' '.join(outwords) def to_ordinal_num(self, value): self.verify_ordinal(value) - return "%s%s" % (value, self.to_ordinal(value)[-1:]) + return '%s%s' % (value, self.to_ordinal(value)[-1:]) def to_currency(self, val, currency='ብር', cents=True, separator=' ከ', adjective=True): @@ -105,4 +133,4 @@ class Num2Word_AM(lang_EU.Num2Word_EU): def to_year(self, val, longval=True): if not (val // 100) % 10: return self.to_cardinal(val) - return self.to_splitnum(val, hightxt="መቶ", longval=longval) + return self.to_splitnum(val, hightxt='መቶ', longval=longval) diff --git a/tests/test_am.py b/tests/test_am.py index a3dc95d..460ca6e 100644 --- a/tests/test_am.py +++ b/tests/test_am.py @@ -21,10 +21,15 @@ from num2words import num2words class Num2WordsAMTest(TestCase): - def test_and_join_199(self): - self.assertEqual(num2words(199, lang='am'), "አንድ መቶ ዘጠና ዘጠኝ") + def test_cardinal(self): + self.assertEqual(num2words(100, lang='am'), 'መቶ') + self.assertEqual(num2words(100000, lang='am'), 'አንድ መቶ ሺህ') + self.assertEqual(num2words(101, lang='am'), 'አንድ መቶ አንድ') - def test_ordinal(self): + def test_and_join_199(self): + self.assertEqual(num2words(199, lang='am'), 'አንድ መቶ ዘጠና ዘጠኝ') + + def test_to_ordinal(self): self.assertEqual( num2words(1, lang='am', to='ordinal'), 'አንደኛ' @@ -38,38 +43,38 @@ class Num2WordsAMTest(TestCase): 'ሃያ ሁለተኛ' ) - def test_ordinal_num(self): + def test_to_ordinal_num(self): self.assertEqual(num2words(10, lang='am', to='ordinal_num'), '10ኛ') self.assertEqual(num2words(21, lang='am', to='ordinal_num'), '21ኛ') self.assertEqual(num2words(102, lang='am', to='ordinal_num'), '102ኛ') def test_cardinal_for_float_number(self): - self.assertEqual(num2words(12.5, lang='am'), "አሥራ ሁለት ነጥብ አምስት") - self.assertEqual(num2words(12.51, lang='am'), "አሥራ ሁለት ነጥብ አምስት አንድ") - self.assertEqual(num2words(12.53, lang='am'), "አሥራ ሁለት ነጥብ አምስት ሦስት") + self.assertEqual(num2words(12.5, lang='am'), 'አሥራ ሁለት ነጥብ አምስት') + self.assertEqual(num2words(12.51, lang='am'), 'አሥራ ሁለት ነጥብ አምስት አንድ') + self.assertEqual(num2words(12.53, lang='am'), 'አሥራ ሁለት ነጥብ አምስት ሦስት') - def test_overflow(self): + def test_to_overflow(self): with self.assertRaises(OverflowError): - num2words("1000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000000" - "00000000000000000000000000000000", lang='am') + num2words('1000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000000000000000000000' + '00000000000000000000000000000000', lang='am') def test_to_currency(self): self.assertEqual( num2words('38.4', lang='am', to='currency', cents=False, - currency='ETB'), "ሠላሳ ስምንት ብር ከ 40 ሳንቲም" + currency='ETB'), 'ሠላሳ ስምንት ብር ከ 40 ሳንቲም' ) self.assertEqual( num2words('0', lang='am', to='currency', separator=' እና', - cents=True, currency='ETB'), "ዜሮ ብር እና ዜሮ ሳንቲም" + cents=True, currency='ETB'), 'ዜሮ ብር እና ዜሮ ሳንቲም' ) self.assertEqual( num2words('1.50', lang='am', to='currency', cents=True, - currency='ETB'), "አንድ ብር ከ አምሳ ሳንቲም" + currency='ETB'), 'አንድ ብር ከ አምሳ ሳንቲም' ) def test_to_year(self): From 5bfcebd9fb32bb2c6b946e4270624aa4045bfe11 Mon Sep 17 00:00:00 2001 From: Drew Echerd Date: Fri, 2 Jul 2021 17:00:13 +0500 Subject: [PATCH 59/76] Added Tajik language support --- README.rst | 1 + num2words/__init__.py | 1 + num2words/lang_TG.py | 149 ++++++++++++++++++++++++++++++++++++++++++ tests/test_tg.py | 104 +++++++++++++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 num2words/lang_TG.py create mode 100644 tests/test_tg.py diff --git a/README.rst b/README.rst index 7b9b487..2a8f99f 100644 --- a/README.rst +++ b/README.rst @@ -113,6 +113,7 @@ Besides the numerical argument, there are two main optional arguments. * ``ro`` (Romanian) * ``ru`` (Russian) * ``te`` (Telugu) +* ``tg`` (Tajik) * ``tr`` (Turkish) * ``th`` (Thai) * ``vi`` (Vietnamese) diff --git a/num2words/__init__.py b/num2words/__init__.py index 86f1b63..1bc7094 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -62,6 +62,7 @@ CONVERTER_CLASSES = { 'he': lang_HE.Num2Word_HE(), 'it': lang_IT.Num2Word_IT(), 'vi': lang_VI.Num2Word_VI(), + 'tg': lang_TG.Num2Word_TG(), 'th': lang_TH.Num2Word_TH(), 'tr': lang_TR.Num2Word_TR(), 'nl': lang_NL.Num2Word_NL(), diff --git a/num2words/lang_TG.py b/num2words/lang_TG.py new file mode 100644 index 0000000..cc0bf49 --- /dev/null +++ b/num2words/lang_TG.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import division, print_function, unicode_literals + +from . import lang_EU + +GENERIC_DOLLARS = ("доллар", "доллар") +GENERIC_CENTS = ("сент", "сент") + + +class Num2Word_TG(lang_EU.Num2Word_EU): + CURRENCY_FORMS = { + # repalced by EUR + "EUR": (("евро", "евро"), GENERIC_CENTS), + # replaced by EUR + "USD": (GENERIC_DOLLARS, GENERIC_CENTS), + "RUB": (("рубл", "рубл"), ("копейк", "копейк")), + "TJS": (("сомонӣ", "сомонӣ"), ("дирам", "дирам")), + } + + GIGA_SUFFIX = "иллиард" + MEGA_SUFFIX = "иллион" + + def set_high_numwords(self, high): + cap = 3 * (len(high) + 1) + + for word, n in zip(high, range(cap, 5, -3)): + if n == 9: + self.cards[10 ** n] = word + self.GIGA_SUFFIX + + elif self.MEGA_SUFFIX: + self.cards[10 ** n] = word + self.MEGA_SUFFIX + + def setup(self): + super(Num2Word_TG, self).setup() + + lows = ["квинт", "квадр", "тр", "м", "м"] + self.high_numwords = self.gen_high_numwords([], [], lows) + self.negword = "минус " + self.pointword = "нуқта" + self.exclude_title = ["ва", "минус", "нуқта"] + + self.mid_numwords = [ + (1000, "ҳазор"), + (100, "сад"), + (90, "навад"), + (80, "ҳаштод"), + (70, "ҳафтод"), + (60, "шаст"), + (50, "панҷоҳ"), + (40, "чил"), + (30, "си"), + ] + self.low_numwords = [ + "бист", + "нуздаҳ", + "ҳаждаҳ", + "ҳабдаҳ", + "шонздаҳ", + "понздаҳ", + "чордаҳ", + "сенздаҳ", + "дувоздаҳ", + "ёздаҳ", + "даҳ", + "нӯҳ", + "ҳашт", + "ҳафт", + "шаш", + "панҷ", + "чор", + "се", + "ду", + "як", + "сифр", + ] + + def to_cardinal(self, value): + try: + assert int(value) == value + except (ValueError, TypeError, AssertionError): + return self.to_cardinal_float(value) + + out = "" + if value < 0: + value = abs(value) + out = self.negword + + if value >= self.MAXVAL: + raise OverflowError(self.errmsg_toobig % (value, self.MAXVAL)) + + if value == 100: + return self.title(out + "сад") + else: + val = self.splitnum(value) + words, num = self.clean(val) + return self.title(out + words) + + def merge(self, lpair, rpair): + ltext, lnum = lpair + rtext, rnum = rpair + if lnum == 1 and rnum < 100: + return (rtext, rnum) + elif 100 > lnum > rnum: + if ltext == "си": + return ("%sю %s" % (ltext, rtext), lnum + rnum) + elif ltext == "панҷоҳ": + return ("панҷову %s" % (rtext), lnum + rnum) + else: + return ("%sу %s" % (ltext, rtext), lnum + rnum) + elif lnum >= 100 > rnum: + return ("%sу %s" % (ltext, rtext), lnum + rnum) + elif rnum > lnum: + if ltext == "яксад" and rtext not in self.low_numwords: + return ("сад %s" % (rtext), lnum * rnum) + if rtext == "сад": + return ("%s%s" % (ltext, rtext), lnum * rnum) + else: + return ("%s %s" % (ltext, rtext), lnum * rnum) + return ("%sу %s" % (ltext, rtext), lnum + rnum) + + def to_ordinal(self, value): + self.verify_ordinal(value) + cardinal = self.to_cardinal(value) + outwords = cardinal.split(" ") + lastword = outwords[-1] + if lastword in ["ду", "се", "си"]: + return "%sюм" % (cardinal) + else: + return "%sум" % (cardinal) + + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)[-2:]) diff --git a/tests/test_tg.py b/tests/test_tg.py new file mode 100644 index 0000000..2caa9cf --- /dev/null +++ b/tests/test_tg.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2003, Taro Ogawa. All Rights Reserved. +# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import unicode_literals + +from unittest import TestCase + +from num2words import num2words + + +class Num2WordsTGTest(TestCase): + def test_cardinal(self): + self.assertEqual(num2words(100, lang="tg"), "сад") + self.assertEqual(num2words(101, lang="tg"), "яксаду як") + self.assertEqual(num2words(110, lang="tg"), "яксаду даҳ") + self.assertEqual(num2words(115, lang="tg"), "яксаду понздаҳ") + self.assertEqual(num2words(123, lang="tg"), "яксаду бисту се") + self.assertEqual(num2words(1000, lang="tg"), "як ҳазор") + self.assertEqual(num2words(1001, lang="tg"), "як ҳазору як") + self.assertEqual(num2words(2012, lang="tg"), "ду ҳазору дувоздаҳ") + self.assertEqual( + num2words(12519.85, lang="tg"), + "дувоздаҳ ҳазору панҷсаду нуздаҳ нуқта ҳашт панҷ", + ) + + self.assertEqual( + num2words(1234567890, lang="tg"), + "як миллиарду дусаду сию чор миллиону панҷсаду шасту ҳафт ҳазору " + "ҳаштсаду навад", + ) + self.assertEqual(num2words(5, lang="tg"), "панҷ") + self.assertEqual(num2words(-1, lang="tg"), "минус як") + self.assertEqual(num2words(-15, lang="tg"), "минус понздаҳ") + self.assertEqual(num2words(-100, lang="tg"), "минус сад") + + def test_to_ordinal(self): + self.assertEqual(num2words(1, lang="tg", to="ordinal"), "якум") + self.assertEqual(num2words(2, lang="tg", to="ordinal"), "дуюм") + self.assertEqual(num2words(3, lang="tg", to="ordinal"), "сеюм") + self.assertEqual(num2words(30, lang="tg", to="ordinal"), "сиюм") + + self.assertEqual(num2words(13, lang="tg", to="ordinal"), "сенздаҳум") + self.assertEqual(num2words(20, lang="tg", to="ordinal"), "бистум") + self.assertEqual(num2words(23, lang="tg", to="ordinal"), "бисту сеюм") + self.assertEqual(num2words(100, lang="tg", to="ordinal"), "садум") + self.assertEqual(num2words(136, lang="tg", to="ordinal"), + "яксаду сию шашум") + self.assertEqual(num2words(500, lang="tg", to="ordinal"), "панҷсадум") + self.assertEqual( + num2words(1000, lang="tg", to="ordinal"), "як ҳазорум" + ) + self.assertEqual( + num2words(1001, lang="tg", to="ordinal"), "як ҳазору якум" + ) + self.assertEqual( + num2words(2000, lang="tg", to="ordinal"), "ду ҳазорум" + ) + self.assertEqual( + num2words(1000000, lang="tg", to="ordinal"), "як миллионум" + ) + self.assertEqual( + num2words(1000000000, lang="tg", to="ordinal"), "як миллиардум" + ) + + def test_to_currency(self): + self.assertEqual( + num2words(1.0, lang="tg", to="currency", currency="EUR"), + "як евро, сифр сент", + ) + self.assertEqual( + num2words(1.0, lang="tg", to="currency", currency="TJS"), + "як сомонӣ, сифр дирам", + ) + self.assertEqual( + num2words(1234.56, lang="tg", to="currency", currency="TJS"), + "як ҳазору дусаду сию чор сомонӣ, панҷову шаш дирам", + ) + self.assertEqual( + num2words(1234.56, lang="tg", to="currency", currency="RUB"), + "як ҳазору дусаду сию чор рубл, панҷову шаш копейк", + ) + self.assertEqual( + num2words(12519.85, lang="tg", to="currency", currency="TJS", + cents=False), + "дувоздаҳ ҳазору панҷсаду нуздаҳ сомонӣ, 85 дирам", + ) + self.assertEqual( + num2words("1230.56", lang="tg", to="currency", currency="USD"), + "як ҳазору дусаду си доллар, панҷову шаш сент", + ) \ No newline at end of file From af97683fdc972e262e6f5b5c0e95059b2a19d156 Mon Sep 17 00:00:00 2001 From: Drew Echerd Date: Fri, 2 Jul 2021 18:51:22 +0500 Subject: [PATCH 60/76] Added test for OverflowError and ordinal_num --- tests/test_tg.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_tg.py b/tests/test_tg.py index 2caa9cf..a846d70 100644 --- a/tests/test_tg.py +++ b/tests/test_tg.py @@ -24,7 +24,10 @@ from num2words import num2words class Num2WordsTGTest(TestCase): def test_cardinal(self): + with self.assertRaises(OverflowError): + num2words(1000000000000000000000000, lang='tg') self.assertEqual(num2words(100, lang="tg"), "сад") + self.assertEqual(num2words(100000, lang="tg"), "сад ҳазор") self.assertEqual(num2words(101, lang="tg"), "яксаду як") self.assertEqual(num2words(110, lang="tg"), "яксаду даҳ") self.assertEqual(num2words(115, lang="tg"), "яксаду понздаҳ") @@ -101,4 +104,9 @@ class Num2WordsTGTest(TestCase): self.assertEqual( num2words("1230.56", lang="tg", to="currency", currency="USD"), "як ҳазору дусаду си доллар, панҷову шаш сент", + ) + + def test_to_ordinal_num(self): + self.assertEqual( + num2words("100", lang="tg", to="ordinal_num"), "100ум", ) \ No newline at end of file From beb3326bbca5fbf3a28404567c71a5151bcf996d Mon Sep 17 00:00:00 2001 From: Drew Echerd Date: Fri, 2 Jul 2021 22:29:28 +0500 Subject: [PATCH 61/76] Added MEGA_SUFFIX and GIGA_SUFFIX tests --- num2words/lang_TG.py | 3 ++- tests/test_tg.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/num2words/lang_TG.py b/num2words/lang_TG.py index cc0bf49..8a028d5 100644 --- a/num2words/lang_TG.py +++ b/num2words/lang_TG.py @@ -43,7 +43,7 @@ class Num2Word_TG(lang_EU.Num2Word_EU): if n == 9: self.cards[10 ** n] = word + self.GIGA_SUFFIX - elif self.MEGA_SUFFIX: + else: self.cards[10 ** n] = word + self.MEGA_SUFFIX def setup(self): @@ -147,3 +147,4 @@ class Num2Word_TG(lang_EU.Num2Word_EU): def to_ordinal_num(self, value): self.verify_ordinal(value) return "%s%s" % (value, self.to_ordinal(value)[-2:]) + diff --git a/tests/test_tg.py b/tests/test_tg.py index a846d70..482913b 100644 --- a/tests/test_tg.py +++ b/tests/test_tg.py @@ -45,6 +45,9 @@ class Num2WordsTGTest(TestCase): "як миллиарду дусаду сию чор миллиону панҷсаду шасту ҳафт ҳазору " "ҳаштсаду навад", ) + self.assertEqual(num2words(1000000, lang="tg"), "як миллион") + self.assertEqual(num2words(1000000000, lang="tg"), "як миллиард") + self.assertEqual(num2words(1000000000000, lang="tg"), "як триллион") self.assertEqual(num2words(5, lang="tg"), "панҷ") self.assertEqual(num2words(-1, lang="tg"), "минус як") self.assertEqual(num2words(-15, lang="tg"), "минус понздаҳ") From 7bf80d5dd73cf6f2b228cc5cd2258cd0bc02d235 Mon Sep 17 00:00:00 2001 From: Drew Echerd Date: Tue, 9 Aug 2022 09:57:58 -0400 Subject: [PATCH 62/76] Fixed flake8 errors --- num2words/lang_TG.py | 1 - tests/test_tg.py | 19 +++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/num2words/lang_TG.py b/num2words/lang_TG.py index 8a028d5..48291a2 100644 --- a/num2words/lang_TG.py +++ b/num2words/lang_TG.py @@ -147,4 +147,3 @@ class Num2Word_TG(lang_EU.Num2Word_EU): def to_ordinal_num(self, value): self.verify_ordinal(value) return "%s%s" % (value, self.to_ordinal(value)[-2:]) - diff --git a/tests/test_tg.py b/tests/test_tg.py index 482913b..53a49e4 100644 --- a/tests/test_tg.py +++ b/tests/test_tg.py @@ -25,7 +25,7 @@ from num2words import num2words class Num2WordsTGTest(TestCase): def test_cardinal(self): with self.assertRaises(OverflowError): - num2words(1000000000000000000000000, lang='tg') + num2words(1000000000000000000000000, lang="tg") self.assertEqual(num2words(100, lang="tg"), "сад") self.assertEqual(num2words(100000, lang="tg"), "сад ҳазор") self.assertEqual(num2words(101, lang="tg"), "яксаду як") @@ -63,8 +63,9 @@ class Num2WordsTGTest(TestCase): self.assertEqual(num2words(20, lang="tg", to="ordinal"), "бистум") self.assertEqual(num2words(23, lang="tg", to="ordinal"), "бисту сеюм") self.assertEqual(num2words(100, lang="tg", to="ordinal"), "садум") - self.assertEqual(num2words(136, lang="tg", to="ordinal"), - "яксаду сию шашум") + self.assertEqual( + num2words(136, lang="tg", to="ordinal"), "яксаду сию шашум" + ) self.assertEqual(num2words(500, lang="tg", to="ordinal"), "панҷсадум") self.assertEqual( num2words(1000, lang="tg", to="ordinal"), "як ҳазорум" @@ -100,16 +101,18 @@ class Num2WordsTGTest(TestCase): "як ҳазору дусаду сию чор рубл, панҷову шаш копейк", ) self.assertEqual( - num2words(12519.85, lang="tg", to="currency", currency="TJS", - cents=False), + num2words( + 12519.85, lang="tg", to="currency", currency="TJS", cents=False + ), "дувоздаҳ ҳазору панҷсаду нуздаҳ сомонӣ, 85 дирам", ) self.assertEqual( num2words("1230.56", lang="tg", to="currency", currency="USD"), "як ҳазору дусаду си доллар, панҷову шаш сент", ) - + def test_to_ordinal_num(self): self.assertEqual( - num2words("100", lang="tg", to="ordinal_num"), "100ум", - ) \ No newline at end of file + num2words("100", lang="tg", to="ordinal_num"), + "100ум", + ) From a7442708fabe210555356fb4c0ac9fc7ae9a92ff Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Tue, 9 Aug 2022 21:19:56 +0300 Subject: [PATCH 63/76] Update __init__.py --- num2words/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/__init__.py b/num2words/__init__.py index 1bc7094..3c9171a 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -23,7 +23,7 @@ from . import (lang_AM, lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, - lang_TE, lang_TH, lang_TR, lang_UK, lang_VI) + lang_TE, lang_TG, lang_TH, lang_TR, lang_UK, lang_VI) CONVERTER_CLASSES = { 'am': lang_AM.Num2Word_AM(), From 2ca98971e1d51e3449e32314ca0342e5776506d4 Mon Sep 17 00:00:00 2001 From: Eyosiyas Bereketab Date: Wed, 10 Aug 2022 09:34:03 +0300 Subject: [PATCH 64/76] Add additional test case --- num2words/lang_AM.py | 19 ++++++------------- tests/test_am.py | 4 ++++ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/num2words/lang_AM.py b/num2words/lang_AM.py index 3efd9c2..77922db 100644 --- a/num2words/lang_AM.py +++ b/num2words/lang_AM.py @@ -60,7 +60,7 @@ class Num2Word_AM(lang_EU.Num2Word_EU): 'ስምንት': 'ስምንተኛ', 'ዘጠኝ': 'ዘጠነኛ', 'አሥር': 'አሥረኛ', - 'አሥራ አንድ': 'አሥራ አንድ', + 'አሥራ አንድ': 'አሥራ አንደኛ', 'አሥራ ሁለት': 'አሥራ ሁለተኛ', 'አሥራ ሦስት': 'አሥራ ሦስተኛ', 'አሥራ አራት': 'አሥራ አራተኛ', @@ -77,10 +77,6 @@ class Num2Word_AM(lang_EU.Num2Word_EU): return self.to_cardinal_float(value) out = '' - if value < 0: - value = abs(value) - out = self.negword - if value >= self.MAXVAL: raise OverflowError(self.errmsg_toobig % (value, self.MAXVAL)) @@ -95,14 +91,13 @@ class Num2Word_AM(lang_EU.Num2Word_EU): ltext, lnum = lpair rtext, rnum = rpair if lnum == 1 and rnum < 100: - return (rtext, rnum) + return rtext, rnum elif 100 > lnum > rnum: - return ('%s %s' % (ltext, rtext), lnum + rnum) + return '%s %s' % (ltext, rtext), lnum + rnum elif lnum >= 100 > rnum: - return ('%s %s' % (ltext, rtext), lnum + rnum) + return '%s %s' % (ltext, rtext), lnum + rnum elif rnum > lnum: - return ('%s %s' % (ltext, rtext), lnum * rnum) - return ('%s, %s' % (ltext, rtext), lnum + rnum) + return '%s %s' % (ltext, rtext), lnum * rnum def to_ordinal(self, value): self.verify_ordinal(value) @@ -112,9 +107,7 @@ class Num2Word_AM(lang_EU.Num2Word_EU): try: lastword = self.ords[lastword] except KeyError: - if lastword[-1] == 'y': - lastword = lastword[:-1] + 'ie' - lastword += 'th' + lastword += 'ኛ' lastwords[-1] = self.title(lastword) outwords[-1] = ' '.join(lastwords) return ' '.join(outwords) diff --git a/tests/test_am.py b/tests/test_am.py index 460ca6e..58709c3 100644 --- a/tests/test_am.py +++ b/tests/test_am.py @@ -42,6 +42,10 @@ class Num2WordsAMTest(TestCase): num2words(22, lang='am', to='ordinal'), 'ሃያ ሁለተኛ' ) + self.assertEqual( + num2words(10000, lang='am', to='ordinal'), + 'አሥር ሺህኛ' + ) def test_to_ordinal_num(self): self.assertEqual(num2words(10, lang='am', to='ordinal_num'), '10ኛ') From 084ace67cbffa193857ef4bed73290b598a63f4c Mon Sep 17 00:00:00 2001 From: "potapov.s" Date: Tue, 2 Nov 2021 12:59:24 +0300 Subject: [PATCH 65/76] - add uzs for ru and en --- num2words/lang_EU.py | 6 ++++-- num2words/lang_RU.py | 3 +++ tests/test_en.py | 6 ++++++ tests/test_ru.py | 5 +++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/num2words/lang_EU.py b/num2words/lang_EU.py index 09d39c1..529547a 100644 --- a/num2words/lang_EU.py +++ b/num2words/lang_EU.py @@ -43,7 +43,8 @@ class Num2Word_EU(Num2Word_Base): 'MXN': (('peso', 'pesos'), GENERIC_CENTS), 'RON': (('leu', 'lei', 'de lei'), ('ban', 'bani', 'de bani')), 'INR': (('rupee', 'rupees'), ('paisa', 'paise')), - 'HUF': (('forint', 'forint'), ('fillér', 'fillér')) + 'HUF': (('forint', 'forint'), ('fillér', 'fillér')), + 'UZS': (('sum', 'sums'), ('tiyin', 'tiyins')) } CURRENCY_ADJECTIVES = { @@ -56,7 +57,8 @@ class Num2Word_EU(Num2Word_Base): 'MXN': 'Mexican', 'RON': 'Romanian', 'INR': 'Indian', - 'HUF': 'Hungarian' + 'HUF': 'Hungarian', + 'UZS': 'Uzbekistan' } GIGA_SUFFIX = "illiard" diff --git a/num2words/lang_RU.py b/num2words/lang_RU.py index 8e6c875..166169c 100644 --- a/num2words/lang_RU.py +++ b/num2words/lang_RU.py @@ -113,6 +113,9 @@ class Num2Word_RU(Num2Word_Base): 'KZT': ( ('тенге', 'тенге', 'тенге'), ('тиын', 'тиына', 'тиынов') ), + 'UZS': ( + ('сум', 'сума', 'сумов'), ('тийин', 'тийина', 'тийинов') + ), } def setup(self): diff --git a/tests/test_en.py b/tests/test_en.py index 6234ac9..e763841 100644 --- a/tests/test_en.py +++ b/tests/test_en.py @@ -131,6 +131,12 @@ class Num2WordsENTest(TestCase): "four pesos and one cent" ) + self.assertEqual( + num2words('2000.00', lang='en', to='currency', separator=' and', + cents=True, currency='UZS'), + "two thousand sums and zero tiyins" + ) + def test_to_year(self): # issue 141 # "e2 e2" diff --git a/tests/test_ru.py b/tests/test_ru.py index dc47975..85d6dc3 100644 --- a/tests/test_ru.py +++ b/tests/test_ru.py @@ -272,3 +272,8 @@ class Num2WordsRUTest(TestCase): 'одна тысяча двести тридцать четыре доллара, пятьдесят шесть ' 'центов' ) + self.assertEqual( + num2words(10122, lang='ru', to='currency', currency='UZS', + separator=' и'), + 'сто один сум и двадцать два тийина' + ) From d1fe26961cff366c4788e0c4b0f1ae5f4b0d73fb Mon Sep 17 00:00:00 2001 From: cyriaka90 Date: Mon, 9 Nov 2020 18:16:22 +0100 Subject: [PATCH 66/76] fix Polish twenties --- num2words/lang_PL.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/num2words/lang_PL.py b/num2words/lang_PL.py index 1fb1fdc..ec7e6a2 100644 --- a/num2words/lang_PL.py +++ b/num2words/lang_PL.py @@ -80,7 +80,7 @@ TWENTIES = { 6: ('sześćdziesiąt',), 7: ('siedemdziesiąt',), 8: ('osiemdziesiąt',), - 9: ('dziewięćdzisiąt',), + 9: ('dziewięćdziesiąt',), } TWENTIES_ORDINALS = { From 5878cd07fe1d691ea94149aba014ebbd2eefb4af Mon Sep 17 00:00:00 2001 From: cyriaka90 Date: Mon, 9 Nov 2020 18:26:47 +0100 Subject: [PATCH 67/76] adapt polish tests --- tests/test_pl.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_pl.py b/tests/test_pl.py index 147a747..cf6e18a 100644 --- a/tests/test_pl.py +++ b/tests/test_pl.py @@ -52,7 +52,7 @@ class Num2WordsPLTest(TestCase): self.assertEqual( num2words(1234567890, lang='pl'), "miliard dwieście trzydzieści cztery miliony pięćset " - "sześćdziesiąt siedem tysięcy osiemset dziewięćdzisiąt" + "sześćdziesiąt siedem tysięcy osiemset dziewięćdziesiąt" ) self.assertEqual( num2words(10000000001000000100000, lang='pl'), @@ -62,20 +62,20 @@ class Num2WordsPLTest(TestCase): num2words(215461407892039002157189883901676, lang='pl'), "dwieście piętnaście kwintylionów czterysta sześćdziesiąt jeden " "kwadryliardów czterysta siedem kwadrylionów osiemset " - "dziewięćdzisiąt dwa tryliardy trzydzieści dziewięć trylionów " + "dziewięćdziesiąt dwa tryliardy trzydzieści dziewięć trylionów " "dwa biliardy sto pięćdziesiąt siedem bilionów sto osiemdziesiąt " "dziewięć miliardów osiemset osiemdziesiąt trzy miliony " "dziewięćset jeden tysięcy sześćset siedemdziesiąt sześć" ) self.assertEqual( num2words(719094234693663034822824384220291, lang='pl'), - "siedemset dziewiętnaście kwintylionów dziewięćdzisiąt cztery " + "siedemset dziewiętnaście kwintylionów dziewięćdziesiąt cztery " "kwadryliardy dwieście trzydzieści cztery kwadryliony sześćset " - "dziewięćdzisiąt trzy tryliardy sześćset sześćdziesiąt trzy " + "dziewięćdziesiąt trzy tryliardy sześćset sześćdziesiąt trzy " "tryliony trzydzieści cztery biliardy osiemset dwadzieścia dwa " "biliony osiemset dwadzieścia cztery miliardy trzysta " "osiemdziesiąt cztery miliony dwieście dwadzieścia " - "tysięcy dwieście dziewięćdzisiąt jeden" + "tysięcy dwieście dziewięćdziesiąt jeden" ) self.assertEqual( num2words( From e4b75bb00d2fa55522995563e00eb08b78887546 Mon Sep 17 00:00:00 2001 From: cyriaka90 Date: Tue, 16 Aug 2022 14:58:50 +0200 Subject: [PATCH 68/76] increase Polish test coverage --- tests/test_pl.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_pl.py b/tests/test_pl.py index cf6e18a..08ef039 100644 --- a/tests/test_pl.py +++ b/tests/test_pl.py @@ -24,11 +24,13 @@ from num2words import num2words class Num2WordsPLTest(TestCase): def test_cardinal(self): + self.assertEqual(num2words(90, lang='pl'), "dziewięćdziesiąt") self.assertEqual(num2words(100, lang='pl'), "sto") self.assertEqual(num2words(101, lang='pl'), "sto jeden") self.assertEqual(num2words(110, lang='pl'), "sto dziesięć") self.assertEqual(num2words(115, lang='pl'), "sto piętnaście") self.assertEqual(num2words(123, lang='pl'), "sto dwadzieścia trzy") + self.assertEqual(num2words(400, lang='pl'), "czterysta") self.assertEqual(num2words(1000, lang='pl'), "tysiąc") self.assertEqual(num2words(1001, lang='pl'), "tysiąc jeden") self.assertEqual(num2words(2012, lang='pl'), "dwa tysiące dwanaście") @@ -94,6 +96,9 @@ class Num2WordsPLTest(TestCase): self.assertEqual(num2words(100, lang='pl', to='ordinal'), "setny") self.assertEqual( num2words(101, lang='pl', to='ordinal'), "sto pierwszy") + self.assertEqual(num2words(120, lang='pl', to='ordinal'), + "sto dwudziesty") + self.assertEqual(num2words(20, lang='pl', to='ordinal'), "dwudziesty") self.assertEqual(num2words(121, lang='pl', to='ordinal'), "sto dwudziesty pierwszy") self.assertEqual( @@ -118,6 +123,10 @@ class Num2WordsPLTest(TestCase): self.assertEqual(num2words(1000000, lang='pl', to='ordinal'), "milionowy") + def test_to_ordinal_error(self): + with self.assertRaises(NotImplementedError): + num2words(1.5, lang='pl', to='ordinal') + def test_currency(self): self.assertEqual( num2words(1.0, lang='pl', to='currency', currency='EUR'), From 3dda6ee22e5278fa9621f9fb37dc8de2e5dc230d Mon Sep 17 00:00:00 2001 From: Sergio Zanchetta Date: Sun, 16 Jan 2022 00:52:24 +0100 Subject: [PATCH 69/76] Add to_currency and CURRENCY_FORMS for italian --- num2words/lang_IT.py | 119 +++++++++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 43 deletions(-) diff --git a/num2words/lang_IT.py b/num2words/lang_IT.py index 6966d73..d532f7f 100644 --- a/num2words/lang_IT.py +++ b/num2words/lang_IT.py @@ -16,6 +16,8 @@ from __future__ import unicode_literals +from .lang_EU import Num2Word_EU + # Globals # ------- @@ -43,57 +45,27 @@ EXPONENT_PREFIXES = [ ] -# Utils -# ===== - -def phonetic_contraction(string): - return (string - .replace("oo", "o") # ex. "centootto" - .replace("ao", "o") # ex. "settantaotto" - .replace("io", "o") # ex. "ventiotto" - .replace("au", "u") # ex. "trentauno" - .replace("iu", "u") # ex. "ventiunesimo" - ) - - -def exponent_length_to_string(exponent_length): - # We always assume `exponent` to be a multiple of 3. If it's not true, then - # Num2Word_IT.big_number_to_cardinal did something wrong. - prefix = EXPONENT_PREFIXES[exponent_length // 6] - if exponent_length % 6 == 0: - return prefix + "ilione" - else: - return prefix + "iliardo" - - -def accentuate(string): - # This is inefficient: it may do several rewritings when deleting - # half-sentence accents. However, it is the easiest method and speed is - # not crucial (duh), so... - return " ".join( - # Deletes half-sentence accents and accentuates the last "tre" - [w.replace("tré", "tre")[:-3] + "tré" - # We shouldn't accentuate a single "tre": is has to be a composite - # word. ~~~~~~~~~~ - if w[-3:] == "tre" and len(w) > 3 - # Deletes half-sentence accents anyway - # ~~~~~~~~~~~~~~~~~~~~~~ - else w.replace("tré", "tre") - for w in string.split() - ]) - - -def omitt_if_zero(number_to_string): - return "" if number_to_string == ZERO else number_to_string +GENERIC_DOLLARS = ('dollaro', 'dollari') +GENERIC_CENTS = ('centesimo', 'centesimi') +CURRENCIES_UNA = ('GBP') # Main class # ========== -class Num2Word_IT: +class Num2Word_IT(Num2Word_EU): + CURRENCY_FORMS = { + 'EUR': (('euro', 'euro'), GENERIC_CENTS), + 'USD': (GENERIC_DOLLARS, GENERIC_CENTS), + 'GBP': (('sterlina', 'sterline'), ('penny', 'penny')), + 'CNY': (('yuan', 'yuan'), ('fen', 'fen')), + } MINUS_PREFIX_WORD = "meno " FLOAT_INFIX_WORD = " virgola " + def setup(self): + Num2Word_EU.setup(self) + def __init__(self): pass @@ -206,3 +178,64 @@ class Num2Word_IT: if string[-3:] == "mil": string += "l" return string + "esimo" + + def to_currency(self, val, currency='EUR', cents=True, separator=' e', + adjective=False): + result = super(Num2Word_IT, self).to_currency( + val, currency=currency, cents=cents, separator=separator, + adjective=adjective) + # Handle exception. In italian language is "un euro", + # "un dollaro" etc. (not "uno euro", "uno dollaro"). + # There is an exception, some currencies need "una": + # e.g. "una sterlina" + if currency in CURRENCIES_UNA: + list_result = result.split(" ") + if list_result[0] == "uno": + list_result[0] = list_result[0].replace("uno", "una") + result = " ".join(list_result) + result = result.replace("uno", "un") + return result + +# Utils +# ===== + + +def phonetic_contraction(string): + return (string + .replace("oo", "o") # ex. "centootto" + .replace("ao", "o") # ex. "settantaotto" + .replace("io", "o") # ex. "ventiotto" + .replace("au", "u") # ex. "trentauno" + .replace("iu", "u") # ex. "ventiunesimo" + ) + + +def exponent_length_to_string(exponent_length): + # We always assume `exponent` to be a multiple of 3. If it's not true, then + # Num2Word_IT.big_number_to_cardinal did something wrong. + prefix = EXPONENT_PREFIXES[exponent_length // 6] + if exponent_length % 6 == 0: + return prefix + "ilione" + else: + return prefix + "iliardo" + + +def accentuate(string): + # This is inefficient: it may do several rewritings when deleting + # half-sentence accents. However, it is the easiest method and speed is + # not crucial (duh), so... + return " ".join( + # Deletes half-sentence accents and accentuates the last "tre" + [w.replace("tré", "tre")[:-3] + "tré" + # We shouldn't accentuate a single "tre": is has to be a composite + # word. ~~~~~~~~~~ + if w[-3:] == "tre" and len(w) > 3 + # Deletes half-sentence accents anyway + # ~~~~~~~~~~~~~~~~~~~~~~ + else w.replace("tré", "tre") + for w in string.split() + ]) + + +def omitt_if_zero(number_to_string): + return "" if number_to_string == ZERO else number_to_string From 593435f21a675e317ee42fb3b2717bdd95eb43c4 Mon Sep 17 00:00:00 2001 From: Sergio Zanchetta Date: Sun, 16 Jan 2022 12:07:43 +0100 Subject: [PATCH 70/76] Add tests for italian language currencies --- tests/test_it.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tests/test_it.py b/tests/test_it.py index 348f4ed..9023355 100644 --- a/tests/test_it.py +++ b/tests/test_it.py @@ -21,6 +21,36 @@ from unittest import TestCase from num2words import num2words +TEST_CASES_TO_CURRENCY_EUR = ( + (1.00, 'un euro e zero centesimi'), + (2.01, 'due euro e un centesimo'), + (8.10, 'otto euro e dieci centesimi'), + (12.26, 'dodici euro e ventisei centesimi'), + (21.29, 'ventun euro e ventinove centesimi'), + (81.25, 'ottantun euro e venticinque centesimi'), + (100.00, 'cento euro e zero centesimi'), +) + +TEST_CASES_TO_CURRENCY_USD = ( + (1.00, 'un dollaro e zero centesimi'), + (2.01, 'due dollari e un centesimo'), + (8.10, 'otto dollari e dieci centesimi'), + (12.26, 'dodici dollari e ventisei centesimi'), + (21.29, 'ventun dollari e ventinove centesimi'), + (81.25, 'ottantun dollari e venticinque centesimi'), + (100.00, 'cento dollari e zero centesimi'), +) + +TEST_CASES_TO_CURRENCY_GBP = ( + (1.00, 'una sterlina e zero penny'), + (2.01, 'due sterline e un penny'), + (8.10, 'otto sterline e dieci penny'), + (12.26, 'dodici sterline e ventisei penny'), + (21.29, 'ventun sterline e ventinove penny'), + (81.25, 'ottantun sterline e venticinque penny'), + (100.00, 'cento sterline e zero penny'), +) + class Num2WordsITTest(TestCase): maxDiff = None @@ -240,3 +270,24 @@ class Num2WordsITTest(TestCase): self.assertAlmostEqual( num2words(1.1, lang="it"), "uno virgola uno" ) + + def test_currency_eur(self): + for test in TEST_CASES_TO_CURRENCY_EUR: + self.assertEqual( + num2words(test[0], lang='it', to='currency', currency='EUR'), + test[1] + ) + + def test_currency_usd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang='it', to='currency', currency='USD'), + test[1] + ) + + def test_currency_gbp(self): + for test in TEST_CASES_TO_CURRENCY_GBP: + self.assertEqual( + num2words(test[0], lang='it', to='currency', currency='GBP'), + test[1] + ) From 44a2b7cc2db2de0e71416982fbb2e5477ec44ebf Mon Sep 17 00:00:00 2001 From: ismail eski Date: Wed, 17 Aug 2022 19:11:37 +0300 Subject: [PATCH 71/76] [TEST] ordinal_num test --- tests/test_tr.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_tr.py b/tests/test_tr.py index 8425262..2da7001 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -183,6 +183,10 @@ class Num2WordsTRTest(TestCase): "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgüliki"}, {"test": 101101011010.2, "to": "cardinal", "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"} + {"test": 10, "to": "ordinal_num", "expected": u"10uncu"} + {"test": 1, "to": "ordinal_num","expected": u"1inci"} + {"test": 3, "to": "ordinal_num","expected": u"3üncü"} + {"test": 6, "to": "ordinal_num","expected": u"6ıncı"} ] for casedata in testcases: From 75eec68f3ed8d7f6ec9e316ec994a98d879ad166 Mon Sep 17 00:00:00 2001 From: Antoine Planchot Date: Fri, 14 May 2021 22:31:46 +0200 Subject: [PATCH 72/76] Added support for Esperanto numbers. --- num2words/__init__.py | 1 + num2words/lang_EO.py | 130 +++++++++++++++++++++++++++++ tests/test_eo.py | 190 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 321 insertions(+) create mode 100644 num2words/lang_EO.py create mode 100644 tests/test_eo.py diff --git a/num2words/__init__.py b/num2words/__init__.py index 3c9171a..acff85c 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -38,6 +38,7 @@ CONVERTER_CLASSES = { 'fr_DZ': lang_FR_DZ.Num2Word_FR_DZ(), 'de': lang_DE.Num2Word_DE(), 'fi': lang_FI.Num2Word_FI(), + 'eo': lang_EO.Num2Word_EO(), 'es': lang_ES.Num2Word_ES(), 'es_CO': lang_ES_CO.Num2Word_ES_CO(), 'es_NI': lang_ES_NI.Num2Word_ES_NI(), diff --git a/num2words/lang_EO.py b/num2words/lang_EO.py new file mode 100644 index 0000000..473e74d --- /dev/null +++ b/num2words/lang_EO.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import print_function, unicode_literals + +from .base import Num2Word_Base + + +class Num2Word_EO(Num2Word_Base): + CURRENCY_FORMS = { + "EUR": (("eŭro", "eŭroj"), ("centimo", "centimoj")), + "USD": (("dolaro", "dolaroj"), ("cendo", "cendoj")), + "FRF": (("franko", "frankoj"), ("centimo", "centimoj")), + "GBP": (("pundo", "pundoj"), ("penco", "pencoj")), + "CNY": (("juano", "juanoj"), ("feno", "fenoj")), + } + + GIGA_SUFFIX = "iliardo" + MEGA_SUFFIX = "iliono" + + def set_high_numwords(self, high): + cap = 3 + 6 * len(high) + + for word, n in zip(high, range(cap, 3, -6)): + if self.GIGA_SUFFIX: + self.cards[10 ** n] = word + self.GIGA_SUFFIX + + if self.MEGA_SUFFIX: + self.cards[10 ** (n - 3)] = word + self.MEGA_SUFFIX + + def gen_high_numwords(self, units, tens, lows): + out = [u + t for t in tens for u in units] + out.reverse() + return out + lows + + def setup(self): + lows = ["naŭ", "ok", "sep", "ses", "kvin", "kvar", "tr", "b", "m"] + units = ["", "un", "duo", "tre", "kvatuor", + "kvin", "seks", "septen", "okto", "novem"] + tens = ["dek", "vigint", "trigint", "kvadragint", "kvinkvagint", + "seksagint", "septuagint", "oktogint", "nonagint"] + + self.high_numwords = ["cent"] + self.gen_high_numwords(units, tens, + lows) + + self.negword = "minus " + self.pointword = "komo" + self.errmsg_nonnum = u"Sole nombroj povas esti konvertita en vortojn." + self.errmsg_toobig = ( + u"Tro granda nombro por esti konvertita en vortojn." + ) + self.exclude_title = ["kaj", "komo", "minus"] + self.mid_numwords = [(1000, "mil"), (100, "cent"), (90, "naŭdek"), + (80, "okdek"), (70, "sepdek"), (60, "sesdek"), + (50, "kvindek"), (40, "kvardek"), (30, "tridek")] + self.low_numwords = ["dudek", "dek naŭ", "dek ok", "dek sep", + "dek ses", "dek kvin", "dek kvar", "dek tri", + "dek du", "dek unu", "dek", "naŭ", "ok", "sep", + "ses", "kvin", "kvar", "tri", "du", "unu", "nul"] + self.ords = { + "unu": "unua", + "du": "dua", + "tri": "tria", + "kvar": "kvara", + "kvin": "kvina", + "ses": "sesa", + "sep": "sepa", + "ok": "oka", + "naŭ": "naŭa", + "dek": "deka" + } + + def merge(self, curr, next): + ctext, cnum, ntext, nnum = curr + next + if cnum == 1 and nnum < 1000000: + return next + + if nnum >= 10**6 and cnum > 1: + return ("%s %sj" % (ctext, ntext), cnum + nnum) + + if nnum == 100: + return ("%s%s" % (ctext, ntext), cnum + nnum) + + return ("%s %s" % (ctext, ntext), cnum + nnum) + + def to_ordinal(self, value): + self.verify_ordinal(value) + word = self.to_cardinal(value) + for src, repl in self.ords.items(): + if word.endswith(src): + word = word[:-len(src)] + repl + return word + + if word.endswith("o"): + word = word[:-1] + "a" + elif word.endswith("oj"): + word = word[:-2] + "a" + else: + word = word + "a" + return word + + def to_ordinal_num(self, value): + self.verify_ordinal(value) + out = str(value) + out += "a" + return out + + def to_currency(self, val, currency="EUR", cents=True, separator=" kaj", + adjective=False): + result = super(Num2Word_EO, self).to_currency( + val, currency=currency, cents=cents, separator=separator, + adjective=adjective) + return result + + def pluralize(self, n, forms): + form = 0 if n <= 1 else 1 + return forms[form] diff --git a/tests/test_eo.py b/tests/test_eo.py new file mode 100644 index 0000000..64076ce --- /dev/null +++ b/tests/test_eo.py @@ -0,0 +1,190 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2021, Savoir-faire Linux inc. All Rights Reserved. + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA + +from __future__ import unicode_literals + +from unittest import TestCase + +from num2words import num2words + +TEST_CASES_CARDINAL = ( + (1, "unu"), + (2, "du"), + (3, "tri"), + (5.5, "kvin komo kvin"), + (11, "dek unu"), + (12, "dek du"), + (16, "dek ses"), + (17.42, "dek sep komo kvar du"), + (19, "dek naŭ"), + (20, "dudek"), + (21, "dudek unu"), + (26, "dudek ses"), + (27.312, "dudek sep komo tri unu du"), + (28, "dudek ok"), + (30, "tridek"), + (31, "tridek unu"), + (40, "kvardek"), + (44, "kvardek kvar"), + (50, "kvindek"), + (53.486, "kvindek tri komo kvar ok ses"), + (55, "kvindek kvin"), + (60, "sesdek"), + (67, "sesdek sep"), + (70, "sepdek"), + (79, "sepdek naŭ"), + (89, "okdek naŭ"), + (95, "naŭdek kvin"), + (100, "cent"), + (101, "cent unu"), + (199, "cent naŭdek naŭ"), + (203, "ducent tri"), + (287, "ducent okdek sep"), + (300.42, "tricent komo kvar du"), + (356, "tricent kvindek ses"), + (400, "kvarcent"), + (434, "kvarcent tridek kvar"), + (578, "kvincent sepdek ok"), + (689, "sescent okdek naŭ"), + (729, "sepcent dudek naŭ"), + (894, "okcent naŭdek kvar"), + (999, "naŭcent naŭdek naŭ"), + (1000, "mil"), + (1001, "mil unu"), + (1097, "mil naŭdek sep"), + (1104, "mil cent kvar"), + (1243, "mil ducent kvardek tri"), + (2385, "du mil tricent okdek kvin"), + (3766, "tri mil sepcent sesdek ses"), + (4196, "kvar mil cent naŭdek ses"), + (4196.42, "kvar mil cent naŭdek ses komo kvar du"), + (5846, "kvin mil okcent kvardek ses"), + (6459, "ses mil kvarcent kvindek naŭ"), + (7232, "sep mil ducent tridek du"), + (8569, "ok mil kvincent sesdek naŭ"), + (9539, "naŭ mil kvincent tridek naŭ"), + (1000000, "unu miliono"), + (1000001, "unu miliono unu"), + (4000000, "kvar milionoj"), + (4000004, "kvar milionoj kvar"), + (4300000, "kvar milionoj tricent mil"), + (80000000, "okdek milionoj"), + (300000000, "tricent milionoj"), + (10000000000000, "dek bilionoj"), + (10000000000010, "dek bilionoj dek"), + (100000000000000, "cent bilionoj"), + (1000000000000000000, "unu triliono"), + (1000000000000000000000, "unu triliardo"), + (10000000000000000000000000, "dek kvarilionoj") +) + +TEST_CASES_ORDINAL = ( + (1, "unua"), + (8, "oka"), + (12, "dek dua"), + (14, "dek kvara"), + (28, "dudek oka"), + (100, "centa"), + (1000, "mila"), + (1000000, "unu miliona"), + (1000000000000000, "unu biliarda"), + (1000000000000000000, "unu triliona") +) + +TEST_CASES_ORDINAL_NUM = ( + (1, "1a"), + (8, "8a"), + (11, "11a"), + (12, "12a"), + (14, "14a"), + (21, "21a"), + (28, "28a"), + (100, "100a"), + (101, "101a"), + (1000, "1000a"), + (1000000, "1000000a") +) + +TEST_CASES_TO_CURRENCY_EUR = ( + (1.00, "unu eŭro kaj nul centimo"), + (2.01, "du eŭroj kaj unu centimo"), + (8.10, "ok eŭroj kaj dek centimoj"), + (12.26, "dek du eŭroj kaj dudek ses centimoj"), + (21.29, "dudek unu eŭroj kaj dudek naŭ centimoj"), + (81.25, "okdek unu eŭroj kaj dudek kvin centimoj"), + (100.00, "cent eŭroj kaj nul centimo"), +) + +TEST_CASES_TO_CURRENCY_FRF = ( + (1.00, "unu franko kaj nul centimo"), + (2.01, "du frankoj kaj unu centimo"), + (8.10, "ok frankoj kaj dek centimoj"), + (12.27, "dek du frankoj kaj dudek sep centimoj"), + (21.29, "dudek unu frankoj kaj dudek naŭ centimoj"), + (81.25, "okdek unu frankoj kaj dudek kvin centimoj"), + (100.00, "cent frankoj kaj nul centimo"), +) + +TEST_CASES_TO_CURRENCY_USD = ( + (1.00, "unu dolaro kaj nul cendo"), + (2.01, "du dolaroj kaj unu cendo"), + (8.10, "ok dolaroj kaj dek cendoj"), + (12.26, "dek du dolaroj kaj dudek ses cendoj"), + (21.29, "dudek unu dolaroj kaj dudek naŭ cendoj"), + (81.25, "okdek unu dolaroj kaj dudek kvin cendoj"), + (100.00, "cent dolaroj kaj nul cendo"), +) + + +class Num2WordsEOTest(TestCase): + def test_number(self): + for test in TEST_CASES_CARDINAL: + self.assertEqual(num2words(test[0], lang="eo"), test[1]) + + def test_ordinal(self): + for test in TEST_CASES_ORDINAL: + self.assertEqual( + num2words(test[0], lang="eo", ordinal=True), + test[1] + ) + + def test_ordinal_num(self): + for test in TEST_CASES_ORDINAL_NUM: + self.assertEqual( + num2words(test[0], lang="eo", to="ordinal_num"), + test[1] + ) + + def test_currency_eur(self): + for test in TEST_CASES_TO_CURRENCY_EUR: + self.assertEqual( + num2words(test[0], lang="eo", to="currency", currency="EUR"), + test[1] + ) + + def test_currency_frf(self): + for test in TEST_CASES_TO_CURRENCY_FRF: + self.assertEqual( + num2words(test[0], lang="eo", to="currency", currency="FRF"), + test[1] + ) + + def test_currency_usd(self): + for test in TEST_CASES_TO_CURRENCY_USD: + self.assertEqual( + num2words(test[0], lang="eo", to="currency", currency="USD"), + test[1] + ) From 7109e16e73cdc28b8ad48b8e4cb8ed13e8e62195 Mon Sep 17 00:00:00 2001 From: ismail eski Date: Wed, 17 Aug 2022 19:56:11 +0300 Subject: [PATCH 73/76] [TEST] ordinal_num test --- tests/test_tr.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_tr.py b/tests/test_tr.py index 2da7001..d01ba06 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -182,10 +182,10 @@ class Num2WordsTRTest(TestCase): {"test": 101101011010.02, "to": "cardinal", "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgüliki"}, {"test": 101101011010.2, "to": "cardinal", - "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"} - {"test": 10, "to": "ordinal_num", "expected": u"10uncu"} - {"test": 1, "to": "ordinal_num","expected": u"1inci"} - {"test": 3, "to": "ordinal_num","expected": u"3üncü"} + "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"}, + {"test": 10, "to": "ordinal_num", "expected": u"10uncu"}, + {"test": 1, "to": "ordinal_num","expected": u"1inci"}, + {"test": 3, "to": "ordinal_num","expected": u"3üncü"}, {"test": 6, "to": "ordinal_num","expected": u"6ıncı"} ] From b6a80e0e2a381cc830effc964fcc2119e201bdbc Mon Sep 17 00:00:00 2001 From: ismail eski Date: Thu, 18 Aug 2022 18:48:10 +0300 Subject: [PATCH 74/76] [FIX] E231 missing whitespace after ',' --- tests/test_tr.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_tr.py b/tests/test_tr.py index d01ba06..e1aefba 100644 --- a/tests/test_tr.py +++ b/tests/test_tr.py @@ -184,9 +184,9 @@ class Num2WordsTRTest(TestCase): {"test": 101101011010.2, "to": "cardinal", "expected": u"yüzbirmilyaryüzbirmilyononbirbinonvirgülyirmi"}, {"test": 10, "to": "ordinal_num", "expected": u"10uncu"}, - {"test": 1, "to": "ordinal_num","expected": u"1inci"}, - {"test": 3, "to": "ordinal_num","expected": u"3üncü"}, - {"test": 6, "to": "ordinal_num","expected": u"6ıncı"} + {"test": 1, "to": "ordinal_num", "expected": u"1inci"}, + {"test": 3, "to": "ordinal_num", "expected": u"3üncü"}, + {"test": 6, "to": "ordinal_num", "expected": u"6ıncı"} ] for casedata in testcases: From 2ee06aa086cc609f48d4869725213da874315dc2 Mon Sep 17 00:00:00 2001 From: Willem Van Onsem Date: Thu, 18 Aug 2022 18:59:35 +0200 Subject: [PATCH 75/76] reformatting --- num2words/__init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/num2words/__init__.py b/num2words/__init__.py index acff85c..fb9f7e9 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -18,12 +18,13 @@ from __future__ import unicode_literals from . import (lang_AM, lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, - lang_EN_IN, lang_ES, lang_ES_CO, lang_ES_NI, lang_ES_VE, - lang_FA, lang_FI, lang_FR, lang_FR_BE, lang_FR_CH, lang_FR_DZ, - lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, - lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, - lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, lang_SV, - lang_TE, lang_TG, lang_TH, lang_TR, lang_UK, lang_VI) + lang_EN_IN, lang_EO, lang_ES, lang_ES_CO, lang_ES_NI, + lang_ES_VE, lang_FA, lang_FI, lang_FR, lang_FR_BE, lang_FR_CH, + lang_FR_DZ, lang_HE, lang_HU, lang_ID, lang_IT, lang_JA, + lang_KN, lang_KO, lang_KZ, lang_LT, lang_LV, lang_NL, lang_NO, + lang_PL, lang_PT, lang_PT_BR, lang_RO, lang_RU, lang_SL, + lang_SR, lang_SV, lang_TE, lang_TG, lang_TH, lang_TR, lang_UK, + lang_VI) CONVERTER_CLASSES = { 'am': lang_AM.Num2Word_AM(), From 0865ac247e10ece70fb1d330f69d751624e14cb7 Mon Sep 17 00:00:00 2001 From: Marlon Rodriguez Date: Fri, 19 Aug 2022 10:28:08 -0400 Subject: [PATCH 76/76] new release --- CHANGES.rst | 19 +++++++++++++++++-- bin/num2words | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 9f3a7b2..4a1d1e1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,21 @@ Changelog ========= +Version 0.5.12 -- 2022/08/19 +---------------------------- + +* Support Japanese Reiwa (令和/れいわ) era. (#412) +* Add basic farsi support (#354) +* Added Tajik language support (#406) +* Fix Amharic language support (#465) +* Fix Hebrew pluralize and implement to_currency (#330) +* Add support to translate some currencies in italian language (#434) +* Fix Polish twenties (#345) +* Add uzs for ru and en (#422) +* Added support for Esperanto numbers. (#387) +* [ADD] to ordinal number for Turkish (#468) +* Fix zeroth in Dutch to nulde fixing (#326) + Version 0.5.11 -- 2022/08/03 ---------------------------- @@ -77,9 +92,9 @@ Version 0.5.7 -- 2018/06/27 * Add Finnish localization. (#170) * Add Japanese localization. (#171) * Add belgian-french localization. (#151) -* Add Czech localization. (#154) +* Add Czech localization. (#154) * Add Thai localization. (#139) -* Improve English localization. (#144) +* Improve English localization. (#144) * Improve Spanish localization. (#167) * Improve Italian localization. (#143) * Improve documentation. (#155, #145, #174) diff --git a/bin/num2words b/bin/num2words index 2a20b22..26990c0 100755 --- a/bin/num2words +++ b/bin/num2words @@ -34,7 +34,7 @@ Options: -t --to= Output converter [default: cardinal]. -h --help Show this message. -v --version Show version. - + Examples: $ num2words 10001 ten thousand and one @@ -55,7 +55,7 @@ import sys from docopt import docopt import num2words -__version__ = "0.5.11" +__version__ = "0.5.12" __license__ = "LGPL"