public void PenaltyOverrun2() { // Arrange var scenarios = new List <OrderingScenario> { // Bits: PenaltyTime X > Y, OverrunTime X > Y, PenaltyTime Y > X, OverrunTime Y > X new(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; CompetitionClassModel model = new CompetitionClassModel() .ChangeClassInfo(new CompetitionClassInfo() .ChangeStandardCourseTime(StandardCourseTime)); var comparer = new CompetitionRunResultRankingComparer(model, RankingComparisonMode.OnlyPhasePenaltyOverrun); foreach (OrderingScenario scenario in scenarios.Where(s => s.Result != OrderExpect.DoNotCare)) { CompetitionRunResult xCompetitor = CreateCompetitorForPenaltyOverrun(scenario[0], scenario[1]); CompetitionRunResult yCompetitor = CreateCompetitorForPenaltyOverrun(scenario[2], scenario[3]); AssertCompetitorsAreCompatibleWithProposedScenario(xCompetitor, yCompetitor, scenario, model); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public void RunCompletion1() { // Arrange var scenarios = new List<OrderingScenario> { // Bits: X HasFinished, X IsEliminated, Y HasFinished, Y IsEliminated new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.IsEven) }; var comparer = new CompetitionRunResultRankingComparer(new CompetitionClassModel(), RankingComparisonMode.OnlyPhaseCompletion); foreach (OrderingScenario scenario in scenarios.Where(s => s.Result != OrderExpect.DoNotCare)) { CompetitionRunResult xCompetitor = CreateCompetitorForCompletion(scenario[0], scenario[1]); CompetitionRunResult yCompetitor = CreateCompetitorForCompletion(scenario[2], scenario[3]); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public void RunCompletion1() { // Arrange var scenarios = new List <OrderingScenario> { // Bits: X HasFinished, X IsEliminated, Y HasFinished, Y IsEliminated new(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.IsEven) }; var comparer = new CompetitionRunResultRankingComparer(new CompetitionClassModel(), RankingComparisonMode.OnlyPhaseCompletion); foreach (OrderingScenario scenario in scenarios.Where(s => s.Result != OrderExpect.DoNotCare)) { CompetitionRunResult xCompetitor = CreateCompetitorForCompletion(scenario[0], scenario[1]); CompetitionRunResult yCompetitor = CreateCompetitorForCompletion(scenario[2], scenario[3]); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public void FinishNumber3() { // Arrange var scenarios = new List <OrderingScenario> { // Bits: FinishTime X > Y, CompetitorNumber X > Y, FinishTime Y > X, CompetitorNumber Y > X new(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; var comparer = new CompetitionRunResultRankingComparer(new CompetitionClassModel(), RankingComparisonMode.OnlyPhaseFinishNumber); foreach (OrderingScenario scenario in scenarios.Where(s => s.Result != OrderExpect.DoNotCare)) { CompetitionRunResult xCompetitor = CreateCompetitorForFinishWithNumber(scenario[0], scenario[1]); CompetitionRunResult yCompetitor = CreateCompetitorForFinishWithNumber(scenario[2], scenario[3]); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public void RunExploded() { // Arrange var runCompletionScenarios = new List<OrderingScenario> { // Bits: X HasFinished, X IsEliminated, Y HasFinished, Y IsEliminated new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.IsEven) }; var penaltyOverrunScenarios = new List<OrderingScenario> { // Bits: PenaltyTime X > Y, OverrunTime X > Y, PenaltyTime Y > X, OverrunTime Y > X new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; var finishNumberScenarios = new List<OrderingScenario> { // Bits: FinishTime X > Y, CompetitorNumber X > Y, FinishTime Y > X, CompetitorNumber Y > X new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; IEnumerable<OrderingScenario> exploded = ExplodeCombinations(runCompletionScenarios, penaltyOverrunScenarios, finishNumberScenarios); CompetitionClassModel model = new CompetitionClassModel() .ChangeClassInfo(new CompetitionClassInfo() .ChangeStandardCourseTime(StandardCourseTime)); var comparer = new CompetitionRunResultRankingComparer(model, RankingComparisonMode.Regular); foreach (OrderingScenario scenario in exploded) { bool xHasFinished = scenario[0]; bool xIsEliminated = scenario[1]; bool yHasFinished = scenario[2]; bool yIsEliminated = scenario[3]; bool xPenaltyTimeIsGreater = scenario[4]; bool xOverrunTimeIsGreater = scenario[5]; bool yPenaltyTimeIsGreater = scenario[6]; bool yOverrunTimeIsGreater = scenario[7]; bool xFinishTimeIsGreater = scenario[8]; bool xCompetitorNumberIsGreater = scenario[9]; bool yFinishTimeIsGreater = scenario[10]; bool yCompetitorNumberIsGreater = scenario[11]; CompetitionRunResult xCompetitor = CreateCompetitorFor("X", xHasFinished, xIsEliminated, yHasFinished, xPenaltyTimeIsGreater, xOverrunTimeIsGreater, yPenaltyTimeIsGreater, yOverrunTimeIsGreater, xFinishTimeIsGreater, xCompetitorNumberIsGreater, yFinishTimeIsGreater, yCompetitorNumberIsGreater); CompetitionRunResult yCompetitor = CreateCompetitorFor("Y", yHasFinished, yIsEliminated, xHasFinished, yPenaltyTimeIsGreater, yOverrunTimeIsGreater, xPenaltyTimeIsGreater, xOverrunTimeIsGreater, yFinishTimeIsGreater, yCompetitorNumberIsGreater, xFinishTimeIsGreater, xCompetitorNumberIsGreater); AssertCompetitorsAreCompatibleWithProposedScenario(xCompetitor, yCompetitor, scenario, model); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public ClassPlacementCalculator([NotNull] CompetitionClassModel modelSnapshot) { Guard.NotNull(modelSnapshot, nameof(modelSnapshot)); comparer = new CompetitionRunResultRankingComparer(modelSnapshot, RankingComparisonMode.Regular); }
public void PenaltyOverrun2() { // Arrange var scenarios = new List<OrderingScenario> { // Bits: PenaltyTime X > Y, OverrunTime X > Y, PenaltyTime Y > X, OverrunTime Y > X new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; CompetitionClassModel model = new CompetitionClassModel() .ChangeClassInfo(new CompetitionClassInfo() .ChangeStandardCourseTime(StandardCourseTime)); var comparer = new CompetitionRunResultRankingComparer(model, RankingComparisonMode.OnlyPhasePenaltyOverrun); foreach (OrderingScenario scenario in scenarios.Where(s => s.Result != OrderExpect.DoNotCare)) { CompetitionRunResult xCompetitor = CreateCompetitorForPenaltyOverrun(scenario[0], scenario[1]); CompetitionRunResult yCompetitor = CreateCompetitorForPenaltyOverrun(scenario[2], scenario[3]); AssertCompetitorsAreCompatibleWithProposedScenario(xCompetitor, yCompetitor, scenario, model); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public void FinishNumber3() { // Arrange var scenarios = new List<OrderingScenario> { // Bits: FinishTime X > Y, CompetitorNumber X > Y, FinishTime Y > X, CompetitorNumber Y > X new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new OrderingScenario(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new OrderingScenario(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; var comparer = new CompetitionRunResultRankingComparer(new CompetitionClassModel(), RankingComparisonMode.OnlyPhaseFinishNumber); foreach (OrderingScenario scenario in scenarios.Where(s => s.Result != OrderExpect.DoNotCare)) { CompetitionRunResult xCompetitor = CreateCompetitorForFinishWithNumber(scenario[0], scenario[1]); CompetitionRunResult yCompetitor = CreateCompetitorForFinishWithNumber(scenario[2], scenario[3]); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }
public void RunExploded() { // Arrange var runCompletionScenarios = new List <OrderingScenario> { // Bits: X HasFinished, X IsEliminated, Y HasFinished, Y IsEliminated new(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.IsEven) }; var penaltyOverrunScenarios = new List <OrderingScenario> { // Bits: PenaltyTime X > Y, OverrunTime X > Y, PenaltyTime Y > X, OverrunTime Y > X new(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.IsEven), new(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; var finishNumberScenarios = new List <OrderingScenario> { // Bits: FinishTime X > Y, CompetitorNumber X > Y, FinishTime Y > X, CompetitorNumber Y > X new(4, OrderingScenario.FromBits(0, 0, 0, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 0, 0, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 0, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 0, 1, 1), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(0, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(0, 1, 1, 0), OrderExpect.WinnerIsX), new(4, OrderingScenario.FromBits(0, 1, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 0, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 0, 1), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 0, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 0, 1, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 0, 0), OrderExpect.WinnerIsY), new(4, OrderingScenario.FromBits(1, 1, 0, 1), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 0), OrderExpect.DoNotCare), new(4, OrderingScenario.FromBits(1, 1, 1, 1), OrderExpect.DoNotCare) }; IEnumerable <OrderingScenario> exploded = ExplodeCombinations(runCompletionScenarios, penaltyOverrunScenarios, finishNumberScenarios); CompetitionClassModel model = new CompetitionClassModel() .ChangeClassInfo(new CompetitionClassInfo() .ChangeStandardCourseTime(StandardCourseTime)); var comparer = new CompetitionRunResultRankingComparer(model, RankingComparisonMode.Regular); foreach (OrderingScenario scenario in exploded) { bool xHasFinished = scenario[0]; bool xIsEliminated = scenario[1]; bool yHasFinished = scenario[2]; bool yIsEliminated = scenario[3]; bool xPenaltyTimeIsGreater = scenario[4]; bool xOverrunTimeIsGreater = scenario[5]; bool yPenaltyTimeIsGreater = scenario[6]; bool yOverrunTimeIsGreater = scenario[7]; bool xFinishTimeIsGreater = scenario[8]; bool xCompetitorNumberIsGreater = scenario[9]; bool yFinishTimeIsGreater = scenario[10]; bool yCompetitorNumberIsGreater = scenario[11]; CompetitionRunResult xCompetitor = CreateCompetitorFor("X", xHasFinished, xIsEliminated, yHasFinished, xPenaltyTimeIsGreater, xOverrunTimeIsGreater, yPenaltyTimeIsGreater, yOverrunTimeIsGreater, xFinishTimeIsGreater, xCompetitorNumberIsGreater, yFinishTimeIsGreater, yCompetitorNumberIsGreater); CompetitionRunResult yCompetitor = CreateCompetitorFor("Y", yHasFinished, yIsEliminated, xHasFinished, yPenaltyTimeIsGreater, yOverrunTimeIsGreater, xPenaltyTimeIsGreater, xOverrunTimeIsGreater, yFinishTimeIsGreater, yCompetitorNumberIsGreater, xFinishTimeIsGreater, xCompetitorNumberIsGreater); AssertCompetitorsAreCompatibleWithProposedScenario(xCompetitor, yCompetitor, scenario, model); // Act int result = comparer.Compare(xCompetitor, yCompetitor); // Assert OrderExpect actual = TranslateComparerResult(result); actual.Should().Be(scenario.Result, scenario.ToString()); } }