public void SingleNameElection_3_people_with_3_way_Tie() { new Election { NumberToElect = 1, NumberExtra = 0 }.ForTests(); var ballots = new[] { new Ballot().ForTests() }; var votes = new[] { new Vote { SingleNameElectionCount = 10 }.ForTests(ballots[0], SamplePeople[0]), new Vote { SingleNameElectionCount = 10 }.ForTests(ballots[0], SamplePeople[1]), new Vote { SingleNameElectionCount = 10 }.ForTests(ballots[0], SamplePeople[2]), }; var model = new ElectionAnalyzerSingleName(_fakes); //election, votes, ballots, SamplePeople); model.AnalyzeEverything(); var results = model.Results.OrderBy(r => r.Rank).ToList(); results.Count.ShouldEqual(3); var result1 = results[0]; result1.VoteCount.ShouldEqual(10); result1.Rank.ShouldEqual(1); result1.Section.ShouldEqual(ResultHelper.Section.Top); result1.IsTied.ShouldEqual(true); result1.TieBreakGroup.ShouldEqual(1); var result2 = results[1]; result2.VoteCount.ShouldEqual(10); result2.Rank.ShouldEqual(2); result2.Section.ShouldEqual(ResultHelper.Section.Other); result2.IsTied.ShouldEqual(true); result2.TieBreakGroup.ShouldEqual(1); var result3 = results[2]; result3.VoteCount.ShouldEqual(10); result3.Rank.ShouldEqual(3); result3.Section.ShouldEqual(ResultHelper.Section.Other); result3.IsTied.ShouldEqual(true); result3.TieBreakGroup.ShouldEqual(1); }
public void SingleNameElection_1_person() { new Election { NumberToElect = 1, NumberExtra = 0 }.ForTests(); var ballots = new[] { new Ballot().ForTests() }; var votes = new[] { // all for one person in this test new Vote { SingleNameElectionCount = 33 }.ForTests(ballots[0], SamplePeople[0]), new Vote { SingleNameElectionCount = 5 }.ForTests(ballots[0], SamplePeople[0]), new Vote { SingleNameElectionCount = 2 }.ForTests(ballots[0], SamplePeople[0]), }; var model = new ElectionAnalyzerSingleName(_fakes); //election, votes, ballots, SamplePeople); model.AnalyzeEverything(); var results = model.Results.OrderBy(r => r.Rank).ToList(); results.Count.ShouldEqual(1); var result1 = results[0]; result1.VoteCount.ShouldEqual(33 + 5 + 2); result1.Rank.ShouldEqual(1); result1.Section.ShouldEqual(ResultHelper.Section.Top); result1.CloseToNext.ShouldEqual(false); result1.CloseToPrev.ShouldEqual(false); result1.ForceShowInOther.ShouldEqual(false); result1.IsTieResolved.ShouldEqual(null); result1.IsTied.ShouldEqual(false); result1.RankInExtra.ShouldEqual(null); result1.TieBreakCount.ShouldEqual(null); result1.TieBreakGroup.ShouldEqual(null); result1.TieBreakRequired.ShouldEqual(false); }
public void Election_3_people() { new Election { NumberToElect = 1, NumberExtra = 0 }.ForTests(); var ballots = new[] { new Ballot().ForTests(), new Ballot().ForTests(), new Ballot().ForTests(), }; var votes = new[] { new Vote { SingleNameElectionCount = 33 }.ForTests(ballots[0], SamplePeople[0]), new Vote { SingleNameElectionCount = 5 }.ForTests(ballots[1], SamplePeople[0]), new Vote { SingleNameElectionCount = 2 }.ForTests(ballots[2], SamplePeople[1]), }; var model = new ElectionAnalyzerSingleName(_fakes); //, election, votes, ballots, SamplePeople); model.AnalyzeEverything(); var results = model.Results.OrderBy(r => r.Rank).ToList(); results.Count.ShouldEqual(2); var result1 = results[0]; result1.VoteCount.ShouldEqual(38); result1.Rank.ShouldEqual(1); result1.Section.ShouldEqual(ResultHelper.Section.Top); result1.IsTied.ShouldEqual(false); var result2 = results[1]; result2.VoteCount.ShouldEqual(2); result2.Rank.ShouldEqual(2); result2.Section.ShouldEqual(ResultHelper.Section.Other); result2.IsTied.ShouldEqual(false); }
public void Invalid_People_Do_Not_Affect_Results() { new Election { NumberToElect = 1, NumberExtra = 0 }.ForTests(); var ballots = new[] { new Ballot().ForTests(), new Ballot().ForTests(), new Ballot().ForTests(), }; SamplePeople[5].IneligibleReasonGuid = IneligibleReasonEnum.Ineligible_Deceased; new PeopleModel().ApplyVoteReasonFlags(SamplePeople[5]); var votes = new[] { new Vote { SingleNameElectionCount = 33 }.ForTests(ballots[0], SamplePeople[0]), new Vote { SingleNameElectionCount = 5 }.ForTests(ballots[0], SamplePeople[1]), new Vote { SingleNameElectionCount = 5 }.ForTests(ballots[0], SamplePeople[2]), new Vote { SingleNameElectionCount = 5 }.ForTests(ballots[0], SamplePeople[3]), new Vote { SingleNameElectionCount = 27 }.ForTests(ballots[1], SamplePeople[5]), // spoiled person new Vote { SingleNameElectionCount = 27 }.ForTests(ballots[1], new Person { FirstName = "z2", IneligibleReasonGuid = IneligibleReasonEnum.Ineligible_Other }.ForTests()), // spoiled new Vote { SingleNameElectionCount = 27 }.ForTests(ballots[2], SamplePeople[4]), // #6 - will be Needs Review }; votes[6].PersonCombinedInfo = "different"; // force a Review var model = new ElectionAnalyzerSingleName(_fakes); //election, voteInfos, ballots, SamplePeople); model.AnalyzeEverything(); var results = model.Results.OrderBy(r => r.Rank).ToList(); var resultTies = model.ResultTies.OrderBy(rt => rt.TieBreakGroup).ToList(); resultTies.Count.ShouldEqual(1); resultTies[0].TieBreakRequired.ShouldEqual(false); resultTies[0].NumToElect.ShouldEqual(0); resultTies[0].NumInTie.ShouldEqual(3); var summary = model.ResultSummaryFinal; summary.BallotsNeedingReview.ShouldEqual(1); summary.SpoiledBallots.ShouldEqual(1); summary.SpoiledVotes.ShouldEqual(27 + 27); summary.SumOfEnvelopesCollected.ShouldEqual(1); // sample data has 1 voting method summary.BallotsReceived.ShouldEqual(33 + 5 + 5 + 5 + 27 + 27 + 27); summary.NumBallotsWithManual.ShouldEqual(1 + 33 + 5 + 5 + 5 + 27 + 27 + 27); results.Count.ShouldEqual(4); var result1 = results[0]; result1.VoteCount.ShouldEqual(33); result1.Section.ShouldEqual(ResultHelper.Section.Top); result1.IsTied.ShouldEqual(false); result1.TieBreakRequired = false; var result2 = results[1]; result2.VoteCount.ShouldEqual(5); result2.Section.ShouldEqual(ResultHelper.Section.Other); result2.IsTied.ShouldEqual(true); result2.TieBreakRequired = false; result2.ForceShowInOther = false; var result3 = results[2]; result3.VoteCount.ShouldEqual(5); result3.Section.ShouldEqual(ResultHelper.Section.Other); result3.IsTied.ShouldEqual(true); result3.TieBreakRequired = false; result3.ForceShowInOther = false; }
public void Invalid_Ballots_Affect_Results() { new Election { NumberToElect = 1, NumberExtra = 0 }.ForTests(); var ballots = new[] { new Ballot().ForTests(), new Ballot().ForTests(), new Ballot().ForTests(BallotStatusEnum.TooFew), }; // TODO 2012-03-24 Glen Little: Needs attention... these test are for normal elections, not single name... var votes = new[] { new Vote() { SingleNameElectionCount = 33 }.ForTests(ballots[0], SamplePeople[0]), new Vote() { SingleNameElectionCount = 5 }.ForTests(ballots[0], SamplePeople[1]), new Vote() { SingleNameElectionCount = 2 }.ForTests(ballots[0], SamplePeople[2]), new Vote() { SingleNameElectionCount = 4 }.ForTests(ballots[1], SamplePeople[3]), new Vote() { SingleNameElectionCount = 27 }.ForTests(ballots[0], SamplePeople[4]), new Vote() { SingleNameElectionCount = 27 }.ForTests(ballots[0], SamplePeople[5]), // 5 - will require review new Vote() { SingleNameElectionCount = 27 }.ForTests(ballots[0], new Person { FirstName = "z1", IneligibleReasonGuid = IneligibleReasonEnum.Ineligible_Other }.ForTests()), }; votes[5].PersonCombinedInfo = "different"; // these will be invalid //votes[6].PersonIneligibleReasonGuid = IneligibleReasonEnum.Ineligible_Other; //votes[6].PersonCanReceiveVotes = IneligibleReasonEnum.Ineligible_Other.CanReceiveVotes; var model = new ElectionAnalyzerSingleName(_fakes); //election, voteinfos, ballots, SamplePeople); model.AnalyzeEverything(); var results = model.Results.OrderBy(r => r.Rank).ToList(); ballots[0].StatusCode.ShouldEqual(BallotStatusEnum.Verify); ballots[1].StatusCode.ShouldEqual(BallotStatusEnum.Ok); var summary = model.ResultSummaryFinal; summary.SpoiledBallots.ShouldEqual(1); summary.BallotsNeedingReview.ShouldEqual(1); summary.SpoiledVotes.ShouldEqual(0); // all are on the spoiled ballot results.Count.ShouldEqual(5); }
public void Election_3_people_With_Manual_Results() { new Election { NumberToElect = 1, NumberExtra = 0 }.ForTests(); var ballots = new[] { new Ballot().ForTests(), new Ballot().ForTests(), new Ballot().ForTests(), }; var votes = new[] { new Vote { SingleNameElectionCount = 33 }.ForTests(ballots[0], SamplePeople[0]), new Vote { SingleNameElectionCount = 5 }.ForTests(ballots[1], SamplePeople[0]), new Vote { SingleNameElectionCount = 2 }.ForTests(ballots[2], SamplePeople[1]), }; new ResultSummary { ResultType = ResultType.Manual, SpoiledManualBallots = 1 // override the real count }.ForTests(); var model = new ElectionAnalyzerSingleName(_fakes); //, election, votes, ballots, SamplePeople); model.AnalyzeEverything(); var resultSummaryFinal = model.ResultSummaryFinal; resultSummaryFinal.BallotsNeedingReview.ShouldEqual(0); resultSummaryFinal.NumBallotsWithManual.ShouldEqual(41); resultSummaryFinal.DroppedOffBallots.ShouldEqual(0); resultSummaryFinal.InPersonBallots.ShouldEqual(1); resultSummaryFinal.MailedInBallots.ShouldEqual(0); resultSummaryFinal.CalledInBallots.ShouldEqual(0); resultSummaryFinal.OnlineBallots.ShouldEqual(0); resultSummaryFinal.NumEligibleToVote.ShouldEqual(8); resultSummaryFinal.NumVoters.ShouldEqual(40); resultSummaryFinal.ResultType.ShouldEqual(ResultType.Final); var results = model.Results.OrderBy(r => r.Rank).ToList(); results.Count.ShouldEqual(2); var result1 = results[0]; result1.VoteCount.ShouldEqual(38); result1.Rank.ShouldEqual(1); result1.Section.ShouldEqual(ResultHelper.Section.Top); result1.IsTied.ShouldEqual(false); var result2 = results[1]; result2.VoteCount.ShouldEqual(2); result2.Rank.ShouldEqual(2); result2.Section.ShouldEqual(ResultHelper.Section.Other); result2.IsTied.ShouldEqual(false); }