sapor 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Area Class Diagram.dia +0 -0
- data/Area Class Diagram.png +0 -0
- data/Class Diagram.dia +0 -0
- data/Class Diagram.png +0 -0
- data/Example-Catalonia.md +361 -0
- data/Example-Flanders.md +486 -0
- data/Example-Greece.md +25 -0
- data/Example-Oslo.md +678 -0
- data/Example-UnitedKingdom-Referendum.md +132 -0
- data/Examples.md +15 -0
- data/LICENSE +674 -0
- data/README.md +103 -0
- data/Rakefile +18 -0
- data/Technical Documentation.md +14 -0
- data/bin/create_installation_package.sh +49 -0
- data/bin/install.sh +45 -0
- data/bin/sapor.rb +24 -0
- data/bin/sapor.sh +106 -0
- data/data/hu/hungary-2014.txt +1680 -0
- data/data/hu/hungary_2014_screen_scraper.rb +48 -0
- data/data/hu/hungary_2014_to_psv.rb +80 -0
- data/data/hu/index-2014.txt +106 -0
- data/data/pl/2015-gl-lis-okr.csv +42 -0
- data/data/pl/poland_2015_to_psv.rb +79 -0
- data/data/pl/poland_2015_to_psv_with_ko_and_rsw.rb +94 -0
- data/data/pl/poland_2015_to_psv_with_ko_konf_kp_l_and_zp.rb +100 -0
- data/data/pl/poland_2015_to_psv_with_ko_sld_and_wi.rb +92 -0
- data/data/pl/poland_2015_to_psv_with_sld.rb +84 -0
- data/data/pl/poland_2015_to_psv_with_sld_and_wi.rb +85 -0
- data/data/uk/inject_ukip_2015_as_brexit_2019_in_2017.rb +54 -0
- data/data/uk/united_kingdom_2015.txt +651 -0
- data/data/uk/united_kingdom_2015_to_psv.rb +104 -0
- data/data/uk/united_kingdom_2017.txt +651 -0
- data/data/uk/united_kingdom_2017_to_psv.rb +104 -0
- data/data/uk/united_kingdom_2017_to_psv_with_brexit_and_chuk.rb +113 -0
- data/data/uk/united_kingdom_2017_to_psv_with_tig.rb +111 -0
- data/lib/sapor.rb +150 -0
- data/lib/sapor/binomials_cache.rb +45 -0
- data/lib/sapor/combinations_distribution.rb +222 -0
- data/lib/sapor/denominators.rb +67 -0
- data/lib/sapor/dichotomies.rb +138 -0
- data/lib/sapor/dichotomy.rb +164 -0
- data/lib/sapor/first_past_the_post.rb +82 -0
- data/lib/sapor/largest_remainder.rb +118 -0
- data/lib/sapor/log4r_logger.rb +49 -0
- data/lib/sapor/log_facade.rb +40 -0
- data/lib/sapor/multi_district_leveled_proportional.rb +64 -0
- data/lib/sapor/multi_district_proportional.rb +123 -0
- data/lib/sapor/multi_district_variable_threshold_proportional.rb +128 -0
- data/lib/sapor/number_formatter.rb +45 -0
- data/lib/sapor/options.rb +73 -0
- data/lib/sapor/poll.rb +286 -0
- data/lib/sapor/polychotomy.rb +200 -0
- data/lib/sapor/pseudorandom_multirange_enumerator.rb +87 -0
- data/lib/sapor/referendum_polychotomy.rb +165 -0
- data/lib/sapor/regional_data/area.rb +82 -0
- data/lib/sapor/regional_data/austria.rb +84 -0
- data/lib/sapor/regional_data/belgium-brussels-2014.psv +46 -0
- data/lib/sapor/regional_data/belgium-brussels-20190526.psv +33 -0
- data/lib/sapor/regional_data/belgium-flanders-2014.psv +80 -0
- data/lib/sapor/regional_data/belgium-flanders-20190526.psv +74 -0
- data/lib/sapor/regional_data/belgium-wallonia-2014.psv +114 -0
- data/lib/sapor/regional_data/belgium-wallonia-20190526.psv +93 -0
- data/lib/sapor/regional_data/belgium.rb +97 -0
- data/lib/sapor/regional_data/belgium_brussels.rb +62 -0
- data/lib/sapor/regional_data/belgium_flanders.rb +64 -0
- data/lib/sapor/regional_data/belgium_wallonia.rb +63 -0
- data/lib/sapor/regional_data/catalonia-2012-2015.psv +100 -0
- data/lib/sapor/regional_data/catalonia-2012.psv +87 -0
- data/lib/sapor/regional_data/catalonia-2015-jxcat.psv +68 -0
- data/lib/sapor/regional_data/catalonia-2015-no-jxsi.psv +68 -0
- data/lib/sapor/regional_data/catalonia-2015.psv +63 -0
- data/lib/sapor/regional_data/catalonia-jxcat.rb +109 -0
- data/lib/sapor/regional_data/catalonia-no-jxsi.rb +96 -0
- data/lib/sapor/regional_data/catalonia.rb +96 -0
- data/lib/sapor/regional_data/denmark-20150618-with-e-and-p.psv +164 -0
- data/lib/sapor/regional_data/denmark-20150618-with-e.psv +153 -0
- data/lib/sapor/regional_data/denmark-20150618-with-p.psv +153 -0
- data/lib/sapor/regional_data/denmark-20150618.psv +142 -0
- data/lib/sapor/regional_data/denmark.rb +128 -0
- data/lib/sapor/regional_data/denmark_with_e.rb +128 -0
- data/lib/sapor/regional_data/denmark_with_e_and_p.rb +128 -0
- data/lib/sapor/regional_data/denmark_with_p.rb +128 -0
- data/lib/sapor/regional_data/estonia.rb +88 -0
- data/lib/sapor/regional_data/european-union-great-britain-20140522-brexit-chuk.psv +172 -0
- data/lib/sapor/regional_data/european-union-great-britain-20140522.psv +146 -0
- data/lib/sapor/regional_data/european-union-great-britain-20190523.psv +141 -0
- data/lib/sapor/regional_data/european-union-ireland-2014-ia-ri-sd.psv +64 -0
- data/lib/sapor/regional_data/european-union-ireland-2014-ia-sd.psv +60 -0
- data/lib/sapor/regional_data/european-union-ireland-2014-ia.psv +56 -0
- data/lib/sapor/regional_data/european-union-ireland-2014-sd.psv +56 -0
- data/lib/sapor/regional_data/european-union-ireland-2014.psv +50 -0
- data/lib/sapor/regional_data/european-union-ireland-20190524-ia.psv +58 -0
- data/lib/sapor/regional_data/european-union-ireland-20190524.psv +52 -0
- data/lib/sapor/regional_data/european_union_27_austria.rb +76 -0
- data/lib/sapor/regional_data/european_union_27_croatia.rb +81 -0
- data/lib/sapor/regional_data/european_union_27_denmark.rb +77 -0
- data/lib/sapor/regional_data/european_union_27_estonia.rb +74 -0
- data/lib/sapor/regional_data/european_union_27_finland.rb +74 -0
- data/lib/sapor/regional_data/european_union_27_ireland.rb +96 -0
- data/lib/sapor/regional_data/european_union_27_ireland_with_ia.rb +97 -0
- data/lib/sapor/regional_data/european_union_27_italy.rb +84 -0
- data/lib/sapor/regional_data/european_union_27_netherlands.rb +81 -0
- data/lib/sapor/regional_data/european_union_27_poland.rb +84 -0
- data/lib/sapor/regional_data/european_union_27_romania.rb +78 -0
- data/lib/sapor/regional_data/european_union_27_slovakia.rb +80 -0
- data/lib/sapor/regional_data/european_union_27_spain.rb +82 -0
- data/lib/sapor/regional_data/european_union_27_sweden.rb +76 -0
- data/lib/sapor/regional_data/european_union_austria.rb +76 -0
- data/lib/sapor/regional_data/european_union_bulgaria.rb +82 -0
- data/lib/sapor/regional_data/european_union_croatia.rb +81 -0
- data/lib/sapor/regional_data/european_union_cyprus.rb +72 -0
- data/lib/sapor/regional_data/european_union_czech_republic.rb +82 -0
- data/lib/sapor/regional_data/european_union_denmark.rb +77 -0
- data/lib/sapor/regional_data/european_union_estonia.rb +74 -0
- data/lib/sapor/regional_data/european_union_finland.rb +74 -0
- data/lib/sapor/regional_data/european_union_flanders.rb +74 -0
- data/lib/sapor/regional_data/european_union_france.rb +84 -0
- data/lib/sapor/regional_data/european_union_france_2019.rb +84 -0
- data/lib/sapor/regional_data/european_union_french_community_of_belgium.rb +73 -0
- data/lib/sapor/regional_data/european_union_germany.rb +86 -0
- data/lib/sapor/regional_data/european_union_great_britain.rb +98 -0
- data/lib/sapor/regional_data/european_union_greece.rb +77 -0
- data/lib/sapor/regional_data/european_union_hungary.rb +76 -0
- data/lib/sapor/regional_data/european_union_ireland.rb +96 -0
- data/lib/sapor/regional_data/european_union_ireland_with_ia.rb +97 -0
- data/lib/sapor/regional_data/european_union_italy.rb +84 -0
- data/lib/sapor/regional_data/european_union_latvia.rb +81 -0
- data/lib/sapor/regional_data/european_union_lithuania.rb +80 -0
- data/lib/sapor/regional_data/european_union_luxembourg.rb +75 -0
- data/lib/sapor/regional_data/european_union_malta.rb +71 -0
- data/lib/sapor/regional_data/european_union_netherlands.rb +81 -0
- data/lib/sapor/regional_data/european_union_northern_ireland.rb +75 -0
- data/lib/sapor/regional_data/european_union_poland.rb +84 -0
- data/lib/sapor/regional_data/european_union_portugal.rb +75 -0
- data/lib/sapor/regional_data/european_union_romania.rb +78 -0
- data/lib/sapor/regional_data/european_union_slovakia.rb +81 -0
- data/lib/sapor/regional_data/european_union_slovenia.rb +85 -0
- data/lib/sapor/regional_data/european_union_spain.rb +82 -0
- data/lib/sapor/regional_data/european_union_sweden.rb +76 -0
- data/lib/sapor/regional_data/finland-20150419-with-sin.psv +224 -0
- data/lib/sapor/regional_data/finland-20150419.psv +212 -0
- data/lib/sapor/regional_data/finland.rb +107 -0
- data/lib/sapor/regional_data/finland_with_sin.rb +107 -0
- data/lib/sapor/regional_data/flanders-2014.psv +96 -0
- data/lib/sapor/regional_data/flanders-20190526.psv +87 -0
- data/lib/sapor/regional_data/flanders.rb +115 -0
- data/lib/sapor/regional_data/france.rb +38 -0
- data/lib/sapor/regional_data/greece.rb +92 -0
- data/lib/sapor/regional_data/hungary-2014.psv +2104 -0
- data/lib/sapor/regional_data/hungary.rb +116 -0
- data/lib/sapor/regional_data/iceland-20161029-midflokkurinn.psv +94 -0
- data/lib/sapor/regional_data/iceland-20161029.psv +88 -0
- data/lib/sapor/regional_data/iceland-20171028.psv +85 -0
- data/lib/sapor/regional_data/iceland.rb +133 -0
- data/lib/sapor/regional_data/latvia-20141004-kpv-p-par.psv +109 -0
- data/lib/sapor/regional_data/latvia-20141004-kpv-par.psv +103 -0
- data/lib/sapor/regional_data/latvia-20141004-kpv.psv +97 -0
- data/lib/sapor/regional_data/latvia-20141004.psv +89 -0
- data/lib/sapor/regional_data/latvia.rb +112 -0
- data/lib/sapor/regional_data/latvia_kpv.rb +112 -0
- data/lib/sapor/regional_data/latvia_kpv_p_par.rb +112 -0
- data/lib/sapor/regional_data/latvia_kpv_par.rb +112 -0
- data/lib/sapor/regional_data/luxembourg-20131020.psv +76 -0
- data/lib/sapor/regional_data/luxembourg.rb +82 -0
- data/lib/sapor/regional_data/netherlands.rb +108 -0
- data/lib/sapor/regional_data/norway.rb +425 -0
- data/lib/sapor/regional_data/norwegian_municipality.rb +68 -0
- data/lib/sapor/regional_data/poland-20151025-with-ko-and-l-without-n-po-r-and-zl.psv +321 -0
- data/lib/sapor/regional_data/poland-20151025-with-ko-konf-kp-l-and-zp-without-k-k15-n-pis-po-psl-r-and-zl.psv +280 -0
- data/lib/sapor/regional_data/poland-20151025-with-ko-sld-and-wi-without-n-po-and-zl.psv +403 -0
- data/lib/sapor/regional_data/poland-20151025-with-sld-and-wi-without-zl.psv +444 -0
- data/lib/sapor/regional_data/poland-20151025-with-sld-without-zl.psv +403 -0
- data/lib/sapor/regional_data/poland-20151025.psv +403 -0
- data/lib/sapor/regional_data/poland.rb +125 -0
- data/lib/sapor/regional_data/poland_with_ko_and_l_without_n_po_r_and_zl.rb +122 -0
- data/lib/sapor/regional_data/poland_with_ko_konf_kp_l_and_zp_without_k_k15_n_pis_po_psl_r_and_zl.rb +123 -0
- data/lib/sapor/regional_data/poland_with_ko_sld_and_wi_without_n_po_and_zl.rb +125 -0
- data/lib/sapor/regional_data/poland_with_sld_and_wi_without_zl.rb +126 -0
- data/lib/sapor/regional_data/poland_with_sld_without_zl.rb +126 -0
- data/lib/sapor/regional_data/portugal-20151004-with-a-and-ch-without-paf.psv +438 -0
- data/lib/sapor/regional_data/portugal-20151004-with-a-and-il-without-paf.psv +438 -0
- data/lib/sapor/regional_data/portugal-20151004-with-a-ch-and-il-without-paf.psv +461 -0
- data/lib/sapor/regional_data/portugal-20151004-with-a-without-paf.psv +415 -0
- data/lib/sapor/regional_data/portugal-20151004-with-ch-and-il-without-paf.psv +438 -0
- data/lib/sapor/regional_data/portugal-20151004-without-paf.psv +392 -0
- data/lib/sapor/regional_data/portugal-20151004.psv +370 -0
- data/lib/sapor/regional_data/portugal.rb +101 -0
- data/lib/sapor/regional_data/portugal_with_a_and_ch_without_paf.rb +92 -0
- data/lib/sapor/regional_data/portugal_with_a_and_il_without_paf.rb +92 -0
- data/lib/sapor/regional_data/portugal_with_a_ch_and_il_without_paf.rb +92 -0
- data/lib/sapor/regional_data/portugal_with_a_without_paf.rb +92 -0
- data/lib/sapor/regional_data/portugal_with_ch_and_il_without_paf.rb +92 -0
- data/lib/sapor/regional_data/portugal_without_paf.rb +92 -0
- data/lib/sapor/regional_data/slovakia.rb +81 -0
- data/lib/sapor/regional_data/slovenia.rb +114 -0
- data/lib/sapor/regional_data/spain-20160626.psv +619 -0
- data/lib/sapor/regional_data/spain.rb +136 -0
- data/lib/sapor/regional_data/sweden.rb +92 -0
- data/lib/sapor/regional_data/sweden_20140914.rb +89 -0
- data/lib/sapor/regional_data/united_kingdom-2015.psv +4358 -0
- data/lib/sapor/regional_data/united_kingdom-20170608-brexit-chuk.psv +5154 -0
- data/lib/sapor/regional_data/united_kingdom-20170608-brexit.psv +4521 -0
- data/lib/sapor/regional_data/united_kingdom-20170608-tig.psv +4529 -0
- data/lib/sapor/regional_data/united_kingdom-20170608.psv +3894 -0
- data/lib/sapor/regional_data/united_kingdom.rb +94 -0
- data/lib/sapor/regional_data/united_kingdom_with_brexit.rb +110 -0
- data/lib/sapor/regional_data/united_kingdom_with_brexit_and_chuk.rb +111 -0
- data/lib/sapor/regional_data/united_kingdom_with_tig.rb +111 -0
- data/lib/sapor/regional_data/utopia.rb +66 -0
- data/lib/sapor/regional_data/wallonia-2014.psv +101 -0
- data/lib/sapor/regional_data/wallonia-20190526.psv +88 -0
- data/lib/sapor/regional_data/wallonia.rb +112 -0
- data/lib/sapor/representatives_polychotomy.rb +338 -0
- data/lib/sapor/single_district_proportional.rb +75 -0
- data/sapor.gemspec +35 -0
- data/spec/integration/area_spec.rb +28 -0
- data/spec/integration/poll_spec.rb +112 -0
- data/spec/integration/sample.poll +8 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/unit/area_spec.rb +115 -0
- data/spec/unit/austria_spec.rb +76 -0
- data/spec/unit/belgium_brussels_spec.rb +58 -0
- data/spec/unit/belgium_flanders_spec.rb +62 -0
- data/spec/unit/belgium_spec.rb +26 -0
- data/spec/unit/belgium_wallonia_spec.rb +65 -0
- data/spec/unit/binomials_cache_spec.rb +34 -0
- data/spec/unit/catalonia_spec.rb +74 -0
- data/spec/unit/combinations_distribution_spec.rb +241 -0
- data/spec/unit/denmark_spec.rb +56 -0
- data/spec/unit/denmark_with_e_and_p_spec.rb +58 -0
- data/spec/unit/denmark_with_e_spec.rb +57 -0
- data/spec/unit/denmark_with_p_spec.rb +57 -0
- data/spec/unit/denominators_spec.rb +40 -0
- data/spec/unit/dichotomies_spec.rb +154 -0
- data/spec/unit/dichotomy_spec.rb +320 -0
- data/spec/unit/estonia_spec.rb +65 -0
- data/spec/unit/european_union_27_austria_spec.rb +61 -0
- data/spec/unit/european_union_27_croatia_spec.rb +60 -0
- data/spec/unit/european_union_27_denmark_spec.rb +62 -0
- data/spec/unit/european_union_27_estonia_spec.rb +94 -0
- data/spec/unit/european_union_27_finland_spec.rb +75 -0
- data/spec/unit/european_union_27_ireland_spec.rb +72 -0
- data/spec/unit/european_union_27_ireland_with_ia_spec.rb +74 -0
- data/spec/unit/european_union_27_italy_spec.rb +69 -0
- data/spec/unit/european_union_27_netherlands_spec.rb +81 -0
- data/spec/unit/european_union_27_poland_spec.rb +69 -0
- data/spec/unit/european_union_27_romania_spec.rb +67 -0
- data/spec/unit/european_union_27_slovakia_spec.rb +111 -0
- data/spec/unit/european_union_27_spain_spec.rb +130 -0
- data/spec/unit/european_union_27_sweden_spec.rb +89 -0
- data/spec/unit/european_union_austria_spec.rb +61 -0
- data/spec/unit/european_union_bulgaria_spec.rb +97 -0
- data/spec/unit/european_union_croatia_spec.rb +59 -0
- data/spec/unit/european_union_cyprus_spec.rb +65 -0
- data/spec/unit/european_union_czech_republic_spec.rb +125 -0
- data/spec/unit/european_union_denmark_spec.rb +61 -0
- data/spec/unit/european_union_estonia_spec.rb +93 -0
- data/spec/unit/european_union_finland_spec.rb +75 -0
- data/spec/unit/european_union_flanders_spec.rb +56 -0
- data/spec/unit/european_union_france_2019_spec.rb +73 -0
- data/spec/unit/european_union_france_spec.rb +73 -0
- data/spec/unit/european_union_french_community_of_belgium_spec.rb +61 -0
- data/spec/unit/european_union_germany_spec.rb +90 -0
- data/spec/unit/european_union_great_britain_spec.rb +87 -0
- data/spec/unit/european_union_greece_spec.rb +148 -0
- data/spec/unit/european_union_hungary_spec.rb +57 -0
- data/spec/unit/european_union_ireland_spec.rb +72 -0
- data/spec/unit/european_union_ireland_with_ia_spec.rb +74 -0
- data/spec/unit/european_union_italy_spec.rb +69 -0
- data/spec/unit/european_union_latvia_spec.rb +76 -0
- data/spec/unit/european_union_lithuania_spec.rb +68 -0
- data/spec/unit/european_union_luxembourg_spec.rb +63 -0
- data/spec/unit/european_union_malta_spec.rb +60 -0
- data/spec/unit/european_union_netherlands_spec.rb +81 -0
- data/spec/unit/european_union_northern_ireland_spec.rb +66 -0
- data/spec/unit/european_union_poland_spec.rb +69 -0
- data/spec/unit/european_union_portugal_spec.rb +77 -0
- data/spec/unit/european_union_romania_spec.rb +67 -0
- data/spec/unit/european_union_slovakia_spec.rb +111 -0
- data/spec/unit/european_union_slovenia_spec.rb +77 -0
- data/spec/unit/european_union_spain_spec.rb +129 -0
- data/spec/unit/european_union_sweden_spec.rb +89 -0
- data/spec/unit/finland_spec.rb +65 -0
- data/spec/unit/finland_with_sin_spec.rb +67 -0
- data/spec/unit/first_past_the_post_spec.rb +54 -0
- data/spec/unit/flanders_spec.rb +70 -0
- data/spec/unit/france_spec.rb +32 -0
- data/spec/unit/greece_spec.rb +118 -0
- data/spec/unit/hungary_spec.rb +132 -0
- data/spec/unit/iceland_spec.rb +57 -0
- data/spec/unit/largest_remainder_spec.rb +79 -0
- data/spec/unit/latvia_kpv_p_par_spec.rb +38 -0
- data/spec/unit/latvia_kpv_par_spec.rb +38 -0
- data/spec/unit/latvia_kpv_spec.rb +38 -0
- data/spec/unit/latvia_spec.rb +60 -0
- data/spec/unit/luxembourg_spec.rb +54 -0
- data/spec/unit/multi_district_leveled_proportional_spec.rb +49 -0
- data/spec/unit/multi_district_proportional_spec.rb +81 -0
- data/spec/unit/netherlands_spec.rb +107 -0
- data/spec/unit/norway_spec.rb +64 -0
- data/spec/unit/norwegian_municipality_spec.rb +89 -0
- data/spec/unit/number_formatter_spec.rb +173 -0
- data/spec/unit/poland_spec.rb +62 -0
- data/spec/unit/poland_with_ko_and_l_without_n_po_r_and_zl_spec.rb +60 -0
- data/spec/unit/poland_with_ko_konf_kp_l_and_zp_without_k_k15_n_pis_po_psl_r_and_zl_spec.rb +59 -0
- data/spec/unit/poland_with_ko_sld_and_wi_without_n_po_and_zl_spec.rb +62 -0
- data/spec/unit/poland_with_sld_and_wi_without_zl_spec.rb +63 -0
- data/spec/unit/poland_with_sld_without_zl_spec.rb +62 -0
- data/spec/unit/poll_spec.rb +110 -0
- data/spec/unit/portugal_spec.rb +66 -0
- data/spec/unit/portugal_with_a_and_ch_without_paf_spec.rb +68 -0
- data/spec/unit/portugal_with_a_and_il_without_paf_spec.rb +68 -0
- data/spec/unit/portugal_with_a_ch_and_il_without_paf_spec.rb +69 -0
- data/spec/unit/portugal_with_a_without_paf_spec.rb +67 -0
- data/spec/unit/portugal_with_ch_and_il_without_paf_spec.rb +68 -0
- data/spec/unit/portugal_without_paf_spec.rb +66 -0
- data/spec/unit/pseudorandom_multirange_enumerator_spec.rb +82 -0
- data/spec/unit/referendum_polychotomy_spec.rb +289 -0
- data/spec/unit/representatives_polychotomy_spec.rb +332 -0
- data/spec/unit/slovakia_spec.rb +99 -0
- data/spec/unit/slovenia_spec.rb +80 -0
- data/spec/unit/spain_spec.rb +101 -0
- data/spec/unit/sweden_20140914_spec.rb +112 -0
- data/spec/unit/sweden_spec.rb +113 -0
- data/spec/unit/united_kingdom_spec.rb +65 -0
- data/spec/unit/united_kingdom_with_brexit_and_chuk_spec.rb +67 -0
- data/spec/unit/united_kingdom_with_brexit_spec.rb +66 -0
- data/spec/unit/united_kingdom_with_tig_spec.rb +66 -0
- data/spec/unit/wallonia_spec.rb +70 -0
- metadata +490 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
4
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of SAPoR.
|
|
7
|
+
#
|
|
8
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
9
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
10
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
11
|
+
# version.
|
|
12
|
+
#
|
|
13
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
14
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
15
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'spec_helper'
|
|
21
|
+
|
|
22
|
+
describe Sapor::LatviaKpvPPar, '#area_code' do
|
|
23
|
+
it 'returns LV∪{KPV,P,PAR} as the area code' do
|
|
24
|
+
expect(Sapor::LatviaKpvPPar.instance.area_code).to eq('LV∪{KPV,P,PAR}')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::LatviaKpvPPar, '#no_of_seats' do
|
|
29
|
+
it 'returns 100 as the number of seats' do
|
|
30
|
+
expect(Sapor::LatviaKpvPPar.instance.no_of_seats).to eq(100)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe Sapor::LatviaKpvPPar, '#population_size' do
|
|
35
|
+
it 'returns a population size of 913,491' do
|
|
36
|
+
expect(Sapor::LatviaKpvPPar.instance.population_size).to eq(913_491)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
4
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of SAPoR.
|
|
7
|
+
#
|
|
8
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
9
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
10
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
11
|
+
# version.
|
|
12
|
+
#
|
|
13
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
14
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
15
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'spec_helper'
|
|
21
|
+
|
|
22
|
+
describe Sapor::LatviaKpvPar, '#area_code' do
|
|
23
|
+
it 'returns LV∪{KPV,PAR} as the area code' do
|
|
24
|
+
expect(Sapor::LatviaKpvPar.instance.area_code).to eq('LV∪{KPV,PAR}')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::LatviaKpvPar, '#no_of_seats' do
|
|
29
|
+
it 'returns 100 as the number of seats' do
|
|
30
|
+
expect(Sapor::LatviaKpvPar.instance.no_of_seats).to eq(100)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe Sapor::LatviaKpvPar, '#population_size' do
|
|
35
|
+
it 'returns a population size of 913,491' do
|
|
36
|
+
expect(Sapor::LatviaKpvPar.instance.population_size).to eq(913_491)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
4
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of SAPoR.
|
|
7
|
+
#
|
|
8
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
9
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
10
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
11
|
+
# version.
|
|
12
|
+
#
|
|
13
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
14
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
15
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'spec_helper'
|
|
21
|
+
|
|
22
|
+
describe Sapor::LatviaKpv, '#area_code' do
|
|
23
|
+
it 'returns LV∪{KPV} as the area code' do
|
|
24
|
+
expect(Sapor::LatviaKpv.instance.area_code).to eq('LV∪{KPV}')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::LatviaKpv, '#no_of_seats' do
|
|
29
|
+
it 'returns 100 as the number of seats' do
|
|
30
|
+
expect(Sapor::LatviaKpv.instance.no_of_seats).to eq(100)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe Sapor::LatviaKpv, '#population_size' do
|
|
35
|
+
it 'returns a population size of 913,491' do
|
|
36
|
+
expect(Sapor::LatviaKpv.instance.population_size).to eq(913_491)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
3
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
4
|
+
#
|
|
5
|
+
# This file is part of SAPoR.
|
|
6
|
+
#
|
|
7
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
9
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
10
|
+
# version.
|
|
11
|
+
#
|
|
12
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
13
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
14
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
|
|
21
|
+
describe Sapor::Latvia, '#area_code' do
|
|
22
|
+
it 'returns LV as the area code' do
|
|
23
|
+
expect(Sapor::Latvia.instance.area_code).to eq('LV')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe Sapor::Latvia, '#no_of_seats' do
|
|
28
|
+
it 'returns 100 as the number of seats' do
|
|
29
|
+
expect(Sapor::Latvia.instance.no_of_seats).to eq(100)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe Sapor::Latvia, '#population_size' do
|
|
34
|
+
it 'returns a population size of 913,491' do
|
|
35
|
+
expect(Sapor::Latvia.instance.population_size).to eq(913_491)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe Sapor::Latvia, '#seats' do
|
|
40
|
+
it 'calculates the number of seats for the election of 2014 correctly' do
|
|
41
|
+
Latvia = Sapor::Latvia.instance
|
|
42
|
+
results = Latvia.overall_election_results_of_2014
|
|
43
|
+
seats = Latvia.seats(results)
|
|
44
|
+
expect(seats['Sociāldemokrātiskā Partija “Saskaņa”']).to eq(24)
|
|
45
|
+
expect(seats['Vienotība']).to eq(23)
|
|
46
|
+
expect(seats['Zaļo un Zemnieku savienība']).to eq(21)
|
|
47
|
+
expect(seats['Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un ' \
|
|
48
|
+
'Brīvībai/LNNK”']).to eq(17)
|
|
49
|
+
expect(seats['Latvijas Reģionu apvienība']).to eq(8)
|
|
50
|
+
expect(seats['No sirds Latvijai']).to eq(7)
|
|
51
|
+
expect(seats['Latvijas Krievu savienība']).to eq(0)
|
|
52
|
+
expect(seats['Latvijas attīstībai']).to eq(0)
|
|
53
|
+
expect(seats['“Suverenitāte”']).to eq(0)
|
|
54
|
+
expect(seats['Partija “Brīvība. Brīvs no bailēm, naida un dusmām”']).to \
|
|
55
|
+
eq(0)
|
|
56
|
+
expect(seats['Politiskā partija Izaugsme']).to eq(0)
|
|
57
|
+
expect(seats['Vienoti Latvijai']).to eq(0)
|
|
58
|
+
expect(seats['Jaunā konservatīvā partija']).to eq(0)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
3
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
4
|
+
#
|
|
5
|
+
# This file is part of SAPoR.
|
|
6
|
+
#
|
|
7
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
9
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
10
|
+
# version.
|
|
11
|
+
#
|
|
12
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
13
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
14
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
|
|
21
|
+
describe Sapor::Luxembourg, '#area_code' do
|
|
22
|
+
it 'returns LU as the area code' do
|
|
23
|
+
expect(Sapor::Luxembourg.instance.area_code).to eq('LU')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe Sapor::Luxembourg, '#no_of_seats' do
|
|
28
|
+
it 'returns 60 as the number of seats' do
|
|
29
|
+
expect(Sapor::Luxembourg.instance.no_of_seats).to eq(60)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe Sapor::Luxembourg, '#population_size' do
|
|
34
|
+
it 'returns a population size of 3,276,692' do
|
|
35
|
+
expect(Sapor::Luxembourg.instance.population_size).to eq(3_276_692)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe Sapor::Luxembourg, '#seats' do
|
|
40
|
+
it 'calculates the number of seats for the election of 2013 correctly' do
|
|
41
|
+
Luxembourg = Sapor::Luxembourg.instance
|
|
42
|
+
results = Luxembourg.overall_election_results_of_2013
|
|
43
|
+
seats = Luxembourg.seats(results)
|
|
44
|
+
expect(seats['Chrëschtlech-Sozial Vollekspartei']).to eq(23)
|
|
45
|
+
expect(seats['Lëtzebuerger Sozialistesch Aarbechterpartei']).to eq(13)
|
|
46
|
+
expect(seats['Demokratesch Partei']).to eq(13)
|
|
47
|
+
expect(seats['déi gréng']).to eq(6)
|
|
48
|
+
expect(seats['Alternativ Demokratesch Reformpartei']).to eq(3)
|
|
49
|
+
expect(seats['Déi Lénk']).to eq(2)
|
|
50
|
+
expect(seats['Piratepartei Lëtzebuerg']).to eq(0)
|
|
51
|
+
expect(seats['Kommunistesch Partei Lëtzebuerg']).to eq(0)
|
|
52
|
+
expect(seats['Partei fir Integral Demokratie']).to eq(0)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
4
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of SAPoR.
|
|
7
|
+
#
|
|
8
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
9
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
10
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
11
|
+
# version.
|
|
12
|
+
#
|
|
13
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
14
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
15
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
require 'spec_helper'
|
|
21
|
+
|
|
22
|
+
SAMPLE_ELECTION_RESULT = { 'Red' => 120, 'Green' => 120, 'Blue' => 100 }.freeze
|
|
23
|
+
|
|
24
|
+
SAMPLE_DETAILED_ELECTION_RESULT = { 'North' => { 'Red' => 50, 'Green' => 70 },
|
|
25
|
+
'South' => { 'Red' => 70, 'Green' => 50,
|
|
26
|
+
'Blue' => 100 } }.freeze
|
|
27
|
+
|
|
28
|
+
SAMPLE_SEAT_DISTRIBUTION = { 'North' => 3, 'South' => 5 }.freeze
|
|
29
|
+
|
|
30
|
+
SAMPLE_LEVELING_SEATS = 2
|
|
31
|
+
|
|
32
|
+
SAMPLE_LEVELING_THRESHOLD = 0.05
|
|
33
|
+
|
|
34
|
+
SAMPLE_POLL_RESULT = { 'Red' => 120, 'Green' => 120 }.freeze
|
|
35
|
+
|
|
36
|
+
LEVELED = Sapor::MultiDistrictLeveledProportional.new( \
|
|
37
|
+
SAMPLE_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
|
|
38
|
+
SAMPLE_SEAT_DISTRIBUTION, SAMPLE_LEVELING_SEATS, SAMPLE_LEVELING_THRESHOLD,
|
|
39
|
+
Sapor::SainteLague14Denominators
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
describe Sapor::MultiDistrictLeveledProportional, '#project' do
|
|
43
|
+
it 'projects same result as last result if fed with last election result' do
|
|
44
|
+
projection = LEVELED.project(SAMPLE_POLL_RESULT)
|
|
45
|
+
expect(projection['Red']).to eq(4)
|
|
46
|
+
expect(projection['Green']).to eq(4)
|
|
47
|
+
expect(projection['Blue']).to eq(2)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#
|
|
3
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
4
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
5
|
+
#
|
|
6
|
+
# This file is part of SAPoR.
|
|
7
|
+
#
|
|
8
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
9
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
10
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
11
|
+
# version.
|
|
12
|
+
#
|
|
13
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
14
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
15
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
SAMPLE_RGB_ELECTION_RESULT = { 'Red' => 120, 'Green' => 120, 'Blue' => 100 }
|
|
21
|
+
|
|
22
|
+
SAMPLE_DETAILED_ELECTION_RESULT = { 'North' => { 'Red' => 50, 'Green' => 70
|
|
23
|
+
},
|
|
24
|
+
'South' => { 'Red' => 70, 'Green' => 50,
|
|
25
|
+
'Blue' => 100 } }
|
|
26
|
+
|
|
27
|
+
SAMPLE_SEAT_DISTRIBUTION = { 'North' => 3, 'South' => 5 }
|
|
28
|
+
|
|
29
|
+
PROPORTIONAL = Sapor::MultiDistrictProportional.new( \
|
|
30
|
+
SAMPLE_RGB_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
|
|
31
|
+
SAMPLE_SEAT_DISTRIBUTION, Sapor::DhondtDenominators)
|
|
32
|
+
|
|
33
|
+
describe Sapor::MultiDistrictProportional, '#project' do
|
|
34
|
+
# Seat distribution:
|
|
35
|
+
# North: Green 1 70, Red 1 50, Green 2 35, (Red 2 25)
|
|
36
|
+
# South: Blue 1 100, Red 1 70, Green 1 50, Blue 2 50, Red 2 35, (Blue 3 33)
|
|
37
|
+
it 'projects same result as last result if fed with last election result' do
|
|
38
|
+
projection = PROPORTIONAL.project(SAMPLE_RGB_ELECTION_RESULT)
|
|
39
|
+
expect(projection['Red']).to eq(3)
|
|
40
|
+
expect(projection['Green']).to eq(3)
|
|
41
|
+
expect(projection['Blue']).to eq(2)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Seat distribution:
|
|
45
|
+
# North: Green 1 62, Red 1 44, Green 2 31, (Red 2 22)
|
|
46
|
+
# South: Blue 1 128, Red 1 62, Green 1 44, Blue 2 64, Blue 3 42, (Red 2 31)
|
|
47
|
+
it 'extrapolates the seat distribution according to the new result' do
|
|
48
|
+
new_result = { 'Red' => 100, 'Green' => 100, 'Blue' => 120 }
|
|
49
|
+
projection = PROPORTIONAL.project(new_result)
|
|
50
|
+
expect(projection['Red']).to eq(2)
|
|
51
|
+
expect(projection['Green']).to eq(3)
|
|
52
|
+
expect(projection['Blue']).to eq(3)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Seat distribution:
|
|
56
|
+
# North: Green 1 70, Red 1 50, Green 2 35 (Red 2 25, Green 3 23)
|
|
57
|
+
# South: Blue 1 100, Red 1 70, Blue 2 50, Red 2 35, Blue 3 33, (Blue 4 25,
|
|
58
|
+
# Red 3 23, Green below threshold)
|
|
59
|
+
it 'excludes parties below the threshold' do
|
|
60
|
+
proportional = Sapor::MultiDistrictProportional.new( \
|
|
61
|
+
SAMPLE_RGB_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
|
|
62
|
+
SAMPLE_SEAT_DISTRIBUTION, Sapor::DhondtDenominators, 51.to_f / 220)
|
|
63
|
+
projection = proportional.project(SAMPLE_RGB_ELECTION_RESULT)
|
|
64
|
+
expect(projection['Red']).to eq(3)
|
|
65
|
+
expect(projection['Green']).to eq(2)
|
|
66
|
+
expect(projection['Blue']).to eq(3)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Seat distribution:
|
|
70
|
+
# North: Green 1 70, Red 1 50, Green 2 35, (Red 2 25)
|
|
71
|
+
# South: Blue 1 100, Red 1 70, Green 1 50, Blue 2 50, Red 2 35, (Blue 3 33)
|
|
72
|
+
it 'includes parties at the threshold' do
|
|
73
|
+
proportional = Sapor::MultiDistrictProportional.new( \
|
|
74
|
+
SAMPLE_RGB_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
|
|
75
|
+
SAMPLE_SEAT_DISTRIBUTION, Sapor::DhondtDenominators, 50.to_f / 220)
|
|
76
|
+
projection = proportional.project(SAMPLE_RGB_ELECTION_RESULT)
|
|
77
|
+
expect(projection['Red']).to eq(3)
|
|
78
|
+
expect(projection['Green']).to eq(3)
|
|
79
|
+
expect(projection['Blue']).to eq(2)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Statistical Analysis of Polling Results (SAPoR)
|
|
3
|
+
# Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
|
|
4
|
+
#
|
|
5
|
+
# This file is part of SAPoR.
|
|
6
|
+
#
|
|
7
|
+
# SAPoR is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
# terms of the GNU General Public License as published by the Free Software
|
|
9
|
+
# Foundation, either version 3 of the License, or (at your option) any later
|
|
10
|
+
# version.
|
|
11
|
+
#
|
|
12
|
+
# SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
13
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
14
|
+
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You can find a copy of the GNU General Public License in /doc/gpl.txt
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'spec_helper'
|
|
20
|
+
|
|
21
|
+
describe Sapor::Netherlands, '#area_code' do
|
|
22
|
+
it 'returns NL as the area code' do
|
|
23
|
+
expect(Sapor::Netherlands.instance.area_code).to eq('NL')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe Sapor::Netherlands, '#no_of_seats' do
|
|
28
|
+
it 'returns 150 as the number of seats' do
|
|
29
|
+
expect(Sapor::Netherlands.instance.no_of_seats).to eq(150)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe Sapor::Netherlands, '#population_size' do
|
|
34
|
+
it 'returns a population size of 10,516,041' do
|
|
35
|
+
expect(Sapor::Netherlands.instance.population_size).to eq(10_516_041)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe Sapor::Netherlands, '#threshold' do
|
|
40
|
+
it 'returns a threshold of 1/150' do
|
|
41
|
+
expect(Sapor::Netherlands.instance.threshold).to eq(1 / 150.to_f)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe Sapor::Netherlands, '#seats' do
|
|
46
|
+
it 'calculates the number of seats for the election of 2017' do
|
|
47
|
+
results = { 'Volkspartij voor Vrijheid en Democratie' => 2_238_351,
|
|
48
|
+
'Partij voor de Vrijheid' => 1_372_941,
|
|
49
|
+
'Christen-Democratisch Appèl' => 1_301_796,
|
|
50
|
+
'Democraten 66' => 1_285_819,
|
|
51
|
+
'GroenLinks' => 959_600,
|
|
52
|
+
'Socialistische Partij' => 955_633,
|
|
53
|
+
'Partij van de Arbeid' => 599_699,
|
|
54
|
+
'ChristenUnie' => 356_271,
|
|
55
|
+
'Partij voor de Dieren' => 335_214,
|
|
56
|
+
'50Plus' => 327_131,
|
|
57
|
+
'Staatkundig Gereformeerde Partij' => 218_950,
|
|
58
|
+
'DENK' => 216_147,
|
|
59
|
+
'Forum voor Democratie' => 187_162,
|
|
60
|
+
'VoorNederland' => 38_209,
|
|
61
|
+
'Piratenpartij' => 35_478,
|
|
62
|
+
'Artikel 1' => 28_700,
|
|
63
|
+
'Nieuwe Wegen' => 14_362,
|
|
64
|
+
'OndernemersPartij' => 12_570,
|
|
65
|
+
'Lokaal in de Kamer' => 6_858,
|
|
66
|
+
'Niet Stemmers' => 6_025,
|
|
67
|
+
'De Burger Beweging' => 5_221,
|
|
68
|
+
'GeenPeil' => 4_945,
|
|
69
|
+
'Jezus Leeft' => 3_099,
|
|
70
|
+
'Vrijzinnige Partij' => 2_938,
|
|
71
|
+
'Libertarische Partij' => 1_492,
|
|
72
|
+
'Partij voor Mens en Spirit–Basisinkomen Partij–Vrede en ' \
|
|
73
|
+
'Recht' => 726,
|
|
74
|
+
'StemNL' => 527,
|
|
75
|
+
'Vrije Democratische Partij' => 177 }
|
|
76
|
+
seats = Sapor::Netherlands.instance.seats(results)
|
|
77
|
+
expect(seats['Volkspartij voor Vrijheid en Democratie']).to eq(33)
|
|
78
|
+
expect(seats['Partij voor de Vrijheid']).to eq(20)
|
|
79
|
+
expect(seats['Christen-Democratisch Appèl']).to eq(19)
|
|
80
|
+
expect(seats['Democraten 66']).to eq(19)
|
|
81
|
+
expect(seats['GroenLinks']).to eq(14)
|
|
82
|
+
expect(seats['Socialistische Partij']).to eq(14)
|
|
83
|
+
expect(seats['Partij van de Arbeid']).to eq(9)
|
|
84
|
+
expect(seats['ChristenUnie']).to eq(5)
|
|
85
|
+
expect(seats['Partij voor de Dieren']).to eq(5)
|
|
86
|
+
expect(seats['50Plus']).to eq(4)
|
|
87
|
+
expect(seats['Staatkundig Gereformeerde Partij']).to eq(3)
|
|
88
|
+
expect(seats['DENK']).to eq(3)
|
|
89
|
+
expect(seats['Forum voor Democratie']).to eq(2)
|
|
90
|
+
expect(seats['VoorNederland']).to eq(0)
|
|
91
|
+
expect(seats['Piratenpartij']).to eq(0)
|
|
92
|
+
expect(seats['Artikel 1']).to eq(0)
|
|
93
|
+
expect(seats['Nieuwe Wegen']).to eq(0)
|
|
94
|
+
expect(seats['OndernemersPartij']).to eq(0)
|
|
95
|
+
expect(seats['Lokaal in de Kamer']).to eq(0)
|
|
96
|
+
expect(seats['Niet Stemmers']).to eq(0)
|
|
97
|
+
expect(seats['De Burger Beweging']).to eq(0)
|
|
98
|
+
expect(seats['GeenPeil']).to eq(0)
|
|
99
|
+
expect(seats['Jezus Leeft']).to eq(0)
|
|
100
|
+
expect(seats['Vrijzinnige Partij']).to eq(0)
|
|
101
|
+
expect(seats['Libertarische Partij']).to eq(0)
|
|
102
|
+
expect(seats['Partij voor Mens en Spirit–Basisinkomen Partij–Vrede en ' \
|
|
103
|
+
'Recht']).to eq(0)
|
|
104
|
+
expect(seats['StemNL']).to eq(0)
|
|
105
|
+
expect(seats['Vrije Democratische Partij']).to eq(0)
|
|
106
|
+
end
|
|
107
|
+
end
|