mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Some maintainers for different linux distribution are having some problems with the encoding on different python versions. This change intents to make all python files define explicitly the encoding, license and unix line separators. Remove one example of the README.rst file where a possible non UTF-8 character is used.
186 lines
9.4 KiB
Python
186 lines
9.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
|
||
# Copyright (c) 2013, 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
|
||
|
||
from __future__ import division, print_function, unicode_literals
|
||
|
||
from unittest import TestCase
|
||
|
||
from num2words import num2words
|
||
|
||
|
||
def n2j(*args, **kwargs):
|
||
return num2words(*args, lang='ja', **kwargs)
|
||
|
||
|
||
class Num2WordsJATest(TestCase):
|
||
def test_low(self):
|
||
self.assertEqual(n2j(0), "零")
|
||
self.assertEqual(n2j(0, prefer=["〇"]), "〇")
|
||
self.assertEqual(n2j(0, reading=True), "ゼロ")
|
||
self.assertEqual(n2j(0, reading=True, prefer=["れい"]), "れい")
|
||
self.assertEqual(n2j(1), "一")
|
||
self.assertEqual(n2j(1, reading=True), "いち")
|
||
self.assertEqual(n2j(2), "二")
|
||
self.assertEqual(n2j(2, reading=True), "に")
|
||
self.assertEqual(n2j(3), "三")
|
||
self.assertEqual(n2j(3, reading=True), "さん")
|
||
self.assertEqual(n2j(4), "四")
|
||
self.assertEqual(n2j(4, reading=True), "よん")
|
||
self.assertEqual(n2j(4, reading=True, prefer=["し"]), "し")
|
||
self.assertEqual(n2j(5), "五")
|
||
self.assertEqual(n2j(5, reading=True), "ご")
|
||
self.assertEqual(n2j(6), "六")
|
||
self.assertEqual(n2j(6, reading=True), "ろく")
|
||
self.assertEqual(n2j(7), "七")
|
||
self.assertEqual(n2j(7, reading=True), "なな")
|
||
self.assertEqual(n2j(7, reading=True, prefer=["しち"]), "しち")
|
||
self.assertEqual(n2j(8), "八")
|
||
self.assertEqual(n2j(8, reading=True), "はち")
|
||
self.assertEqual(n2j(9), "九")
|
||
self.assertEqual(n2j(9, reading=True), "きゅう")
|
||
self.assertEqual(n2j(10), "十")
|
||
self.assertEqual(n2j(10, reading=True), "じゅう")
|
||
self.assertEqual(n2j(11), "十一")
|
||
self.assertEqual(n2j(11, reading=True), "じゅういち")
|
||
self.assertEqual(n2j(12), "十二")
|
||
self.assertEqual(n2j(12, reading=True), "じゅうに")
|
||
self.assertEqual(n2j(13), "十三")
|
||
self.assertEqual(n2j(13, reading=True), "じゅうさん")
|
||
self.assertEqual(n2j(14), "十四")
|
||
self.assertEqual(n2j(14, reading=True), "じゅうよん")
|
||
self.assertEqual(n2j(14, reading=True, prefer=["し"]), "じゅうし")
|
||
self.assertEqual(n2j(15), "十五")
|
||
self.assertEqual(n2j(15, reading=True), "じゅうご")
|
||
self.assertEqual(n2j(16), "十六")
|
||
self.assertEqual(n2j(16, reading=True), "じゅうろく")
|
||
self.assertEqual(n2j(17), "十七")
|
||
self.assertEqual(n2j(17, reading=True), "じゅうなな")
|
||
self.assertEqual(n2j(17, reading=True, prefer=["しち"]), "じゅうしち")
|
||
self.assertEqual(n2j(18), "十八")
|
||
self.assertEqual(n2j(18, reading=True), "じゅうはち")
|
||
self.assertEqual(n2j(19), "十九")
|
||
self.assertEqual(n2j(19, reading=True), "じゅうきゅう")
|
||
self.assertEqual(n2j(20), "二十")
|
||
self.assertEqual(n2j(20, reading=True), "にじゅう")
|
||
|
||
def test_mid(self):
|
||
self.assertEqual(n2j(100), "百")
|
||
self.assertEqual(n2j(100, reading=True), "ひゃく")
|
||
self.assertEqual(n2j(123), "百二十三")
|
||
self.assertEqual(n2j(123, reading=True), "ひゃくにじゅうさん")
|
||
self.assertEqual(n2j(300), "三百")
|
||
self.assertEqual(n2j(300, reading=True), "さんびゃく")
|
||
self.assertEqual(n2j(400), "四百")
|
||
self.assertEqual(n2j(400, reading=True), "よんひゃく")
|
||
# 400 --> しひゃく sounds weird, but can be generated with prefer
|
||
self.assertEqual(n2j(600), "六百")
|
||
self.assertEqual(n2j(600, reading=True), "ろっぴゃく")
|
||
self.assertEqual(n2j(700, reading=True, prefer=["しち"]), "しちひゃく")
|
||
self.assertEqual(n2j(800, reading=True), "はっぴゃく")
|
||
self.assertEqual(n2j(1000), "千")
|
||
self.assertEqual(n2j(1000, reading=True), "せん")
|
||
self.assertEqual(n2j(3000, reading=True), "さんぜん")
|
||
self.assertEqual(n2j(8000, reading=True), "はっせん")
|
||
|
||
def test_high(self):
|
||
self.assertEqual(n2j(10000), "一万")
|
||
self.assertEqual(n2j(10000, reading=True), "いちまん")
|
||
self.assertEqual(n2j(12345), "一万二千三百四十五")
|
||
self.assertEqual(n2j(12345, reading=True),
|
||
"いちまん"
|
||
"にせん"
|
||
"さんびゃく"
|
||
"よんじゅうご")
|
||
self.assertEqual(n2j(10**8), "一億")
|
||
self.assertEqual(n2j(10**8, reading=True), "いちおく")
|
||
self.assertEqual(n2j(123456789), "一億二千三百四十五万六千七百八十九")
|
||
self.assertEqual(n2j(123456789, reading=True),
|
||
"いちおく"
|
||
"にせんさんびゃくよんじゅうごまん"
|
||
"ろくせんななひゃく"
|
||
"はちじゅうきゅう")
|
||
self.assertEqual(n2j(10**12), "一兆")
|
||
self.assertEqual(n2j(10**12, reading=True), "いっちょう")
|
||
self.assertEqual(n2j(1234567890123),
|
||
"一兆二千三百四十五億六千七百八十九万百二十三")
|
||
self.assertEqual(n2j(1234567890123, reading=True),
|
||
"いっちょう"
|
||
"にせんさんびゃくよんじゅうごおく"
|
||
"ろくせんななひゃくはちじゅうきゅうまん"
|
||
"ひゃくにじゅうさん")
|
||
# TODO: tests for 10**16 and above
|
||
|
||
def test_cardinal_float(self):
|
||
self.assertEqual(n2j(0.0123456789, prefer=["〇"]),
|
||
"〇点〇一二三四五六七八九")
|
||
self.assertEqual(n2j(0.0123456789, reading=True),
|
||
"れいてん"
|
||
"れいいち"
|
||
"にさん"
|
||
"よんご"
|
||
"ろくなな"
|
||
"はちきゅう")
|
||
self.assertEqual(n2j(10**8 + 0.01), "一億点零一")
|
||
self.assertEqual(n2j(10**8 + 0.01, reading=True),
|
||
"いちおくてんれいいち")
|
||
|
||
def test_ordinal(self):
|
||
self.assertEqual(n2j(0, to="ordinal"), "零番目")
|
||
self.assertEqual(n2j(0, to="ordinal", reading=True, prefer=["れい"]),
|
||
"れいばんめ")
|
||
self.assertEqual(n2j(2, to="ordinal", counter="人"), "二人目")
|
||
self.assertEqual(n2j(3, to="ordinal", counter="つ"), "三つ目")
|
||
with self.assertRaises(NotImplementedError):
|
||
n2j(4, to="ordinal", reading=True, counter="人")
|
||
|
||
def test_ordinal_num(self):
|
||
self.assertEqual(n2j(0, to="ordinal_num"), "0番目")
|
||
self.assertEqual(n2j(0, to="ordinal_num", reading=True), "0ばんめ")
|
||
self.assertEqual(n2j(2, to="ordinal_num", counter="人"), "2人目")
|
||
self.assertEqual(n2j(3, to="ordinal_num", counter="つ"), "3つ目")
|
||
|
||
def test_currency(self):
|
||
self.assertEqual(n2j(123456789, to="currency"),
|
||
"一億二千三百四十五万六千七百八十九円")
|
||
self.assertEqual(n2j(123456789, to="currency", reading=True),
|
||
"いちおく"
|
||
"にせんさんびゃくよんじゅうごまん"
|
||
"ろくせんななひゃく"
|
||
"はちじゅうきゅうえん")
|
||
|
||
def test_year(self):
|
||
self.assertEqual(n2j(2017, to="year"), "平成二十九年")
|
||
self.assertEqual(n2j(2017, to="year", reading=True),
|
||
"へいせいにじゅうくねん")
|
||
self.assertEqual(n2j(2017, to="year", reading="arabic"),
|
||
"平成29年")
|
||
self.assertEqual(n2j(2009, to="year", era=False), "二千九年")
|
||
self.assertEqual(n2j(2009, to="year", reading=True, era=False),
|
||
"にせんくねん")
|
||
self.assertEqual(n2j(2000, to="year", era=False), "二千年")
|
||
self.assertEqual(n2j(2000, to="year", era=False, reading=True),
|
||
"にせんねん")
|
||
self.assertEqual(n2j(645, to="year"), "大化元年")
|
||
self.assertEqual(n2j(645, to="year", reading=True), "たいかがんねん")
|
||
self.assertEqual(n2j(645, to="year"), "大化元年")
|
||
self.assertEqual(n2j(645, to="year", reading=True), "たいかがんねん")
|
||
self.assertEqual(n2j(-99, to="year", era=False), "紀元前九十九年")
|
||
self.assertEqual(n2j(-99, to="year", era=False, reading=True),
|
||
"きげんぜんきゅうじゅうくねん")
|
||
self.assertEqual(n2j(1375, to="year"), "天授元年")
|
||
self.assertEqual(n2j(1375, to="year", prefer=["えいわ"]), "永和元年")
|