Convert to single codebase for py2 and py3

No more 2to3. Also, added tox config for easy cross-python testing.
This commit is contained in:
Virgil Dupras
2016-11-22 09:13:18 -05:00
parent 0e06eb81dd
commit 20f634028d
15 changed files with 256 additions and 206 deletions

1
.gitignore vendored
View File

@@ -2,3 +2,4 @@
build build
dist dist
*.egg-info *.egg-info
/.tox

View File

@@ -15,7 +15,11 @@
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals from __future__ import unicode_literals
import math
from .orderedmapping import OrderedMapping from .orderedmapping import OrderedMapping
from .compat import to_s
class Num2Word_Base(object): class Num2Word_Base(object):
@@ -88,7 +92,7 @@ class Num2Word_Base(object):
def to_cardinal(self, value): def to_cardinal(self, value):
try: try:
assert long(value) == value assert int(value) == value
except (ValueError, TypeError, AssertionError): except (ValueError, TypeError, AssertionError):
return self.to_cardinal_float(value) return self.to_cardinal_float(value)
@@ -113,9 +117,18 @@ class Num2Word_Base(object):
except (ValueError, TypeError, AssertionError): except (ValueError, TypeError, AssertionError):
raise TypeError(self.errmsg_nonnum % value) raise TypeError(self.errmsg_nonnum % value)
value = float(value)
pre = int(value) pre = int(value)
post = str(abs(value - pre) * 10**self.precision) post = abs(value - pre) * 10**self.precision
post = '0' * (self.precision - len(post.split('.')[0])) + 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(math.floor(post))
post = str(post)
post = '0' * (self.precision - len(post)) + post
out = [self.to_cardinal(pre)] out = [self.to_cardinal(pre)]
if self.precision: if self.precision:
@@ -123,7 +136,7 @@ class Num2Word_Base(object):
for i in range(self.precision): for i in range(self.precision):
curr = int(post[i]) curr = int(post[i])
out.append(unicode(self.to_cardinal(curr))) out.append(to_s(self.to_cardinal(curr)))
return " ".join(out) return " ".join(out)
@@ -168,10 +181,10 @@ class Num2Word_Base(object):
def verify_ordinal(self, value): def verify_ordinal(self, value):
if not value == long(value): if not value == int(value):
raise TypeError, self.errmsg_floatord %(value) raise TypeError(self.errmsg_floatord % value)
if not abs(value) == value: if not abs(value) == value:
raise TypeError, self.errmsg_negord %(value) raise TypeError(self.errmsg_negord % value)
def verify_num(self, value): def verify_num(self, value):

26
num2words/compat.py Normal file
View File

@@ -0,0 +1,26 @@
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
# Copyright (c) 2016, 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
import sys
PY3 = sys.version_info[0] == 3
def to_s(val):
if PY3:
return str(val)
else:
return unicode(val)

View File

