public void TestFractionModel() { var ci = new PortugueseNumberParserConfiguration().CultureInfo; var model = GetNumberModel(); BasicTest(model, "um quinto", "0,2"); BasicTest(model, "um bilionesimo", "1E-09"); BasicTest(model, "cem mil bilionesimos", "0,0001"); BasicTest(model, "tres quintos", "0,6"); BasicTest(model, "vinte quintos", "4"); BasicTest(model, "vinte e tres quintos", "4,6"); BasicTest(model, "dois sobre onze", ((double)2 / 11).ToString(ci)); BasicTest(model, "um vinte e um avos", ((double)1 / 21).ToString(ci)); BasicTest(model, "dois onze avos", ((double)2 / 11).ToString(ci)); BasicTest(model, "cento e trinta e tres vinte e um avos", ((double)133 / 21).ToString(ci)); BasicTest(model, "vinte e dois trinta avos", ((double)22 / 30).ToString(ci)); BasicTest(model, "um vinte e cinco avos", ((double)1 / 25).ToString(ci)); BasicTest(model, "um sobre vinte e cinco", ((double)1 / 25).ToString(ci)); BasicTest(model, "vinte vinte e cinco avos", "0,8"); BasicTest(model, "tres vinte e um avos", ((double)3 / 21).ToString(ci)); BasicTest(model, "tres vinte avos", ((double)3 / 20).ToString(ci)); BasicTest(model, "tres duzentos avos", ((double)3 / 200).ToString(ci)); BasicTest(model, "tres dois milesimos", ((double)3 / 2000).ToString(ci)); BasicTest(model, "tres vinte milesimos", ((double)3 / 20000).ToString(ci)); // BasicTest(model, "tres duzentos milesimos", ((double)3 / 200000).ToString(ci)); // act like Google BasicTest(model, "cento e trinta quintos", ((double)130 / 5).ToString(ci)); // BasicTest(model, "cem trinta e cinco avos", ((double)100 / 35).ToString(ci)); //@HERE // BasicTest(model, "tres e um quinto", "3,2"); BasicTest(model, "vinte e um quintos", "4,2"); BasicTest(model, "cento e trinta e dois cinco avos", ((double)132 / 5).ToString(ci)); BasicTest(model, "cento e trinta e dois quintos", ((double)132 / 5).ToString(ci)); // BasicTest(model, "um cento e cinco avos", ((double)1 / 105).ToString(ci)); // BasicTest(model, "cem mil e cinco avos", ((double)100 / 1005).ToString(ci)); BasicTest(model, "um sobre tres", ((double)1 / 3).ToString(ci)); BasicTest(model, "1 sobre 21", ((double)1 / 21).ToString(ci)); BasicTest(model, "1 sobre tres", ((double)1 / 3).ToString(ci)); BasicTest(model, "1 sobre 3", ((double)1 / 3).ToString(ci)); BasicTest(model, "um sobre 3", ((double)1 / 3).ToString(ci)); BasicTest(model, "1/3", ((double)1 / 3).ToString(ci)); BasicTest(model, "um sobre 20", ((double)1 / 20).ToString(ci)); BasicTest(model, "um sobre vinte", ((double)1 / 20).ToString(ci)); BasicTest(model, "um sobre cem", ((double)1 / 100).ToString(ci)); BasicTest(model, "1 sobre cento e vinte e um", ((double)1 / 121).ToString(ci)); BasicTest(model, "um sobre cento e trinta e cinco", ((double)1 / 135).ToString(ci)); // BasicTest(model, "cinco meios", ((double)5 / 2).ToString(ci)); BasicTest(model, "tres quartos", ((double)3 / 4).ToString(ci)); // BasicTest(model, "dois tercos", ((double)2 / 3).ToString(ci)); // BasicTest(model, "cento e trinta e cinco meios", ((double)135 / 2).ToString(ci)); // BasicTest(model, "dez e um meio", (10 + (double)1 / 2).ToString(ci)); // BasicTest(model, "dez e um quarto", (10 + (double)1 / 4).ToString(ci)); // Should we also support a common informal format? //BasicTest(model, "um por vinte e cinco", ((double)1 / 25).ToString(ci)); }
public void TestPercentageModel() { var ci = new PortugueseNumberParserConfiguration().CultureInfo; var model = GetPercentageModel(); #region Integer percentages BasicTest(model, "100%", "100%"); BasicTest(model, " 100% ", "100%"); BasicTest(model, " 100 por cento", "100%"); BasicTest(model, " cem por cento", "100%"); BasicTest(model, "243 por cento", "243%"); BasicTest(model, "vinte por cento", "20%"); BasicTest(model, "trinta e cinco por cento", "35%"); BasicTest(model, "quinhentos e trinta e cinco por cento", "535%"); BasicTest(model, "10 por cento", "10%"); BasicTest(model, "dez por cento", "10%"); BasicTest(model, "tres milhoes cinquenta e dois mil trezentos e quarenta e sete por cento", "3052347%"); // percentages within sentences BasicTest(model, "algo como uns 11%", "11%", "11%"); BasicTest(model, "claro, somente uns 15 por cento", "15%", "15 por cento"); BasicTest(model, "sim, nada mais que vinte e cinco por cento", "25%", "vinte e cinco por cento"); BasicTest(model, "derrame cem por cento do liquido", "100%", "cem por cento"); BasicTest(model, "um percentual de 25%", "25%", "25%"); BasicTest(model, "uma percentagem de trinta e seis por cento do total", "36%", "trinta e seis por cento"); BasicTest(model, "um percentual de oitenta e quatro por cento", "84%", "oitenta e quatro por cento"); #endregion #region Double percentages BasicTest(model, " 101231,2353%", "101231,2353%"); BasicTest(model, "-101231,4323%", "-101231,4323%"); BasicTest(model, " -89101231,5127%", "-89101231,5127%"); BasicTest(model, " - 89101231,5127%", "-89101231,5127%"); BasicTest(model, ",23456000%", "0,23456%"); BasicTest(model, "4,800%", "4,8%"); BasicTest(model, "4,8 por cento", "4,8%"); BasicTest(model, " -89101231,5127 por cento", "-89101231,5127%"); BasicTest(model, "-89101231,5127 por cento", "-89101231,5127%"); BasicTest(model, " - 89101231,5127 por cento", "-89101231,5127%"); BasicTest(model, " -1,1234567 por cento", "-1,1234567%"); BasicTest(model, "1.234.567,51274 por cento", "1234567,51274%"); BasicTest(model, ",08 por cento", "0,08%"); BasicTest(model, "9,2321312%", "9,2321312%"); BasicTest(model, " -9,2321312 por cento", "-9,2321312%"); BasicTest(model, "1e10%", "10000000000%"); BasicTest(model, "1,1^23 por cento", "8,95430243255239%"); // BasicTest(model, "sete ponto 5 por cento", "7,5%"); // BasicTest(model, "sete virgula 5 por cento", "7,5%"); BasicTest(model, "quarenta e sete virgula vinte e oito por cento", "47,28%"); #endregion #region Fraction percentages BasicTest(model, "tres quintos por cento", ((double)3 / 5).ToString(ci) + "%"); BasicTest(model, "dois virgula cinco por cento", "2,5%"); BasicTest(model, "um quinto por cento", "0,2%"); BasicTest(model, "um bilionesimo por cento", "1E-09%"); BasicTest(model, "um vinte e um avos por cento", ((double)1 / 21).ToString(ci) + "%"); BasicTest(model, "cento e trinta e tres vinte e um avos por cento", ((double)133 / 21).ToString(ci) + "%"); // Ambiguous in Portuguese // BasicTest(model, "cento e trinta e tres vinte e um avos por cento", (130 + (double)3 / 21).ToString(ci) + "%"); BasicTest(model, "vinte e dois trinta avos por cento", ((double)22 / 30).ToString(ci) + "%"); BasicTest(model, "tres dois milesimos por cento", ((double)3 / 2000).ToString(ci) + "%"); // act like Google BasicTest(model, "cento e trinta quintos por cento", ((double)130 / 5).ToString(ci) + "%"); BasicTest(model, "cento e trinta e dois quintos por cento", ((double)132 / 5).ToString(ci) + "%"); BasicTest(model, "um sobre tres por cento", ((double)1 / 3).ToString(ci) + "%"); BasicTest(model, "1 sobre 3 por cento", ((double)1 / 3).ToString(ci) + "%"); BasicTest(model, "3/4%", ((double)3 / 4).ToString(ci) + "%"); BasicTest(model, "2/3%", ((double)2 / 3).ToString(ci) + "%"); // BasicTest(model, "sete e meio por cento", "7,5%"); // BasicTest(model, "cem trinta e cinco avos por cento", ((double)100 / 35).ToString(ci) + "%"); #endregion }