blob: 342bd8a5f3830b12dad69c7c87780a82b4afffe0 [file] [log] [blame]
using System.Text;
namespace Lucene.Net.Util
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/// <summary>
/// Converts numbers to english strings for testing.
/// <para/>
/// @lucene.internal
/// </summary>
public static class English // LUCENENET specific - made class static
{
// LUCENENET specific extension method
public static string ToEnglish(this long i)
{
return Int64ToEnglish(i);
}
// LUCENENET specific extension method
public static void ToEnglish(this long i, StringBuilder result)
{
Int64ToEnglish(i, result);
}
// LUCENENET specific extension method
public static string ToEnglish(this int i)
{
return Int32ToEnglish(i);
}
// LUCENENET specific extension method
public static void ToEnglish(this int i, StringBuilder result)
{
Int32ToEnglish(i, result);
}
public static string Int64ToEnglish(long i)
{
StringBuilder result = new StringBuilder();
Int64ToEnglish(i, result);
return result.ToString();
}
public static void Int64ToEnglish(long i, StringBuilder result)
{
if (i == 0)
{
result.Append("zero");
return;
}
if (i < 0)
{
result.Append("minus ");
i = -i;
}
if (i >= 1000000000000000000L) // quadrillion
{
Int64ToEnglish(i / 1000000000000000000L, result);
result.Append("quintillion, ");
i = i % 1000000000000000000L;
}
if (i >= 1000000000000000L) // quadrillion
{
Int64ToEnglish(i / 1000000000000000L, result);
result.Append("quadrillion, ");
i = i % 1000000000000000L;
}
if (i >= 1000000000000L) // trillions
{
Int64ToEnglish(i / 1000000000000L, result);
result.Append("trillion, ");
i = i % 1000000000000L;
}
if (i >= 1000000000) // billions
{
Int64ToEnglish(i / 1000000000, result);
result.Append("billion, ");
i = i % 1000000000;
}
if (i >= 1000000) // millions
{
Int64ToEnglish(i / 1000000, result);
result.Append("million, ");
i = i % 1000000;
}
if (i >= 1000) // thousands
{
Int64ToEnglish(i / 1000, result);
result.Append("thousand, ");
i = i % 1000;
}
if (i >= 100) // hundreds
{
Int64ToEnglish(i / 100, result);
result.Append("hundred ");
i = i % 100;
}
//we know we are smaller here so we can cast
if (i >= 20)
{
switch (((int)i) / 10)
{
case 9:
result.Append("ninety");
break;
case 8:
result.Append("eighty");
break;
case 7:
result.Append("seventy");
break;
case 6:
result.Append("sixty");
break;
case 5:
result.Append("fifty");
break;
case 4:
result.Append("forty");
break;
case 3:
result.Append("thirty");
break;
case 2:
result.Append("twenty");
break;
}
i = i % 10;
if (i == 0)
{
result.Append(" ");
}
else
{
result.Append("-");
}
}
switch ((int)i)
{
case 19:
result.Append("nineteen ");
break;
case 18:
result.Append("eighteen ");
break;
case 17:
result.Append("seventeen ");
break;
case 16:
result.Append("sixteen ");
break;
case 15:
result.Append("fifteen ");
break;
case 14:
result.Append("fourteen ");
break;
case 13:
result.Append("thirteen ");
break;
case 12:
result.Append("twelve ");
break;
case 11:
result.Append("eleven ");
break;
case 10:
result.Append("ten ");
break;
case 9:
result.Append("nine ");
break;
case 8:
result.Append("eight ");
break;
case 7:
result.Append("seven ");
break;
case 6:
result.Append("six ");
break;
case 5:
result.Append("five ");
break;
case 4:
result.Append("four ");
break;
case 3:
result.Append("three ");
break;
case 2:
result.Append("two ");
break;
case 1:
result.Append("one ");
break;
case 0:
result.Append("");
break;
}
}
public static string Int32ToEnglish(int i)
{
StringBuilder result = new StringBuilder();
Int64ToEnglish(i, result);
return result.ToString();
}
public static void Int32ToEnglish(int i, StringBuilder result)
{
Int64ToEnglish(i, result);
}
}
}