public void Check_Samples() { var rules = Cldr.Instance .GetDocuments("common/supplemental/plurals.xml") .Elements($"supplementalData/plurals[@type='cardinal']/pluralRules/pluralRule") .Select(e => Rule.Parse(e)) .Where(r => r.Category != "other") .OrderBy(r => r.Text) .ToList(); foreach (var rule in rules) { foreach (var sample in rule.Samples.Split(' ', ',', '~')) { if (sample.StartsWith("@")) { continue; } if (decimal.TryParse(sample, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal value)) { var context = RuleContext.Create(value); Assert.IsTrue(rule.Matches(context), $"{sample} for {rule.Text}"); } } } }
void LoadRules() { var lang = Locale.Id.Language.ToLowerInvariant(); Rules = Cldr.Instance .GetDocuments("common/supplemental/plurals.xml") .Elements($"supplementalData/plurals[@type='cardinal']/pluralRules[contains(@locales, '{lang}')]/pluralRule") .Select(e => Rule.Parse(e)) .ToList(); }
public void Parsing() { var rule = Rule.Parse("one", "n = 1"); Assert.AreEqual("one", rule.Category); Assert.AreEqual("", rule.Samples); Assert.AreEqual("n = 1", rule.Text); rule = Rule.Parse("one", "n = 1 @integer 1"); Assert.AreEqual("one", rule.Category); Assert.AreEqual("@integer 1", rule.Samples); Assert.AreEqual("n = 1", rule.Text); }
public void All_Supplemental_Plural_Rules() { var rules = Cldr.Instance .GetDocuments("common/supplemental/plurals.xml") .Elements($"supplementalData/plurals[@type='cardinal']/pluralRules/pluralRule") .Select(e => Rule.Parse(e)) .Where(r => r.Category != "other") .OrderBy(r => r.Text) .ToList(); var context = RuleContext.Create(1m); foreach (var rule in rules) { try { rule.Matches(context); } catch (Exception e) { throw new Exception($"{rule.Text} => {Rule.ConvertExpression(rule.Text)}", e); } } }