public void NoDoubles_ResultGivenBack() { var results = new DoubleApplication(_outcome, 0).Get(); Assert.Single(results); Assert.Equal(_outcome, results[0]); }
public void OneDoubleWithNoApplicableToken_OneOpenDouble() { var results = new DoubleApplication(_outcome, 1).Get(); Assert.Single(results); Assert.Single(results[0].Tokens); Assert.Equal(RawTokenType.OpenDouble, results[0].Tokens[0].Type); }
public void DoubleWithTwoDamage_GoesToFourQuantity() { _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Damage, Quantity = 2 }); var results = new DoubleApplication(_outcome, 1).Get(); Assert.Equal(4, results[0].Tokens[0].Quantity); }
public void DoubleWithATacticsDamageToken_OpenDoubleAdded() { _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Damage, WasTactics = true }); var results = new DoubleApplication(_outcome, 1).Get(); Assert.Equal(2, results[0].Tokens.Count); Assert.Equal(RawTokenType.OpenDouble, results[0].Tokens[1].Type); }
public void DoubleWithAnAlreadyDoubleApplicableToken_AddsOpenDouble() { _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Damage, WasDoubled = true }); var results = new DoubleApplication(_outcome, 1).Get(); Assert.Equal(2, results[0].Tokens.Count); Assert.Equal(1, results[0].Tokens[0].Quantity); Assert.Equal(RawTokenType.OpenDouble, results[0].Tokens[1].Type); }
public void DoubleWithApplicableToken_DoublesUpTheQuantity(RawTokenType type) { _outcome.Tokens.Add(new RawTokenResult { Type = type }); var results = new DoubleApplication(_outcome, 1).Get(); Assert.Single(results); Assert.Single(results[0].Tokens); Assert.Equal(2, results[0].Tokens[0].Quantity); }
public void DoubleWithOneOtherNonApplicableToken_AddsOpenDouble(RawTokenType type) { _outcome.Tokens.Add(new RawTokenResult { Type = type }); var results = new DoubleApplication(_outcome, 1).Get(); Assert.Single(results); Assert.Equal(2, results[0].Tokens.Count); Assert.Equal(RawTokenType.OpenDouble, results[0].Tokens[1].Type); }
public void TwoDoublesWithOneApplicableToken_TokenDoubledAndOpenDoubledAdded() { _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Damage }); var results = new DoubleApplication(_outcome, 2).Get(); Assert.Single(results); Assert.Equal(2, results[0].Tokens.Count); Assert.Contains(results[0].Tokens, x => x.WasDoubled && x.Type == RawTokenType.Damage && x.Quantity == 2); Assert.Contains(results[0].Tokens, x => x.Type == RawTokenType.OpenDouble); }
public void DoubleWithMultipleValueTypes_EachPermutationProduced() { _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Damage }); _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Block }); var results = new DoubleApplication(_outcome, 1).Get(); Assert.Contains(results, x => x.Tokens.First(token => token.WasDoubled).Type == RawTokenType.Damage); Assert.Contains(results, x => x.Tokens.First(token => token.WasDoubled).Type == RawTokenType.Block); }
public void TwoDoublesWithThreeApplicableTokens_ThreeResultsProduced() { _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Damage }); _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Block }); _outcome.Tokens.Add(new RawTokenResult { Type = RawTokenType.Surge }); var results = new DoubleApplication(_outcome, 2).Get(); Assert.Equal(3, results.Count); }
private CalculatedOutcome CalculateBestOutcome(List <Token> tokens) { var outcome = new RawOutcome { Initiative = new InitiativeCalculation(tokens).Get() }; var wingOutcomes = new WingsApplication(tokens, outcome).Get(); var outcomes = wingOutcomes.SelectMany(x => { var simpleOutcome = new SimpleApplication(x.Tokens, x.Outcome).Get(); var doubledOutcomes = new DoubleApplication(simpleOutcome, x.Tokens.Count(token => token.FaceUp.Type == TokenSideType.Double)).Get(); var tacticsOutcomes = doubledOutcomes.SelectMany(doubledOutcome => new TacticsApplication(doubledOutcome, x.Tokens.Count(token => token.FaceUp.Type == TokenSideType.Tactics)).Get()).ToList(); return(tacticsOutcomes); }).ToList(); var calculatedOutcomes = outcomes.Select(x => new RawOutcomeCalculation(_evaluators, x).Get()); return(calculatedOutcomes.OrderByDescending(x => x.Value).First()); }