from normalizer import Normalizer def test_currency_normalization(): n = Normalizer() assert n.process("من امروز ۳$ دارم") == "من امروز سه دلار دارم" assert n.process("من امروز 3$ دارم") == "من امروز سه دلار دارم" assert n.process("من امروز 1 $ دارم") == "من امروز یک دلار دارم" assert n.process("من امروز 12.4$ دارم") == "من امروز دوازده دلار و چهل سنت دارم" assert n.process("من امروز 12.۴$ دارم") == "من امروز دوازده دلار و چهل سنت دارم" assert n.process("من امروز 125.۴3$ دارم") == "من امروز یکصد و بیست و پنج دلار و چهل و سه سنت دارم" assert n.process("من امروز 12.۴€ دارم") == "من امروز دوازده یورو و چهل سنت دارم" assert n.process("من امروز 1001.۴€ و 5۲.4$ دارم") == "من امروز یک هزار و یک یورو و چهل سنت و پنجاه و دو دلار و چهل سنت دارم" assert n.process("I have 3$") == "I have three dollars" assert n.process("I have ۳$.") == "I have three dollars." assert n.process("I have 1$") == "I have one dollar" assert n.process("I have 1 $") == "I have one dollar" assert n.process("I have 2.5$") == "I have two dollars and fifty cents" assert n.process("I have ۲.۵$") == "I have two dollars and fifty cents" assert n.process("I have 2.۵$") == "I have two dollars and fifty cents" assert n.process("I have ۱.1$.") == "I have one dollar and ten cents." assert n.process("I have 3$ and 1 €") == "I have three dollars and one euro" assert n.process("I have 3.9$ and 1.3€ and 12.۳3 £.") == ( "I have three dollars and ninety cents and one euro and thirty cents " "and twelve pounds and thirty-three pence." ) assert n.process("1000$") == "one thousand dollars" assert n.process("1,000$") == "one thousand dollars" assert n.process("1000 $") == "one thousand dollars" assert n.process("1,000,001 €") == "one million and one euros" assert n.process("۱۰۰۰$") == "یک هزار دلار" assert n.process("۱۰۰۱ $") == "یک هزار و یک دلار" print("✅ All currency normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_unit_normalization(): n = Normalizer() assert n.process("وزن او ۷۵kg است") == "وزن او هفتاد و پنج کیلوگرم است" assert n.process("وزن او 75kg است") == "وزن او هفتاد و پنج کیلوگرم است" assert n.process("دمای هوا ۷۷°F است") == "دمای هوا هفتاد و هفت درجه فارنهایت است" assert n.process("از اینجا تا آنجا ۱۰۰۰.۵m فاصله است") == "از اینجا تا آنجا یک هزار متر و پنجاه سانتیمتر فاصله است" assert n.process("I ran 5km today") == "I ran five kilometres today" assert n.process("It is 2۵°C outside") == "It is twenty-five degrees Celsius outside" assert n.process("The car goes 60 km/h") == "The car goes sixty kilometres per hour" assert n.process("1000m") == "one thousand metres" assert n.process("۲۳۰۰m") == "دو هزار و سیصد متر" assert n.process("۱.۲۳۴ m") == "یک متر و بیست و سه سانتیمتر و چهار میلیمتر" assert n.process("26°C") == "twenty-six degrees Celsius" assert n.process("۲۶ °C") == "بیست و شش درجه سانتیگراد" assert n.process("۲۴ °F") == "بیست و چهار درجه فارنهایت" assert n.process("۷۰ km/h") == "هفتاد کیلومتر بر ساعت" assert n.process("۳.۵ L") == "سه لیتر و پانصد میلی‌لیتر" assert n.process("۸ oz") == "هشت اونس" assert n.process("۳.۵ sec") == "سه ثانیه و پانصد میلی‌ثانیه" assert n.process("۳.۵ min") == "سه دقیقه و سی ثانیه" assert n.process("3.5hour") == "three hours and thirty minutes" assert n.process("3.51 hour") == "three hours, thirty minutes and thirty-six seconds" assert n.process("3.512 hour") == "three hours, thirty minutes, forty-three seconds and two hundred milliseconds" assert n.process("۳.۵۱۲ hour") == "سه ساعت و سی دقیقه و چهل و سه ثانیه و دویست میلی‌ثانیه" assert n.process("10.5 days") == "ten days and twelve hours" assert n.process("۱,۰۰۰,۰۰۰ hour") == "یک میلیون ساعت" assert n.process("5 %") == "five percent" assert n.process("%5") == "five percent" assert n.process("٪۲۰") == "بیست درصد" assert n.process("20 % cm") == "twenty percent centimetre" assert n.process("۲۰% cm") == "بیست درصد سانتیمتر" assert n.process("۲۰٪ cm") == "بیست درصد سانتیمتر" assert n.process("٪۲۰ cm") == "بیست درصد سانتیمتر" assert n.process("٪ ۲۰ cm.") == "بیست درصد سانتیمتر." assert n.process("% ۲۰ cm.") == "بیست درصد سانتیمتر." print("✅ All unit normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_fraction_normalization(): n = Normalizer() assert n.process("1/3") == "one third" assert n.process("1000000/3") == "one million thirds" assert n.process("۱/۳") == "یک سوم" assert n.process("۱ ۱/۳") == "یک و یک سوم" assert n.process("1/2 kg") == "one half kilogram" assert n.process("1000/2 kg") == "one thousand halves kilograms" assert n.process("1,000,000/2 sec") == "one million halves seconds" assert n.process("1,000,000/3 sec") == "one million thirds seconds" assert n.process("۱,۵۰۰,۰۰۰/۳ hour") == "یک میلیون و پانصد هزار سوم ساعت" assert n.process("۶/۵ sec") == "شش پنجم ثانیه" assert n.process("۷/۹۰ km/h") == "هفت نودم کیلومتر بر ساعت" assert n.process("۷.۹۰ km/h") == "هفت و نه دهم کیلومتر بر ساعت" assert n.process("۱۵ ۱۲/۲۳ min") == "پانزده و دوازده بیست و سوم دقیقه" assert n.process("1 100/2 %") == "one and one hundred halves percent" assert n.process("۱/۲ ٪") == "یک دوم درصد" assert n.process("1 5,000/2000% cm") == "one and five thousand two thousandths percent centimetre" assert n.process("۲/۱۰٪ cm") == "دو دهم درصد سانتیمتر" assert n.process("3/4 km/h") == "three quarters kilometre per hour" assert n.process("1½ kg") == "one and one half kilograms" assert n.process("۵½ kg") == "پنج و یک دوم کیلوگرم" print("✅ All fraction normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_symbol_normalization(): n = Normalizer() assert n.process("علی & محسن") == "علی و محسن" assert n.process("Ali & Mohsen") == "Ali and Mohsen" assert n.process("R&D") == "R and D" assert n.process("Tom &Jerry") == "Tom and Jerry" assert n.process("4 & 5") == "four and five" assert n.process("۴ & ۵") == "چهار و پنج" assert n.process("3/4 & 7/3") == "three quarters and seven thirds" assert n.process("۱/۲ & ۳/۲") == "یک دوم و سه دوم" assert n.process("Farzin & 2 friends") == "Farzin and two friends" assert n.process("Chapter V.") == "Chapter five." assert n.process("Mohsen V.") == "Mohsen V." assert n.process("II & IV") == "two and four" assert n.process("3$ & 4€") == "three dollars and four euros" assert n.process("بخش V را بخوان") == "بخش پنج را بخوان" assert n.process("- 2 kg") == "negative two kilograms" assert n.process("3+4") == "three plus four" assert n.process("3×4") == "three times four" assert n.process("3 × 4=12.") == "three times four equals twelve." assert n.process("8 ÷ 2") == "eight divided by two" assert n.process("۸ ÷ ۲") == "هشت تقسیم بر دو" assert n.process("۸ × ۲ = 16") == "هشت ضربدر دو مساوی است با شانزده" assert n.process("۸ * ۲ = 16") == "هشت ضربدر دو مساوی است با شانزده" assert n.process("5 - 3 = 2") == "five minus three equals two" assert n.process("5,000 - 3000 = 2000") == "five thousand minus three thousand equals two thousand" assert n.process("۵ - ۳ = ۲") == "پنج منهای سه مساوی است با دو" assert n.process("5kg + 3kg = 8kg") == "five kilograms plus three kilograms equals eight kilograms" assert n.process("Tom + Jerry") == "Tom plus Jerry" assert n.process("5 - 10") == "five to ten" assert n.process("1/2 - 3/4") == "one half to three quarters" assert n.process("5kg - 10kg") == "five kilograms to ten kilograms" assert n.process("5% - 10%") == "five percent to ten percent" assert n.process("1990 - 2000") == "one thousand, nine hundred and ninety to two thousand" assert n.process('3 "m"') == 'three "metres"' assert n.process('3 (kg)') == 'three (kilograms)' assert n.process('3 {kg}') == 'three {kilograms}' assert n.process('3 [kg]') == 'three [kilograms]' assert n.process('(3) + (4)') == '(three) plus (four)' assert n.process('3 $ + [4 oz]') == 'three dollars plus [four ounces]' assert n.process('[3]-[5]') == '[three] to [five]' assert n.process('[۳] - ۵') == '[سه] تا پنج' print("✅ All symbol normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_phone_normalization(): n = Normalizer() assert n.process("۰۹۱۵۶۴۸۶۳۲۰") == "صفر نهصد و پانزده، ششصد و چهل و هشت، شصت و سه، بیست" assert n.process("۰۹۱۵-۶۴۸۶۳۲۰") == "صفر نهصد و پانزده، ششصد و چهل و هشت، شصت و سه، بیست" assert n.process("+۹۸۹۱۵۶۴۸۶۳۲۰") == "مثبت نود و هشت، نهصد و پانزده، ششصد و چهل و هشت، شصت و سه، بیست" assert n.process("(+۹۸۹۱۵) ۶۴۸۶۳۲۰") == "(مثبت نود و هشت، نهصد و پانزده)، ششصد و چهل و هشت، شصت و سه، بیست" assert n.process("۰۲۱-۸۸۵۲۳۰۰۶") == "صفر بیست و یک، هشتاد و هشت، پنجاه و دو، سی، صفر شش" assert n.process("(۰۲۱) ۸۸۵۲۳۰۰۶") == "(صفر بیست و یک)، هشتاد و هشت، پنجاه و دو، سی، صفر شش" assert n.process("(۰۲۱)۸۸۵۲۳۰۰۶") == "(صفر بیست و یک)، هشتاد و هشت، پنجاه و دو، سی، صفر شش" assert n.process("۰۰۱-۸۸۵۲۳۰۰۶") == "دو صفر یک، هشتاد و هشت، پنجاه و دو، سی، صفر شش" assert n.process("09156486320") == "zero nine one five, six four eight, six three, two zero" assert n.process("0915-6486320") == "zero nine one five, six four eight, six three, two zero" assert n.process("(0915) 6486320") == "(zero nine one five), six four eight, six three, two zero" assert n.process("(0915)6486320") == "(zero nine one five), six four eight, six three, two zero" assert n.process("+989156486320") == "plus nine eight, nine one five, six four eight, six three, two zero" assert n.process("(+98915) 6486320") == "(plus nine eight, nine one five), six four eight, six three, two zero" assert n.process("02188523006") == "zero two one, eight eight, five two, three zero, zero six" assert n.process("021-88523006") == "zero two one, eight eight, five two, three zero, zero six" assert n.process("Call 1-800-555-1234") == "Call one, eight zero zero, five five five, one two three four" assert n.process("زنگ بزن به 09356486320") == "زنگ بزن به صفر نهصد و سی و پنج، ششصد و چهل و هشت، شصت و سه، بیست" print("✅ All phone normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_card_normalization(): n = Normalizer() assert n.process("6219-8619-1635-6362") == "sixty-two, nineteen - eighty-six, nineteen - sixteen, thirty-five - sixty-three, sixty-two" assert n.process("6200-8619-1635-6305") == "sixty-two, double zero - eighty-six, nineteen - sixteen, thirty-five - sixty-three, oh five" assert n.process("6200861916356305") == "sixty-two, double zero - eighty-six, nineteen - sixteen, thirty-five - sixty-three, oh five" assert n.process("۶۲۱۹-۸۶۱۹-۱۶۳۵-۶۳۶۲") == "شصت و دو، نوزده - هشتاد و شش، نوزده - شانزده، سی و پنج - شصت و سه، شصت و دو" assert n.process("۶۲۰۰-۸۶۱۹-۱۶۳۵-۶۳۰۵") == "شصت و دو، دو صفر - هشتاد و شش، نوزده - شانزده، سی و پنج - شصت و سه، صفر پنج" assert n.process("۶۲۰۰۸۶۱۹۱۶۳۵۶۳۰۵") == "شصت و دو، دو صفر - هشتاد و شش، نوزده - شانزده، سی و پنج - شصت و سه، صفر پنج" assert n.process("شماره کارت من رو یادداشت کنین: 6200861916356305") == "شماره کارت من رو یادداشت کنین: شصت و دو، دو صفر - هشتاد و شش، نوزده - شانزده، سی و پنج - شصت و سه، صفر پنج" print("✅ All card normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_postal_nationalId_normalization(): n = Normalizer() assert n.process("1514717118") == "fifteen, fourteen, seventy-one, seventy-one, eighteen" assert n.process("15147-17118") == "fifteen, fourteen, seventy-one, seventy-one, eighteen" assert n.process("۱۵۱۴۷۱۷۱۱۸") == "پانزده، چهارده، هفتاد و یک، هفتاد و یک، هجده" assert n.process("۱۵۱۴۷-۱۷۱۱۸") == "پانزده، چهارده، هفتاد و یک، هفتاد و یک، هجده" assert n.process("0010062637") == "double zero, ten, oh six, twenty-six, thirty-seven" assert n.process("[0010062637]") == "[double zero, ten, oh six, twenty-six, thirty-seven]" assert n.process("۰۰۱۰۰۶۲۶۳۷") == "دو صفر، ده، صفر شش، بیست و شش، سی و هفت" print("✅ All postal and national id normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- def test_plain_number_normalization(): n = Normalizer() assert n.process("۳.۵") == "سه و پنج دهم" assert n.process("3.5") == "three point five" assert n.process("من ۲۰ سیب دارم") == "من بیست سیب دارم" assert n.process("۱۴۰۳") == "یک هزار و چهارصد و سه" assert n.process("سال ۱۴۰۳") == "سال هزار و چهارصد و سه" assert n.process("4338135") == "four million, three hundred and thirty-eight thousand, one hundred and thirty-five" print("✅ All plain number normalization tests passed successfully!") #---------------------------------------------------------------------------------------------------------------------------- if __name__ == "__main__": test_currency_normalization() test_unit_normalization() test_fraction_normalization() test_symbol_normalization() test_phone_normalization() test_card_normalization() test_postal_nationalId_normalization() test_plain_number_normalization()