From ab0ec44049428854f38be222103f09634985e8b7 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Sun, 20 Nov 2022 18:59:21 +1100 Subject: [PATCH] Add test cases for 2021 Minneapolis elections --- docs/validation.md | 4 +- tests/data/2021-BET-Cast-Vote-Record.blt | 93 +++++ tests/data/2021-BET-Cast-Vote-Record.csv | 9 + tests/data/2021-BET-Cast-Vote-Record.ods | Bin 0 -> 20067 bytes tests/data/2021-Park-AL-Cast-Vote-Record.blt | 370 +++++++++++++++++++ tests/data/2021-Park-AL-Cast-Vote-Record.csv | 12 + tests/data/2021-Park-AL-Cast-Vote-Record.ods | Bin 0 -> 23047 bytes tests/tests_impl/minneapolis.rs | 38 ++ 8 files changed, 525 insertions(+), 1 deletion(-) create mode 100644 tests/data/2021-BET-Cast-Vote-Record.blt create mode 100644 tests/data/2021-BET-Cast-Vote-Record.csv create mode 100644 tests/data/2021-BET-Cast-Vote-Record.ods create mode 100644 tests/data/2021-Park-AL-Cast-Vote-Record.blt create mode 100644 tests/data/2021-Park-AL-Cast-Vote-Record.csv create mode 100644 tests/data/2021-Park-AL-Cast-Vote-Record.ods diff --git a/docs/validation.md b/docs/validation.md index c4ec83f..99e63b4 100644 --- a/docs/validation.md +++ b/docs/validation.md @@ -12,8 +12,10 @@ STV-counting software is frequently validated empirically by comparing the resul | Australian Senate STV | [2019 NSW Senate election](https://results.aec.gov.au/24310/Website/SenateDownloadsMenu-24310-Csv.htm) | EasyCount (official) | | | Australian Capital Territory STV | [2020 Kurrajong Legislative Assembly election](https://www.elections.act.gov.au/elections_and_voting/2020_legislative_assembly_election/ballot-paper-preference-data-2020-election) | [eVACS 2020](https://www.elections.act.gov.au/elections_and_voting/electronic_voting_and_counting) (official) | ✓ | | NSW Local Government STV | [2021 City of Albury Council election](https://pastvtr.elections.nsw.gov.au/LG2101/albury/councillor) | PRCC Vote Count (official) | ✓ | -| Minneapolis STV | [2009 Minneapolis Board of Estimate and Taxation election](https://vote.minneapolismn.gov/results-data/election-results/2009/bet/) | Results sheet (official) | ✓ | +| Minneapolis STV | [2009 Minneapolis Board of Estimate & Taxation election](https://vote.minneapolismn.gov/results-data/election-results/2009/bet/) | Results sheet (official) | ✓ | | Minneapolis STV | [2013 Minneapolis Parks & Recreation Commissioner At Large election](https://vote.minneapolismn.gov/results-data/election-results/2013/park-board-at-large/) | Results sheet (official) | ✓ | +| Minneapolis STV | [2021 Minneapolis Board of Estimate & Taxation election](https://vote.minneapolismn.gov/results-data/election-results/2021/bet/) | Results sheet (official) | ✓ | +| Minneapolis STV | [2021 Minneapolis Parks & Recreation Commissioner At Large election](https://vote.minneapolismn.gov/results-data/election-results/2021/park-board-at-large/) | Results sheet (official) | ✓ | | Cambridge STV | [2003 Cambridge City Council election](https://web.archive.org/web/20070204083508/http://stv.sourceforge.net/) | OpenSTV 1.7, [ChoicePlus Pro 2.1](https://www.votingsolutions.com/cpdetail.htm) (official) | ✓ | | Dáil Éireann STV | [2002 Dublin North election](https://electionsireland.org/counts.cfm?election=2002&cons=96) | Results sheet (official) | ✓ | | van der Craats (‘Wright’) STV | [EVE Online CSM 15 election](https://www.eveonline.com/news/view/meet-the-new-council) | [ccp-wright-stv](https://github.com/ccpgames/ccp-wright-stv) (official) | ✓ | diff --git a/tests/data/2021-BET-Cast-Vote-Record.blt b/tests/data/2021-BET-Cast-Vote-Record.blt new file mode 100644 index 0000000..8ed49af --- /dev/null +++ b/tests/data/2021-BET-Cast-Vote-Record.blt @@ -0,0 +1,93 @@ +# Comment: 2021 Minneapolis Board of Estimate & Taxation election - all votes - Minneapolis STV +# Source: https://vote.minneapolismn.gov/results-data/election-results/2021/bet/ +# Contributor: RunasSudo +5 2 +49712 0 +2262 1 0 +125 1 2 0 +311 1 2 3 0 +279 1 2 4 0 +5 1 2 5 0 +223 1 3 0 +517 1 3 2 0 +428 1 3 4 0 +6 1 3 5 0 +470 1 4 0 +530 1 4 2 0 +607 1 4 3 0 +24 1 4 5 0 +27 1 5 0 +1 1 5 2 0 +4860 2 0 +131 2 1 0 +368 2 1 3 0 +231 2 1 4 0 +7 2 1 5 0 +3336 2 3 0 +1042 2 3 1 0 +5358 2 3 4 0 +77 2 3 5 0 +2518 2 4 0 +643 2 4 1 0 +2140 2 4 3 0 +34 2 4 5 0 +37 2 5 0 +1 2 5 3 0 +3 2 5 4 0 +9309 3 0 +301 3 1 0 +847 3 1 2 0 +881 3 1 4 0 +6 3 1 5 0 +3179 3 2 0 +2361 3 2 1 0 +3318 3 2 4 0 +84 3 2 5 0 +1731 3 4 0 +1441 3 4 1 0 +2013 3 4 2 0 +36 3 4 5 0 +81 3 5 0 +3 3 5 1 0 +5 3 5 2 0 +1 3 5 4 0 +23165 4 0 +1445 4 1 0 +1306 4 1 2 0 +2250 4 1 3 0 +76 4 1 5 0 +4254 4 2 0 +914 4 2 1 0 +2229 4 2 3 0 +65 4 2 5 0 +2609 4 3 0 +1716 4 3 1 0 +2389 4 3 2 0 +35 4 3 5 0 +206 4 5 0 +4 4 5 1 0 +3 4 5 2 0 +6 4 5 3 0 +679 5 0 +5 5 1 0 +1 5 1 2 0 +1 5 1 3 0 +2 5 1 4 0 +3 5 2 0 +1 5 2 1 0 +5 5 2 3 0 +4 5 2 4 0 +5 5 3 0 +2 5 3 1 0 +12 5 3 2 0 +12 5 4 0 +10 5 4 1 0 +7 5 4 2 0 +6 5 4 3 0 +0 +"Kevin Nikiforakis" +"Pine Salica" +"Samantha \"Sam\" Pree-Stinson" +"Steve Brandt" +"UWI" +"2021-BET-Cast-Vote-Record" diff --git a/tests/data/2021-BET-Cast-Vote-Record.csv b/tests/data/2021-BET-Cast-Vote-Record.csv new file mode 100644 index 0000000..81f9c11 --- /dev/null +++ b/tests/data/2021-BET-Cast-Vote-Record.csv @@ -0,0 +1,9 @@ +Stage:,1,,2,,3,,4, +Comment:,First preferences,,"Exclusion of Kevin Nikiforakis, UWI",,Surplus of Steve Brandt,,Exclusion of Pine Salica, +Kevin Nikiforakis,5815,H,0,EX,0,EX,0,EX +Pine Salica,20786,H,21521,H,24137.4788,H,24137.4788,EX +"Samantha ""Sam"" Pree-Stinson",25597,H,26791,H,29494.6198,H,29494.6198,EL +Steve Brandt,42672,H,44340,H,31876,EL,31876,EL +UWI,755,H,0,EX,0,EX,0,EX +Exhausted,49712,,52685,,59828.8754,,59828.8754, +Loss by fraction,0,,0,,0.026,,0.026, diff --git a/tests/data/2021-BET-Cast-Vote-Record.ods b/tests/data/2021-BET-Cast-Vote-Record.ods new file mode 100644 index 0000000000000000000000000000000000000000..dcc80e0b7da76dcf8f890299d957fe6fad2e79c0 GIT binary patch literal 20067 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 EFFNf(&;S4c literal 0 HcmV?d00001 diff --git a/tests/tests_impl/minneapolis.rs b/tests/tests_impl/minneapolis.rs index fce02d3..5d52a45 100644 --- a/tests/tests_impl/minneapolis.rs +++ b/tests/tests_impl/minneapolis.rs @@ -57,3 +57,41 @@ fn minneapolis_pal13_rational() { utils::read_validate_election::("tests/data/2013-Park-At-Large-CVR.csv", "tests/data/2013-Park-At-Large-CVR.blt", stv_opts, Some(4), &[]); } + +#[test] +fn minneapolis_boe21_rational() { + let stv_opts = stv::STVOptionsBuilder::default() + .round_surplus_fractions(Some(4)) + .round_values(Some(4)) + .round_quota(Some(0)) + .round_subtransfers(stv::RoundSubtransfersMode::PerBallot) + .quota_criterion(stv::QuotaCriterion::GreaterOrEqual) + //.early_bulk_elect(true) + .bulk_exclude(true) + .defer_surpluses(true) + .immediate_elect(false) + .build().unwrap(); + + assert_eq!(stv_opts.describe::(), "--round-surplus-fractions 4 --round-values 4 --round-quota 0 --round-subtransfers per_ballot --quota-criterion geq --bulk-exclude --defer-surpluses --no-immediate-elect"); + + utils::read_validate_election::("tests/data/2021-BET-Cast-Vote-Record.csv", "tests/data/2021-BET-Cast-Vote-Record.blt", stv_opts, Some(2), &["exhausted", "lbf"]); +} + +#[test] +fn minneapolis_pal21_rational() { + let stv_opts = stv::STVOptionsBuilder::default() + .round_surplus_fractions(Some(4)) + .round_values(Some(4)) + .round_quota(Some(0)) + .round_subtransfers(stv::RoundSubtransfersMode::PerBallot) + .quota_criterion(stv::QuotaCriterion::GreaterOrEqual) + //.early_bulk_elect(true) + .bulk_exclude(true) + .defer_surpluses(true) + .immediate_elect(false) + .build().unwrap(); + + assert_eq!(stv_opts.describe::(), "--round-surplus-fractions 4 --round-values 4 --round-quota 0 --round-subtransfers per_ballot --quota-criterion geq --bulk-exclude --defer-surpluses --no-immediate-elect"); + + utils::read_validate_election::("tests/data/2021-Park-AL-Cast-Vote-Record.csv", "tests/data/2021-Park-AL-Cast-Vote-Record.blt", stv_opts, Some(3), &["exhausted", "lbf"]); +}