public void TestPercentageModel()
        {
            var model = NumberRecognizer.GetPercentageModel(Culture.English);

            BasicTest(model,
                      "100%", "100%");

            BasicTest(model,
                      " 100% ", "100%");

            BasicTest(model,
                      " 100 percent", "100%");

            BasicTest(model,
                      " 100 percentage", "100%");

            BasicTest(model,
                      "240 percent", "240%");

            BasicTest(model,
                      "twenty percent", "20%");

            BasicTest(model,
                      "thirty percentage", "30%");

            BasicTest(model,
                      "one hundred percent", "100%");

            BasicTest(model,
                      "one hundred percents", "100%");

            BasicTest(model,
                      "percents of twenty", "20%");

            BasicTest(model,
                      "percent of 10", "10%");

            BasicTest(model,
                      "per cent of twenty-two", "22%");

            BasicTest(model,
                      "per cent of 210", "210%");

            BasicTest(model,
                      "10 percent", "10%");
        }
        public void TestPercentageModel()
        {
            var model = NumberRecognizer.GetPercentageModel(Culture.Chinese);

            MultiTest(model,
                      "打对折", 1);

            MultiOneTest(model,
                         "打对折", 1, "50%");

            MultiTest(model,
                      "对折", 0);

            BasicTest(model,
                      "陆 点 五 折", "65%");

            BasicTest(model,
                      "9成", "90%");

            BasicTest(model,
                      "七成 六", "76%");

            BasicTest(model,
                      "7.2成", "72%");

            BasicTest(model,
                      "7 2 折", "72%");

            BasicTest(model,
                      "六 点 五 成", "65%");

            BasicTest(model,
                      "10 成", "100%");

            BasicTest(model,
                      "10 成", "100%");

            BasicTest(model,
                      "十 成", "100%");

            BasicTest(model,
                      "75折", "75%");

            BasicTest(model,
                      "9.9折", "99%");

            BasicTest(model,
                      "九 九 折", "99%");

            BasicTest(model,
                      "三点一折", "31%");

            BasicTest(model,
                      "三成", "30%");

            BasicTest(model,
                      "半成", "5%");

            BasicTest(model,
                      "半折", "50%");

            BasicTest(model,
                      "10成", "100%");

            BasicTest(model,
                      "十成", "100%");

            MultiTest(model,
                      "十折", 0);

            BasicTest(model,
                      "9.5成", "95%");

            BasicTest(model,
                      "九成", "90%");

            BasicTest(model,
                      "三成半", "35%");

            BasicTest(model,
                      "2.5成", "25%");

            BasicTest(model,
                      "2成", "20%");

            BasicTest(model,
                      "2折", "20%");

            BasicTest(model,
                      "两折", "20%");

            BasicTest(model,
                      "两成", "20%");

            BasicTest(model,
                      "三八折", "38%");

            BasicTest(model,
                      "三点一折", "31%");

            MultiTest(model,
                      "2成,2.5成,2.1成,2成", 4);

            MultiTest(model,
                      "九成,五成,八点五成", 3);

            BasicTest(model,
                      "2折", "20%");

            MultiTest(model,
                      "2折,2.5折,2.1折,2折", 4);

            MultiTest(model,
                      "九折,五五折,八点五折", 3);

            MultiTest(model,
                      "五折", 1);

            BasicTest(model,
                      "百分之2.4",
                      "2.4%");

            MultiTest(model,
                      "二三十个百分点",
                      0);

            MultiTest(model,
                      "百分之二三十",
                      0);

            BasicTest(model,
                      "百分之2.4",
                      "2.4%");

            BasicTest(model,
                      "百分之五",
                      "5%");

            BasicTest(model,
                      "一百五十    个百分点",
                      "150%");

            BasicTest(model,
                      "六个百分点",
                      "6%");

            BasicTest(model,
                      "2.4个百分点",
                      "2.4%");

            BasicTest(model,
                      "-22.2%",
                      "-22.2%");

            BasicTest(model,
                      "22%",
                      "22%");

            BasicTest(model,
                      "-122%",
                      "-122%");

            BasicTest(model,
                      "百分之22",
                      "22%");

            BasicTest(model,
                      "百分之120",
                      "120%");

            BasicTest(model,
                      "百分之15K",
                      "15000%");

            BasicTest(model,
                      "百分之1,111",
                      "1111%");

            BasicTest(model,
                      "百分之9,999",
                      "9999%");

            BasicTest(model,
                      "12个百分点",
                      "12%");

            BasicTest(model,
                      "2,123个百分点",
                      "2123%");

            BasicTest(model,
                      "二十个百分点",
                      "20%");

            BasicTest(model,
                      "四点 五个百分点",
                      "4.5%");

            BasicTest(model,
                      "百分之五 十",
                      "50%");

            BasicTest(model,
                      "百分之一 点五",
                      "1.5%");

            BasicTest(model,
                      "百分之56.2",
                      "56.2%");

            BasicTest(model,
                      "百分之12",
                      "12%");

            BasicTest(model,
                      "百分之3,000",
                      "3000%");

            BasicTest(model,
                      "百分之1,123",
                      "1123%");

            BasicTest(model,
                      "百分之3.2k",
                      "3200%");

            BasicTest(model,
                      "百分之3.2M",
                      "3200000%");

            BasicTest(model,
                      "12.56个百分点",
                      "12.56%");

            BasicTest(model,
                      "0.4个百分点",
                      "0.4%");

            BasicTest(model,
                      "15,123个百分点",
                      "15123%");

            BasicTest(model,
                      "111,111个百分点",
                      "111111%");

            BasicTest(model,
                      "25%",
                      "25%");

            BasicTest(model,
                      "12k个百分点",
                      "12000%");

            BasicTest(model,
                      "15k个百分点",
                      "15000%");

            BasicTest(model,
                      "一百五十个百分点",
                      "150%");

            BasicTest(model,
                      "七十五万个百分点",
                      "750000%");

            BasicTest(model,
                      "拾万零五十六点叁叁个百分点",
                      "100056.33%");

            BasicTest(model,
                      "75.2个百分点",
                      "75.2%");

            BasicTest(model,
                      "75个百分点",
                      "75%");

            BasicTest(model,
                      "1,075个百分点",
                      "1075%");

            BasicTest(model,
                      "百分之一百",
                      "100%");

            BasicTest(model,
                      "百分之百",
                      "100%");

            BasicTest(model,
                      "百分之一百二十点五",
                      "120.5%");

            BasicTest(model,
                      "百分之2.4",
                      "2.4%");

            BasicTest(model,
                      "百分之2",
                      "2%");

            BasicTest(model,
                      "百分之1,669",
                      "1669%");

            BasicTest(model,
                      "百分之52.5",
                      "52.5%");

            MultiTest(model,
                      "五百分之2.2",
                      0);

            MultiTest(model,
                      "上升了百分之2.2",
                      1);

            BasicTest(model,
                      "5%",
                      "5%");

            BasicTest(model,
                      "5.5%",
                      "5.5%");

            BasicTest(model,
                      "一 百 五 十 个 百 分 点",
                      "150%");

            BasicTest(model,
                      "六   个 百 分点",
                      "6%");

            BasicTest(model,
                      "2.4   个百分 点",
                      "2.4%");

            BasicTest(model,
                      "百 分之 一百二十点五",
                      "120.5%");

            BasicTest(model,
                      "百 分 之2.4",
                      "2.4%");

            BasicTest(model,
                      "百 分之 2",
                      "2%");

            BasicTest(model,
                      "百  分 之 669",
                      "669%");

            BasicTest(model,
                      "百 分 之  52.5 k",
                      "52500%");

            BasicTest(model,
                      "百 分 之 一 百二 十点 五",
                      "120.5%");

            MultiTest(model,
                      "打對折", 1);

            MultiOneTest(model,
                         "打對折", 1, "50%");

            MultiTest(model,
                      "對折", 0);

            BasicTest(model,
                      "陸 點 五 折", "65%");

            BasicTest(model,
                      "9成", "90%");

            BasicTest(model,
                      "七成 六", "76%");

            BasicTest(model,
                      "7.2成", "72%");

            BasicTest(model,
                      "7 2 折", "72%");

            BasicTest(model,
                      "六 點 五 成", "65%");

            BasicTest(model,
                      "10 成", "100%");

            BasicTest(model,
                      "10 成", "100%");

            BasicTest(model,
                      "十 成", "100%");

            BasicTest(model,
                      "75折", "75%");

            BasicTest(model,
                      "9.9折", "99%");

            BasicTest(model,
                      "九 九 折", "99%");

            BasicTest(model,
                      "三點一折", "31%");

            BasicTest(model,
                      "三成", "30%");

            BasicTest(model,
                      "半成", "5%");

            BasicTest(model,
                      "半折", "50%");

            BasicTest(model,
                      "10成", "100%");

            BasicTest(model,
                      "十成", "100%");

            MultiTest(model,
                      "十折", 0);

            BasicTest(model,
                      "9.5成", "95%");

            BasicTest(model,
                      "九成", "90%");

            BasicTest(model,
                      "三成半", "35%");

            BasicTest(model,
                      "2.5成", "25%");

            BasicTest(model,
                      "2成", "20%");

            BasicTest(model,
                      "2折", "20%");

            BasicTest(model,
                      "兩折", "20%");

            BasicTest(model,
                      "兩成", "20%");

            BasicTest(model,
                      "三八折", "38%");

            BasicTest(model,
                      "三點一折", "31%");

            MultiTest(model,
                      "2成,2.5成,2.1成,2成", 4);

            MultiTest(model,
                      "九成,五成,八點五成", 3);

            BasicTest(model,
                      "2折", "20%");

            MultiTest(model,
                      "2折,2.5折,2.1折,2折", 4);

            MultiTest(model,
                      "九折,五五折,八點五折", 3);

            MultiTest(model,
                      "五折", 1);

            BasicTest(model,
                      "百分之2.4",
                      "2.4%");

            MultiTest(model,
                      "二三十個百分點",
                      0);

            MultiTest(model,
                      "百分之二三十",
                      0);

            BasicTest(model,
                      "百分之2.4",
                      "2.4%");

            BasicTest(model,
                      "百分之五",
                      "5%");

            BasicTest(model,
                      "一百五十 個百分點",
                      "150%");

            BasicTest(model,
                      "六個百分點",
                      "6%");

            BasicTest(model,
                      "2.4個百分點",
                      "2.4%");

            BasicTest(model,
                      "-22.2%",
                      "-22.2%");

            BasicTest(model,
                      "22%",
                      "22%");

            BasicTest(model,
                      "-122%",
                      "-122%");

            BasicTest(model,
                      "百分之22",
                      "22%");

            BasicTest(model,
                      "百分之120",
                      "120%");

            BasicTest(model,
                      "百分之15K",
                      "15000%");

            BasicTest(model,
                      "百分之1,111",
                      "1111%");

            BasicTest(model,
                      "百分之9,999",
                      "9999%");

            BasicTest(model,
                      "12個百分點",
                      "12%");

            BasicTest(model,
                      "2,123個百分點",
                      "2123%");

            BasicTest(model,
                      "二十個百分點",
                      "20%");

            BasicTest(model,
                      "四點 五個百分點",
                      "4.5%");

            BasicTest(model,
                      "百分之五 十",
                      "50%");

            BasicTest(model,
                      "百分之一 點五",
                      "1.5%");

            BasicTest(model,
                      "百分之56.2",
                      "56.2%");

            BasicTest(model,
                      "百分之12",
                      "12%");

            BasicTest(model,
                      "百分之3,000",
                      "3000%");

            BasicTest(model,
                      "百分之1,123",
                      "1123%");

            BasicTest(model,
                      "百分之3.2k",
                      "3200%");

            BasicTest(model,
                      "百分之3.2M",
                      "3200000%");

            BasicTest(model,
                      "12.56個百分點",
                      "12.56%");

            BasicTest(model,
                      "0.4個百分點",
                      "0.4%");

            BasicTest(model,
                      "15,123個百分點",
                      "15123%");

            BasicTest(model,
                      "111,111個百分點",
                      "111111%");

            BasicTest(model,
                      "25%",
                      "25%");

            BasicTest(model,
                      "12k個百分點",
                      "12000%");

            BasicTest(model,
                      "15k個百分點",
                      "15000%");

            BasicTest(model,
                      "一百五十個百分點",
                      "150%");

            BasicTest(model,
                      "七十五萬個百分點",
                      "750000%");

            BasicTest(model,
                      "拾萬零五十六點叁叁個百分點",
                      "100056.33%");

            BasicTest(model,
                      "75.2個百分點",
                      "75.2%");

            BasicTest(model,
                      "75個百分點",
                      "75%");

            BasicTest(model,
                      "1,075個百分點",
                      "1075%");

            BasicTest(model,
                      "百分之一百",
                      "100%");

            BasicTest(model,
                      "百分之百",
                      "100%");

            BasicTest(model,
                      "百分之一百二十點五",
                      "120.5%");

            BasicTest(model,
                      "百分之2.4",
                      "2.4%");

            BasicTest(model,
                      "百分之2",
                      "2%");

            BasicTest(model,
                      "百分之1,669",
                      "1669%");

            BasicTest(model,
                      "百分之52.5",
                      "52.5%");

            MultiTest(model,
                      "五百分之2.2",
                      0);

            MultiTest(model,
                      "上升了百分之2.2",
                      1);

            BasicTest(model,
                      "5%",
                      "5%");

            BasicTest(model,
                      "5.5%",
                      "5.5%");

            BasicTest(model,
                      "一 百 五 十 個 百 分 點",
                      "150%");

            BasicTest(model,
                      "六   個 百 分點",
                      "6%");

            BasicTest(model,
                      "2.4   個百分 點",
                      "2.4%");

            BasicTest(model,
                      "百 分之 一百二十點五",
                      "120.5%");

            BasicTest(model,
                      "百 分 之2.4",
                      "2.4%");

            BasicTest(model,
                      "百 分之 2",
                      "2%");

            BasicTest(model,
                      "百  分 之 669",
                      "669%");

            BasicTest(model,
                      "百 分 之  52.5 k",
                      "52500%");

            BasicTest(model,
                      "佰 分 之 一 百二 十點 五",
                      "120.5%");
        }
        public void TestPercentageModel()
        {
            var ci = new SpanishNumberParserConfiguration().CultureInfo;

            var model = NumberRecognizer.GetPercentageModel(Culture.Spanish);;

            #region Integer percentages

            BasicTest(model, "100%", "100%");

            BasicTest(model, " 100% ", "100%");

            BasicTest(model, " 100 por ciento", "100%");

            BasicTest(model, " cien por cien", "100%");

            BasicTest(model, "cien por ciento", "100%");

            BasicTest(model, "243 por ciento", "243%");

            BasicTest(model, "veinte por ciento", "20%");

            BasicTest(model, "treinta y cinco por ciento", "35%");

            BasicTest(model, "quinientos treinta y cinco por ciento", "535%");

            BasicTest(model, "10 por ciento", "10%");

            BasicTest(model, "diez por ciento", "10%");

            BasicTest(model, "tres millones cincuenta y dos mil trescientos cuarenta y siete por ciento", "3052347%");

            BasicTest(model, "tres millones cuatrocientos cincuenta y dos mil trescientos cuarenta y siete por ciento", "3452347%");

            BasicTest(model, "trece millones cuatrocientos cincuenta y dos mil trescientos cuarenta y siete por ciento", "13452347%");

            BasicTest(model, "quinientos trece millones cuatrocientos cincuenta y dos mil trescientos cuarenta y siete por ciento", "513452347%");

            BasicTest(model, "quinientos trece millones cuatrocientos cincuenta y dos mil trescientos cuarenta por ciento", "513452340%");

            BasicTest(model, "quinientos trece millones cuatrocientos cincuenta y dos mil trescientos por ciento", "513452300%");

            BasicTest(model, "quinientos trece millones cuatrocientos cincuenta y dos mil por ciento", "513452000%");

            // a little percentage :p
            BasicTest(model, "tres billones cuatrocientos cincuenta y cinco mil doscientos veintiocho millones quinientos cincuenta y seis mil ochocientos treinta y dos por ciento", "3455228556832%");

            // percentages within sentences
            BasicTest(model, "algo asi como un 11%", "11%", "11%");

            BasicTest(model, "claro, solamente un 15 por ciento", "15%", "15 por ciento");

            BasicTest(model, "si, nada mas un veinticinco por ciento", "25%", "veinticinco por ciento");

            BasicTest(model, "todo, dejame el cien por cien del combustible", "100%", "cien por cien");

            BasicTest(model, "un porcentaje del 25%", "25%", "25%");

            BasicTest(model, "un porcentaje del treinta y seis por ciento del total", "36%", "treinta y seis por ciento");

            BasicTest(model, "un porcentaje del ochenta y cuatro por cien solamente", "84%", "ochenta y cuatro por cien");

            #endregion

            #region Double percentages

            BasicTest(model, " 101231,2353%", "101231,2353%");

            BasicTest(model, "-101231,4323%", "-101231,4323%");

            BasicTest(model, " -89101231,5127 por ciento", "-89101231,5127%");

            BasicTest(model, " -1,1234567 por cien", "-1,1234567%");

            BasicTest(model, "1.234.567,51274 por ciento", "1234567,51274%");

            BasicTest(model, ",23456000%", "0,23456%");

            BasicTest(model, "4,800%", "4,8%");

            BasicTest(model, ",08 por ciento", "0,08%");

            BasicTest(model, "9,2321312%", "9,2321312%");

            BasicTest(model, " -9,2321312 por cien", "-9,2321312%");

            BasicTest(model, "1e10%", "10000000000%");

            BasicTest(model, "1,1^23 por ciento", "8,95430243255239%");

            BasicTest(model, "siete con cincuenta por ciento", "7,5%");

            BasicTest(model, "cuarenta y siete coma veintiocho por ciento", "47,28%");

            BasicTest(model, "trescientos cuarenta y siete con quinientos doce por ciento", "347,512%");

            BasicTest(model, "dos mil trescientos cuarenta y siete coma mil quinientos setenta y ocho por ciento", "2347,1578%");

            BasicTest(model, "cincuenta y dos mil trescientos cuarenta y siete con doscientos por ciento", "52347,2%");

            BasicTest(model, "cuatrocientos cincuenta y dos mil trescientos cuarenta y siete coma veintidos por ciento", "452347,22%");

            #endregion

            #region Fraction percentages

            BasicTest(model, "tres quintos por ciento", ((double)3 / 5).ToString(ci) + "%");

            BasicTest(model, "dos coma cinco por ciento", "2,5%");

            BasicTest(model, "un quinto por ciento", "0,2%");

            BasicTest(model, "un billonesimo por cien", "1E-12%");

            BasicTest(model, "un veintiunavo por ciento", ((double)1 / 21).ToString(ci) + "%");

            BasicTest(model, "ciento treinta y tres veintiunavos por ciento", ((double)133 / 21).ToString(ci) + "%");

            BasicTest(model, "ciento treinta con tres veintiunavos por ciento", (130 + (double)3 / 21).ToString(ci) + "%");

            BasicTest(model, "veintidos treintavos por ciento", ((double)22 / 30).ToString(ci) + "%");

            BasicTest(model, "tres dosmilesimos por ciento", ((double)3 / 2000).ToString(ci) + "%");

            BasicTest(model, "tres veintemilesimos por ciento", ((double)3 / 20000).ToString(ci) + "%");

            // act like Google
            BasicTest(model, "ciento treinta quintos por ciento", ((double)130 / 5).ToString(ci) + "%");

            BasicTest(model, "cien treintaicincoavos por ciento", ((double)100 / 35).ToString(ci) + "%");

            // this is spanish can be interpreted as 130 + 2/5 or 132 / 5 - in this case go for 2nd option for simplicity
            BasicTest(model, "ciento treinta y dos cincoavos por ciento", ((double)132 / 5).ToString(ci) + "%");

            // and we go for the first option if the user writes it using 'con'
            BasicTest(model, "ciento treinta con dos cincoavos por ciento", (130 + (double)2 / 5).ToString(ci) + "%");

            BasicTest(model, "ciento treinta y dos quintos por ciento", ((double)132 / 5).ToString(ci) + "%");

            BasicTest(model, "ciento treinta con dos quintos por ciento", (130 + (double)2 / 5).ToString(ci) + "%");

            BasicTest(model, "uno sobre tres por ciento", ((double)1 / 3).ToString(ci) + "%");

            BasicTest(model, "1 sobre 3 por ciento", ((double)1 / 3).ToString(ci) + "%");

            BasicTest(model, "3/4%", ((double)3 / 4).ToString(ci) + "%");

            BasicTest(model, "2/3%", ((double)2 / 3).ToString(ci) + "%");

            #endregion
        }