public void CanGetMatchedConsequent() { var table = new RuleTable(2); var rules = table.Rules; table.SetMatched(new List<Move>() { Moves.Paper, Moves.Rock }); var rule = table.GetMatchedConsequent(Moves.Scissors); Assert.NotNull(rule); Assert.True(rule.IsMatched); Assert.Equal(Moves.Paper, rule.Antecedents[0]); Assert.Equal(Moves.Rock, rule.Antecedents[1]); Assert.Equal(rule.Consequent, Moves.Scissors); }
public void CanSetMatched() { var table = new RuleTable(2); var firstMatch = new List<Move> { Moves.Paper, Moves.Rock }; table.SetMatched(firstMatch); var rules = table.Rules; rules.Where(r => r.Antecedents.SequenceEqual(firstMatch)).ToList().ForEach(r => Assert.True(r.IsMatched)); rules.Where(r => !r.Antecedents.SequenceEqual(firstMatch)).ToList().ForEach(r => Assert.False(r.IsMatched)); var secondMatch = new List<Move> { Moves.Rock, Moves.Paper }; table.SetMatched(secondMatch); rules.Where(r => r.Antecedents.SequenceEqual(secondMatch)).ToList().ForEach(r => Assert.True(r.IsMatched)); rules.Where(r => !r.Antecedents.SequenceEqual(secondMatch)).ToList().ForEach(r => Assert.False(r.IsMatched)); }
public void CanGetMatched() { var table = new RuleTable(2); var firstMatch = new List<Move> { Moves.Paper, Moves.Rock }; table.SetMatched(firstMatch); var rules = table.FindRulesByAntecedents(firstMatch); var matched = table.GetMatched().ToList(); Assert.Equal(5, matched.Count); Assert.Equal(rules[0], matched[0]); Assert.Equal(rules[1], matched[1]); Assert.Equal(rules[2], matched[2]); Assert.Equal(rules[3], matched[3]); Assert.Equal(rules[4], matched[4]); }
public void MatchedHighestWeightIsNullWhenNoMatches() { var table = new RuleTable(2); var res = table.GetMatchedHighestWeight(); Assert.Null(res); }
public void CanGetMatchedConsequentReturnsNullWhenNoMatches() { var table = new RuleTable(2); Assert.Null(table.GetMatchedConsequent(Moves.Scissors)); }
public void RuleTableInitOfSizeTwoProducesProperRules() { var table = new RuleTable(2); var rules = table.Rules; Assert.Equal(125, rules.Count()); int[] index = { 0 }; Func<Rule> nextRule = () => rules[index[0]++]; //spot check AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Rock, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Rock, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Rock, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Rock, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Rock, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Paper, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Paper, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Paper, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Paper, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Paper, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Scissors, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Scissors, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Scissors, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Scissors, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Scissors, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Dynamite, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Dynamite, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Dynamite, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Dynamite, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Dynamite, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.WaterBalloon, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.WaterBalloon, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.WaterBalloon, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.WaterBalloon, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.WaterBalloon, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Rock, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Rock, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Rock, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Rock, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Rock, Moves.WaterBalloon), nextRule()); }
public void RuleTableInitOfSizeOneProducesProperRules() { var table = new RuleTable(1); Assert.Equal(25, table.Rules.Count); int[] index = { 0 }; Func<Rule> nextRule = () => table.Rules[index[0]++]; AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Rock, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Paper, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Scissors, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Scissors, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Scissors, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Scissors, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Scissors, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.Dynamite, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.Dynamite, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.Dynamite, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.Dynamite, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.Dynamite, Moves.WaterBalloon), nextRule()); AssertRulesEqual(RuleFrom(Moves.WaterBalloon, Moves.Rock), nextRule()); AssertRulesEqual(RuleFrom(Moves.WaterBalloon, Moves.Paper), nextRule()); AssertRulesEqual(RuleFrom(Moves.WaterBalloon, Moves.Scissors), nextRule()); AssertRulesEqual(RuleFrom(Moves.WaterBalloon, Moves.Dynamite), nextRule()); AssertRulesEqual(RuleFrom(Moves.WaterBalloon, Moves.WaterBalloon), nextRule()); }
public void MatchedHighestWeightReturnsProperWhenNonMatchesIsGreater() { var table = new RuleTable(1); var firstMatch = new List<Move> { Moves.Paper }; table.SetMatched(firstMatch); var firstRules = table.FindRulesByAntecedents(firstMatch); Do(firstRules[0].IncrementWeight, 20); Do(firstRules[1].IncrementWeight, 10); var secondMatch = new List<Move> { Moves.Rock }; table.SetMatched(secondMatch); var secondRules = table.FindRulesByAntecedents(secondMatch); Do(secondRules[0].IncrementWeight, 6); Do(secondRules[1].IncrementWeight, 5); var res = table.GetMatchedHighestWeight(); Assert.Equal(6, res.Weight); }
public void MatchedHighestWeightReturnsOneOfTopIfMoreThanOneWeightSame() { var table = new RuleTable(1); var firstMatch = new List<Move> { Moves.Paper }; table.SetMatched(firstMatch); var rules = table.FindRulesByAntecedents(firstMatch); var rule1 = rules[0]; var rule2 = rules[1]; var rule3 = rules[2]; rule1.IsMatched = true; Do(rule1.IncrementWeight, 10); rule2.IsMatched = true; Do(rule2.IncrementWeight, 10); rule3.IsMatched = true; Do(rule3.IncrementWeight, 9); var res = table.GetMatchedHighestWeight(); Assert.Equal(10, res.Weight); }
protected RuleStrategyBase(int antecedentCount, SimpleFitness fitness) : base(fitness) { AntecedentCount = antecedentCount; Table = new RuleTable(antecedentCount); }