-
Notifications
You must be signed in to change notification settings - Fork 501
Commit
add a test function for a big numbers
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,7 +42,7 @@ | |
|
||
class Num2Word_AR(Num2Word_Base): | ||
errmsg_toobig = "abs(%s) must be less than %s." | ||
MAXVAL = 1000000000000000050331649 # 10 **36 | ||
MAXVAL = 9999999999999999999999999999999999999999999999999 # 1000000000000000050331649 # 10 **36 | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
Jeronymous
Contributor
|
||
|
||
def __init__(self): | ||
super().__init__() | ||
|
@@ -79,26 +79,37 @@ def __init__(self): | |
self.arabicHundreds = [ | ||
"", "مائة", "مئتان", "ثلاثمائة", "أربعمائة", "خمسمائة", "ستمائة", | ||
"سبعمائة", "ثمانمائة", "تسعمائة" | ||
] | ||
] # should be : ["تسعة مائة","ثمانية مائة","سبعة مائة","ستة مائة","خمسة مائة","أربعة مائة","ثلاثة مائة","مئتان","مائة"] | ||
|
||
self.arabicAppendedTwos = [ | ||
"مئتا", "ألفا", "مليونا", "مليارا", "تريليونا", "كوادريليونا", | ||
"كوينتليونا", "سكستيليونا" | ||
"كوينتليونا", "سكستيليونا","سبتيليونا","أوكتيليونا ","نونيليونا", | ||
"ديسيليونا","أندسيليونا","دوديسيليونا","تريديسيليونا","كوادريسيليونا", | ||
"كوينتينيليونا" | ||
] | ||
self.arabicTwos = [ | ||
"مئتان", "ألفان", "مليونان", "ملياران", "تريليونان", | ||
"كوادريليونان", "كوينتليونان", "سكستيليونان" | ||
"كوادريليونان", "كوينتليونان", "سكستيليونان","سبتيليونان", | ||
"أوكتيليونان ","نونيليونان ","ديسيليونان","أندسيليونان", | ||
"دوديسيليونان","تريديسيليونان","كوادريسيليونان","كوينتينيليونان" | ||
] | ||
self.arabicGroup = [ | ||
"مائة", "ألف", "مليون", "مليار", "تريليون", "كوادريليون", | ||
"كوينتليون", "سكستيليون" | ||
"كوينتليون", "سكستيليون","سبتيليون","أوكتيليون","نونيليون", | ||
"ديسيليون","أندسيليون","دوديسيليون","تريديسيليون","كوادريسيليون", | ||
"كوينتينيليون" | ||
] | ||
self.arabicAppendedGroup = [ | ||
"", "ألفاً", "مليوناً", "ملياراً", "تريليوناً", "كوادريليوناً", | ||
"كوينتليوناً", "سكستيليوناً" | ||
"كوينتليوناً", "سكستيليوناً","سبتيليوناً","أوكتيليوناً","نونيليوناً", | ||
"ديسيليوناً","أندسيليوناً","دوديسيليوناً","تريديسيليوناً","كوادريسيليوناً", | ||
"كوينتينيليوناً" | ||
] | ||
self.arabicPluralGroups = [ | ||
"", "آلاف", "ملايين", "مليارات", "تريليونات", "كوادريليونات", | ||
"كوينتليونات", "سكستيليونات" | ||
"كوينتليونات", "سكستيليونات","سبتيليونات","أوكتيليونات","نونيليونات", | ||
"ديسيليونات","أندسيليونات","دوديسيليونات","تريديسيليونات","كوادريسيليونات", | ||
"كوينتينيليونات" | ||
] | ||
assert len(self.arabicAppendedGroup) == len(self.arabicGroup) | ||
assert len(self.arabicPluralGroups) == len(self.arabicGroup) | ||
|
@@ -209,8 +220,16 @@ def process_arabic_group(self, group_number, group_level, | |
|
||
return ret_val | ||
|
||
def abs(self, number): | ||
return number if number >= 0 else -number | ||
|
||
def to_str(self, number): | ||
integer = int(number) | ||
decimal = round((number - integer) * 10**9) | ||
return str(integer) + "." + "{:09d}".format(decimal) | ||
|
||
def convert(self, value): | ||
self.number = "{:.9f}".format(value) | ||
self.number = self.to_str(value) | ||
self.number_to_arabic(self.arabicPrefixText, self.arabicSuffixText) | ||
return self.convert_to_arabic() | ||
|
||
|
@@ -346,7 +365,7 @@ def to_ordinal(self, number, prefix=''): | |
self.currency_unit = ('', '', '', '') | ||
self.arabicPrefixText = prefix | ||
self.arabicSuffixText = "" | ||
return "{}".format(self.convert(abs(number)).strip()) | ||
return "{}".format(self.convert(self.abs(number)).strip()) | ||
|
||
def to_year(self, value): | ||
value = self.validate_number(value) | ||
|
@@ -367,4 +386,4 @@ def to_cardinal(self, number): | |
self.arabicPrefixText = "" | ||
self.arabicSuffixText = "" | ||
self.arabicOnes = ARABIC_ONES | ||
return minus + self.convert(value=abs(number)).strip() | ||
return minus + self.convert(value=self.abs(number)).strip() |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -132,9 +132,20 @@ def test_year(self): | |
|
||
def test_max_numbers(self): | ||
|
||
for number in 10 ** 36, 123456789123456789123456789, 123456789123456789123456789123456789: | ||
|
||
for number in 9999999999999999999999999999999999999999999999999, 10000000000000000000000000000000000000000000000000: | ||
This comment has been minimized.
Sorry, something went wrong.
Jeronymous
Contributor
|
||
with self.assertRaises(OverflowError) as context: | ||
num2words(number, lang='ar') | ||
|
||
self.assertTrue('must be less' in str(context.exception)) | ||
|
||
def test_big_numbers(self): | ||
self.assertEqual(num2words(1000000045000000000000003000000002000000300, to='cardinal', lang='ar'), | ||
'واحد تريديسيليون و خمسة و أربعون ديسيليوناً و ثلاثة كوينتليونات و ملياران و ثلاثمائة' | ||
) | ||
self.assertEqual(num2words(-1000000000000000000000003000000002000000302, to='cardinal', lang='ar'), | ||
'سالب واحد تريديسيليون و ثلاثة كوينتليونات و ملياران و ثلاثمائة و اثنان' | ||
) | ||
self.assertEqual(num2words(9999999999999999999999999999999999999999999999992, to='cardinal', lang='ar'), | ||
'تسعة كوينتينيليونات و تسعمائةتسعة و تسعون كوادريسيليوناً و تسعمائةتسعة و تسعون تريديسيليوناً و تسعمائةتسعة و تسعون دوديسيليوناً و تسعمائةتسعة و تسعون أندسيليوناً و تسعمائةتسعة و تسعون ديسيليوناً و تسعمائةتسعة و تسعون نونيليوناً و تسعمائةتسعة و تسعون أوكتيليوناً و تسعمائةتسعة و تسعون سبتيليوناً و تسعمائةتسعة و تسعون سكستيليوناً و تسعمائةتسعة و تسعون كوينتليوناً و تسعمائةتسعة و تسعون كوادريليوناً و تسعمائةتسعة و تسعون تريليوناً و تسعمائةتسعة و تسعون ملياراً و تسعمائةتسعة و تسعون مليوناً و تسعمائةتسعة و تسعون ألفاً و تسعمائةاثنان و تسعون' | ||
) |
@hedhoud this MAXVAL looks weird. What is the real value from which it fails to convert?
It should be something like
10 ** N