public OrderingScenario(int bitCount, ulong value, OrderExpect result) { Guard.InRangeInclusive(bitCount, nameof(bitCount), 1, 64); ulong mask = ulong.MaxValue << bitCount; Guard.InRangeInclusive(value, nameof(value), 0, ~mask); BitCount = bitCount; Result = result; Value = value; }
public OrderingScenario(int bitCount, ulong value, OrderExpect result) { Guard.InRangeInclusive(bitCount, nameof(bitCount), 1, 64); ulong mask = ulong.MaxValue << bitCount; Guard.InRangeInclusive(value, nameof(value), 0, ~mask); BitCount = bitCount; Result = result; Value = value; }
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()); } }
private static OrderingScenario?CreateCombinedScenario(OrderingScenario primaryScenario, OrderingScenario secondaryScenario, OrderingScenario tertiaryScenario) { OrderExpect result = CombineResult(primaryScenario, secondaryScenario, tertiaryScenario); if (result != OrderExpect.DoNotCare) { ulong sequence = CreateBitSequenceFor(primaryScenario, secondaryScenario, tertiaryScenario); var combined = new OrderingScenario(12, sequence, result); if (!IsImpossibleCombination(combined)) { return(combined); } } return(null); }
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(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()); } }