CifrasEnLetrasTest.cs

  1. // CifrasEnLetrasTest.cs
  2.  
  3. using System;
  4. using System.Text;
  5.  
  6. using ProInf.net;
  7.  
  8.  
  9. namespace ProInf.net
  10. {
  11. public static class CifrasEnLetrasTest
  12. {
  13. public static void Main (string[] args)
  14. {
  15. // Forzar parámetros
  16. args = new string[] { "2", "3", "6", "C", "N", "E", "R" };
  17.  
  18. if (args.Length == 0) {
  19. print("Indica los tests a pasar: [2]cifras, [3]cifras, [6]cifras, [C]ifras, [N]umero, [E]uros, [R]omano");
  20. }
  21. else {
  22. for (int i=0; i<args.Length; ++i)
  23. {
  24. char caracter = args[i].ToUpper()[0];
  25. switch (caracter)
  26. {
  27. case '2': test_convertirDosCifras(); break;
  28. case '3': test_convertirTresCifras(); break;
  29. case '6': test_convertirSeisCifras(); break;
  30. case 'C': test_convertirCifrasEnLetras(); break;
  31. case 'N': test_convertirNumeroEnLetras(); break;
  32. case 'E': test_convertirEurosEnLetras(); break;
  33. case 'R': test_convertirCifrasEnRomano(); break;
  34. default: print("Parámetro '" + args[i] + "' incorrecto."); break;
  35. }
  36. }
  37. }
  38.  
  39. } // Main
  40.  
  41. //------------------------------------------------------------
  42. // TESTS
  43.  
  44. public static void test_convertirDosCifras() {
  45. int[] pruebas = {0, 1, 2, 7, 10, 12, 22, 30, 50, 66, 84, 99};
  46. String[] referencias = {"cero", "un", "dos", "siete", "diez", "doce", "veintidós", "treinta", "cincuenta", "sesenta y seis", "ochenta y cuatro", "noventa y nueve"};
  47. print ("TEST 2: convertirDosCifras");
  48. for (int i=0; i<pruebas.Length; ++i) {
  49. test(pruebas[i].ToString(), CifrasEnLetras.convertirDosCifras(pruebas[i],generoNeutro()), referencias[i]);
  50. }
  51. for (int i=0; i<10; ++i) {
  52. int cifras = aleatorio(Math.Pow(10, 2));
  53. print("aleatorio: " + cifras + " = " + CifrasEnLetras.convertirDosCifras(cifras, generoAleatorio()));
  54. }
  55. }
  56. public static void test_convertirTresCifras() {
  57. int[] pruebas = {44, 300, 100, 121, 438, 999};
  58. String[] referencias = {"cuarenta y cuatro", "trescientos", "cien", "ciento veintiún", "cuatrocientos treinta y ocho", "novecientos noventa y nueve"};
  59. print ("TEST 3: convertirTresCifras");
  60. for (int i=0; i<pruebas.Length; ++i) {
  61. test(pruebas[i].ToString(), CifrasEnLetras.convertirTresCifras(pruebas[i], generoNeutro()), referencias[i]);
  62. }
  63. for (int i=0; i<10; ++i) {
  64. int cifras = aleatorioPotenciaDiez(4);
  65. print("aleatorio: " + cifras + " = " + CifrasEnLetras.convertirTresCifras(cifras, generoAleatorio()));
  66. }
  67. }
  68. public static void test_convertirSeisCifras() {
  69. int[] pruebas = {781, 1000, 1001, 1200, 320000, 458926, 999999};
  70. String[] referencias = {"setecientos ochenta y un", "mil", "mil un", "mil doscientos", "trescientos veinte mil", "cuatrocientos cincuenta y ocho mil novecientos veintiséis", "novecientos noventa y nueve mil novecientos noventa y nueve"};
  71. print ("TEST 6: convertirSeisCifras");
  72. for (int i=0; i<pruebas.Length; ++i) {
  73. test(pruebas[i].ToString(), CifrasEnLetras.convertirSeisCifras(pruebas[i], generoNeutro()), referencias[i]);
  74. }
  75. for (int i=0; i<10; ++i) {
  76. int cifras = aleatorioPotenciaDiez(7);
  77. print("aleatorio: " + cifras + " = " + CifrasEnLetras.convertirSeisCifras(cifras, generoAleatorio()));
  78. }
  79. }
  80. public static void test_convertirCifrasEnLetras() {
  81. String[] pruebas = {"1000001", "2001000", "250000000000", "75000000000000000" };
  82. String[] referencias = {"un millón un", "dos millones mil", "doscientos cincuenta mil millones", "setenta y cinco mil billones" };
  83. print ("TEST C: convertirCifrasCifras");
  84. for (int i=0; i<pruebas.Length; ++i) {
  85. test(pruebas[i].ToString(), CifrasEnLetras.convertirCifrasEnLetras(pruebas[i]), referencias[i]);
  86. }
  87. test("1", CifrasEnLetras.convertirCifrasEnLetrasFemeninas("1"), "una");
  88. test("240021", CifrasEnLetras.convertirCifrasEnLetrasFemeninas("240021"), "doscientas cuarenta mil veintiuna");
  89. test("21300", CifrasEnLetras.convertirCifrasEnLetrasFemeninas("21300"), "veintiuna mil trescientas");
  90. for (int i=0; i<4; ++i) {
  91. string cifras = cifrasAleatorias(aleatorio(126) + 1);
  92. print("aleatorio: " + cifras + " = \r\n" + CifrasEnLetras.convertirCifrasEnLetras(cifras, generoAleatorio(), "\r\n" ));
  93. }
  94. }
  95. public static void test_convertirNumeroEnLetras() {
  96. print ("TEST N: convertirNumeroEnLetras");
  97. test("-123,45 ; 2", CifrasEnLetras.convertirNumeroEnLetras("-123,45", 2), "menos ciento veintitrés con cuarenta y cinco");
  98. test("2.000,25 ; 3", CifrasEnLetras.convertirNumeroEnLetras("2.000,25", 3, "kilo", "gramo"), "dos mil kilos con doscientos cincuenta gramos");
  99. test("43,005 ; 3", CifrasEnLetras.convertirNumeroEnLetras("43,005", 3, "kilómetro", "metro"), "cuarenta y tres kilómetros con cinco metros");
  100. test("1.270,23 ; 2", CifrasEnLetras.convertirNumeroEnLetras("1.270,23", 2, "euro", "céntimo"), "mil doscientos setenta euros con veintitrés céntimos");
  101. test("1 ; 2", CifrasEnLetras.convertirNumeroEnLetras("1", 2, "euro", "céntimo"), "un euro con cero céntimos");
  102. test("0,678 ; 2", CifrasEnLetras.convertirNumeroEnLetras("0,678", 2, "euro", "céntimo"), "cero euros con sesenta y siete céntimos");
  103. test("22.000,55 ; 0", CifrasEnLetras.convertirNumeroEnLetras("22.000,55", 0, "euro", ""), "veintidós mil euros");
  104. test("-0 ;", CifrasEnLetras.convertirNumeroEnLetras("-0"), "cero");
  105. test("-0,01 ;", CifrasEnLetras.convertirNumeroEnLetras("-0,01"), "menos cero con uno");
  106. test("0,01 ; 3", CifrasEnLetras.convertirNumeroEnLetras("0,01", 3), "cero con diez");
  107. test("20,21 ;", CifrasEnLetras.convertirNumeroEnLetras("20,21"), "veinte con veintiuno");
  108. test("-,889 ;", CifrasEnLetras.convertirNumeroEnLetras("-,889"), "menos cero con ochocientos ochenta y nueve");
  109. test("0 ;", CifrasEnLetras.convertirNumeroEnLetras("0"), "cero");
  110. test("200 ; 0", CifrasEnLetras.convertirNumeroEnLetras("200","manzana",true), "doscientas manzanas");
  111. test("351 ; 0", CifrasEnLetras.convertirNumeroEnLetras("351,5","manzana",true), "trescientas cincuenta y una manzanas");
  112. test("1,5 ; 2", CifrasEnLetras.convertirNumeroEnLetras("1,5",2,"peseta","céntimo",true,false), "una peseta con cincuenta céntimos");
  113. test("300,56 ; 3", CifrasEnLetras.convertirNumeroEnLetras("300,56",3,"segundo","milésima",false,true), "trescientos segundos con quinientas sesenta milésimas");
  114. test("21,21 ; 2", CifrasEnLetras.convertirNumeroEnLetras("21,21",2,"niño","niña",false,true), "veintiún niños con veintiuna niñas");
  115. test("1000000", CifrasEnLetras.convertirNumeroEnLetras("1000000","euro"),"un millón de euros");
  116. test("200200200", CifrasEnLetras.convertirNumeroEnLetras("200.200.200","persona",true), "doscientos millones doscientas mil doscientas personas");
  117. test("221.221.221", CifrasEnLetras.convertirNumeroEnLetras("221.221.221","persona",true), "doscientos veintiún millones doscientas veintiuna mil doscientas veintiuna personas");
  118. test("3120", CifrasEnLetras.convertirNumeroEnLetras("3120","persona",true), "tres mil ciento veinte personas");
  119.  
  120.  
  121. for (int i=0; i<10; ++i) {
  122. string cifras = (aleatorio(2) == 0?"-":"") + cifrasAleatorias(aleatorio(5)) + "," + cifrasAleatorias(aleatorio(3));
  123. int numeroDecimales = aleatorio(4);
  124. print("aleatorio: " + cifras + " ; " + numeroDecimales + " = " + CifrasEnLetras.convertirNumeroEnLetras(cifras, numeroDecimales));
  125. }
  126. }
  127. public static void test_convertirEurosEnLetras() {
  128. print ("TEST E: convertirEurosEnLetras");
  129. test("string:44276598801,2 ; 2", CifrasEnLetras.convertirEurosEnLetras("498001,2",2), "cuatrocientos noventa y ocho mil un euros con veinte céntimos");
  130. test("long:85009", CifrasEnLetras.convertirEurosEnLetras(85009), "ochenta y cinco mil nueve euros");
  131. test("double:10200.35", CifrasEnLetras.convertirEurosEnLetras(10200.35), "diez mil doscientos euros con treinta y cinco céntimos");
  132. for (int i=0; i<10; ++i) {
  133. string cifras = (aleatorio(2) == 0?"-":"") + cifrasAleatorias(aleatorio(8)) + "," + cifrasAleatorias(aleatorio(3));
  134. print("aleatorio: " + cifras + " = " + CifrasEnLetras.convertirEurosEnLetras(cifras,2));
  135. }
  136. }
  137.  
  138. public static void test_convertirCifrasEnRomano() {
  139. /*
  140. print ("TEST R: convertirCifrasEnRomano");
  141. test("1943", NumeracionRomana.convertirCifrasEnRomano(1943), "MCMXLIII");
  142. test("3999", NumeracionRomana.convertirCifrasEnRomano(3999), "MMMCMXCIX");
  143. test("7114207",NumeracionRomana.convertirNumeroEnRomano(7114207), "__V_M_M_C_XM_VCCVII");
  144. for (int i=0; i<100; ++i) {
  145. long cifras = aleatorioPotenciaDiez(10);
  146. if (cifras == 0) cifras = aleatorio(4000+1);
  147. string romano = NumeracionRomana.convertirNumeroEnRomano(cifras);
  148. long cifras2 = NumeracionRomana.convertirRomanoEnNumero(romano);
  149. if (cifras == cifras2) print("aleatorio correcto: " + cifras + " = " + romano);
  150. else print("aleatorio incorrecto: " + cifras + " = " + romano + " = " + cifras2);
  151. }
  152. */
  153. }
  154.  
  155. //------------------------------------------------------------
  156. // ALEATORIO
  157.  
  158. private static Random azar = new Random();
  159.  
  160. //------------------------------------------------------------
  161. // FUNCIONES AUXILIARES
  162.  
  163. private static void print(string mensaje) {
  164. Console.WriteLine(mensaje);
  165. }
  166. private static void test(string cifra, string prueba, string referencia) {
  167. test(cifra,prueba,referencia,"");
  168. }
  169. private static void test(string cifra, string prueba, string referencia, string etc) {
  170. print( (prueba.Equals(referencia)?"correcto":"ERROR") + ": " + cifra + " = " + prueba + " " + etc);
  171. }
  172. public static int aleatorio(double rango) { // 2 --> 0 ó 1
  173. return azar.Next((int)rango);
  174. }
  175. public static int aleatorioPotenciaDiez(int potencia) { // 3 -> [0] ó [0..9] ó [0..99]
  176. return azar.Next( (int)Math.Pow(10, aleatorio(potencia)) );
  177. }
  178. public static string cifrasAleatorias (int numeroCifras) { // permutaciones
  179. StringBuilder cifras = new StringBuilder();
  180. for (int cifra=0; cifra<numeroCifras; ++cifra) {
  181. cifras.Append("0123456789"[aleatorio(10)]);
  182. }
  183. return cifras.ToString();
  184. }
  185. public static string numeroAleatorio() {
  186. if (aleatorio(5) == 0)
  187. return cifrasAleatorias(aleatorio(126) + 1);
  188. else
  189. return (aleatorio(2) == 0?"-":"") +
  190. cifrasAleatorias(aleatorio(12)) + "," +
  191. cifrasAleatorias(aleatorio(4));
  192. }
  193. public static CifrasEnLetras.Genero generoAleatorio() {
  194. return CifrasEnLetras.generoDesdeNumero(aleatorio(3));
  195. }
  196. public static CifrasEnLetras.Genero generoNeutro() {
  197. return CifrasEnLetras.Genero.neutro;
  198. }
  199.  
  200.  
  201. } // class CifrasEnLetrasTest
  202. } // namespace ProInf.Net
  203.  

Proinf.net