kabal 0.2.18 → 0.2.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kabal/errors/error.rb +13 -0
- data/lib/kabal/errors/no_language_support_error.rb +4 -4
- data/lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb +4 -4
- data/lib/kabal/errors/number_out_range_error.rb +4 -4
- data/lib/kabal/errors.rb +1 -0
- data/lib/kabal/languages/english/fractional_numbers.rb +1 -1
- data/lib/kabal/languages/language.rb +3 -1
- data/lib/kabal/languages/russian/natural_numbers.rb +0 -4
- data/lib/kabal/version.rb +1 -1
- data/test/lib/bigtest.rb +11 -1
- data/test/lib/kabal/languages/english_test.rb +11 -8
- data/test/lib/kabal/languages/russian_test.rb +34 -29
- data/test/lib/kabal_test.rb +17 -5
- data/yaml/errors.yml +5 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afe3367013925af32229e8c4a516552299b46385
|
4
|
+
data.tar.gz: e50d47bb731812a5fd6ebf53446c74d8650f2378
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f83ed35ae41c3cb18150189f534b4c257be37579b90520ae52bb34d56561a177ecab0169e340e2896782d5b71379d0af5853595c00f209ab4f8c872dcd18ba9
|
7
|
+
data.tar.gz: dcab1c7d66dcb42c35f31c7a397a5163a42385d679e4ea5fed014e941a67d5b6ffc9141c59e55fa8644dca6d203747b90f464fa94e3d0ee52aeb51e4db1c9d8a
|
@@ -1,9 +1,9 @@
|
|
1
|
+
require "kabal/errors/error"
|
2
|
+
|
1
3
|
module Kabal
|
2
4
|
module Errors
|
3
|
-
class NoSupportForFractionalNumberOnCurrentLanguages <
|
4
|
-
|
5
|
-
"Current language doesn't support fractional numbers"
|
6
|
-
end
|
5
|
+
class NoSupportForFractionalNumberOnCurrentLanguages < Error
|
6
|
+
@code = 3
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
data/lib/kabal/errors.rb
CHANGED
@@ -19,7 +19,7 @@ module Kabal
|
|
19
19
|
count_string = number.to_s.split('.')[1]
|
20
20
|
count = count_string.to_i
|
21
21
|
if count_string.size != count.to_s.size
|
22
|
-
(
|
22
|
+
(count_string.size - count.to_s.size).times do
|
23
23
|
name += names["single"][0] + " "
|
24
24
|
end
|
25
25
|
name + natural_number_name(count)
|
data/lib/kabal/version.rb
CHANGED
data/test/lib/bigtest.rb
CHANGED
@@ -4,20 +4,30 @@ include Kabal
|
|
4
4
|
|
5
5
|
class BigTest < TestCase
|
6
6
|
def test_all_numbers_for_all_languages
|
7
|
+
print "Whole numbers\n"
|
7
8
|
Kabal.supported_languages.each do |lang|
|
8
9
|
Kabal.language = lang
|
10
|
+
print lang
|
11
|
+
print "\n"
|
9
12
|
(-(10 ** 4)..10 ** 4).each do |number|
|
13
|
+
print number
|
14
|
+
print 13.chr
|
10
15
|
assert Kabal.to_text(number), [lang, number].to_s
|
11
16
|
end
|
12
17
|
end
|
13
18
|
end
|
14
19
|
|
15
20
|
def test_all_fractional_numbers_in_all_languages
|
21
|
+
print "Fractional numbers\n"
|
16
22
|
Kabal.supported_languages.each do |lang|
|
17
23
|
Kabal.language = lang
|
18
24
|
if Kabal.current_language_supports_fractional?
|
25
|
+
print lang
|
26
|
+
print "\n"
|
19
27
|
i = 0
|
20
|
-
while i
|
28
|
+
while i <= 1 do
|
29
|
+
print i
|
30
|
+
print 13.chr
|
21
31
|
assert Kabal.to_text(i), [lang, i].to_s
|
22
32
|
i = (i + 0.001).round 3
|
23
33
|
end
|
@@ -6,35 +6,35 @@ class EnglishTest < TestCase
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def test_single_number
|
9
|
-
assert_equal @eng.convert(1)
|
9
|
+
assert_equal "one", @eng.convert(1)
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_two_words
|
13
|
-
assert_equal @eng.convert(21)
|
13
|
+
assert_equal "twenty one", @eng.convert(21)
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_three_words
|
17
|
-
assert_equal
|
17
|
+
assert_equal "one hundred twenty one", @eng.convert(121)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_three_words_with_and
|
21
|
-
assert_equal
|
21
|
+
assert_equal "one hundred and two", @eng.convert(102)
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_thousands
|
25
|
-
assert_equal
|
25
|
+
assert_equal "eleven thousand one hundred twenty one", @eng.convert(11121)
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_thousands_with_and
|
29
|
-
assert_equal
|
29
|
+
assert_equal "eleven thousand and twenty one", @eng.convert(11021)
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_hundred_thousands_with_and
|
33
|
-
assert_equal
|
33
|
+
assert_equal "one hundred eleven thousand and twenty one", @eng.convert(111021)
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_hundred_millions_with_and
|
37
|
-
assert_equal
|
37
|
+
assert_equal "one hundred eleven million one hundred fifty thousand and twenty one", @eng.convert(111150021)
|
38
38
|
end
|
39
39
|
def test_hundred_random_numbers
|
40
40
|
r = Random.new
|
@@ -72,4 +72,7 @@ class EnglishTest < TestCase
|
|
72
72
|
assert_equal "one point zero zero zero zero zero zero zero five", @eng.convert(1.00000005)
|
73
73
|
assert_equal "minus one point zero zero zero zero zero zero zero five", @eng.convert(-1.00000005)
|
74
74
|
end
|
75
|
+
def test_big_number
|
76
|
+
assert_equal "forty seven novemdecillion twenty six octodecillion one hundred fifty seven septendecillion eight hundred twenty five sexdecillion six hundred twenty seven quindecillion nine hundred eighty quattuordecillion seven hundred thirty three tredecillion four hundred thirty nine duodecillion two hundred twenty five undecillion eight hundred twenty three decillion three hundred fifty three nonillion twenty nine octillion six hundred fifty seven septillion seven hundred forty five sextillion five hundred forty four quintillion six hundred forty six quadrillion seven hundred sixty one trillion eight hundred ninety billion seventy four million two hundred forty four thousand and three", @eng.convert(47026157825627980733439225823353029657745544646761890074244003)
|
77
|
+
end
|
75
78
|
end
|
@@ -6,68 +6,73 @@ class RussianTest < TestCase
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def test_to_text_with_single_number
|
9
|
-
assert_equal @rus.convert(1)
|
10
|
-
assert_equal @rus.convert(-1)
|
9
|
+
assert_equal "один", @rus.convert(1)
|
10
|
+
assert_equal "минус один", @rus.convert(-1)
|
11
11
|
end
|
12
12
|
def test_to_text_with_two_words_number
|
13
|
-
assert_equal @rus.convert(25)
|
14
|
-
assert_equal @rus.convert(-25)
|
13
|
+
assert_equal "двадцать пять", @rus.convert(25)
|
14
|
+
assert_equal "минус двадцать пять", @rus.convert(-25)
|
15
15
|
end
|
16
16
|
def test_to_text_with_three_words_number
|
17
|
-
assert_equal @rus.convert(625)
|
18
|
-
assert_equal
|
17
|
+
assert_equal "шестьсот двадцать пять", @rus.convert(625)
|
18
|
+
assert_equal "минус шестьсот двадцать пять", @rus.convert(-625)
|
19
19
|
end
|
20
20
|
def test_to_text_with_ten_powers
|
21
|
-
assert_equal
|
22
|
-
assert_equal
|
21
|
+
assert_equal "сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(125625)
|
22
|
+
assert_equal "минус сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(-125625)
|
23
23
|
end
|
24
24
|
def test_to_text_with_ten_powers_millions
|
25
|
-
assert_equal
|
26
|
-
assert_equal
|
25
|
+
assert_equal "сто двадцать пять миллионов сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(125125625)
|
26
|
+
assert_equal "минус сто двадцать пять миллионов сто двадцать пять тысяч шестьсот двадцать пять", @rus.convert(-125125625)
|
27
27
|
end
|
28
28
|
def test_to_text_with_ten_powers_some_number
|
29
|
-
assert_equal @rus.convert(1000001)
|
30
|
-
assert_equal
|
29
|
+
assert_equal "один миллион один", @rus.convert(1000001)
|
30
|
+
assert_equal "минус один миллион один", @rus.convert(-1000001)
|
31
31
|
end
|
32
32
|
def test_to_text_with_google
|
33
|
-
assert_equal @rus.convert(10 ** 100)
|
34
|
-
assert_equal @rus.convert(-(10 ** 100))
|
33
|
+
assert_equal "гугол", @rus.convert(10 ** 100)
|
34
|
+
assert_equal "минус гугол", @rus.convert(-(10 ** 100))
|
35
35
|
end
|
36
36
|
def test_to_text_with_three_words_without_second_order
|
37
|
-
assert_equal @rus.convert(101)
|
38
|
-
assert_equal @rus.convert(-101)
|
37
|
+
assert_equal "сто один", @rus.convert(101)
|
38
|
+
assert_equal "минус сто один", @rus.convert(-101)
|
39
39
|
end
|
40
40
|
def test_to_text_with_three_words_without_first_and_second_order
|
41
|
-
assert_equal @rus.convert(200)
|
42
|
-
assert_equal @rus.convert(-200)
|
41
|
+
assert_equal "двести", @rus.convert(200)
|
42
|
+
assert_equal "минус двести", @rus.convert(-200)
|
43
43
|
end
|
44
44
|
def test_to_text_with_thousands
|
45
|
-
assert_equal @rus.convert(22000)
|
46
|
-
assert_equal
|
45
|
+
assert_equal "двадцать две тысячи", @rus.convert(22000)
|
46
|
+
assert_equal "минус двадцать две тысячи", @rus.convert(-22000)
|
47
47
|
end
|
48
48
|
def test_to_text_with_negative_number
|
49
49
|
assert_equal NumberOutRangeError.message, @rus.convert(-(10 ** 103))
|
50
50
|
end
|
51
51
|
def test_to_text_with_fractional_number_with_zero
|
52
|
-
assert_equal @rus.convert(0.01)
|
52
|
+
assert_equal "ноль целых одна сотая", @rus.convert(0.01)
|
53
|
+
assert_equal "минус ноль целых одна сотая", @rus.convert(-0.01)
|
53
54
|
end
|
54
55
|
def test_to_text_with_fractional_number
|
55
|
-
assert_equal @rus.convert(1.05)
|
56
|
+
assert_equal "одна целая пять сотых", @rus.convert(1.05)
|
57
|
+
assert_equal "минус одна целая пять сотых", @rus.convert(-1.05)
|
56
58
|
end
|
57
59
|
def test_to_text_with_fractional_number_like_whole
|
58
|
-
assert_equal @rus.convert(1.0)
|
60
|
+
assert_equal "один", @rus.convert(1.0)
|
61
|
+
assert_equal "минус один", @rus.convert(-1.0)
|
59
62
|
end
|
60
63
|
def test_to_text_with_fractional_number_with_preword
|
61
|
-
assert_equal @rus.convert(1.0005)
|
64
|
+
assert_equal "одна целая пять десятитысячных", @rus.convert(1.0005)
|
65
|
+
assert_equal "минус одна целая пять десятитысячных", @rus.convert(-1.0005)
|
62
66
|
end
|
63
67
|
def test_to_text_with_fractional_number_with_exp_form
|
64
|
-
assert_equal @rus.convert(1.00000000005)
|
68
|
+
assert_equal "одна целая пять стомиллиардных", @rus.convert(1.00000000005)
|
69
|
+
assert_equal "минус одна целая пять стомиллиардных", @rus.convert(-1.00000000005)
|
65
70
|
end
|
66
71
|
def test_to_text_with_some_number
|
67
|
-
assert_equal
|
72
|
+
assert_equal "одна целая двадцать три миллиона пятьсот шестьдесят семь тысяч восемьсот девяносто одна стомиллионная", @rus.convert(1.23567891)
|
68
73
|
end
|
69
74
|
def test_to_text_with_number_from_random
|
70
|
-
assert_equal
|
75
|
+
assert_equal "восемь дуотригинтиллионов девятьсот семь антригинтиллионов восемьдесят пять тривигинтиллионов шестьсот двадцать девять новемвигинтиллионов семьсот девяносто октовигинтиллионов восемьсот шестьдесят шесть септемвигинтиллионов пятьсот тридцать восемь сексвигинтиллионов восемьсот тринадцать квинвигинтиллиона восемьсот сорок семь кватторвигинтиллионов шестьсот два тревигинтиллиона шестьсот двенадцать дуовигинтиллиона семьсот тридцать три анвигинтиллиона шестьсот семьдесят семь вигинтиллионов двести шестьдесят шесть новемдециллионов восемьсот шестьдесят два октодециллиона девятьсот двадцать один септемдециллион шестьсот сексдециллионов семьдесят четыре квиндециллиона семьсот сорок пять кваттуордециллионов пятьсот сорок два тредециллиона пятьсот девяносто девять дуодециллионов шестьсот андециллионов четыреста сорок дециллионов пятьсот восемьдесят девять нониллионов девятьсот семьдесят семь октиллионов семьсот восемьдесят семь септиллионов шестьсот восемь секстиллионов пятьсот пятьдесят восемь квинтиллионов четыреста семьдесят шесть квадраллионов двести восемьдесят девять триллионов пятьсот тридцать миллиардов четыреста восемь миллионов шестьсот пятьдесят девять тысяч двести тридцать два", @rus.convert(8907085629790866538813847602612733677266862921600074745542599600440589977787608558476289530408659232)
|
71
76
|
end
|
72
77
|
def test_hundred_random_numbers
|
73
78
|
r = Random.new
|
@@ -77,9 +82,9 @@ class RussianTest < TestCase
|
|
77
82
|
end
|
78
83
|
end
|
79
84
|
def test_11000
|
80
|
-
assert_equal @rus.convert(11000)
|
85
|
+
assert_equal "одиннадцать тысяч", @rus.convert(11000)
|
81
86
|
end
|
82
87
|
def test_111000
|
83
|
-
assert_equal @rus.convert(111000)
|
88
|
+
assert_equal "сто одиннадцать тысяч", @rus.convert(111000)
|
84
89
|
end
|
85
90
|
end
|
data/test/lib/kabal_test.rb
CHANGED
@@ -9,15 +9,19 @@ class KabalTest < TestCase
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_to_text
|
12
|
-
assert_equal
|
12
|
+
assert_equal "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять", Kabal.to_text(125125125125)
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_to_text_in_language
|
16
|
-
assert_equal
|
16
|
+
assert_equal "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять", Kabal.to_text_in_language(125125125125, "Russian")
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_to_text_in_language_by_index
|
20
|
-
assert_equal
|
20
|
+
assert_equal "сто двадцать пять миллиардов сто двадцать пять миллионов сто двадцать пять тысяч сто двадцать пять", Kabal.to_text_in_language_by_index(125125125125, 0)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_to_text_in_language_by_index_with_unsupport_language
|
24
|
+
assert_equal NoLanguageSupportError.message, Kabal.to_text_in_language_by_index(125125125125, 2)
|
21
25
|
end
|
22
26
|
|
23
27
|
def test_to_text_in_language_with_unsupported_language
|
@@ -53,7 +57,15 @@ class KabalTest < TestCase
|
|
53
57
|
end
|
54
58
|
|
55
59
|
def test_minimum_for_language
|
56
|
-
assert Kabal.
|
57
|
-
assert Kabal.
|
60
|
+
assert Kabal.minimum_for("Russian"), -(10 ** 102)
|
61
|
+
assert Kabal.minimum_for("English"), 0
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_language_supports_negative
|
65
|
+
assert Kabal.language_supports_negative? "Russian"
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_language_supports_fractional
|
69
|
+
assert Kabal.language_supports_fractional? "English"
|
58
70
|
end
|
59
71
|
end
|
data/yaml/errors.yml
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kabal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- lib/kabal/config.rb
|
59
59
|
- lib/kabal/config/yaml_loader.rb
|
60
60
|
- lib/kabal/errors.rb
|
61
|
+
- lib/kabal/errors/error.rb
|
61
62
|
- lib/kabal/errors/no_language_support_error.rb
|
62
63
|
- lib/kabal/errors/no_support_for_fractional_numbers_on_current_language_error.rb
|
63
64
|
- lib/kabal/errors/number_out_range_error.rb
|
@@ -76,6 +77,7 @@ files:
|
|
76
77
|
- test/lib/kabal/languages/russian_test.rb
|
77
78
|
- test/lib/kabal_test.rb
|
78
79
|
- test/test_helper.rb
|
80
|
+
- yaml/errors.yml
|
79
81
|
- yaml/languages.yml
|
80
82
|
- yaml/languages/en.yml
|
81
83
|
- yaml/languages/ru.yml
|