Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix 90000th and -thousandth in Russian #382

Merged
merged 2 commits into from
Feb 18, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions release_notes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
###In Development
- [#381](https://github.com/MehdiK/Humanizer/pull/381): Fixes trailing question mark reported in #378.
- [#382](https://github.com/MehdiK/Humanizer/pull/382): Fix 90000th and -thousandth in RussianNumberToWordsConverter.

[Commits](https://github.com/MehdiK/Humanizer/compare/v1.33.7...master)

Expand Down
35 changes: 19 additions & 16 deletions src/Humanizer.Tests/Localisation/ru-RU/NumberToWordsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ public NumberToWordsTests() : base("ru-RU") { }
[InlineData(2000, "две тысячи")]
[InlineData(3000, "три тысячи")]
[InlineData(4000, "четыре тысячи")]
[InlineData(5000, "пять тысячь")]
[InlineData(10000, "десять тысячь")]
[InlineData(100000, "сто тысячь")]
[InlineData(5000, "пять тысяч")]
[InlineData(10000, "десять тысяч")]
[InlineData(100000, "сто тысяч")]
[InlineData(1000000, "один миллион")]
[InlineData(2000000, "два миллиона")]
[InlineData(10000000, "десять миллионов")]
Expand All @@ -54,12 +54,12 @@ public NumberToWordsTests() : base("ru-RU") { }
[InlineData(3501, "три тысячи пятьсот один")]
[InlineData(111, "сто одиннадцать")]
[InlineData(1112, "одна тысяча сто двенадцать")]
[InlineData(11213, "одиннадцать тысячь двести тринадцать")]
[InlineData(11213, "одиннадцать тысяч двести тринадцать")]
[InlineData(121314, "сто двадцать одна тысяча триста четырнадцать")]
[InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцать")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцать")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцать")]
[InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцать")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцать")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцать")]
[InlineData(-751633617, "минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцать")]
public void ToWords(int number, string expected)
{
Expand Down Expand Up @@ -134,12 +134,12 @@ public void ToWordsWithGender(int number, string expected, GrammaticalGender gen
[InlineData(3501, "три тысячи пятьсот первый")]
[InlineData(111, "сто одиннадцатый")]
[InlineData(1112, "одна тысяча сто двенадцатый")]
[InlineData(11213, "одиннадцать тысячь двести тринадцатый")]
[InlineData(11213, "одиннадцать тысяч двести тринадцатый")]
[InlineData(121314, "сто двадцать одна тысяча триста четырнадцатый")]
[InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцатый")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцатый")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатый")]
[InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатый")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцатый")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатый")]
[InlineData(1111111000, "один миллиард сто одиннадцать миллионов стоодиннадцатитысячный")]
[InlineData(1234567000, "один миллиард двести тридцать четыре миллиона пятисотшестидесятисемитысячный")]
[InlineData(2000000000, "двухмиллиардный")]
Expand Down Expand Up @@ -187,7 +187,10 @@ public void ToOrdinalWords(int number, string expected)
[InlineData(4000, "четырёхтысячная")]
[InlineData(5000, "пятитысячная")]
[InlineData(10000, "десятитысячная")]
[InlineData(90000, "девяностотысячная")]
[InlineData(100000, "стотысячная")]
[InlineData(990000, "девятисотдевяностотысячная")]
[InlineData(990001, "девятьсот девяносто тысяч первая")]
[InlineData(1000000, "миллионная")]
[InlineData(2000000, "двухмиллионная")]
[InlineData(10000000, "десятимиллионная")]
Expand All @@ -199,15 +202,15 @@ public void ToOrdinalWords(int number, string expected)
[InlineData(111, "сто одиннадцатая")]
[InlineData(1112, "одна тысяча сто двенадцатая")]
[InlineData(11000, "одиннадцатитысячная")]
[InlineData(11001, "одиннадцать тысячь первая")]
[InlineData(11213, "одиннадцать тысячь двести тринадцатая")]
[InlineData(11001, "одиннадцать тысяч первая")]
[InlineData(11213, "одиннадцать тысяч двести тринадцатая")]
[InlineData(15000, "пятнадцатитысячная")]
[InlineData(20000, "двадцатитысячная")]
[InlineData(121314, "сто двадцать одна тысяча триста четырнадцатая")]
[InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцатая")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцатая")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатая")]
[InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатая")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцатая")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатая")]
[InlineData(-751633617, "минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатая")]
public void ToOrdinalWordsFeminine(int number, string expected)
{
Expand All @@ -218,12 +221,12 @@ public void ToOrdinalWordsFeminine(int number, string expected)
[InlineData(3, "третье")]
[InlineData(111, "сто одиннадцатое")]
[InlineData(1112, "одна тысяча сто двенадцатое")]
[InlineData(11213, "одиннадцать тысячь двести тринадцатое")]
[InlineData(11213, "одиннадцать тысяч двести тринадцатое")]
[InlineData(121314, "сто двадцать одна тысяча триста четырнадцатое")]
[InlineData(2132415, "два миллиона сто тридцать две тысячи четыреста пятнадцатое")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысячь пятьсот шестнадцатое")]
[InlineData(12345516, "двенадцать миллионов триста сорок пять тысяч пятьсот шестнадцатое")]
[InlineData(751633617, "семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатое")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысячь сто восемнадцатое")]
[InlineData(1111111118, "один миллиард сто одиннадцать миллионов сто одиннадцать тысяч сто восемнадцатое")]
[InlineData(-751633617, "минус семьсот пятьдесят один миллион шестьсот тридцать три тысячи шестьсот семнадцатое")]
public void ToOrdinalWordsNeuter(int number, string expected)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ internal class RussianNumberToWordsConverter : GenderedNumberToWordsConverter
private static readonly string[] TensMap = { "ноль", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" };
private static readonly string[] UnitsMap = { "ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" };
private static readonly string[] UnitsOrdinalPrefixes = { string.Empty, string.Empty, "двух", "трёх", "четырёх", "пяти", "шести", "семи", "восьми", "девяти", "десяти", "одиннадцати", "двенадцати", "тринадцати", "четырнадцати", "пятнадцати", "шестнадцати", "семнадцати", "восемнадцати", "девятнадцати" };
private static readonly string[] TensOrdinalPrefixes = { string.Empty, "десяти", "двадцати", "тридцати", "сорока", "пятидесяти", "шестидесяти", "семидесяти", "восьмидесяти", "девятидесяти" };
private static readonly string[] TensOrdinalPrefixes = { string.Empty, "десяти", "двадцати", "тридцати", "сорока", "пятидесяти", "шестидесяти", "семидесяти", "восьмидесяти", "девяносто" };
private static readonly string[] TensOrdinal = { string.Empty, "десят", "двадцат", "тридцат", "сороков", "пятидесят", "шестидесят", "семидесят", "восьмидесят", "девяност" };
private static readonly string[] UnitsOrdinal = { string.Empty, "перв", "втор", "трет", "четверт", "пят", "шест", "седьм", "восьм", "девят", "десят", "одиннадцат", "двенадцат", "тринадцат", "четырнадцат", "пятнадцат", "шестнадцат", "семнадцат", "восемнадцат", "девятнадцат" };

Expand All @@ -29,7 +29,7 @@ public override string Convert(int number, GrammaticalGender gender)

CollectParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, "миллиард", "миллиарда", "миллиардов");
CollectParts(parts, ref number, 1000000, GrammaticalGender.Masculine, "миллион", "миллиона", "миллионов");
CollectParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысяча", "тысячи", "тысячь");
CollectParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысяча", "тысячи", "тысяч");

if (number > 0)
CollectPartsUnderOneThousand(parts, number, gender);
Expand All @@ -52,7 +52,7 @@ public override string ConvertToOrdinal(int number, GrammaticalGender gender)

CollectOrdinalParts(parts, ref number, 1000000000, GrammaticalGender.Masculine, "миллиардн" + GetEndingForGender(gender, number), "миллиард", "миллиарда", "миллиардов");
CollectOrdinalParts(parts, ref number, 1000000, GrammaticalGender.Masculine, "миллионн" + GetEndingForGender(gender, number), "миллион", "миллиона", "миллионов");
CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысячн" + GetEndingForGender(gender, number), "тысяча", "тысячи", "тысячь");
CollectOrdinalParts(parts, ref number, 1000, GrammaticalGender.Feminine, "тысячн" + GetEndingForGender(gender, number), "тысяча", "тысячи", "тысяч");

if (number >= 100)
{
Expand Down