protected void TestRule(IRule rule, RuleContextTest ruleTest) { foreach (var sample in ruleTest.Samples) { TestSample(rule, ruleTest, sample); } }
protected void TestRules(IRule[] rules, RuleContextTest ruleTest) { var dict = rules.ToDictionary(r => r.Id, r => r); Assert.True(dict.TryGetValue(ruleTest.Id, out var rule), $"Rule not found [{ruleTest.Id}]."); TestRule(rule, ruleTest); }
protected void TestSample(IRule rule, RuleContextTest ruleTest, RuleTestSample sample) { var word = sample.Input; var initialDerivation = WordDerivation.Origin(word); var derivation = rule.Derive(ExecutionContext, initialDerivation); var derived = derivation.Select(d => d.Derived).ToArray(); int expectedNb = sample.Outputs.Length; Assert.True(expectedNb == derived.Length, $"Expect [{string.Join("", word.Phonemes)}] to have [{expectedNb}] derivations ({string.Join(", ", sample.Outputs.Select(o => "[" + string.Join("", o.Word.Phonemes) + "]"))}) but only have [{derived.Length}]."); for (int i = 0; i < sample.Outputs.Length; i++) { TestSampleOutput(sample.Outputs, derived, i); } }
public void Test(RuleContextTest ruleTest) { TestRules(Part1Chapter10.RuleComponents(), ruleTest); }
public void Test(RuleContextTest ruleTest) { TestRules(Part1Chapter08.Rules(), ruleTest); }