@@ -15,7 +15,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals from __future__ import unicode_literals, print_function
from .lang_EU import Num2Word_EU from .lang_EU import Num2Word_EU
class Num2Word_DE(Num2Word_EU): class Num2Word_DE(Num2Word_EU):
@@ -133,10 +133,10 @@ def main():
n2w.test(3000000) n2w.test(3000000)
n2w.test(3000000000001) n2w.test(3000000000001)
n2w.test(3000000324566) n2w.test(3000000324566)
print n2w.to_currency(112121) print(n2w.to_currency(112121))
print n2w.to_year(2000) print(n2w.to_year(2000))
print n2w.to_year(1820) print(n2w.to_year(1820))
print n2w.to_year(2001) print(n2w.to_year(2001))
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -14,7 +14,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import division, unicode_literals from __future__ import division, unicode_literals, print_function
from num2words import lang_EU from num2words import lang_EU
class Num2Word_DK(lang_EU.Num2Word_EU): class Num2Word_DK(lang_EU.Num2Word_EU):
@@ -146,8 +146,8 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
for val in [1,120, 160, 1000,1120,1800, 1976,2000,2010,2099,2171]: for val in [1,120, 160, 1000,1120,1800, 1976,2000,2010,2099,2171]:
print val, "er", n2w.to_currency(val) print(val, "er", n2w.to_currency(val))
print val, "er", n2w.to_year(val) print(val, "er", n2w.to_year(val))
n2w.test(65132) n2w.test(65132)
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -14,7 +14,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import division, unicode_literals from __future__ import division, unicode_literals, print_function
from . import lang_EU from . import lang_EU
class Num2Word_EN(lang_EU.Num2Word_EU): class Num2Word_EN(lang_EU.Num2Word_EU):
@@ -47,7 +47,9 @@ class Num2Word_EN(lang_EU.Num2Word_EU):
"twelve" : "twelfth" } "twelve" : "twelfth" }
def merge(self, (ltext, lnum), (rtext, rnum)): def merge(self, lpair, rpair):
ltext, lnum = lpair
rtext, rnum = rpair
if lnum == 1 and rnum < 100: if lnum == 1 and rnum < 100:
return (rtext, rnum) return (rtext, rnum)
elif 100 > lnum > rnum : elif 100 > lnum > rnum :
@@ -105,8 +107,8 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]: for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]:
print val, "is", n2w.to_currency(val) print(val, "is", n2w.to_currency(val))
print val, "is", n2w.to_year(val) print(val, "is", n2w.to_year(val))
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -14,7 +14,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals from __future__ import unicode_literals, print_function
from .lang_EN import Num2Word_EN from .lang_EN import Num2Word_EN
@@ -38,8 +38,8 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]: for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]:
print val, "is", n2w.to_currency(val) print(val, "is", n2w.to_currency(val))
print val, "is", n2w.to_year(val) print(val, "is", n2w.to_year(val))
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -16,7 +16,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals from __future__ import unicode_literals, print_function
from .lang_EU import Num2Word_EU from .lang_EU import Num2Word_EU
class Num2Word_ES(Num2Word_EU): class Num2Word_ES(Num2Word_EU):
@@ -173,9 +173,9 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
print n2w.to_currency(1222) print(n2w.to_currency(1222))
print n2w.to_currency(1222, old=True) print(n2w.to_currency(1222, old=True))
print n2w.to_year(1222) print(n2w.to_year(1222))
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -15,7 +15,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals from __future__ import unicode_literals, print_function
from .lang_EU import Num2Word_EU from .lang_EU import Num2Word_EU
@@ -106,8 +106,8 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
print n2w.to_currency(112121) print(n2w.to_currency(112121))
print n2w.to_year(1996) print(n2w.to_year(1996))
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -15,7 +15,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals from __future__ import unicode_literals, print_function
from .lang_EU import Num2Word_EU from .lang_EU import Num2Word_EU
class Num2Word_FR_CH(Num2Word_EU): class Num2Word_FR_CH(Num2Word_EU):
@@ -101,8 +101,8 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
print n2w.to_currency(112121) print(n2w.to_currency(112121))
print n2w.to_year(1996) print(n2w.to_year(1996))
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -14,6 +14,8 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import unicode_literals, print_function
class Num2Word_ID(): class Num2Word_ID():
BASE = {0: [], BASE = {0: [],
@@ -188,7 +190,7 @@ class Num2Word_ID():
return self.to_cardinal(value) return self.to_cardinal(value)
def verify_ordinal(self, value): def verify_ordinal(self, value):
if not value == long(value): if not value == int(value):
raise TypeError, self.errmsg_floatord %(value) raise TypeError(self.errmsg_floatord % value)
if not abs(value) == value: if not abs(value) == value:
raise TypeError, self.errmsg_negord %(value) raise TypeError(self.errmsg_negord % value)

View File

@@ -14,7 +14,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA # MA 02110-1301 USA
from __future__ import division, unicode_literals from __future__ import division, unicode_literals, print_function
from . import lang_EU from . import lang_EU
class Num2Word_NO(lang_EU.Num2Word_EU): class Num2Word_NO(lang_EU.Num2Word_EU):
@@ -54,7 +54,9 @@ class Num2Word_NO(lang_EU.Num2Word_EU):
"tjue" : "tjuende" } "tjue" : "tjuende" }
def merge(self, (ltext, lnum), (rtext, rnum)): def merge(self, lpair, rpair):
ltext, lnum = lpair
rtext, rnum = rpair
if lnum == 1 and rnum < 100: if lnum == 1 and rnum < 100:
return (rtext, rnum) return (rtext, rnum)
elif 100 > lnum > rnum : elif 100 > lnum > rnum :
@@ -113,8 +115,8 @@ def main():
n2w.test(val) n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730) n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]: for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]:
print val, "er", n2w.to_currency(val) print(val, "er", n2w.to_currency(val))
print val, "er", n2w.to_year(val) print(val, "er", n2w.to_year(val))
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -29,5 +29,4 @@ setup(
url='https://github.com/savoirfairelinux/num2words', url='https://github.com/savoirfairelinux/num2words',
packages=find_packages(exclude=['tests']), packages=find_packages(exclude=['tests']),
test_suite='tests', test_suite='tests',
use_2to3=True,
) )

View File

