diff --git a/src/main/java/network/brightspots/rcv/GuiTabulateController.java b/src/main/java/network/brightspots/rcv/GuiTabulateController.java index 41aaeb3f0..0197dfef2 100644 --- a/src/main/java/network/brightspots/rcv/GuiTabulateController.java +++ b/src/main/java/network/brightspots/rcv/GuiTabulateController.java @@ -274,6 +274,10 @@ private void watchGenericService( originalCallback.handle(workerStateEvent); onSuccessCallback.handle(workerStateEvent); }); + service.setOnFailed( + workerStateEvent -> { + stage.setOnCloseRequest(null); + }); } /** diff --git a/src/main/java/network/brightspots/rcv/Tabulator.java b/src/main/java/network/brightspots/rcv/Tabulator.java index 45aa45f2f..7a28c2317 100644 --- a/src/main/java/network/brightspots/rcv/Tabulator.java +++ b/src/main/java/network/brightspots/rcv/Tabulator.java @@ -961,6 +961,7 @@ private OvervoteDecision getOvervoteDecision(CandidatesAtRanking candidates) private void recordSelectionForCastVoteRecord( CastVoteRecord cvr, RoundTally currentRoundTally, + BreakdownBySlice roundTallyBySlice, String selectedCandidate, StatusForRound statusForRound, String additionalLogText) @@ -997,6 +998,11 @@ private void recordSelectionForCastVoteRecord( if (statusForRound != StatusForRound.ACTIVE) { currentRoundTally.addInactiveBallot(statusForRound, cvr.getFractionalTransferValue()); + for (ContestConfig.TabulateBySlice slice : config.enabledSlices()) { + String sliceId = cvr.getSlice(slice); + RoundTally sliceRoundTally = roundTallyBySlice.get(slice).get(sliceId); + sliceRoundTally.addInactiveBallot(statusForRound, cvr.getFractionalTransferValue()); + } } String outcomeDescription; @@ -1052,6 +1058,14 @@ private RoundTally computeTalliesForRound(int currentRound) throws TabulationAbo for (CastVoteRecord cvr : castVoteRecords) { if (cvr.isExhausted()) { roundTally.addInactiveBallot(cvr.getBallotStatus(), cvr.getFractionalTransferValue()); + + // Add inactive ballot to each slice too + for (ContestConfig.TabulateBySlice slice : config.enabledSlices()) { + String sliceId = cvr.getSlice(slice); + RoundTally sliceRoundTally = roundTallyBySlice.get(slice).get(sliceId); + sliceRoundTally.addInactiveBallot( + cvr.getBallotStatus(), cvr.getFractionalTransferValue()); + } continue; } @@ -1070,7 +1084,12 @@ && isCandidateContinuing(cvr.getCurrentRecipientOfVote())) { // check for a CVR with no rankings at all if (cvr.candidateRankings.numRankings() == 0) { recordSelectionForCastVoteRecord( - cvr, roundTally, null, StatusForRound.DID_NOT_RANK_ANY_CANDIDATES, ""); + cvr, + roundTally, + roundTallyBySlice, + null, + StatusForRound.DID_NOT_RANK_ANY_CANDIDATES, + ""); } // iterate through the rankings in this cvr from most to least preferred. @@ -1099,7 +1118,12 @@ && isCandidateContinuing(cvr.getCurrentRecipientOfVote())) { if (config.getMaxSkippedRanksAllowed() != Integer.MAX_VALUE && (rank - lastRankSeen > config.getMaxSkippedRanksAllowed() + 1)) { recordSelectionForCastVoteRecord( - cvr, roundTally, null, StatusForRound.INVALIDATED_BY_SKIPPED_RANKING, ""); + cvr, + roundTally, + roundTallyBySlice, + null, + StatusForRound.INVALIDATED_BY_SKIPPED_RANKING, + ""); break; } lastRankSeen = rank; @@ -1119,6 +1143,7 @@ && isCandidateContinuing(cvr.getCurrentRecipientOfVote())) { recordSelectionForCastVoteRecord( cvr, roundTally, + roundTallyBySlice, null, StatusForRound.INVALIDATED_BY_REPEATED_RANKING, " " + duplicateCandidate); @@ -1130,14 +1155,24 @@ && isCandidateContinuing(cvr.getCurrentRecipientOfVote())) { OvervoteDecision overvoteDecision = getOvervoteDecision(candidates); if (overvoteDecision == OvervoteDecision.EXHAUST) { recordSelectionForCastVoteRecord( - cvr, roundTally, null, StatusForRound.INVALIDATED_BY_OVERVOTE, ""); + cvr, + roundTally, + roundTallyBySlice, + null, + StatusForRound.INVALIDATED_BY_OVERVOTE, + ""); break; } else if (overvoteDecision == OvervoteDecision.SKIP_TO_NEXT_RANK) { if (rank == cvr.candidateRankings.maxRankingNumber()) { // If the final ranking is an overvote, even if we're trying to skip to the next rank, // we consider this inactive by exhausted choices -- not an overvote. recordSelectionForCastVoteRecord( - cvr, roundTally, null, StatusForRound.EXHAUSTED_CHOICE, ""); + cvr, + roundTally, + roundTallyBySlice, + null, + StatusForRound.EXHAUSTED_CHOICE, + ""); } continue; } @@ -1156,7 +1191,7 @@ && isCandidateContinuing(cvr.getCurrentRecipientOfVote())) { // transfer cvr to selected candidate recordSelectionForCastVoteRecord( - cvr, roundTally, selectedCandidate, StatusForRound.ACTIVE, ""); + cvr, roundTally, roundTallyBySlice, selectedCandidate, StatusForRound.ACTIVE, ""); // This will also update the roundTallyBySlice for each enabled slice incrementTallies(roundTally, cvr, selectedCandidate, roundTallyBySlice); @@ -1174,7 +1209,7 @@ && isCandidateContinuing(cvr.getCurrentRecipientOfVote())) { // if this is the last ranking we are out of rankings and must exhaust this cvr if (rank == cvr.candidateRankings.maxRankingNumber()) { recordSelectionForCastVoteRecord( - cvr, roundTally, null, StatusForRound.EXHAUSTED_CHOICE, ""); + cvr, roundTally, roundTallyBySlice, null, StatusForRound.EXHAUSTED_CHOICE, ""); } } // end looping over the rankings within one ballot } // end looping over all ballots diff --git a/src/test/java/network/brightspots/rcv/TabulatorTests.java b/src/test/java/network/brightspots/rcv/TabulatorTests.java index a17d1a431..8deadc6f9 100644 --- a/src/test/java/network/brightspots/rcv/TabulatorTests.java +++ b/src/test/java/network/brightspots/rcv/TabulatorTests.java @@ -600,7 +600,7 @@ void test2018MaineGovPrimaryDem() { @Test @DisplayName("testMinneapolisMultiSeatThreshold") void testMinneapolisMultiSeatThreshold() { - runTabulationTest("minneapolis_multi_seat_threshold"); + runTabulationTest("minneapolis_multi_seat_threshold", 3); } @Test diff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.csv index 584d6177a..75a810cbe 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.csv +++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.csv @@ -13,7 +13,7 @@ Precinct,MINNEAPOLIS W-13 P-09 Contest Summary Number to be Elected,1 Number of Candidates,36 -Total Number of Ballots,985 +Total Number of Ballots,987 Number of Undervotes (No Rankings),0 Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer,Round 9 Votes,% of vote,transfer,Round 10 Votes,% of vote,transfer,Round 11 Votes,% of vote,transfer,Round 12 Votes,% of vote,transfer,Round 13 Votes,% of vote,transfer,Round 14 Votes,% of vote,transfer,Round 15 Votes,% of vote,transfer,Round 16 Votes,% of vote,transfer,Round 17 Votes,% of vote,transfer,Round 18 Votes,% of vote,transfer,Round 19 Votes,% of vote,transfer,Round 20 Votes,% of vote,transfer,Round 21 Votes,% of vote,transfer,Round 22 Votes,% of vote,transfer,Round 23 Votes,% of vote,transfer,Round 24 Votes,% of vote,transfer,Round 25 Votes,% of vote,transfer,Round 26 Votes,% of vote,transfer,Round 27 Votes,% of vote,transfer,Round 28 Votes,% of vote,transfer,Round 29 Votes,% of vote,transfer,Round 30 Votes,% of vote,transfer,Round 31 Votes,% of vote,transfer,Round 32 Votes,% of vote,transfer,Round 33 Votes,% of vote,transfer @@ -55,8 +55,8 @@ JOSHUA REA,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0% Undeclared Write-ins,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0 Active Ballots,985,,,985,,,985,,,984,,,984,,,984,,,984,,,984,,,984,,,983,,,983,,,981,,,981,,,981,,,981,,,981,,,981,,,981,,,981,,,980,,,979,,,979,,,979,,,979,,,979,,,979,,,972,,,972,,,969,,,968,,,953,,,941,,,798,, Current Round Threshold,39657,,,39638,,,39635,,,39633,,,39627,,,39622,,,39614,,,39608,,,39599,,,39583,,,39568,,,39552,,,39533,,,39522,,,39502,,,39477,,,39462,,,39450,,,39414,,,39387,,,39359,,,39309,,,39247,,,39112,,,39041,,,38981,,,38726,,,38541,,,38312,,,38162,,,37796,,,36810,,,31898,, -Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Overvotes,2,,0,2,,0,2,,0,2,,0,2,,0,2,,0,2,,0,2,,0,2,,0,2,,0,2,,1,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0 Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,1,1,,0,1,,0,1,,0,1,,0,1,,0,1,,1,2,,0,2,,1,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,0,3,,1,4,,1,5,,0,5,,0,5,,0,5,,0,5,,0,5,,7,12,,0,12,,3,15,,1,16,,15,31,,12,43,,143,186,,0 Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots Total,2,,0,2,,0,2,,1,3,,0,3,,0,3,,0,3,,0,3,,0,3,,1,4,,0,4,,2,6,,0,6,,0,6,,0,6,,0,6,,0,6,,0,6,,0,6,,1,7,,1,8,,0,8,,0,8,,0,8,,0,8,,0,8,,7,15,,0,15,,3,18,,1,19,,15,34,,12,46,,143,189,,0 diff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.json b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.json index 32d1571ed..9c2344274 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.json +++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-09_precinct_summary.json @@ -11,7 +11,7 @@ "results" : [ { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -62,7 +62,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -112,7 +112,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -162,8 +162,8 @@ "threshold" : "39635" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -210,8 +210,8 @@ "threshold" : "39633" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -257,8 +257,8 @@ "threshold" : "39627" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -303,8 +303,8 @@ "threshold" : "39622" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -348,8 +348,8 @@ "threshold" : "39614" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -394,8 +394,8 @@ "threshold" : "39608" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -439,8 +439,8 @@ "threshold" : "39599" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "2", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -481,8 +481,8 @@ "threshold" : "39583" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "2", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -525,8 +525,8 @@ "threshold" : "39568" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -565,8 +565,8 @@ "threshold" : "39552" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -607,8 +607,8 @@ "threshold" : "39533" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -647,8 +647,8 @@ "threshold" : "39522" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -687,8 +687,8 @@ "threshold" : "39502" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -725,8 +725,8 @@ "threshold" : "39477" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -760,8 +760,8 @@ "threshold" : "39462" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -794,8 +794,8 @@ "threshold" : "39450" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -829,8 +829,8 @@ "threshold" : "39414" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "4", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -865,8 +865,8 @@ "threshold" : "39387" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "5", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -902,8 +902,8 @@ "threshold" : "39359" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "5", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -934,8 +934,8 @@ "threshold" : "39309" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "5", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -963,8 +963,8 @@ "threshold" : "39247" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "5", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -991,8 +991,8 @@ "threshold" : "39112" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "5", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1020,8 +1020,8 @@ "threshold" : "39041" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "5", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1050,8 +1050,8 @@ "threshold" : "38981" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "12", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1078,8 +1078,8 @@ "threshold" : "38726" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "12", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1107,8 +1107,8 @@ "threshold" : "38541" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "15", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1136,8 +1136,8 @@ "threshold" : "38312" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "16", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1164,8 +1164,8 @@ "threshold" : "38162" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "31", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1200,8 +1200,8 @@ "threshold" : "37796" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "43", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1230,8 +1230,8 @@ "threshold" : "36810" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "186", + "overvotes" : "3", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1250,7 +1250,7 @@ "finalThreshold" : "31898", "numCandidates" : 36, "numWinners" : 1, - "totalNumBallots" : "985", + "totalNumBallots" : "987", "undervotes" : 0 } } \ No newline at end of file diff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv index 433e36eea..8133f6387 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv +++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv @@ -13,8 +13,8 @@ Precinct,MINNEAPOLIS W-1 P-01 Contest Summary Number to be Elected,1 Number of Candidates,36 -Total Number of Ballots,517 -Number of Undervotes (No Rankings),0 +Total Number of Ballots,519 +Number of Undervotes (No Rankings),1 Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer,Round 7 Votes,% of vote,transfer,Round 8 Votes,% of vote,transfer,Round 9 Votes,% of vote,transfer,Round 10 Votes,% of vote,transfer,Round 11 Votes,% of vote,transfer,Round 12 Votes,% of vote,transfer,Round 13 Votes,% of vote,transfer,Round 14 Votes,% of vote,transfer,Round 15 Votes,% of vote,transfer,Round 16 Votes,% of vote,transfer,Round 17 Votes,% of vote,transfer,Round 18 Votes,% of vote,transfer,Round 19 Votes,% of vote,transfer,Round 20 Votes,% of vote,transfer,Round 21 Votes,% of vote,transfer,Round 22 Votes,% of vote,transfer,Round 23 Votes,% of vote,transfer,Round 24 Votes,% of vote,transfer,Round 25 Votes,% of vote,transfer,Round 26 Votes,% of vote,transfer,Round 27 Votes,% of vote,transfer,Round 28 Votes,% of vote,transfer,Round 29 Votes,% of vote,transfer,Round 30 Votes,% of vote,transfer,Round 31 Votes,% of vote,transfer,Round 32 Votes,% of vote,transfer,Round 33 Votes,% of vote,transfer MARK ANDREW,160,30.94%,1,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.14%,0,161,31.2%,0,161,31.26%,0,161,31.26%,0,161,31.26%,2,163,31.71%,0,163,31.71%,0,163,31.71%,0,163,31.71%,0,163,31.71%,0,163,31.77%,1,164,32.09%,0,164,32.22%,0,164,32.6%,0,164,32.8%,0,164,33.19%,2,166,33.8%,1,167,34.71%,9,176,38.09%,15,191,50.66%,0 @@ -55,8 +55,8 @@ BOB AGAIN CARNEY JR,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0% Undeclared Write-ins,1,0.19%,-1,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0 Active Ballots,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,517,,,516,,,515,,,515,,,515,,,514,,,514,,,514,,,514,,,514,,,513,,,511,,,509,,,503,,,500,,,494,,,491,,,481,,,462,,,377,, Current Round Threshold,39657,,,39638,,,39635,,,39633,,,39627,,,39622,,,39614,,,39608,,,39599,,,39583,,,39568,,,39552,,,39533,,,39522,,,39502,,,39477,,,39462,,,39450,,,39414,,,39387,,,39359,,,39309,,,39247,,,39112,,,39041,,,38981,,,38726,,,38541,,,38312,,,38162,,,37796,,,36810,,,31898,, -Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Overvotes,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,1,2,,0 Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,1,1,,1,2,,0,2,,0,2,,1,3,,0,3,,0,3,,0,3,,0,3,,1,4,,2,6,,2,8,,6,14,,3,17,,6,23,,3,26,,10,36,,19,55,,84,139,,0 Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots Total,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,0,1,,1,2,,1,3,,0,3,,0,3,,1,4,,0,4,,0,4,,0,4,,0,4,,1,5,,2,7,,2,9,,6,15,,3,18,,6,24,,3,27,,10,37,,19,56,,85,141,,0 diff --git a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json index 9c20d44d7..23f925905 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json +++ b/src/test/resources/network/brightspots/rcv/test_data/2013_minneapolis_mayor/2013_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json @@ -11,7 +11,7 @@ "results" : [ { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -64,7 +64,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -116,7 +116,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -165,7 +165,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -213,7 +213,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -260,7 +260,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -306,7 +306,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -353,7 +353,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -399,7 +399,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -442,7 +442,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -486,7 +486,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -527,7 +527,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -569,7 +569,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -608,7 +608,7 @@ }, { "inactiveBallots" : { "exhaustedChoices" : "0", - "overvotes" : "0", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -647,8 +647,8 @@ "threshold" : "39522" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "1", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -686,8 +686,8 @@ "threshold" : "39502" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "2", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -724,8 +724,8 @@ "threshold" : "39477" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "2", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -761,8 +761,8 @@ "threshold" : "39462" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "2", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -799,8 +799,8 @@ "threshold" : "39450" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -832,8 +832,8 @@ "threshold" : "39414" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -864,8 +864,8 @@ "threshold" : "39387" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -898,8 +898,8 @@ "threshold" : "39359" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -932,8 +932,8 @@ "threshold" : "39309" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "3", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -963,8 +963,8 @@ "threshold" : "39247" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "4", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -995,8 +995,8 @@ "threshold" : "39112" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "6", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1026,8 +1026,8 @@ "threshold" : "39041" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "8", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1058,8 +1058,8 @@ "threshold" : "38981" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "14", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1088,8 +1088,8 @@ "threshold" : "38726" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "17", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1115,8 +1115,8 @@ "threshold" : "38541" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "23", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1144,8 +1144,8 @@ "threshold" : "38312" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "26", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1174,8 +1174,8 @@ "threshold" : "38162" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "36", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1210,8 +1210,8 @@ "threshold" : "37796" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "55", + "overvotes" : "1", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1240,8 +1240,8 @@ "threshold" : "36810" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", - "overvotes" : "0", + "exhaustedChoices" : "139", + "overvotes" : "2", "repeatedRankings" : "0", "skippedRankings" : "0" }, @@ -1260,7 +1260,7 @@ "finalThreshold" : "31898", "numCandidates" : 36, "numWinners" : 1, - "totalNumBallots" : "517", - "undervotes" : 0 + "totalNumBallots" : "519", + "undervotes" : 1 } } \ No newline at end of file diff --git a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.csv index 44be48849..bec46064b 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.csv +++ b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.csv @@ -13,7 +13,7 @@ Precinct,MINNEAPOLIS W-13 P-13 Contest Summary Number to be Elected,1 Number of Candidates,19 -Total Number of Ballots,953 +Total Number of Ballots,954 Number of Undervotes (No Rankings),0 Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer @@ -40,6 +40,6 @@ Active Ballots,953,,,952,,,943,,,939,,,866,,,789,, Current Round Threshold,52243,,,52200,,,50933,,,49874,,,46790,,,40838,, Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Exhausted Choices,1,,1,2,,9,11,,4,15,,73,88,,77,165,,0 Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots Total,1,,1,2,,9,11,,4,15,,73,88,,77,165,,0 diff --git a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.json b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.json index 3a78f8c87..c5108b632 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.json +++ b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-13_P-13_precinct_summary.json @@ -10,7 +10,7 @@ "jsonFormatVersion" : "1", "results" : [ { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "1", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -47,7 +47,7 @@ "threshold" : "52243" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "2", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -136,7 +136,7 @@ "threshold" : "52200" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "11", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -162,7 +162,7 @@ "threshold" : "50933" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "15", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -186,7 +186,7 @@ "threshold" : "49874" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "88", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -208,7 +208,7 @@ "threshold" : "46790" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "165", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -228,7 +228,7 @@ "finalThreshold" : "40838", "numCandidates" : 19, "numWinners" : 1, - "totalNumBallots" : "953", + "totalNumBallots" : "954", "undervotes" : 0 } } \ No newline at end of file diff --git a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv index 3d46ead51..09b35b8b7 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv +++ b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.csv @@ -13,8 +13,8 @@ Precinct,MINNEAPOLIS W-1 P-01 Contest Summary Number to be Elected,1 Number of Candidates,19 -Total Number of Ballots,408 -Number of Undervotes (No Rankings),0 +Total Number of Ballots,411 +Number of Undervotes (No Rankings),2 Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer Jacob Frey,95,23.28%,0,95,23.34%,10,105,26.99%,24,129,34.03%,28,157,45.11%,36,193,63.48%,0 @@ -40,6 +40,6 @@ Active Ballots,408,,,407,,,389,,,379,,,348,,,304,, Current Round Threshold,52243,,,52200,,,50933,,,49874,,,46790,,,40838,, Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Exhausted Choices,1,,1,2,,18,20,,10,30,,31,61,,44,105,,0 Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 -Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots Total,1,,1,2,,18,20,,10,30,,31,61,,44,105,,0 diff --git a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json index 3848d05d9..a765aebf1 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json +++ b/src/test/resources/network/brightspots/rcv/test_data/2017_minneapolis_mayor/2017_minneapolis_mayor_expected_MINNEAPOLIS_W-1_P-01_precinct_summary.json @@ -10,7 +10,7 @@ "jsonFormatVersion" : "1", "results" : [ { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "1", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -46,7 +46,7 @@ "threshold" : "52243" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "2", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -154,7 +154,7 @@ "threshold" : "52200" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "20", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -180,7 +180,7 @@ "threshold" : "50933" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "30", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -204,7 +204,7 @@ "threshold" : "49874" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "61", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -226,7 +226,7 @@ "threshold" : "46790" }, { "inactiveBallots" : { - "exhaustedChoices" : "0", + "exhaustedChoices" : "105", "overvotes" : "0", "repeatedRankings" : "0", "skippedRankings" : "0" @@ -246,7 +246,7 @@ "finalThreshold" : "40838", "numCandidates" : 19, "numWinners" : 1, - "totalNumBallots" : "408", - "undervotes" : 0 + "totalNumBallots" : "411", + "undervotes" : 2 } } \ No newline at end of file diff --git a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_config.json b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_config.json index 3e09fc8e5..edc3a8ba8 100644 --- a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_config.json +++ b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_config.json @@ -6,16 +6,16 @@ "contestDate": "2018-09-30", "contestJurisdiction": "Multi-winner", "contestOffice": "Multi_winner2", - "tabulateByPrecinct": false, + "tabulateByPrecinct": true, "generateCdfJson": false }, "cvrFileSources": [ { "filePath" : "minneapolis_multi_seat_threshold_cvr.xlsx", - "firstVoteColumnIndex" : "2", + "firstVoteColumnIndex" : "3", "firstVoteRowIndex" : "2", "idColumnIndex" : "", - "precinctColumnIndex" : "", + "precinctColumnIndex" : "2", "provider": "ess", "treatBlankAsUndeclaredWriteIn": false, "overvoteLabel": "overvote", diff --git a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_cvr.xlsx b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_cvr.xlsx index 4964184a6..64c7c4733 100644 Binary files a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_cvr.xlsx and b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_cvr.xlsx differ diff --git a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc1_precinct_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc1_precinct_summary.csv new file mode 100644 index 000000000..864182578 --- /dev/null +++ b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc1_precinct_summary.csv @@ -0,0 +1,32 @@ +Contest Information +Generated By,RCTab 1.3.999 +CSV Format Version,1 +Type of Election,Multi-Winner +Contest,Multi_winner2 +Jurisdiction,Multi-winner +Office,Multi_winner2 +Date,2018-09-30 +Winner(s),"C, A, B" +Final Threshold,8 +Precinct,pc1 + +Contest Summary +Number to be Elected,3 +Number of Candidates,6 +Total Number of Ballots,25 +Number of Undervotes (No Rankings),0 + +Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer +A,5,20.83%,0,5,21.73%,0,5,21.73%,1,6,26.08%,3.0000,9.0000,39.13%,-1.8000,7.2000,36.73%,0 +C,5,20.83%,1,6,26.08%,0.0000,6.0000,26.08%,0.0000,6.0000,26.08%,0.0000,6.0000,26.08%,0.0000,6.0000,30.61%,0 +E,5,20.83%,0,5,21.73%,0.0000,5.0000,21.73%,0.0000,5.0000,21.73%,-5.0000,0,0.0%,0,0,0.0%,0 +B,4,16.66%,0,4,17.39%,0,4,17.39%,2.0000,6.0000,26.08%,2.0000,8.0000,34.78%,-1.6000,6.4000,32.65%,0 +F,3,12.5%,0,3,13.04%,0.0000,3.0000,13.04%,-3.0000,0,0.0%,0,0,0.0%,0,0,0.0%,0 +D,2,8.33%,-2,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0 +Active Ballots,24,,,23,,,23.0000,,,23.0000,,,23.0000,,,19.6000,, +Current Round Threshold,8,,,8,,,8,,,8,,,8,,,8,, +Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Skipped Rankings,1,,1,2,,0,2,,0,2,,0.0000,2.0000,,0.6000,2.6000,,0 +Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0.0000,0.0000,,2.8000,2.8000,,0 +Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots Total,1,,1,2,,0,2,,0,2,,0.0000,2.0000,,3.4000,5.4000,,0 diff --git a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc2_precinct_summary.csv b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc2_precinct_summary.csv new file mode 100644 index 000000000..830e7df31 --- /dev/null +++ b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc2_precinct_summary.csv @@ -0,0 +1,32 @@ +Contest Information +Generated By,RCTab 1.3.999 +CSV Format Version,1 +Type of Election,Multi-Winner +Contest,Multi_winner2 +Jurisdiction,Multi-winner +Office,Multi_winner2 +Date,2018-09-30 +Winner(s),"C, A, B" +Final Threshold,8 +Precinct,pc2 + +Contest Summary +Number to be Elected,3 +Number of Candidates,6 +Total Number of Ballots,5 +Number of Undervotes (No Rankings),0 + +Rounds,Round 1 Votes,% of vote,transfer,Round 2 Votes,% of vote,transfer,Round 3 Votes,% of vote,transfer,Round 4 Votes,% of vote,transfer,Round 5 Votes,% of vote,transfer,Round 6 Votes,% of vote,transfer +C,2,40.0%,0,2,40.0%,0.0000,2.0000,40.0%,0.0000,2.0000,40.0%,0.0000,2.0000,40.0%,0.0000,2.0000,45.45%,0 +A,1,20.0%,0,1,20.0%,0,1,20.0%,0,1,20.0%,0,1,20.0%,-0.2000,0.8000,18.18%,0 +B,1,20.0%,0,1,20.0%,0,1,20.0%,0,1,20.0%,1,2,40.0%,-0.4000,1.6000,36.36%,0 +E,1,20.0%,0,1,20.0%,0.0000,1.0000,20.0%,0.0000,1.0000,20.0%,-1.0000,0,0.0%,0,0,0.0%,0 +D,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0 +F,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0,0,0.0%,0 +Active Ballots,5,,,5,,,5.0000,,,5.0000,,,5.0000,,,4.4000,, +Current Round Threshold,8,,,8,,,8,,,8,,,8,,,8,, +Inactive Ballots by Overvotes,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots by Skipped Rankings,0,,0,0,,0,0,,0,0,,0.0000,0.0000,,0.0000,0.0000,,0 +Inactive Ballots by Exhausted Choices,0,,0,0,,0,0,,0,0,,0.0000,0.0000,,0.6000,0.6000,,0 +Inactive Ballots by Repeated Rankings,0,,0,0,,0,0,,0,0,,0,0,,0,0,,0 +Inactive Ballots Total,0,,0,0,,0,0,,0,0,,0.0000,0.0000,,0.6000,0.6000,,0 diff --git a/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc2_precinct_summary.json b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc2_precinct_summary.json new file mode 100644 index 000000000..b5aff97d6 --- /dev/null +++ b/src/test/resources/network/brightspots/rcv/test_data/minneapolis_multi_seat_threshold/minneapolis_multi_seat_threshold_expected_pc2_precinct_summary.json @@ -0,0 +1,141 @@ +{ + "config" : { + "contest" : "Multi_winner2", + "date" : "2018-09-30", + "generatedBy" : "RCTab 1.3.999", + "jurisdiction" : "Multi-winner", + "office" : "Multi_winner2", + "precinct" : "pc2" + }, + "jsonFormatVersion" : "1", + "results" : [ { + "inactiveBallots" : { + "exhaustedChoices" : "0", + "overvotes" : "0", + "repeatedRankings" : "0", + "skippedRankings" : "0" + }, + "round" : 1, + "tally" : { + "A" : "1", + "B" : "1", + "C" : "2", + "D" : "0", + "E" : "1", + "F" : "0" + }, + "tallyResults" : [ { + "eliminated" : "D", + "transfers" : { } + } ], + "threshold" : "8" + }, { + "inactiveBallots" : { + "exhaustedChoices" : "0", + "overvotes" : "0", + "repeatedRankings" : "0", + "skippedRankings" : "0" + }, + "round" : 2, + "tally" : { + "A" : "1", + "B" : "1", + "C" : "2", + "E" : "1", + "F" : "0" + }, + "tallyResults" : [ { + "elected" : "C", + "transfers" : { } + } ], + "threshold" : "8" + }, { + "inactiveBallots" : { + "exhaustedChoices" : "0", + "overvotes" : "0", + "repeatedRankings" : "0", + "skippedRankings" : "0" + }, + "round" : 3, + "tally" : { + "A" : "1", + "B" : "1", + "C" : "2.0000", + "E" : "1.0000", + "F" : "0" + }, + "tallyResults" : [ { + "eliminated" : "F", + "transfers" : { } + } ], + "threshold" : "8" + }, { + "inactiveBallots" : { + "exhaustedChoices" : "0", + "overvotes" : "0", + "repeatedRankings" : "0", + "skippedRankings" : "0" + }, + "round" : 4, + "tally" : { + "A" : "1", + "B" : "1", + "C" : "2.0000", + "E" : "1.0000" + }, + "tallyResults" : [ { + "eliminated" : "E", + "transfers" : { + "B" : "1" + } + } ], + "threshold" : "8" + }, { + "inactiveBallots" : { + "exhaustedChoices" : "0.0000", + "overvotes" : "0", + "repeatedRankings" : "0", + "skippedRankings" : "0.0000" + }, + "round" : 5, + "tally" : { + "A" : "1", + "B" : "2", + "C" : "2.0000" + }, + "tallyResults" : [ { + "elected" : "A", + "transfers" : { + "exhausted" : "0.2000" + } + }, { + "elected" : "B", + "transfers" : { + "exhausted" : "0.4000" + } + } ], + "threshold" : "8" + }, { + "inactiveBallots" : { + "exhaustedChoices" : "0.6000", + "overvotes" : "0", + "repeatedRankings" : "0", + "skippedRankings" : "0.0000" + }, + "round" : 6, + "tally" : { + "A" : "0.8000", + "B" : "1.6000", + "C" : "2.0000" + }, + "tallyResults" : [ ], + "threshold" : "8" + } ], + "summary" : { + "finalThreshold" : "8", + "numCandidates" : 6, + "numWinners" : 3, + "totalNumBallots" : "5", + "undervotes" : 0 + } +} \ No newline at end of file