From 83ba050efa12c74633ebc64ce6637d7a09556d2e Mon Sep 17 00:00:00 2001 From: Arend Peter Date: Mon, 16 Dec 2024 12:40:59 -0800 Subject: [PATCH] Move undervotes & Add Test --- .../Election/getElectionResultsController.ts | 3 +-- .../backend/src/Tabulators/AllocatedScore.test.ts | 15 +++++++++++++++ packages/backend/src/Tabulators/ParseData.ts | 3 --- .../src/components/Election/Results/Results.tsx | 8 +++----- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/Controllers/Election/getElectionResultsController.ts b/packages/backend/src/Controllers/Election/getElectionResultsController.ts index e26096e5..a87ebb8a 100644 --- a/packages/backend/src/Controllers/Election/getElectionResultsController.ts +++ b/packages/backend/src/Controllers/Election/getElectionResultsController.ts @@ -36,8 +36,7 @@ const getElectionResults = async (req: IElectionRequest, res: Response, next: Ne const cvr: number[][] = [] ballots.forEach((ballot: Ballot) => { const vote = ballot.votes.find((vote) => vote.race_id === race_id) - let maxScoreGiven = vote?.scores.reduce((prev, s) => Math.max(prev, s.score ?? 0), 0) ?? 0; - if (vote && maxScoreGiven > 0) { + if (vote) { cvr.push(vote.scores.map((score: Score) => ( score.score ))) diff --git a/packages/backend/src/Tabulators/AllocatedScore.test.ts b/packages/backend/src/Tabulators/AllocatedScore.test.ts index 83b69f9f..e9969a61 100644 --- a/packages/backend/src/Tabulators/AllocatedScore.test.ts +++ b/packages/backend/src/Tabulators/AllocatedScore.test.ts @@ -50,6 +50,21 @@ describe("Allocated Score Tests", () => { expect(results.summaryData.weightedScoresByRound[1]).toStrictEqual([0, 0, 14, 18]); expect(results.summaryData.splitPoints[0]).toStrictEqual(0.8); }) + test("Voters < Winners", () => { + const candidates = ['Allison', 'Bill', 'Carmen', 'Doug'] + const votes = [ + [5, 5, 0, 0], + [5, 4, 3, 0], + ] + const results = AllocatedScore(candidates, votes, 3, [], false, false) + expect(results.elected.length).toBe(3); + expect(results.elected[0].name).toBe('Allison'); + expect(results.elected[1].name).toBe('Bill'); + expect(results.elected[2].name).toBe('Carmen'); + expect(results.summaryData.weightedScoresByRound[0]).toStrictEqual([10, 9, 3, 0]); + expect(results.summaryData.weightedScoresByRound[1]).toStrictEqual([0, 6, 2, 0]); + expect(results.summaryData.weightedScoresByRound[2]).toStrictEqual([0, 0, 2, 0]); + }) test("Fractional surplus", () => { // Two winners, two main parties, Allison wins first round with highest score, Allison has 8 highest level supporters, more than the quota of 6 voters // Voters who gave Allison their highest score have their ballot weight reduced to (1-6/8) = 0.25 diff --git a/packages/backend/src/Tabulators/ParseData.ts b/packages/backend/src/Tabulators/ParseData.ts index a9d8e959..fff9364d 100644 --- a/packages/backend/src/Tabulators/ParseData.ts +++ b/packages/backend/src/Tabulators/ParseData.ts @@ -37,9 +37,6 @@ module.exports = function ParseData(data: ballot[], validityCheck = getStarBallo } else if (ballotValidity.isUnderVote) { underVotes += 1 - scores.push(row) - // under votes should not count as a valid vote - //validVotes.push(voter); } else { scores.push(row) diff --git a/packages/frontend/src/components/Election/Results/Results.tsx b/packages/frontend/src/components/Election/Results/Results.tsx index da170319..d4984f61 100644 --- a/packages/frontend/src/components/Election/Results/Results.tsx +++ b/packages/frontend/src/components/Election/Results/Results.tsx @@ -398,12 +398,11 @@ function PRResultsViewer() { - - - + + + - {flags.isSet('ALL_STATS') &&
    @@ -413,7 +412,6 @@ function PRResultsViewer() {
- }