public void Calculates_correct_percentages(int daisyMaeSellPrice, int[] nookBuyPrices, float[] expected) { var exampleData = new CurrentWeekData(daisyMaeSellPrice, nookBuyPrices); var actual = exampleData.GetPercentages(); actual.Should().ContainInOrder(expected); }
public bool MatchesFor(CurrentWeekData data) { var priceChanges = data.NookBuyPrices .Zip(data.NookBuyPrices.Skip(1), (first, second) => second - first); var everyDayDecreases = priceChanges.All(priceChange => priceChange < 0); return(!everyDayDecreases); }
public bool MatchesFor(CurrentWeekData data) { if (data.NookBuyPrices.Count() < dayIndex + 1) { return(false); } var specificPercentage = data.GetPercentages().ElementAt(dayIndex); return(specificPercentage < lower || specificPercentage > upper); }
private bool OnePatternIsProven(CurrentWeekData data, IEnumerable <PatternValidator> validators, out StalkPattern?provenPattern) { try { var provenValidator = validators.SingleOrDefault(validator => validator.IsProvenFor(data)); provenPattern = provenValidator?.Pattern; return(provenValidator != null); } catch (InvalidOperationException) { // More than one validator claims to be proven, that's impossible! var provenValidatorPatterns = validators .Where(validator => validator.IsProvenFor(data)) .Select(validator => validator.Pattern); var names = String.Join(", ", provenValidatorPatterns); throw new Exception($"More than one pattern is proven! (${names})"); } }
public IEnumerable <StalkPattern> GetPossibleStalkPatterns(CurrentWeekData data) { var validators = PatternValidatorFactory.GetPatternValidators(); // Look for a proven pattern if (OnePatternIsProven(data, validators, out StalkPattern? pattern)) { return(new StalkPattern[] { pattern.Value }); } // Get all possible patterns IEnumerable <StalkPattern> possibleStalkPatterns = Enum.GetValues(typeof(StalkPattern)).Cast <StalkPattern>().ToList(); // Subtract any disproven patterns var disprovenPatterns = validators .Where(validator => validator.IsDisprovenFor(data)) .Select(validator => validator.Pattern); return(possibleStalkPatterns.Except(disprovenPatterns)); }
public bool IsPossibleFor(CurrentWeekData data) => !IsProvenFor(data) && !IsDisprovenFor(data);
public bool IsDisprovenFor(CurrentWeekData data) => Disprovers.Any(disprover => disprover.MatchesFor(data));
public bool IsProvenFor(CurrentWeekData data) => Provers.Any(prover => prover.MatchesFor(data));
public bool MatchesFor(CurrentWeekData data) { return(data.GetPercentages().Any(percentage => percentage < lower || percentage > upper)); }
public static IEnumerable <float> GetPercentages(this CurrentWeekData data) { return(data.NookBuyPrices.Select(buyPrice => (float)(buyPrice * 100) / data.DaisyMaeSellPrice)); }