mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Fixing currency functions for german and french. Adding Currency_Forms for DE, FR and NL. (#247)
* Fix currency function for French. Adding Currency_Forms. * Fix currency function for German. Adding Currency_Forms. * Move FR_DZ to new currency functions, too. * Fix tests * Add more currency options for dutch. * Add more tests for German, Dutch and French currencies.
This commit is contained in:
committed by
Ernesto Rodriguez Ortiz
parent
18194b52ef
commit
a869745813
@@ -21,6 +21,46 @@ from unittest import TestCase
|
||||
|
||||
from num2words import num2words
|
||||
|
||||
TEST_CASES_TO_CURRENCY_EUR = (
|
||||
(1.00, 'ein Euro und null Cent'),
|
||||
(2.01, 'zwei Euro und ein Cent'),
|
||||
(8.10, 'acht Euro und zehn Cent'),
|
||||
(12.26, 'zwölf Euro und sechsundzwanzig Cent'),
|
||||
(21.29, 'einundzwanzig Euro und neunundzwanzig Cent'),
|
||||
(81.25, 'einundachtzig Euro und fünfundzwanzig Cent'),
|
||||
(100.00, 'einhundert Euro und null Cent'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_USD = (
|
||||
(1.00, 'ein Dollar und null Cent'),
|
||||
(2.01, 'zwei Dollar und ein Cent'),
|
||||
(8.10, 'acht Dollar und zehn Cent'),
|
||||
(12.26, 'zwölf Dollar und sechsundzwanzig Cent'),
|
||||
(21.29, 'einundzwanzig Dollar und neunundzwanzig Cent'),
|
||||
(81.25, 'einundachtzig Dollar und fünfundzwanzig Cent'),
|
||||
(100.00, 'einhundert Dollar und null Cent'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_GBP = (
|
||||
(1.00, 'ein Pfund und null Pence'),
|
||||
(2.01, 'zwei Pfund und ein Penny'),
|
||||
(8.10, 'acht Pfund und zehn Pence'),
|
||||
(12.26, 'zwölf Pfund und sechsundzwanzig Pence'),
|
||||
(21.29, 'einundzwanzig Pfund und neunundzwanzig Pence'),
|
||||
(81.25, 'einundachtzig Pfund und fünfundzwanzig Pence'),
|
||||
(100.00, 'einhundert Pfund und null Pence'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_DEM = (
|
||||
(1.00, 'ein Mark und null Pfennig'),
|
||||
(2.01, 'zwei Mark und ein Pfennig'),
|
||||
(8.10, 'acht Mark und zehn Pfennig'),
|
||||
(12.26, 'zwölf Mark und sechsundzwanzig Pfennig'),
|
||||
(21.29, 'einundzwanzig Mark und neunundzwanzig Pfennig'),
|
||||
(81.25, 'einundachtzig Mark und fünfundzwanzig Pfennig'),
|
||||
(100.00, 'einhundert Mark und null Pfennig'),
|
||||
)
|
||||
|
||||
|
||||
class Num2WordsDETest(TestCase):
|
||||
|
||||
@@ -93,29 +133,33 @@ class Num2WordsDETest(TestCase):
|
||||
def test_ordinal_for_floating_numbers(self):
|
||||
self.assertRaises(TypeError, num2words, 2.453, ordinal=True, lang='de')
|
||||
|
||||
def test_currency(self):
|
||||
self.assertEqual(num2words(1, lang='de', to='currency'),
|
||||
'ein Euro')
|
||||
self.assertEqual(num2words(12, lang='de', to='currency'),
|
||||
'zwölf Euro')
|
||||
self.assertEqual(num2words(12.00, lang='de', to='currency'),
|
||||
'zwölf Euro')
|
||||
self.assertEqual(num2words(100.0, lang='de', to='currency'),
|
||||
"einhundert Euro")
|
||||
self.assertEqual(num2words(190, lang='de', to='currency'),
|
||||
"einhundertneunzig Euro")
|
||||
self.assertEqual(num2words(1.90, lang='de', to='currency'),
|
||||
"ein Euro und neunzig Cent")
|
||||
self.assertEqual(num2words(3.4, lang='de', to='currency'),
|
||||
"drei Euro und vierzig Cent")
|
||||
self.assertEqual(num2words(20.18, lang='de', to='currency'),
|
||||
"zwanzig Euro und achtzehn Cent")
|
||||
self.assertEqual(num2words(3.04, lang='de', to='currency'),
|
||||
"drei Euro und vier Cent")
|
||||
def test_currency_eur(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_EUR:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='de', to='currency', currency='EUR'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_old_currency(self):
|
||||
self.assertEqual(num2words(12.00, to='currency', lang='de', old=True),
|
||||
'zwölf Mark')
|
||||
def test_currency_usd(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_USD:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='de', to='currency', currency='USD'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency_dem(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_DEM:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='de', to='currency', currency='DEM'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency_gbp(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_GBP:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='de', to='currency', currency='GBP'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_year(self):
|
||||
self.assertEqual(num2words(2002, to='year', lang='de'),
|
||||
|
||||
@@ -118,26 +118,34 @@ TEST_CASES_ORDINAL_NUM = (
|
||||
(1000000, '1000000me')
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY = (
|
||||
(1, 'un euro'),
|
||||
(2, 'deux euros'),
|
||||
(8, 'huit euros'),
|
||||
(12, 'douze euros'),
|
||||
(21, 'vingt et un euros'),
|
||||
TEST_CASES_TO_CURRENCY_EUR = (
|
||||
(1.00, 'un euro et zéro centimes'),
|
||||
(2.01, 'deux euros et un centime'),
|
||||
(8.10, 'huit euros et dix centimes'),
|
||||
(12.26, 'douze euros et vingt-six centimes'),
|
||||
(21.29, 'vingt et un euros et vingt-neuf centimes'),
|
||||
(81.25, 'quatre-vingt-un euros et vingt-cinq centimes'),
|
||||
(81.2, 'quatre-vingt-un euros et vingt centimes'),
|
||||
(100, 'cent euros'),
|
||||
(100.00, 'cent euros et zéro centimes'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_OLD = (
|
||||
(1, 'un franc'),
|
||||
(2, 'deux francs'),
|
||||
(8, 'huit francs'),
|
||||
(12, 'douze francs'),
|
||||
(21, 'vingt et un francs'),
|
||||
TEST_CASES_TO_CURRENCY_FRF = (
|
||||
(1.00, 'un franc et zéro centimes'),
|
||||
(2.01, 'deux francs et un centime'),
|
||||
(8.10, 'huit francs et dix centimes'),
|
||||
(12.27, 'douze francs et vingt-sept centimes'),
|
||||
(21.29, 'vingt et un francs et vingt-neuf centimes'),
|
||||
(81.25, 'quatre-vingt-un francs et vingt-cinq centimes'),
|
||||
(81.2, 'quatre-vingt-un francs et vingt centimes'),
|
||||
(100, 'cent francs'),
|
||||
(100.00, 'cent francs et zéro centimes'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_USD = (
|
||||
(1.00, 'un dollar et zéro cents'),
|
||||
(2.01, 'deux dollars et un cent'),
|
||||
(8.10, 'huit dollars et dix cents'),
|
||||
(12.26, 'douze dollars et vingt-six cents'),
|
||||
(21.29, 'vingt et un dollars et vingt-neuf cents'),
|
||||
(81.25, 'quatre-vingt-un dollars et vingt-cinq cents'),
|
||||
(100.00, 'cent dollars et zéro cents'),
|
||||
)
|
||||
|
||||
|
||||
@@ -175,16 +183,23 @@ class Num2WordsENTest(TestCase):
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency(self):
|
||||
for test in TEST_CASES_TO_CURRENCY:
|
||||
def test_currency_eur(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_EUR:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='fr', to='currency'),
|
||||
num2words(test[0], lang='fr', to='currency', currency='EUR'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency_old(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_OLD:
|
||||
def test_currency_frf(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_FRF:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='fr', to='currency', old=True),
|
||||
num2words(test[0], lang='fr', 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='fr', to='currency', currency='USD'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
@@ -54,24 +54,24 @@ TEST_CASES_ORDINAL = (
|
||||
(1000000000000000000, 'un trillionsième') # over 1e18 is not supported
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY = (
|
||||
(1, 'un euro'),
|
||||
(2, 'deux euros'),
|
||||
(8, 'huit euros'),
|
||||
(12, 'douze euros'),
|
||||
(21, 'vingt et un euros'),
|
||||
TEST_CASES_TO_CURRENCY_EUR = (
|
||||
(1.00, 'un euro et zéro centimes'),
|
||||
(2.01, 'deux euros et un centime'),
|
||||
(8.10, 'huit euros et dix centimes'),
|
||||
(12.26, 'douze euros et vingt-six centimes'),
|
||||
(21.29, 'vingt et un euros et vingt-neuf centimes'),
|
||||
(81.25, 'quatre-vingt et un euros et vingt-cinq centimes'),
|
||||
(100, 'cent euros'),
|
||||
(100.00, 'cent euros et zéro centimes'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_OLD = (
|
||||
(1, 'un franc'),
|
||||
(2, 'deux francs'),
|
||||
(8, 'huit francs'),
|
||||
(12, 'douze francs'),
|
||||
(21, 'vingt et un francs'),
|
||||
TEST_CASES_TO_CURRENCY_FRF = (
|
||||
(1.00, 'un franc et zéro centimes'),
|
||||
(2.01, 'deux francs et un centime'),
|
||||
(8.10, 'huit francs et dix centimes'),
|
||||
(12.27, 'douze francs et vingt-sept centimes'),
|
||||
(21.29, 'vingt et un francs et vingt-neuf centimes'),
|
||||
(81.25, 'quatre-vingt et un francs et vingt-cinq centimes'),
|
||||
(100, 'cent francs'),
|
||||
(100.00, 'cent francs et zéro centimes'),
|
||||
)
|
||||
|
||||
# Lang to execute current test
|
||||
@@ -114,16 +114,16 @@ class Num2WordsENTest(TestCase):
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency(self):
|
||||
for test in TEST_CASES_TO_CURRENCY:
|
||||
def test_currency_eur(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_EUR:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang=LANG, to='currency'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency_old(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_OLD:
|
||||
def test_currency_frf(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_FRF:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang=LANG, to='currency', old=True),
|
||||
num2words(test[0], lang=LANG, to='currency', currency='FRF'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
@@ -55,24 +55,24 @@ TEST_CASES_ORDINAL = (
|
||||
(1000000000000000000, 'un trillionsième') # over 1e18 is not supported
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY = (
|
||||
(1, 'un euro'),
|
||||
(2, 'deux euros'),
|
||||
(8, 'huit euros'),
|
||||
(12, 'douze euros'),
|
||||
(21, 'vingt et un euros'),
|
||||
TEST_CASES_TO_CURRENCY_EUR = (
|
||||
(1.00, 'un euro et zéro centimes'),
|
||||
(2.01, 'deux euros et un centime'),
|
||||
(8.10, 'huit euros et dix centimes'),
|
||||
(12.26, 'douze euros et vingt-six centimes'),
|
||||
(21.29, 'vingt et un euros et vingt-neuf centimes'),
|
||||
(81.25, 'huitante et un euros et vingt-cinq centimes'),
|
||||
(100, 'cent euros'),
|
||||
(100.00, 'cent euros et zéro centimes'),
|
||||
)
|
||||
|
||||
TEST_CASES_TO_CURRENCY_OLD = (
|
||||
(1, 'un franc'),
|
||||
(2, 'deux francs'),
|
||||
(8, 'huit francs'),
|
||||
(12, 'douze francs'),
|
||||
(21, 'vingt et un francs'),
|
||||
TEST_CASES_TO_CURRENCY_FRF = (
|
||||
(1.00, 'un franc et zéro centimes'),
|
||||
(2.01, 'deux francs et un centime'),
|
||||
(8.10, 'huit francs et dix centimes'),
|
||||
(12.27, 'douze francs et vingt-sept centimes'),
|
||||
(21.29, 'vingt et un francs et vingt-neuf centimes'),
|
||||
(81.25, 'huitante et un francs et vingt-cinq centimes'),
|
||||
(100, 'cent francs'),
|
||||
(100.00, 'cent francs et zéro centimes'),
|
||||
)
|
||||
|
||||
|
||||
@@ -111,16 +111,17 @@ class Num2WordsENTest(TestCase):
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency(self):
|
||||
for test in TEST_CASES_TO_CURRENCY:
|
||||
def test_currency_eur(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_EUR:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='fr_CH', to='currency'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
def test_currency_old(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_OLD:
|
||||
def test_currency_frf(self):
|
||||
for test in TEST_CASES_TO_CURRENCY_FRF:
|
||||
self.assertEqual(
|
||||
num2words(test[0], lang='fr_CH', to='currency', old=True),
|
||||
num2words(test[0], lang='fr_CH', to='currency',
|
||||
currency='FRF'),
|
||||
test[1]
|
||||
)
|
||||
|
||||
@@ -29,7 +29,7 @@ TEST_CASES_TO_CURRENCY = (
|
||||
(8, 'huit dinards'),
|
||||
(12, 'douze dinards'),
|
||||
(21, 'vingt et un dinards'),
|
||||
(81.25, 'quatre-vingt-un dinards virgule vingt-cinq centimes'),
|
||||
(81.25, 'quatre-vingt-un dinards et vingt-cinq centimes'),
|
||||
(100, 'cent dinards'),
|
||||
)
|
||||
|
||||
@@ -38,11 +38,11 @@ class Num2WordsPLTest(TestCase):
|
||||
def test_currency(self):
|
||||
self.assertEqual(
|
||||
num2words(1234.12, lang='fr_DZ', to='currency'),
|
||||
"mille deux cent trente-quatre dinards virgule douze centimes"
|
||||
"mille deux cent trente-quatre dinards et douze centimes"
|
||||
)
|
||||
self.assertEqual(
|
||||
num2words(45689.89, lang='fr_DZ', to='currency'),
|
||||
"quarante-cinq mille six cent quatre-vingt-neuf dinards virgule "
|
||||
"quarante-cinq mille six cent quatre-vingt-neuf dinards et "
|
||||
"quatre-vingt-neuf centimes"
|
||||
)
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ class Num2WordsNLTest(TestCase):
|
||||
def test_ordinal_for_floating_numbers(self):
|
||||
self.assertRaises(TypeError, num2words, 2.453, ordinal=True, lang='nl')
|
||||
|
||||
def test_to_currency(self):
|
||||
def test_to_currency_eur(self):
|
||||
self.assertEqual(
|
||||
num2words('38.4', lang='nl', to='currency', separator=' en',
|
||||
cents=False, currency='EUR'),
|
||||
@@ -90,6 +90,29 @@ class Num2WordsNLTest(TestCase):
|
||||
cents=True, currency='EUR'),
|
||||
'vierduizendzevenhonderdachtenzeventig euro en nul cent')
|
||||
|
||||
def test_to_currency_usd(self):
|
||||
self.assertEqual(
|
||||
num2words('38.4', lang='nl', to='currency', separator=' en',
|
||||
cents=False, currency='USD'),
|
||||
"achtendertig dollar en 40 cent"
|
||||
)
|
||||
self.assertEqual(
|
||||
num2words('0', lang='nl', to='currency', separator=' en',
|
||||
cents=False, currency='USD'),
|
||||
"nul dollar en 00 cent"
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
num2words('1.01', lang='nl', to='currency', separator=' en',
|
||||
cents=True, currency='USD'),
|
||||
"één dollar en één cent"
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
num2words('4778.00', lang='nl', to='currency', separator=' en',
|
||||
cents=True, currency='USD'),
|
||||
'vierduizendzevenhonderdachtenzeventig dollar en nul cent')
|
||||
|
||||
def test_pluralize(self):
|
||||
n = Num2Word_NL()
|
||||
# euros always singular
|
||||
|
||||
Reference in New Issue
Block a user