sapor 0.3.3
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 +81 -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,70 @@
|
|
|
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::Flanders, '#area_code' do
|
|
23
|
+
it 'returns BE-VLG as the area code' do
|
|
24
|
+
expect(Sapor::Flanders.instance.area_code).to eq('BE-VLG')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::Flanders, '#no_of_seats' do
|
|
29
|
+
it 'returns 124 as the number of seats' do
|
|
30
|
+
expect(Sapor::Flanders.instance.no_of_seats).to eq(124)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe Sapor::Flanders, '#population_size' do
|
|
35
|
+
it 'returns a population size of 4,238,274' do
|
|
36
|
+
expect(Sapor::Flanders.instance.population_size).to eq(4_238_274)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe Sapor::Flanders, '#seats' do
|
|
41
|
+
it 'calculates the number of seats for the election of 2019' do
|
|
42
|
+
flanders = Sapor::Flanders.instance
|
|
43
|
+
results = flanders.overall_election_results_of_2019
|
|
44
|
+
seats = flanders.seats(results)
|
|
45
|
+
expect(seats['Nieuw-Vlaamse Alliantie']).to eq(35)
|
|
46
|
+
expect(seats['Christen-Democratisch en Vlaams']).to eq(19)
|
|
47
|
+
expect(seats['Open Vlaamse Liberalen en Democraten']).to eq(16)
|
|
48
|
+
expect(seats['Socialistische Partij Anders']).to eq(13)
|
|
49
|
+
expect(seats['Groen']).to eq(14)
|
|
50
|
+
expect(seats['Vlaams Belang']).to eq(23)
|
|
51
|
+
expect(seats['Partij van de Arbeid van België']).to eq(4)
|
|
52
|
+
expect(seats['BE.ONE']).to eq(0)
|
|
53
|
+
expect(seats['Burgerlijst']).to eq(0)
|
|
54
|
+
expect(seats['de coöperatie']).to eq(0)
|
|
55
|
+
expect(seats['Democratisch-Solidair Appèl']).to eq(0)
|
|
56
|
+
expect(seats['DierAnimal']).to eq(0)
|
|
57
|
+
expect(seats['Genoeg voor iedereen']).to eq(0)
|
|
58
|
+
expect(seats['Piratenpartij']).to eq(0)
|
|
59
|
+
expect(seats['Partij Vrede en Solidariteit']).to eq(0)
|
|
60
|
+
expect(seats['PRO']).to eq(0)
|
|
61
|
+
expect(seats['Referendumpartij']).to eq(0)
|
|
62
|
+
expect(seats['Union des Francophones']).to eq(0)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe Sapor::Flanders, '#threshold' do
|
|
67
|
+
it 'returns a threshold of 5%' do
|
|
68
|
+
expect(Sapor::Flanders.instance.threshold).to eq(0.05)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
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::France, '#area_code' do
|
|
23
|
+
it 'returns FR as the area code' do
|
|
24
|
+
expect(Sapor::France.instance.area_code).to eq('FR')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::France, '#population_size' do
|
|
29
|
+
it 'returns a population size of 44,834,000' do
|
|
30
|
+
expect(Sapor::France.instance.population_size).to eq(44_834_000)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
|
|
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::Greece, '#area_code' do
|
|
23
|
+
it 'returns GR as the area code' do
|
|
24
|
+
expect(Sapor::Greece.instance.area_code).to eq('GR')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::Greece, '#no_of_seats' do
|
|
29
|
+
it 'returns 300 as the number of seats' do
|
|
30
|
+
expect(Sapor::Greece.instance.no_of_seats).to eq(300)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe Sapor::Greece, '#population_size' do
|
|
35
|
+
it 'returns a population size of 5,567,930' do
|
|
36
|
+
expect(Sapor::Greece.instance.population_size).to eq(5_567_930)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe Sapor::Greece, '#seats' do
|
|
41
|
+
it 'calculates the number of seats for the election of 20 September 2015' \
|
|
42
|
+
' correctly' do
|
|
43
|
+
greece = Sapor::Greece.instance
|
|
44
|
+
results = { 'Συνασπισμός Ριζοσπαστικής Αριστεράς' => 1_925_904,
|
|
45
|
+
'Νέα Δημοκρατία' => 1_526_205,
|
|
46
|
+
'Χρυσή Αυγή' => 379_581,
|
|
47
|
+
'Δημοκρατική Συμπαράταξη' => 341_390,
|
|
48
|
+
'Κομμουνιστικό Κόμμα Ελλάδας' => 301_632,
|
|
49
|
+
'Το Ποτάμι' => 222_166,
|
|
50
|
+
'Ανεξάρτητοι Έλληνες' => 200_423,
|
|
51
|
+
'Ένωση Κεντρώων' => 186_457,
|
|
52
|
+
'Λαϊκή Ενότητα' => 155_242,
|
|
53
|
+
'Αντικαπιταλιστική Αριστερή Συνεργασία για την Ανατροπή Εργατικό Επαναστατικό Κόμμα' => 46_096,
|
|
54
|
+
'Ενιαίο Παλλαϊκό Μέτωπο' => 41_631,
|
|
55
|
+
'Κοινωνία' => 35_534,
|
|
56
|
+
'δημιουργία, ξανά!' => 28_936,
|
|
57
|
+
'Δημοκρατικοί–Κοινωνία Αξιών–Κόμμα Πειρατών' => 15_257,
|
|
58
|
+
'Κομμουνιστικό Κόμμα Ελλάδας (μ-λ)–Μ-Λ Κομμουνιστικό Κόμμα Ελλάδας' => 8_944,
|
|
59
|
+
'Πατριωτική Ένωση–Ελληνική Λαϊκή Συσπείρωση' => 6_253,
|
|
60
|
+
'Ελληνική Λαϊκή Δημοκρατική Απελευθέρωση' => 4_425,
|
|
61
|
+
'Οργάνωση Κομμουνιστών Διεθνιστών Ελλάδας' => 2_372,
|
|
62
|
+
'Οργάνωση για την Ανασυγκρότηση του Κ.Κ.Ε.' => 2_263,
|
|
63
|
+
'Independent candidates' => 1_139 }
|
|
64
|
+
seats = greece.seats(results)
|
|
65
|
+
expect(seats['Συνασπισμός Ριζοσπαστικής Αριστεράς']).to eq(145)
|
|
66
|
+
expect(seats['Νέα Δημοκρατία']).to eq(75)
|
|
67
|
+
expect(seats['Χρυσή Αυγή']).to eq(18)
|
|
68
|
+
expect(seats['Δημοκρατική Συμπαράταξη']).to eq(17)
|
|
69
|
+
expect(seats['Κομμουνιστικό Κόμμα Ελλάδας']).to eq(15)
|
|
70
|
+
expect(seats['Το Ποτάμι']).to eq(11)
|
|
71
|
+
expect(seats['Ανεξάρτητοι Έλληνες']).to eq(10)
|
|
72
|
+
expect(seats['Ένωση Κεντρώων']).to eq(9)
|
|
73
|
+
expect(seats['Λαϊκή Ενότητα']).to eq(0)
|
|
74
|
+
expect(seats['Αντικαπιταλιστική Αριστερή Συνεργασία για την Ανατροπή Εργατικό Επαναστατικό Κόμμα']).to eq(0)
|
|
75
|
+
expect(seats['Ενιαίο Παλλαϊκό Μέτωπο']).to eq(0)
|
|
76
|
+
expect(seats['Κοινωνία']).to eq(0)
|
|
77
|
+
expect(seats['δημιουργία, ξανά!']).to eq(0)
|
|
78
|
+
expect(seats['Δημοκρατικοί–Κοινωνία Αξιών–Κόμμα Πειρατών']).to eq(0)
|
|
79
|
+
expect(seats['Κομμουνιστικό Κόμμα Ελλάδας (μ-λ)–Μ-Λ Κομμουνιστικό Κόμμα Ελλάδας']).to eq(0)
|
|
80
|
+
expect(seats['Πατριωτική Ένωση–Ελληνική Λαϊκή Συσπείρωση']).to eq(0)
|
|
81
|
+
expect(seats['Ελληνική Λαϊκή Δημοκρατική Απελευθέρωση']).to eq(0)
|
|
82
|
+
expect(seats['Οργάνωση Κομμουνιστών Διεθνιστών Ελλάδας']).to eq(0)
|
|
83
|
+
expect(seats['Οργάνωση για την Ανασυγκρότηση του Κ.Κ.Ε.']).to eq(0)
|
|
84
|
+
expect(seats['Independent candidates']).to eq(0)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'calculates the number of seats for the election of 20 September 2015' \
|
|
88
|
+
' correctly with small parties aggregated as OTHER' do
|
|
89
|
+
greece = Sapor::Greece.instance
|
|
90
|
+
results = { 'Συνασπισμός Ριζοσπαστικής Αριστεράς' => 1_925_904,
|
|
91
|
+
'Νέα Δημοκρατία' => 1_526_205,
|
|
92
|
+
'Χρυσή Αυγή' => 379_581,
|
|
93
|
+
'Δημοκρατική Συμπαράταξη' => 341_390,
|
|
94
|
+
'Κομμουνιστικό Κόμμα Ελλάδας' => 301_632,
|
|
95
|
+
'Το Ποτάμι' => 222_166,
|
|
96
|
+
'Ανεξάρτητοι Έλληνες' => 200_423,
|
|
97
|
+
'Ένωση Κεντρώων' => 186_457,
|
|
98
|
+
Sapor::OTHER => 155_242 + 46_096 + 41_631 + 35_534 + 28_936 \
|
|
99
|
+
+ 15_257 + 8_944 + 6_253 + 4_425 + 2_372 \
|
|
100
|
+
+ 2_263 + 1_139 }
|
|
101
|
+
seats = greece.seats(results)
|
|
102
|
+
expect(seats['Συνασπισμός Ριζοσπαστικής Αριστεράς']).to eq(145)
|
|
103
|
+
expect(seats['Νέα Δημοκρατία']).to eq(75)
|
|
104
|
+
expect(seats['Χρυσή Αυγή']).to eq(18)
|
|
105
|
+
expect(seats['Δημοκρατική Συμπαράταξη']).to eq(17)
|
|
106
|
+
expect(seats['Κομμουνιστικό Κόμμα Ελλάδας']).to eq(15)
|
|
107
|
+
expect(seats['Το Ποτάμι']).to eq(11)
|
|
108
|
+
expect(seats['Ανεξάρτητοι Έλληνες']).to eq(10)
|
|
109
|
+
expect(seats['Ένωση Κεντρώων']).to eq(9)
|
|
110
|
+
expect(seats[Sapor::OTHER]).to eq(0)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe Sapor::Greece, '#threshold' do
|
|
115
|
+
it 'returns a threshold of 3%' do
|
|
116
|
+
expect(Sapor::Greece.instance.threshold).to eq(0.03)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
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::Hungary, '#area_code' do
|
|
23
|
+
it 'returns HU as the area code' do
|
|
24
|
+
expect(Sapor::Hungary.instance.area_code).to eq('HU')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::Hungary, '#coalitions' do
|
|
29
|
+
def hungarian_coalitions
|
|
30
|
+
Sapor::Hungary.instance.coalitions
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'returns Fidesz–KDNP as a coalition to track' do
|
|
34
|
+
expect(hungarian_coalitions).to include(['Fidesz–KDNP'])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'returns DK + Együtt + MLP + MSZP + PM as a coalition to track' do
|
|
38
|
+
expect(hungarian_coalitions).to include(%w(DK Együtt MLP MSZP Párbeszéd))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe Sapor::Hungary, '#individual_constituencies_seats' do
|
|
43
|
+
it 'calculates the number of seats in the individual constituencies for ' \
|
|
44
|
+
'the election of 2014 correctly' do
|
|
45
|
+
hungary = Sapor::Hungary.instance
|
|
46
|
+
results = hungary \
|
|
47
|
+
.overall_individual_constituencies_election_results_of_2014.dup
|
|
48
|
+
results['MSZP'] = results['MSZP'] * 5
|
|
49
|
+
results['DK'] = 1
|
|
50
|
+
results['Együtt'] = 1
|
|
51
|
+
results['MLP'] = 1
|
|
52
|
+
results['Párbeszéd'] = 1
|
|
53
|
+
seats = hungary.individual_constituencies_seats(results)
|
|
54
|
+
expect(seats['Fidesz–KDNP']).to eq(87 + 9)
|
|
55
|
+
expect(seats['MSZP']).to eq(8 + 1 + 1 + 0 + 0)
|
|
56
|
+
expect(seats['Jobbik']).to eq(0)
|
|
57
|
+
expect(seats['LMP']).to eq(0)
|
|
58
|
+
expect(seats['Munkáspárt']).to eq(0)
|
|
59
|
+
expect(seats['ZÖP']).to eq(0)
|
|
60
|
+
expect(seats['Szociáldemokraták']).to eq(0)
|
|
61
|
+
expect(seats['ÖP']).to eq(0)
|
|
62
|
+
expect(seats['ÚDP']).to eq(0)
|
|
63
|
+
expect(seats['ÚMP']).to eq(0)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe Sapor::Hungary, '#no_of_seats' do
|
|
68
|
+
it 'returns 199 as the number of seats' do
|
|
69
|
+
expect(Sapor::Hungary.instance.no_of_seats).to eq(199)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe Sapor::Hungary, '#party_list_seats' do
|
|
74
|
+
it 'calculates the number of seats for the party lists for the election of ' \
|
|
75
|
+
'2014 correctly' do
|
|
76
|
+
hungary = Sapor::Hungary.instance
|
|
77
|
+
results = { 'Fidesz–KDNP' => 2_264_780, 'MSZP' => 1_290_806, 'DK' => 0,
|
|
78
|
+
'Együtt' => 0, 'MLP' => 0, 'Párbeszéd' => 0,
|
|
79
|
+
'Jobbik' => 1_020_476, 'LMP' => 269_414, 'Munkáspárt' => 28_323,
|
|
80
|
+
'ZÖP' => 18_557, 'Szociáldemokraták' => 15_073, 'ÖP' => 6_552,
|
|
81
|
+
'ÚDP' => 2_100, 'ÚMP' => 1_578,
|
|
82
|
+
'Other' => 23_507 + 22_219 + 14_085 + 12_563 + 10_969 + \
|
|
83
|
+
9_925 + 8_810 + 8_083 + 19_543 }
|
|
84
|
+
seats = hungary.party_list_seats(results)
|
|
85
|
+
expect(seats['Fidesz–KDNP']).to eq(44) # Was: 30 + 7
|
|
86
|
+
expect(seats['MSZP']).to eq(25) # Was: 21 + 2 + 3 + 1 + 1
|
|
87
|
+
expect(seats['Jobbik']).to eq(19) # Was: 23
|
|
88
|
+
expect(seats['LMP']).to eq(5)
|
|
89
|
+
expect(seats['Munkáspárt']).to eq(0)
|
|
90
|
+
expect(seats['ZÖP']).to eq(0)
|
|
91
|
+
expect(seats['Szociáldemokraták']).to eq(0)
|
|
92
|
+
expect(seats['ÖP']).to eq(0)
|
|
93
|
+
expect(seats['ÚDP']).to eq(0)
|
|
94
|
+
expect(seats['ÚMP']).to eq(0)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe Sapor::Hungary, '#population_size' do
|
|
99
|
+
it 'returns a population size of 5,047,363' do
|
|
100
|
+
expect(Sapor::Hungary.instance.population_size).to eq(5_047_363)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe Sapor::Hungary, '#seats' do
|
|
105
|
+
it 'calculates the number of seats for the election of 2014 correctly' do
|
|
106
|
+
hungary = Sapor::Hungary.instance
|
|
107
|
+
results = hungary \
|
|
108
|
+
.overall_individual_constituencies_election_results_of_2014.dup
|
|
109
|
+
results['MSZP'] = results['MSZP'] * 5
|
|
110
|
+
results['DK'] = 1
|
|
111
|
+
results['Együtt'] = 1
|
|
112
|
+
results['MLP'] = 1
|
|
113
|
+
results['PM'] = 1
|
|
114
|
+
seats = hungary.seats(results)
|
|
115
|
+
expect(seats['Fidesz–KDNP']).to eq(141)
|
|
116
|
+
expect(seats['MSZP']).to eq(37)
|
|
117
|
+
expect(seats['Jobbik']).to eq(21)
|
|
118
|
+
expect(seats['LMP']).to eq(0)
|
|
119
|
+
expect(seats['Munkáspárt']).to eq(0)
|
|
120
|
+
expect(seats['ZÖP']).to eq(0)
|
|
121
|
+
expect(seats['Szociáldemokraták']).to eq(0)
|
|
122
|
+
expect(seats['ÖP']).to eq(0)
|
|
123
|
+
expect(seats['ÚDP']).to eq(0)
|
|
124
|
+
expect(seats['ÚMP']).to eq(0)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
describe Sapor::Hungary, '#threshold' do
|
|
129
|
+
it 'returns a threshold of 5%' do
|
|
130
|
+
expect(Sapor::Hungary.instance.threshold).to eq(0.05)
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
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::Iceland, '#area_code' do
|
|
23
|
+
it 'returns IS as the area code' do
|
|
24
|
+
expect(Sapor::Iceland.instance.area_code).to eq('IS')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe Sapor::Iceland, '#no_of_seats' do
|
|
29
|
+
it 'returns 63 as the number of seats' do
|
|
30
|
+
expect(Sapor::Iceland.instance.no_of_seats).to eq(63)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe Sapor::Iceland, '#population_size' do
|
|
35
|
+
it 'returns a population size of 195,204' do
|
|
36
|
+
expect(Sapor::Iceland.instance.population_size).to eq(196_246)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe Sapor::Iceland, '#seats' do
|
|
41
|
+
it 'calculates the number of seats for the election of 2017 correctly' do
|
|
42
|
+
iceland = Sapor::Iceland.instance
|
|
43
|
+
results = iceland.overall_election_results_of_2017
|
|
44
|
+
seats = iceland.seats(results)
|
|
45
|
+
expect(seats['Sjálfstæðisflokkurinn']).to eq(16)
|
|
46
|
+
expect(seats['Vinstrihreyfingin – grænt framboð']).to eq(11)
|
|
47
|
+
expect(seats['Framsóknarflokkurinn']).to eq(8)
|
|
48
|
+
expect(seats['Samfylkingin']).to eq(7)
|
|
49
|
+
expect(seats['Miðflokkurinn']).to eq(7)
|
|
50
|
+
expect(seats['Píratar']).to eq(6)
|
|
51
|
+
expect(seats['Flokkur fólksins']).to eq(4)
|
|
52
|
+
expect(seats['Viðreisn']).to eq(4)
|
|
53
|
+
expect(seats['Björt framtíð']).to eq(0)
|
|
54
|
+
expect(seats['Dögun']).to eq(0)
|
|
55
|
+
expect(seats['Alþýðufylkingin']).to eq(0)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
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 = { 'Yellow' => 47_000, 'White' => 16_000,
|
|
23
|
+
'Red' => 15_800, 'Green' => 12_000, 'Blue' => 6_100,
|
|
24
|
+
'Pink' => 3_100 }.freeze
|
|
25
|
+
|
|
26
|
+
ALABAMA_PARADOX_ELECTION_RESULT = { 'Yellow' => 1500, 'White' => 1500,
|
|
27
|
+
'Red' => 900, 'Green' => 500, 'Blue' => 500,
|
|
28
|
+
'Pink' => 200 }.freeze
|
|
29
|
+
|
|
30
|
+
NO_OF_SEATS = 10
|
|
31
|
+
|
|
32
|
+
HARE_QUOTA = Sapor::LargestRemainder.new(NO_OF_SEATS, Sapor::HareQuota)
|
|
33
|
+
DROOP_QUOTA = Sapor::LargestRemainder.new(NO_OF_SEATS, Sapor::DroopQuota)
|
|
34
|
+
|
|
35
|
+
describe Sapor::LargestRemainder, '#project' do
|
|
36
|
+
it 'produces the correct result for the Hare quota' do
|
|
37
|
+
projection = HARE_QUOTA.project(SAMPLE_ELECTION_RESULT)
|
|
38
|
+
expect(projection['Yellow']).to eq(5)
|
|
39
|
+
expect(projection['White']).to eq(2)
|
|
40
|
+
expect(projection['Red']).to eq(1)
|
|
41
|
+
expect(projection['Green']).to eq(1)
|
|
42
|
+
expect(projection['Blue']).to eq(1)
|
|
43
|
+
expect(projection['Pink']).to eq(0)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'produces the correct result for the 25 seat Alabama paradox for the ' \
|
|
47
|
+
'Hare quota' do
|
|
48
|
+
alabama25 = Sapor::LargestRemainder.new(25, Sapor::HareQuota)
|
|
49
|
+
projection = alabama25.project(ALABAMA_PARADOX_ELECTION_RESULT)
|
|
50
|
+
expect(projection['Yellow']).to eq(7)
|
|
51
|
+
expect(projection['White']).to eq(7)
|
|
52
|
+
expect(projection['Red']).to eq(4)
|
|
53
|
+
expect(projection['Green']).to eq(3)
|
|
54
|
+
expect(projection['Blue']).to eq(3)
|
|
55
|
+
expect(projection['Pink']).to eq(1)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'produces the correct result for the 26 seat Alabama paradox for the ' \
|
|
59
|
+
'Hare quota' do
|
|
60
|
+
alabama26 = Sapor::LargestRemainder.new(26, Sapor::HareQuota)
|
|
61
|
+
projection = alabama26.project(ALABAMA_PARADOX_ELECTION_RESULT)
|
|
62
|
+
expect(projection['Yellow']).to eq(8)
|
|
63
|
+
expect(projection['White']).to eq(8)
|
|
64
|
+
expect(projection['Red']).to eq(5)
|
|
65
|
+
expect(projection['Green']).to eq(2)
|
|
66
|
+
expect(projection['Blue']).to eq(2)
|
|
67
|
+
expect(projection['Pink']).to eq(1)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'produces the correct result for the Droop quota' do
|
|
71
|
+
projection = DROOP_QUOTA.project(SAMPLE_ELECTION_RESULT)
|
|
72
|
+
expect(projection['Yellow']).to eq(5)
|
|
73
|
+
expect(projection['White']).to eq(2)
|
|
74
|
+
expect(projection['Red']).to eq(2)
|
|
75
|
+
expect(projection['Green']).to eq(1)
|
|
76
|
+
expect(projection['Blue']).to eq(0)
|
|
77
|
+
expect(projection['Pink']).to eq(0)
|
|
78
|
+
end
|
|
79
|
+
end
|