Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #498 - Romanian inflect is wrong for mega and giga values, add te… #499

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions num2words/lang_RO.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@


class Num2Word_RO(lang_EU.Num2Word_EU):
GIGA_SUFFIX = "iliard/e"
GIGA_SUFFIX = "iliard"
MEGA_SUFFIX = "ilion"
# inflection for mi/billion follows different rule
MEGA_SUFFIX_I = "ilioane"
Expand Down Expand Up @@ -91,7 +91,10 @@ def merge(self, lpair, rpair):
else:
if rnum in self.numwords_inflections:
rtext_i = self.inflect(lnum * rnum, rtext, lnum)
return ("%s %s" % (ltext, rtext_i), lnum * rnum)
if rnum in self.numwords_inflections:
return ("%s %s" % (ltext, rtext_i), lnum * rnum)
else:
return ("%s %s" % (ltext, rtext_i), lnum + rnum)

def to_ordinal(self, value):
self.verify_ordinal(value)
Expand Down Expand Up @@ -126,11 +129,22 @@ def inflect(self, value, text, side_effect=-1):
"de " + text[0][:-1] + text[1]
]
result = self.pluralize(side_effect, forms)
# mega inflections are different

# mega & giga inflections are different
replace_inflection = None
if side_effect > 1 and result.endswith(self.MEGA_SUFFIX):
result = result.replace(self.MEGA_SUFFIX, self.MEGA_SUFFIX_I)
elif side_effect > 1 and result.endswith("iliare"):
result = result.replace("iliare", self.GIGA_SUFFIX_I)
replace_inflection = (self.MEGA_SUFFIX, self.MEGA_SUFFIX_I)
elif side_effect > 1 and result.endswith(self.GIGA_SUFFIX):
replace_inflection = (self.GIGA_SUFFIX, self.GIGA_SUFFIX_I)

if replace_inflection is not None:
forms = [
result,
result.replace(replace_inflection[0], replace_inflection[1]),
"de " + result.replace(replace_inflection[0], replace_inflection[1])
]
result = self.pluralize(side_effect, forms)

return result

def to_currency(self, val, currency="RON", cents=False, separator=" și",
Expand Down
76 changes: 72 additions & 4 deletions tests/test_ro.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,22 +89,90 @@ def test_cardinal_for_float_number(self):
)

def test_big_numbers(self):
self.assertEqual(
num2words(12500, lang="ro"),
u"douăsprezece mii cinci sute"
)
self.assertEqual(
num2words(21750, lang="ro"),
u"douăzeci și unu de mii șapte sute cincizeci"
)
self.assertEqual(
num2words(1000000, lang="ro"),
u"un milion"
)
self.assertEqual(
num2words(2000000, lang="ro"),
u"două milioane"
)
self.assertEqual(
num2words(33000000, lang="ro"),
u"treizeci și trei de milioane"
)
self.assertEqual(
num2words(1000000000, lang="ro"),
u"un miliard"
)
self.assertEqual(
num2words(33000000, lang="ro"),
u"treizeci și trei milioane"
num2words(2000000000, lang="ro"),
u"două miliarde"
)
self.assertEqual(
num2words(12000000000, lang="ro"),
u"douăsprezece miliarde"
)
self.assertEqual(
num2words(33000000000, lang="ro"),
u"treizeci și trei de miliarde"
)
self.assertEqual(
num2words(247000000000, lang="ro"),
u"două sute patruzeci și șapte de miliarde"
)
self.assertEqual(
num2words(123456, lang="ro"),
u"o sută douăzeci și trei de mii patru sute cincizeci și șase"
)
self.assertEqual(
num2words(1234567, lang="ro"),
u"un milion două sute treizeci și patru de mii cinci sute șaizeci"
u" și șapte"
)
self.assertEqual(
num2words(9234567, lang="ro"),
u"nouă milioane două sute treizeci și patru de mii cinci sute"
u" șaizeci și șapte"
)
self.assertEqual(
num2words(19234567, lang="ro"),
u"nouăsprezece milioane două sute treizeci și patru de mii cinci"
u" sute șaizeci și șapte"
)
self.assertEqual(
num2words(319234567, lang="ro"),
u"trei sute nouăsprezece milioane două sute treizeci și patru de"
u" mii cinci sute șaizeci și șapte"
)
self.assertEqual(
num2words(320234567, lang="ro"),
u"trei sute douăzeci de milioane două sute treizeci și patru de mii"
u" cinci sute șaizeci și șapte"
)
self.assertEqual(
num2words(1319234567, lang="ro"),
u"un miliard trei sute nouăsprezece milioane două sute treizeci și"
u" patru de mii cinci sute șaizeci și șapte"
)
self.assertEqual(
num2words(7319234567, lang="ro"),
u"șapte miliarde trei sute nouăsprezece milioane două sute treizeci"
u" și patru de mii cinci sute șaizeci și șapte"
)
self.assertEqual(
num2words(27319234567, lang="ro"),
u"douăzeci și șapte de miliarde trei sute nouăsprezece milioane"
u" două sute treizeci și patru de mii cinci sute șaizeci și șapte"
)

def test_overflow(self):
with self.assertRaises(OverflowError):
Expand Down Expand Up @@ -154,7 +222,7 @@ def test_to_currency(self):
u'optzeci de mii de lei')
self.assertEqual(
num2words(123456789, lang='ro', to='currency'),
u'una sută douăzeci și trei milioane patru sute '
u'una sută douăzeci și trei de milioane patru sute '
u'cincizeci și șase de mii șapte sute optzeci și nouă de lei')

def test_to_year(self):
Expand Down Expand Up @@ -192,4 +260,4 @@ def test_to_year(self):
self.assertEqual(num2words(1, lang='ro', to='year', suffix='d.Hr.'),
u'unu d.Hr.')
self.assertEqual(num2words(-66000000, lang='ro', to='year'),
u'șaizeci și șase milioane î.Hr.')
u'șaizeci și șase de milioane î.Hr.')