@@ -29,191 +29,191 @@ class Num2WordsPTBRTest(TestCase):
self.n2w = Num2Word_PT_BR() self.n2w = Num2Word_PT_BR()
def test_cardinal_integer(self): def test_cardinal_integer(self):
self.assertEquals(num2words(1, lang='pt_BR'), 'um') self.assertEqual(num2words(1, lang='pt_BR'), 'um')
self.assertEquals(num2words(2, lang='pt_BR'), 'dois') self.assertEqual(num2words(2, lang='pt_BR'), 'dois')
self.assertEquals(num2words(3, lang='pt_BR'), 'três') self.assertEqual(num2words(3, lang='pt_BR'), 'três')
self.assertEquals(num2words(4, lang='pt_BR'), 'quatro') self.assertEqual(num2words(4, lang='pt_BR'), 'quatro')
self.assertEquals(num2words(5, lang='pt_BR'), 'cinco') self.assertEqual(num2words(5, lang='pt_BR'), 'cinco')
self.assertEquals(num2words(6, lang='pt_BR'), 'seis') self.assertEqual(num2words(6, lang='pt_BR'), 'seis')
self.assertEquals(num2words(7, lang='pt_BR'), 'sete') self.assertEqual(num2words(7, lang='pt_BR'), 'sete')
self.assertEquals(num2words(8, lang='pt_BR'), 'oito') self.assertEqual(num2words(8, lang='pt_BR'), 'oito')
self.assertEquals(num2words(9, lang='pt_BR'), 'nove') self.assertEqual(num2words(9, lang='pt_BR'), 'nove')
self.assertEquals(num2words(10, lang='pt_BR'), 'dez') self.assertEqual(num2words(10, lang='pt_BR'), 'dez')
self.assertEquals(num2words(11, lang='pt_BR'), 'onze') self.assertEqual(num2words(11, lang='pt_BR'), 'onze')
self.assertEquals(num2words(12, lang='pt_BR'), 'doze') self.assertEqual(num2words(12, lang='pt_BR'), 'doze')
self.assertEquals(num2words(13, lang='pt_BR'), 'treze') self.assertEqual(num2words(13, lang='pt_BR'), 'treze')
self.assertEquals(num2words(14, lang='pt_BR'), 'catorze') self.assertEqual(num2words(14, lang='pt_BR'), 'catorze')
self.assertEquals(num2words(15, lang='pt_BR'), 'quinze') self.assertEqual(num2words(15, lang='pt_BR'), 'quinze')
self.assertEquals(num2words(16, lang='pt_BR'), 'dezesseis') self.assertEqual(num2words(16, lang='pt_BR'), 'dezesseis')
self.assertEquals(num2words(17, lang='pt_BR'), 'dezessete') self.assertEqual(num2words(17, lang='pt_BR'), 'dezessete')
self.assertEquals(num2words(18, lang='pt_BR'), 'dezoito') self.assertEqual(num2words(18, lang='pt_BR'), 'dezoito')
self.assertEquals(num2words(19, lang='pt_BR'), 'dezenove') self.assertEqual(num2words(19, lang='pt_BR'), 'dezenove')
self.assertEquals(num2words(20, lang='pt_BR'), 'vinte') self.assertEqual(num2words(20, lang='pt_BR'), 'vinte')
self.assertEquals(num2words(21, lang='pt_BR'), 'vinte e um') self.assertEqual(num2words(21, lang='pt_BR'), 'vinte e um')
self.assertEquals(num2words(22, lang='pt_BR'), 'vinte e dois') self.assertEqual(num2words(22, lang='pt_BR'), 'vinte e dois')
self.assertEquals(num2words(35, lang='pt_BR'), 'trinta e cinco') self.assertEqual(num2words(35, lang='pt_BR'), 'trinta e cinco')
self.assertEquals(num2words(99, lang='pt_BR'), 'noventa e nove') self.assertEqual(num2words(99, lang='pt_BR'), 'noventa e nove')
self.assertEquals(num2words(100, lang='pt_BR'), 'cem') self.assertEqual(num2words(100, lang='pt_BR'), 'cem')
self.assertEquals(num2words(101, lang='pt_BR'), 'cento e um') self.assertEqual(num2words(101, lang='pt_BR'), 'cento e um')
self.assertEquals(num2words(128, lang='pt_BR'), 'cento e vinte e oito') self.assertEqual(num2words(128, lang='pt_BR'), 'cento e vinte e oito')
self.assertEquals(num2words(713, lang='pt_BR'), 'setecentos e treze') self.assertEqual(num2words(713, lang='pt_BR'), 'setecentos e treze')
self.assertEquals(num2words(1000, lang='pt_BR'), 'mil') self.assertEqual(num2words(1000, lang='pt_BR'), 'mil')
self.assertEquals(num2words(1001, lang='pt_BR'), 'mil e um') self.assertEqual(num2words(1001, lang='pt_BR'), 'mil e um')
self.assertEquals(num2words(1111, lang='pt_BR'), 'mil, cento e onze') self.assertEqual(num2words(1111, lang='pt_BR'), 'mil, cento e onze')
self.assertEquals(num2words(2114, lang='pt_BR'), 'dois mil, cento e catorze') self.assertEqual(num2words(2114, lang='pt_BR'), 'dois mil, cento e catorze')
self.assertEquals(num2words(73421, lang='pt_BR'), 'setenta e três mil, quatrocentos e vinte e um') self.assertEqual(num2words(73421, lang='pt_BR'), 'setenta e três mil, quatrocentos e vinte e um')
self.assertEquals(num2words(100000, lang='pt_BR'), 'cem mil') self.assertEqual(num2words(100000, lang='pt_BR'), 'cem mil')
self.assertEquals(num2words(250050, lang='pt_BR'), 'duzentos e cinquenta mil e cinquenta') self.assertEqual(num2words(250050, lang='pt_BR'), 'duzentos e cinquenta mil e cinquenta')
self.assertEquals(num2words(6000000, lang='pt_BR'), 'seis milhões') self.assertEqual(num2words(6000000, lang='pt_BR'), 'seis milhões')
self.assertEquals(num2words(19000000000, lang='pt_BR'), 'dezenove bilhões') self.assertEqual(num2words(19000000000, lang='pt_BR'), 'dezenove bilhões')
self.assertEquals(num2words(145000000002, lang='pt_BR'), 'cento e quarenta e cinco bilhões e dois') self.assertEqual(num2words(145000000002, lang='pt_BR'), 'cento e quarenta e cinco bilhões e dois')
def test_cardinal_integer_negative(self): def test_cardinal_integer_negative(self):
self.assertEquals(num2words(-1, lang='pt_BR'), 'menos um') self.assertEqual(num2words(-1, lang='pt_BR'), 'menos um')
self.assertEquals(num2words(-256, lang='pt_BR'), 'menos duzentos e cinquenta e seis') self.assertEqual(num2words(-256, lang='pt_BR'), 'menos duzentos e cinquenta e seis')
self.assertEquals(num2words(-1000, lang='pt_BR'), 'menos mil') self.assertEqual(num2words(-1000, lang='pt_BR'), 'menos mil')
self.assertEquals(num2words(-1000000, lang='pt_BR'), 'menos um milhão') self.assertEqual(num2words(-1000000, lang='pt_BR'), 'menos um milhão')
self.assertEquals(num2words(-1234567, lang='pt_BR'), 'menos um milhão, duzentos e trinta e quatro mil, quinhentos e sessenta e sete') self.assertEqual(num2words(-1234567, lang='pt_BR'), 'menos um milhão, duzentos e trinta e quatro mil, quinhentos e sessenta e sete')
def test_cardinal_float(self): def test_cardinal_float(self):
self.assertEquals(num2words(Decimal('1.00'), lang='pt_BR'), 'um') self.assertEqual(num2words(Decimal('1.00'), lang='pt_BR'), 'um')
self.assertEquals(num2words(Decimal('1.01'), lang='pt_BR'), 'um vírgula zero um') self.assertEqual(num2words(Decimal('1.01'), lang='pt_BR'), 'um vírgula zero um')
self.assertEquals(num2words(Decimal('1.035'), lang='pt_BR'), 'um vírgula zero três') self.assertEqual(num2words(Decimal('1.035'), lang='pt_BR'), 'um vírgula zero três')
self.assertEquals(num2words(Decimal('1.35'), lang='pt_BR'), 'um vírgula três cinco') self.assertEqual(num2words(Decimal('1.35'), lang='pt_BR'), 'um vírgula três cinco')
self.assertEquals(num2words(Decimal('3.14159'), lang='pt_BR'), 'três vírgula um quatro') self.assertEqual(num2words(Decimal('3.14159'), lang='pt_BR'), 'três vírgula um quatro')
self.assertEquals(num2words(Decimal('101.22'), lang='pt_BR'), 'cento e um vírgula dois dois') self.assertEqual(num2words(Decimal('101.22'), lang='pt_BR'), 'cento e um vírgula dois dois')
self.assertEquals(num2words(Decimal('2345.75'), lang='pt_BR'), 'dois mil, trezentos e quarenta e cinco vírgula sete cinco') self.assertEqual(num2words(Decimal('2345.75'), lang='pt_BR'), 'dois mil, trezentos e quarenta e cinco vírgula sete cinco')
def test_cardinal_float_negative(self): def test_cardinal_float_negative(self):
self.assertEquals(num2words(Decimal('-2.34'), lang='pt_BR'), 'menos dois vírgula três quatro') self.assertEqual(num2words(Decimal('-2.34'), lang='pt_BR'), 'menos dois vírgula três quatro')
self.assertEquals(num2words(Decimal('-9.99'), lang='pt_BR'), 'menos nove vírgula nove nove') self.assertEqual(num2words(Decimal('-9.99'), lang='pt_BR'), 'menos nove vírgula nove nove')
self.assertEquals(num2words(Decimal('-7.01'), lang='pt_BR'), 'menos sete vírgula zero um') self.assertEqual(num2words(Decimal('-7.01'), lang='pt_BR'), 'menos sete vírgula zero um')
self.assertEquals(num2words(Decimal('-222.22'), lang='pt_BR'), 'menos duzentos e vinte e dois vírgula dois dois') self.assertEqual(num2words(Decimal('-222.22'), lang='pt_BR'), 'menos duzentos e vinte e dois vírgula dois dois')
def test_ordinal(self): def test_ordinal(self):
self.assertEquals(num2words(1, lang='pt_BR', ordinal=True), 'primeiro') self.assertEqual(num2words(1, lang='pt_BR', ordinal=True), 'primeiro')
self.assertEquals(num2words(2, lang='pt_BR', ordinal=True), 'segundo') self.assertEqual(num2words(2, lang='pt_BR', ordinal=True), 'segundo')
self.assertEquals(num2words(3, lang='pt_BR', ordinal=True), 'terceiro') self.assertEqual(num2words(3, lang='pt_BR', ordinal=True), 'terceiro')
self.assertEquals(num2words(4, lang='pt_BR', ordinal=True), 'quarto') self.assertEqual(num2words(4, lang='pt_BR', ordinal=True), 'quarto')
self.assertEquals(num2words(5, lang='pt_BR', ordinal=True), 'quinto') self.assertEqual(num2words(5, lang='pt_BR', ordinal=True), 'quinto')
self.assertEquals(num2words(6, lang='pt_BR', ordinal=True), 'sexto') self.assertEqual(num2words(6, lang='pt_BR', ordinal=True), 'sexto')
self.assertEquals(num2words(7, lang='pt_BR', ordinal=True), 'sétimo') self.assertEqual(num2words(7, lang='pt_BR', ordinal=True), 'sétimo')
self.assertEquals(num2words(8, lang='pt_BR', ordinal=True), 'oitavo') self.assertEqual(num2words(8, lang='pt_BR', ordinal=True), 'oitavo')
self.assertEquals(num2words(9, lang='pt_BR', ordinal=True), 'nono') self.assertEqual(num2words(9, lang='pt_BR', ordinal=True), 'nono')
self.assertEquals(num2words(10, lang='pt_BR', ordinal=True), 'décimo') self.assertEqual(num2words(10, lang='pt_BR', ordinal=True), 'décimo')
self.assertEquals(num2words(11, lang='pt_BR', ordinal=True), 'décimo primeiro') self.assertEqual(num2words(11, lang='pt_BR', ordinal=True), 'décimo primeiro')
self.assertEquals(num2words(12, lang='pt_BR', ordinal=True), 'décimo segundo') self.assertEqual(num2words(12, lang='pt_BR', ordinal=True), 'décimo segundo')
self.assertEquals(num2words(13, lang='pt_BR', ordinal=True), 'décimo terceiro') self.assertEqual(num2words(13, lang='pt_BR', ordinal=True), 'décimo terceiro')
self.assertEquals(num2words(14, lang='pt_BR', ordinal=True), 'décimo quarto') self.assertEqual(num2words(14, lang='pt_BR', ordinal=True), 'décimo quarto')
self.assertEquals(num2words(15, lang='pt_BR', ordinal=True), 'décimo quinto') self.assertEqual(num2words(15, lang='pt_BR', ordinal=True), 'décimo quinto')
self.assertEquals(num2words(16, lang='pt_BR', ordinal=True), 'décimo sexto') self.assertEqual(num2words(16, lang='pt_BR', ordinal=True), 'décimo sexto')
self.assertEquals(num2words(17, lang='pt_BR', ordinal=True), 'décimo sétimo') self.assertEqual(num2words(17, lang='pt_BR', ordinal=True), 'décimo sétimo')
self.assertEquals(num2words(18, lang='pt_BR', ordinal=True), 'décimo oitavo') self.assertEqual(num2words(18, lang='pt_BR', ordinal=True), 'décimo oitavo')
self.assertEquals(num2words(19, lang='pt_BR', ordinal=True), 'décimo nono') self.assertEqual(num2words(19, lang='pt_BR', ordinal=True), 'décimo nono')
self.assertEquals(num2words(20, lang='pt_BR', ordinal=True), 'vigésimo') self.assertEqual(num2words(20, lang='pt_BR', ordinal=True), 'vigésimo')
self.assertEquals(num2words(21, lang='pt_BR', ordinal=True), 'vigésimo primeiro') self.assertEqual(num2words(21, lang='pt_BR', ordinal=True), 'vigésimo primeiro')
self.assertEquals(num2words(22, lang='pt_BR', ordinal=True), 'vigésimo segundo') self.assertEqual(num2words(22, lang='pt_BR', ordinal=True), 'vigésimo segundo')
self.assertEquals(num2words(35, lang='pt_BR', ordinal=True), 'trigésimo quinto') self.assertEqual(num2words(35, lang='pt_BR', ordinal=True), 'trigésimo quinto')
self.assertEquals(num2words(99, lang='pt_BR', ordinal=True), 'nonagésimo nono') self.assertEqual(num2words(99, lang='pt_BR', ordinal=True), 'nonagésimo nono')
self.assertEquals(num2words(100, lang='pt_BR', ordinal=True), 'centésimo') self.assertEqual(num2words(100, lang='pt_BR', ordinal=True), 'centésimo')
self.assertEquals(num2words(101, lang='pt_BR', ordinal=True), 'centésimo primeiro') self.assertEqual(num2words(101, lang='pt_BR', ordinal=True), 'centésimo primeiro')
self.assertEquals(num2words(128, lang='pt_BR', ordinal=True), 'centésimo vigésimo oitavo') self.assertEqual(num2words(128, lang='pt_BR', ordinal=True), 'centésimo vigésimo oitavo')
self.assertEquals(num2words(713, lang='pt_BR', ordinal=True), 'septigentésimo décimo terceiro') self.assertEqual(num2words(713, lang='pt_BR', ordinal=True), 'septigentésimo décimo terceiro')
self.assertEquals(num2words(1000, lang='pt_BR', ordinal=True), 'milésimo') self.assertEqual(num2words(1000, lang='pt_BR', ordinal=True), 'milésimo')
self.assertEquals(num2words(1001, lang='pt_BR', ordinal=True), 'milésimo primeiro') self.assertEqual(num2words(1001, lang='pt_BR', ordinal=True), 'milésimo primeiro')
self.assertEquals(num2words(1111, lang='pt_BR', ordinal=True), 'milésimo centésimo décimo primeiro') self.assertEqual(num2words(1111, lang='pt_BR', ordinal=True), 'milésimo centésimo décimo primeiro')
self.assertEquals(num2words(2114, lang='pt_BR', ordinal=True), 'segundo milésimo centésimo décimo quarto') self.assertEqual(num2words(2114, lang='pt_BR', ordinal=True), 'segundo milésimo centésimo décimo quarto')
self.assertEquals(num2words(73421, lang='pt_BR', ordinal=True), 'septuagésimo terceiro milésimo quadrigentésimo vigésimo primeiro') self.assertEqual(num2words(73421, lang='pt_BR', ordinal=True), 'septuagésimo terceiro milésimo quadrigentésimo vigésimo primeiro')
self.assertEquals(num2words(100000, lang='pt_BR', ordinal=True), 'centésimo milésimo') self.assertEqual(num2words(100000, lang='pt_BR', ordinal=True), 'centésimo milésimo')
self.assertEquals(num2words(250050, lang='pt_BR', ordinal=True), 'ducentésimo quinquagésimo milésimo quinquagésimo') self.assertEqual(num2words(250050, lang='pt_BR', ordinal=True), 'ducentésimo quinquagésimo milésimo quinquagésimo')
self.assertEquals(num2words(6000000, lang='pt_BR', ordinal=True), 'sexto milionésimo') self.assertEqual(num2words(6000000, lang='pt_BR', ordinal=True), 'sexto milionésimo')
self.assertEquals(num2words(19000000000, lang='pt_BR', ordinal=True), 'décimo nono bilionésimo') self.assertEqual(num2words(19000000000, lang='pt_BR', ordinal=True), 'décimo nono bilionésimo')
self.assertEquals(num2words(145000000002, lang='pt_BR', ordinal=True), 'centésimo quadragésimo quinto bilionésimo segundo') self.assertEqual(num2words(145000000002, lang='pt_BR', ordinal=True), 'centésimo quadragésimo quinto bilionésimo segundo')
def test_currency_integer(self): def test_currency_integer(self):
self.assertEquals(self.n2w.to_currency(1), 'um real') self.assertEqual(self.n2w.to_currency(1), 'um real')
self.assertEquals(self.n2w.to_currency(2), 'dois reais') self.assertEqual(self.n2w.to_currency(2), 'dois reais')
self.assertEquals(self.n2w.to_currency(3), 'três reais') self.assertEqual(self.n2w.to_currency(3), 'três reais')
self.assertEquals(self.n2w.to_currency(4), 'quatro reais') self.assertEqual(self.n2w.to_currency(4), 'quatro reais')
self.assertEquals(self.n2w.to_currency(5), 'cinco reais') self.assertEqual(self.n2w.to_currency(5), 'cinco reais')
self.assertEquals(self.n2w.to_currency(6), 'seis reais') self.assertEqual(self.n2w.to_currency(6), 'seis reais')
self.assertEquals(self.n2w.to_currency(7), 'sete reais') self.assertEqual(self.n2w.to_currency(7), 'sete reais')
self.assertEquals(self.n2w.to_currency(8), 'oito reais') self.assertEqual(self.n2w.to_currency(8), 'oito reais')
self.assertEquals(self.n2w.to_currency(9), 'nove reais') self.assertEqual(self.n2w.to_currency(9), 'nove reais')
self.assertEquals(self.n2w.to_currency(10), 'dez reais') self.assertEqual(self.n2w.to_currency(10), 'dez reais')
self.assertEquals(self.n2w.to_currency(11), 'onze reais') self.assertEqual(self.n2w.to_currency(11), 'onze reais')
self.assertEquals(self.n2w.to_currency(12), 'doze reais') self.assertEqual(self.n2w.to_currency(12), 'doze reais')
self.assertEquals(self.n2w.to_currency(13), 'treze reais') self.assertEqual(self.n2w.to_currency(13), 'treze reais')
self.assertEquals(self.n2w.to_currency(14), 'catorze reais') self.assertEqual(self.n2w.to_currency(14), 'catorze reais')
self.assertEquals(self.n2w.to_currency(15), 'quinze reais') self.assertEqual(self.n2w.to_currency(15), 'quinze reais')
self.assertEquals(self.n2w.to_currency(16), 'dezesseis reais') self.assertEqual(self.n2w.to_currency(16), 'dezesseis reais')
self.assertEquals(self.n2w.to_currency(17), 'dezessete reais') self.assertEqual(self.n2w.to_currency(17), 'dezessete reais')
self.assertEquals(self.n2w.to_currency(18), 'dezoito reais') self.assertEqual(self.n2w.to_currency(18), 'dezoito reais')
self.assertEquals(self.n2w.to_currency(19), 'dezenove reais') self.assertEqual(self.n2w.to_currency(19), 'dezenove reais')
self.assertEquals(self.n2w.to_currency(20), 'vinte reais') self.assertEqual(self.n2w.to_currency(20), 'vinte reais')
self.assertEquals(self.n2w.to_currency(21), 'vinte e um reais') self.assertEqual(self.n2w.to_currency(21), 'vinte e um reais')
self.assertEquals(self.n2w.to_currency(22), 'vinte e dois reais') self.assertEqual(self.n2w.to_currency(22), 'vinte e dois reais')
self.assertEquals(self.n2w.to_currency(35), 'trinta e cinco reais') self.assertEqual(self.n2w.to_currency(35), 'trinta e cinco reais')
self.assertEquals(self.n2w.to_currency(99), 'noventa e nove reais') self.assertEqual(self.n2w.to_currency(99), 'noventa e nove reais')
self.assertEquals(self.n2w.to_currency(100), 'cem reais') self.assertEqual(self.n2w.to_currency(100), 'cem reais')
self.assertEquals(self.n2w.to_currency(101), 'cento e um reais') self.assertEqual(self.n2w.to_currency(101), 'cento e um reais')
self.assertEquals(self.n2w.to_currency(128), 'cento e vinte e oito reais') self.assertEqual(self.n2w.to_currency(128), 'cento e vinte e oito reais')
self.assertEquals(self.n2w.to_currency(713), 'setecentos e treze reais') self.assertEqual(self.n2w.to_currency(713), 'setecentos e treze reais')
self.assertEquals(self.n2w.to_currency(1000), 'mil reais') self.assertEqual(self.n2w.to_currency(1000), 'mil reais')
self.assertEquals(self.n2w.to_currency(1001), 'mil e um reais') self.assertEqual(self.n2w.to_currency(1001), 'mil e um reais')
self.assertEquals(self.n2w.to_currency(1111), 'mil, cento e onze reais') self.assertEqual(self.n2w.to_currency(1111), 'mil, cento e onze reais')
self.assertEquals(self.n2w.to_currency(2114), 'dois mil, cento e catorze reais') self.assertEqual(self.n2w.to_currency(2114), 'dois mil, cento e catorze reais')
self.assertEquals(self.n2w.to_currency(73421), 'setenta e três mil, quatrocentos e vinte e um reais') self.assertEqual(self.n2w.to_currency(73421), 'setenta e três mil, quatrocentos e vinte e um reais')
self.assertEquals(self.n2w.to_currency(100000), 'cem mil reais') self.assertEqual(self.n2w.to_currency(100000), 'cem mil reais')
self.assertEquals(self.n2w.to_currency(250050), 'duzentos e cinquenta mil e cinquenta reais') self.assertEqual(self.n2w.to_currency(250050), 'duzentos e cinquenta mil e cinquenta reais')
self.assertEquals(self.n2w.to_currency(6000000), 'seis milhões de reais') self.assertEqual(self.n2w.to_currency(6000000), 'seis milhões de reais')
self.assertEquals(self.n2w.to_currency(19000000000), 'dezenove bilhões de reais') self.assertEqual(self.n2w.to_currency(19000000000), 'dezenove bilhões de reais')
self.assertEquals(self.n2w.to_currency(145000000002), 'cento e quarenta e cinco bilhões e dois reais') self.assertEqual(self.n2w.to_currency(145000000002), 'cento e quarenta e cinco bilhões e dois reais')
def test_currency_integer_negative(self): def test_currency_integer_negative(self):
self.assertEquals(self.n2w.to_currency(-1), 'menos um real') self.assertEqual(self.n2w.to_currency(-1), 'menos um real')
self.assertEquals(self.n2w.to_currency(-256), 'menos duzentos e cinquenta e seis reais') self.assertEqual(self.n2w.to_currency(-256), 'menos duzentos e cinquenta e seis reais')
self.assertEquals(self.n2w.to_currency(-1000), 'menos mil reais') self.assertEqual(self.n2w.to_currency(-1000), 'menos mil reais')
self.assertEquals(self.n2w.to_currency(-1000000), 'menos um milhão de reais') self.assertEqual(self.n2w.to_currency(-1000000), 'menos um milhão de reais')
self.assertEquals(self.n2w.to_currency(-1234567), 'menos um milhão, duzentos e trinta e quatro mil, quinhentos e sessenta e sete reais') self.assertEqual(self.n2w.to_currency(-1234567), 'menos um milhão, duzentos e trinta e quatro mil, quinhentos e sessenta e sete reais')
def test_currency_float(self): def test_currency_float(self):
self.assertEquals(self.n2w.to_currency(Decimal('1.00')), 'um real') self.assertEqual(self.n2w.to_currency(Decimal('1.00')), 'um real')
self.assertEquals(self.n2w.to_currency(Decimal('1.01')), 'um real e um centavo') self.assertEqual(self.n2w.to_currency(Decimal('1.01')), 'um real e um centavo')
self.assertEquals(self.n2w.to_currency(Decimal('1.035')), 'um real e três centavos') self.assertEqual(self.n2w.to_currency(Decimal('1.035')), 'um real e três centavos')
self.assertEquals(self.n2w.to_currency(Decimal('1.35')), 'um real e trinta e cinco centavos') self.assertEqual(self.n2w.to_currency(Decimal('1.35')), 'um real e trinta e cinco centavos')
self.assertEquals(self.n2w.to_currency(Decimal('3.14159')), 'três reais e catorze centavos') self.assertEqual(self.n2w.to_currency(Decimal('3.14159')), 'três reais e catorze centavos')
self.assertEquals(self.n2w.to_currency(Decimal('101.22')), 'cento e um reais e vinte e dois centavos') self.assertEqual(self.n2w.to_currency(Decimal('101.22')), 'cento e um reais e vinte e dois centavos')
self.assertEquals(self.n2w.to_currency(Decimal('2345.75')), 'dois mil, trezentos e quarenta e cinco reais e setenta e cinco centavos') self.assertEqual(self.n2w.to_currency(Decimal('2345.75')), 'dois mil, trezentos e quarenta e cinco reais e setenta e cinco centavos')
def test_currency_float_negative(self): def test_currency_float_negative(self):
self.assertEquals(self.n2w.to_currency(Decimal('-2.34')), 'menos dois reais e trinta e quatro centavos') self.assertEqual(self.n2w.to_currency(Decimal('-2.34')), 'menos dois reais e trinta e quatro centavos')
self.assertEquals(self.n2w.to_currency(Decimal('-9.99')), 'menos nove reais e noventa e nove centavos') self.assertEqual(self.n2w.to_currency(Decimal('-9.99')), 'menos nove reais e noventa e nove centavos')
self.assertEquals(self.n2w.to_currency(Decimal('-7.01')), 'menos sete reais e um centavo') self.assertEqual(self.n2w.to_currency(Decimal('-7.01')), 'menos sete reais e um centavo')
self.assertEquals(self.n2w.to_currency(Decimal('-222.22')), 'menos duzentos e vinte e dois reais e vinte e dois centavos') self.assertEqual(self.n2w.to_currency(Decimal('-222.22')), 'menos duzentos e vinte e dois reais e vinte e dois centavos')
def test_year(self): def test_year(self):
self.assertEquals(self.n2w.to_year(1001), 'mil e um') self.assertEqual(self.n2w.to_year(1001), 'mil e um')
self.assertEquals(self.n2w.to_year(1789), 'mil, setecentos e oitenta e nove') self.assertEqual(self.n2w.to_year(1789), 'mil, setecentos e oitenta e nove')
self.assertEquals(self.n2w.to_year(1942), 'mil, novecentos e quarenta e dois') self.assertEqual(self.n2w.to_year(1942), 'mil, novecentos e quarenta e dois')
self.assertEquals(self.n2w.to_year(1984), 'mil, novecentos e oitenta e quatro') self.assertEqual(self.n2w.to_year(1984), 'mil, novecentos e oitenta e quatro')
self.assertEquals(self.n2w.to_year(2000), 'dois mil') self.assertEqual(self.n2w.to_year(2000), 'dois mil')
self.assertEquals(self.n2w.to_year(2001), 'dois mil e um') self.assertEqual(self.n2w.to_year(2001), 'dois mil e um')
self.assertEquals(self.n2w.to_year(2016), 'dois mil e dezesseis') self.assertEqual(self.n2w.to_year(2016), 'dois mil e dezesseis')
def test_year_negative(self): def test_year_negative(self):
self.assertEquals(self.n2w.to_year(-30), 'trinta antes de Cristo') self.assertEqual(self.n2w.to_year(-30), 'trinta antes de Cristo')
self.assertEquals(self.n2w.to_year(-744), 'setecentos e quarenta e quatro antes de Cristo') self.assertEqual(self.n2w.to_year(-744), 'setecentos e quarenta e quatro antes de Cristo')
self.assertEquals(self.n2w.to_year(-10000), 'dez mil antes de Cristo') self.assertEqual(self.n2w.to_year(-10000), 'dez mil antes de Cristo')

5
tox.ini Normal file
View File

@@ -0,0 +1,5 @@
[tox]
envlist = py27,py34
[testenv]
commands = python -m unittest discover