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.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/Area Class Diagram.dia +0 -0
  3. data/Area Class Diagram.png +0 -0
  4. data/Class Diagram.dia +0 -0
  5. data/Class Diagram.png +0 -0
  6. data/Example-Catalonia.md +361 -0
  7. data/Example-Flanders.md +486 -0
  8. data/Example-Greece.md +25 -0
  9. data/Example-Oslo.md +678 -0
  10. data/Example-UnitedKingdom-Referendum.md +132 -0
  11. data/Examples.md +15 -0
  12. data/LICENSE +674 -0
  13. data/README.md +103 -0
  14. data/Rakefile +18 -0
  15. data/Technical Documentation.md +14 -0
  16. data/bin/create_installation_package.sh +49 -0
  17. data/bin/install.sh +45 -0
  18. data/bin/sapor.rb +24 -0
  19. data/bin/sapor.sh +106 -0
  20. data/data/hu/hungary-2014.txt +1680 -0
  21. data/data/hu/hungary_2014_screen_scraper.rb +48 -0
  22. data/data/hu/hungary_2014_to_psv.rb +80 -0
  23. data/data/hu/index-2014.txt +106 -0
  24. data/data/pl/2015-gl-lis-okr.csv +42 -0
  25. data/data/pl/poland_2015_to_psv.rb +79 -0
  26. data/data/pl/poland_2015_to_psv_with_ko_and_rsw.rb +94 -0
  27. data/data/pl/poland_2015_to_psv_with_ko_konf_kp_l_and_zp.rb +100 -0
  28. data/data/pl/poland_2015_to_psv_with_ko_sld_and_wi.rb +92 -0
  29. data/data/pl/poland_2015_to_psv_with_sld.rb +84 -0
  30. data/data/pl/poland_2015_to_psv_with_sld_and_wi.rb +85 -0
  31. data/data/uk/inject_ukip_2015_as_brexit_2019_in_2017.rb +54 -0
  32. data/data/uk/united_kingdom_2015.txt +651 -0
  33. data/data/uk/united_kingdom_2015_to_psv.rb +104 -0
  34. data/data/uk/united_kingdom_2017.txt +651 -0
  35. data/data/uk/united_kingdom_2017_to_psv.rb +104 -0
  36. data/data/uk/united_kingdom_2017_to_psv_with_brexit_and_chuk.rb +113 -0
  37. data/data/uk/united_kingdom_2017_to_psv_with_tig.rb +111 -0
  38. data/lib/sapor.rb +150 -0
  39. data/lib/sapor/binomials_cache.rb +45 -0
  40. data/lib/sapor/combinations_distribution.rb +222 -0
  41. data/lib/sapor/denominators.rb +67 -0
  42. data/lib/sapor/dichotomies.rb +138 -0
  43. data/lib/sapor/dichotomy.rb +164 -0
  44. data/lib/sapor/first_past_the_post.rb +82 -0
  45. data/lib/sapor/largest_remainder.rb +118 -0
  46. data/lib/sapor/log4r_logger.rb +49 -0
  47. data/lib/sapor/log_facade.rb +40 -0
  48. data/lib/sapor/multi_district_leveled_proportional.rb +64 -0
  49. data/lib/sapor/multi_district_proportional.rb +123 -0
  50. data/lib/sapor/multi_district_variable_threshold_proportional.rb +128 -0
  51. data/lib/sapor/number_formatter.rb +45 -0
  52. data/lib/sapor/options.rb +73 -0
  53. data/lib/sapor/poll.rb +286 -0
  54. data/lib/sapor/polychotomy.rb +200 -0
  55. data/lib/sapor/pseudorandom_multirange_enumerator.rb +87 -0
  56. data/lib/sapor/referendum_polychotomy.rb +165 -0
  57. data/lib/sapor/regional_data/area.rb +82 -0
  58. data/lib/sapor/regional_data/austria.rb +84 -0
  59. data/lib/sapor/regional_data/belgium-brussels-2014.psv +46 -0
  60. data/lib/sapor/regional_data/belgium-brussels-20190526.psv +33 -0
  61. data/lib/sapor/regional_data/belgium-flanders-2014.psv +80 -0
  62. data/lib/sapor/regional_data/belgium-flanders-20190526.psv +74 -0
  63. data/lib/sapor/regional_data/belgium-wallonia-2014.psv +114 -0
  64. data/lib/sapor/regional_data/belgium-wallonia-20190526.psv +93 -0
  65. data/lib/sapor/regional_data/belgium.rb +97 -0
  66. data/lib/sapor/regional_data/belgium_brussels.rb +62 -0
  67. data/lib/sapor/regional_data/belgium_flanders.rb +64 -0
  68. data/lib/sapor/regional_data/belgium_wallonia.rb +63 -0
  69. data/lib/sapor/regional_data/catalonia-2012-2015.psv +100 -0
  70. data/lib/sapor/regional_data/catalonia-2012.psv +87 -0
  71. data/lib/sapor/regional_data/catalonia-2015-jxcat.psv +68 -0
  72. data/lib/sapor/regional_data/catalonia-2015-no-jxsi.psv +68 -0
  73. data/lib/sapor/regional_data/catalonia-2015.psv +63 -0
  74. data/lib/sapor/regional_data/catalonia-jxcat.rb +109 -0
  75. data/lib/sapor/regional_data/catalonia-no-jxsi.rb +96 -0
  76. data/lib/sapor/regional_data/catalonia.rb +96 -0
  77. data/lib/sapor/regional_data/denmark-20150618-with-e-and-p.psv +164 -0
  78. data/lib/sapor/regional_data/denmark-20150618-with-e.psv +153 -0
  79. data/lib/sapor/regional_data/denmark-20150618-with-p.psv +153 -0
  80. data/lib/sapor/regional_data/denmark-20150618.psv +142 -0
  81. data/lib/sapor/regional_data/denmark.rb +128 -0
  82. data/lib/sapor/regional_data/denmark_with_e.rb +128 -0
  83. data/lib/sapor/regional_data/denmark_with_e_and_p.rb +128 -0
  84. data/lib/sapor/regional_data/denmark_with_p.rb +128 -0
  85. data/lib/sapor/regional_data/estonia.rb +88 -0
  86. data/lib/sapor/regional_data/european-union-great-britain-20140522-brexit-chuk.psv +172 -0
  87. data/lib/sapor/regional_data/european-union-great-britain-20140522.psv +146 -0
  88. data/lib/sapor/regional_data/european-union-great-britain-20190523.psv +141 -0
  89. data/lib/sapor/regional_data/european-union-ireland-2014-ia-ri-sd.psv +64 -0
  90. data/lib/sapor/regional_data/european-union-ireland-2014-ia-sd.psv +60 -0
  91. data/lib/sapor/regional_data/european-union-ireland-2014-ia.psv +56 -0
  92. data/lib/sapor/regional_data/european-union-ireland-2014-sd.psv +56 -0
  93. data/lib/sapor/regional_data/european-union-ireland-2014.psv +50 -0
  94. data/lib/sapor/regional_data/european-union-ireland-20190524-ia.psv +58 -0
  95. data/lib/sapor/regional_data/european-union-ireland-20190524.psv +52 -0
  96. data/lib/sapor/regional_data/european_union_27_austria.rb +76 -0
  97. data/lib/sapor/regional_data/european_union_27_croatia.rb +81 -0
  98. data/lib/sapor/regional_data/european_union_27_denmark.rb +77 -0
  99. data/lib/sapor/regional_data/european_union_27_estonia.rb +74 -0
  100. data/lib/sapor/regional_data/european_union_27_finland.rb +74 -0
  101. data/lib/sapor/regional_data/european_union_27_ireland.rb +96 -0
  102. data/lib/sapor/regional_data/european_union_27_ireland_with_ia.rb +97 -0
  103. data/lib/sapor/regional_data/european_union_27_italy.rb +84 -0
  104. data/lib/sapor/regional_data/european_union_27_netherlands.rb +81 -0
  105. data/lib/sapor/regional_data/european_union_27_poland.rb +84 -0
  106. data/lib/sapor/regional_data/european_union_27_romania.rb +78 -0
  107. data/lib/sapor/regional_data/european_union_27_slovakia.rb +80 -0
  108. data/lib/sapor/regional_data/european_union_27_spain.rb +82 -0
  109. data/lib/sapor/regional_data/european_union_27_sweden.rb +76 -0
  110. data/lib/sapor/regional_data/european_union_austria.rb +76 -0
  111. data/lib/sapor/regional_data/european_union_bulgaria.rb +82 -0
  112. data/lib/sapor/regional_data/european_union_croatia.rb +81 -0
  113. data/lib/sapor/regional_data/european_union_cyprus.rb +72 -0
  114. data/lib/sapor/regional_data/european_union_czech_republic.rb +82 -0
  115. data/lib/sapor/regional_data/european_union_denmark.rb +77 -0
  116. data/lib/sapor/regional_data/european_union_estonia.rb +74 -0
  117. data/lib/sapor/regional_data/european_union_finland.rb +74 -0
  118. data/lib/sapor/regional_data/european_union_flanders.rb +74 -0
  119. data/lib/sapor/regional_data/european_union_france.rb +84 -0
  120. data/lib/sapor/regional_data/european_union_france_2019.rb +84 -0
  121. data/lib/sapor/regional_data/european_union_french_community_of_belgium.rb +73 -0
  122. data/lib/sapor/regional_data/european_union_germany.rb +86 -0
  123. data/lib/sapor/regional_data/european_union_great_britain.rb +98 -0
  124. data/lib/sapor/regional_data/european_union_greece.rb +77 -0
  125. data/lib/sapor/regional_data/european_union_hungary.rb +76 -0
  126. data/lib/sapor/regional_data/european_union_ireland.rb +96 -0
  127. data/lib/sapor/regional_data/european_union_ireland_with_ia.rb +97 -0
  128. data/lib/sapor/regional_data/european_union_italy.rb +84 -0
  129. data/lib/sapor/regional_data/european_union_latvia.rb +81 -0
  130. data/lib/sapor/regional_data/european_union_lithuania.rb +80 -0
  131. data/lib/sapor/regional_data/european_union_luxembourg.rb +75 -0
  132. data/lib/sapor/regional_data/european_union_malta.rb +71 -0
  133. data/lib/sapor/regional_data/european_union_netherlands.rb +81 -0
  134. data/lib/sapor/regional_data/european_union_northern_ireland.rb +75 -0
  135. data/lib/sapor/regional_data/european_union_poland.rb +84 -0
  136. data/lib/sapor/regional_data/european_union_portugal.rb +75 -0
  137. data/lib/sapor/regional_data/european_union_romania.rb +78 -0
  138. data/lib/sapor/regional_data/european_union_slovakia.rb +81 -0
  139. data/lib/sapor/regional_data/european_union_slovenia.rb +85 -0
  140. data/lib/sapor/regional_data/european_union_spain.rb +82 -0
  141. data/lib/sapor/regional_data/european_union_sweden.rb +76 -0
  142. data/lib/sapor/regional_data/finland-20150419-with-sin.psv +224 -0
  143. data/lib/sapor/regional_data/finland-20150419.psv +212 -0
  144. data/lib/sapor/regional_data/finland.rb +107 -0
  145. data/lib/sapor/regional_data/finland_with_sin.rb +107 -0
  146. data/lib/sapor/regional_data/flanders-2014.psv +96 -0
  147. data/lib/sapor/regional_data/flanders-20190526.psv +87 -0
  148. data/lib/sapor/regional_data/flanders.rb +115 -0
  149. data/lib/sapor/regional_data/france.rb +38 -0
  150. data/lib/sapor/regional_data/greece.rb +92 -0
  151. data/lib/sapor/regional_data/hungary-2014.psv +2104 -0
  152. data/lib/sapor/regional_data/hungary.rb +116 -0
  153. data/lib/sapor/regional_data/iceland-20161029-midflokkurinn.psv +94 -0
  154. data/lib/sapor/regional_data/iceland-20161029.psv +88 -0
  155. data/lib/sapor/regional_data/iceland-20171028.psv +85 -0
  156. data/lib/sapor/regional_data/iceland.rb +133 -0
  157. data/lib/sapor/regional_data/latvia-20141004-kpv-p-par.psv +109 -0
  158. data/lib/sapor/regional_data/latvia-20141004-kpv-par.psv +103 -0
  159. data/lib/sapor/regional_data/latvia-20141004-kpv.psv +97 -0
  160. data/lib/sapor/regional_data/latvia-20141004.psv +89 -0
  161. data/lib/sapor/regional_data/latvia.rb +112 -0
  162. data/lib/sapor/regional_data/latvia_kpv.rb +112 -0
  163. data/lib/sapor/regional_data/latvia_kpv_p_par.rb +112 -0
  164. data/lib/sapor/regional_data/latvia_kpv_par.rb +112 -0
  165. data/lib/sapor/regional_data/luxembourg-20131020.psv +76 -0
  166. data/lib/sapor/regional_data/luxembourg.rb +82 -0
  167. data/lib/sapor/regional_data/netherlands.rb +108 -0
  168. data/lib/sapor/regional_data/norway.rb +425 -0
  169. data/lib/sapor/regional_data/norwegian_municipality.rb +68 -0
  170. data/lib/sapor/regional_data/poland-20151025-with-ko-and-l-without-n-po-r-and-zl.psv +321 -0
  171. 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
  172. data/lib/sapor/regional_data/poland-20151025-with-ko-sld-and-wi-without-n-po-and-zl.psv +403 -0
  173. data/lib/sapor/regional_data/poland-20151025-with-sld-and-wi-without-zl.psv +444 -0
  174. data/lib/sapor/regional_data/poland-20151025-with-sld-without-zl.psv +403 -0
  175. data/lib/sapor/regional_data/poland-20151025.psv +403 -0
  176. data/lib/sapor/regional_data/poland.rb +125 -0
  177. data/lib/sapor/regional_data/poland_with_ko_and_l_without_n_po_r_and_zl.rb +122 -0
  178. 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
  179. data/lib/sapor/regional_data/poland_with_ko_sld_and_wi_without_n_po_and_zl.rb +125 -0
  180. data/lib/sapor/regional_data/poland_with_sld_and_wi_without_zl.rb +126 -0
  181. data/lib/sapor/regional_data/poland_with_sld_without_zl.rb +126 -0
  182. data/lib/sapor/regional_data/portugal-20151004-with-a-and-ch-without-paf.psv +438 -0
  183. data/lib/sapor/regional_data/portugal-20151004-with-a-and-il-without-paf.psv +438 -0
  184. data/lib/sapor/regional_data/portugal-20151004-with-a-ch-and-il-without-paf.psv +461 -0
  185. data/lib/sapor/regional_data/portugal-20151004-with-a-without-paf.psv +415 -0
  186. data/lib/sapor/regional_data/portugal-20151004-with-ch-and-il-without-paf.psv +438 -0
  187. data/lib/sapor/regional_data/portugal-20151004-without-paf.psv +392 -0
  188. data/lib/sapor/regional_data/portugal-20151004.psv +370 -0
  189. data/lib/sapor/regional_data/portugal.rb +101 -0
  190. data/lib/sapor/regional_data/portugal_with_a_and_ch_without_paf.rb +92 -0
  191. data/lib/sapor/regional_data/portugal_with_a_and_il_without_paf.rb +92 -0
  192. data/lib/sapor/regional_data/portugal_with_a_ch_and_il_without_paf.rb +92 -0
  193. data/lib/sapor/regional_data/portugal_with_a_without_paf.rb +92 -0
  194. data/lib/sapor/regional_data/portugal_with_ch_and_il_without_paf.rb +92 -0
  195. data/lib/sapor/regional_data/portugal_without_paf.rb +92 -0
  196. data/lib/sapor/regional_data/slovakia.rb +81 -0
  197. data/lib/sapor/regional_data/slovenia.rb +114 -0
  198. data/lib/sapor/regional_data/spain-20160626.psv +619 -0
  199. data/lib/sapor/regional_data/spain.rb +136 -0
  200. data/lib/sapor/regional_data/sweden.rb +92 -0
  201. data/lib/sapor/regional_data/sweden_20140914.rb +89 -0
  202. data/lib/sapor/regional_data/united_kingdom-2015.psv +4358 -0
  203. data/lib/sapor/regional_data/united_kingdom-20170608-brexit-chuk.psv +5154 -0
  204. data/lib/sapor/regional_data/united_kingdom-20170608-brexit.psv +4521 -0
  205. data/lib/sapor/regional_data/united_kingdom-20170608-tig.psv +4529 -0
  206. data/lib/sapor/regional_data/united_kingdom-20170608.psv +3894 -0
  207. data/lib/sapor/regional_data/united_kingdom.rb +94 -0
  208. data/lib/sapor/regional_data/united_kingdom_with_brexit.rb +110 -0
  209. data/lib/sapor/regional_data/united_kingdom_with_brexit_and_chuk.rb +111 -0
  210. data/lib/sapor/regional_data/united_kingdom_with_tig.rb +111 -0
  211. data/lib/sapor/regional_data/utopia.rb +66 -0
  212. data/lib/sapor/regional_data/wallonia-2014.psv +101 -0
  213. data/lib/sapor/regional_data/wallonia-20190526.psv +88 -0
  214. data/lib/sapor/regional_data/wallonia.rb +112 -0
  215. data/lib/sapor/representatives_polychotomy.rb +338 -0
  216. data/lib/sapor/single_district_proportional.rb +75 -0
  217. data/sapor.gemspec +35 -0
  218. data/spec/integration/area_spec.rb +28 -0
  219. data/spec/integration/poll_spec.rb +112 -0
  220. data/spec/integration/sample.poll +8 -0
  221. data/spec/spec_helper.rb +31 -0
  222. data/spec/unit/area_spec.rb +115 -0
  223. data/spec/unit/austria_spec.rb +76 -0
  224. data/spec/unit/belgium_brussels_spec.rb +58 -0
  225. data/spec/unit/belgium_flanders_spec.rb +62 -0
  226. data/spec/unit/belgium_spec.rb +26 -0
  227. data/spec/unit/belgium_wallonia_spec.rb +65 -0
  228. data/spec/unit/binomials_cache_spec.rb +34 -0
  229. data/spec/unit/catalonia_spec.rb +74 -0
  230. data/spec/unit/combinations_distribution_spec.rb +241 -0
  231. data/spec/unit/denmark_spec.rb +56 -0
  232. data/spec/unit/denmark_with_e_and_p_spec.rb +58 -0
  233. data/spec/unit/denmark_with_e_spec.rb +57 -0
  234. data/spec/unit/denmark_with_p_spec.rb +57 -0
  235. data/spec/unit/denominators_spec.rb +40 -0
  236. data/spec/unit/dichotomies_spec.rb +154 -0
  237. data/spec/unit/dichotomy_spec.rb +320 -0
  238. data/spec/unit/estonia_spec.rb +65 -0
  239. data/spec/unit/european_union_27_austria_spec.rb +61 -0
  240. data/spec/unit/european_union_27_croatia_spec.rb +60 -0
  241. data/spec/unit/european_union_27_denmark_spec.rb +62 -0
  242. data/spec/unit/european_union_27_estonia_spec.rb +94 -0
  243. data/spec/unit/european_union_27_finland_spec.rb +75 -0
  244. data/spec/unit/european_union_27_ireland_spec.rb +72 -0
  245. data/spec/unit/european_union_27_ireland_with_ia_spec.rb +74 -0
  246. data/spec/unit/european_union_27_italy_spec.rb +69 -0
  247. data/spec/unit/european_union_27_netherlands_spec.rb +81 -0
  248. data/spec/unit/european_union_27_poland_spec.rb +69 -0
  249. data/spec/unit/european_union_27_romania_spec.rb +67 -0
  250. data/spec/unit/european_union_27_slovakia_spec.rb +111 -0
  251. data/spec/unit/european_union_27_spain_spec.rb +130 -0
  252. data/spec/unit/european_union_27_sweden_spec.rb +89 -0
  253. data/spec/unit/european_union_austria_spec.rb +61 -0
  254. data/spec/unit/european_union_bulgaria_spec.rb +97 -0
  255. data/spec/unit/european_union_croatia_spec.rb +59 -0
  256. data/spec/unit/european_union_cyprus_spec.rb +65 -0
  257. data/spec/unit/european_union_czech_republic_spec.rb +125 -0
  258. data/spec/unit/european_union_denmark_spec.rb +61 -0
  259. data/spec/unit/european_union_estonia_spec.rb +93 -0
  260. data/spec/unit/european_union_finland_spec.rb +75 -0
  261. data/spec/unit/european_union_flanders_spec.rb +56 -0
  262. data/spec/unit/european_union_france_2019_spec.rb +73 -0
  263. data/spec/unit/european_union_france_spec.rb +73 -0
  264. data/spec/unit/european_union_french_community_of_belgium_spec.rb +61 -0
  265. data/spec/unit/european_union_germany_spec.rb +90 -0
  266. data/spec/unit/european_union_great_britain_spec.rb +87 -0
  267. data/spec/unit/european_union_greece_spec.rb +148 -0
  268. data/spec/unit/european_union_hungary_spec.rb +57 -0
  269. data/spec/unit/european_union_ireland_spec.rb +72 -0
  270. data/spec/unit/european_union_ireland_with_ia_spec.rb +74 -0
  271. data/spec/unit/european_union_italy_spec.rb +69 -0
  272. data/spec/unit/european_union_latvia_spec.rb +76 -0
  273. data/spec/unit/european_union_lithuania_spec.rb +68 -0
  274. data/spec/unit/european_union_luxembourg_spec.rb +63 -0
  275. data/spec/unit/european_union_malta_spec.rb +60 -0
  276. data/spec/unit/european_union_netherlands_spec.rb +81 -0
  277. data/spec/unit/european_union_northern_ireland_spec.rb +66 -0
  278. data/spec/unit/european_union_poland_spec.rb +69 -0
  279. data/spec/unit/european_union_portugal_spec.rb +77 -0
  280. data/spec/unit/european_union_romania_spec.rb +67 -0
  281. data/spec/unit/european_union_slovakia_spec.rb +111 -0
  282. data/spec/unit/european_union_slovenia_spec.rb +77 -0
  283. data/spec/unit/european_union_spain_spec.rb +129 -0
  284. data/spec/unit/european_union_sweden_spec.rb +89 -0
  285. data/spec/unit/finland_spec.rb +65 -0
  286. data/spec/unit/finland_with_sin_spec.rb +67 -0
  287. data/spec/unit/first_past_the_post_spec.rb +54 -0
  288. data/spec/unit/flanders_spec.rb +70 -0
  289. data/spec/unit/france_spec.rb +32 -0
  290. data/spec/unit/greece_spec.rb +118 -0
  291. data/spec/unit/hungary_spec.rb +132 -0
  292. data/spec/unit/iceland_spec.rb +57 -0
  293. data/spec/unit/largest_remainder_spec.rb +79 -0
  294. data/spec/unit/latvia_kpv_p_par_spec.rb +38 -0
  295. data/spec/unit/latvia_kpv_par_spec.rb +38 -0
  296. data/spec/unit/latvia_kpv_spec.rb +38 -0
  297. data/spec/unit/latvia_spec.rb +60 -0
  298. data/spec/unit/luxembourg_spec.rb +54 -0
  299. data/spec/unit/multi_district_leveled_proportional_spec.rb +49 -0
  300. data/spec/unit/multi_district_proportional_spec.rb +81 -0
  301. data/spec/unit/netherlands_spec.rb +107 -0
  302. data/spec/unit/norway_spec.rb +64 -0
  303. data/spec/unit/norwegian_municipality_spec.rb +89 -0
  304. data/spec/unit/number_formatter_spec.rb +173 -0
  305. data/spec/unit/poland_spec.rb +62 -0
  306. data/spec/unit/poland_with_ko_and_l_without_n_po_r_and_zl_spec.rb +60 -0
  307. 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
  308. data/spec/unit/poland_with_ko_sld_and_wi_without_n_po_and_zl_spec.rb +62 -0
  309. data/spec/unit/poland_with_sld_and_wi_without_zl_spec.rb +63 -0
  310. data/spec/unit/poland_with_sld_without_zl_spec.rb +62 -0
  311. data/spec/unit/poll_spec.rb +110 -0
  312. data/spec/unit/portugal_spec.rb +66 -0
  313. data/spec/unit/portugal_with_a_and_ch_without_paf_spec.rb +68 -0
  314. data/spec/unit/portugal_with_a_and_il_without_paf_spec.rb +68 -0
  315. data/spec/unit/portugal_with_a_ch_and_il_without_paf_spec.rb +69 -0
  316. data/spec/unit/portugal_with_a_without_paf_spec.rb +67 -0
  317. data/spec/unit/portugal_with_ch_and_il_without_paf_spec.rb +68 -0
  318. data/spec/unit/portugal_without_paf_spec.rb +66 -0
  319. data/spec/unit/pseudorandom_multirange_enumerator_spec.rb +82 -0
  320. data/spec/unit/referendum_polychotomy_spec.rb +289 -0
  321. data/spec/unit/representatives_polychotomy_spec.rb +332 -0
  322. data/spec/unit/slovakia_spec.rb +99 -0
  323. data/spec/unit/slovenia_spec.rb +80 -0
  324. data/spec/unit/spain_spec.rb +101 -0
  325. data/spec/unit/sweden_20140914_spec.rb +112 -0
  326. data/spec/unit/sweden_spec.rb +113 -0
  327. data/spec/unit/united_kingdom_spec.rb +65 -0
  328. data/spec/unit/united_kingdom_with_brexit_and_chuk_spec.rb +67 -0
  329. data/spec/unit/united_kingdom_with_brexit_spec.rb +66 -0
  330. data/spec/unit/united_kingdom_with_tig_spec.rb +66 -0
  331. data/spec/unit/wallonia_spec.rb +70 -0
  332. metadata +490 -0
@@ -0,0 +1,101 @@
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::Spain, '#area_code' do
23
+ it 'returns ES as the area code' do
24
+ expect(Sapor::Spain.instance.area_code).to eq('ES')
25
+ end
26
+ end
27
+
28
+ describe Sapor::Spain, '#no_of_seats' do
29
+ it 'returns 135 as the number of seats' do
30
+ expect(Sapor::Spain.instance.no_of_seats).to eq(350)
31
+ end
32
+ end
33
+
34
+ describe Sapor::Spain, '#population_size' do
35
+ it 'returns a population size of 24,053,755' do
36
+ expect(Sapor::Spain.instance.population_size).to eq(24_053_755)
37
+ end
38
+ end
39
+
40
+ describe Sapor::Spain, '#seats' do
41
+ it 'calculates the number of seats for the election of 2016 correctly' do
42
+ Spain = Sapor::Spain.instance
43
+ results = Spain.overall_election_results_of_2016
44
+ seats = Spain.seats(results)
45
+ expect(seats['Partido Popular']).to eq(137)
46
+ expect(seats['Partido Socialista Obrero Español']).to eq(85)
47
+ expect(seats['Unidos Podemos']).to eq(71)
48
+ expect(seats['Ciudadanos–Partido de la Ciudadanía']).to eq(32)
49
+ expect(seats['Esquerra Republicana de Catalunya–Catalunya Sí']).to eq(9)
50
+ expect(seats['Partit Demòcrata Europeu Català']).to eq(8)
51
+ expect(seats['Euzko Alderdi Jeltzalea/Partido Nacionalista Vasco']).to eq(5)
52
+ expect(seats['Partido Animalista Contra el Maltrato Animal']).to eq(0)
53
+ expect(seats['Euskal Herria Bildu']).to eq(2)
54
+ expect(seats['Coalición Canaria–Partido Nacionalista Canario']).to eq(1)
55
+ expect(seats['Recortes Cero–Grupo Verde']).to eq(0)
56
+ expect(seats['Unión Progreso y Democracia']).to eq(0)
57
+ expect(seats['Vox']).to eq(0)
58
+ expect(seats['Bloque Nacionalista Galego–Nós Candidatura Galega']).to eq(0)
59
+ expect(seats['Partido Comunista de los Pueblos de España']).to eq(0)
60
+ expect(seats['Geroa Bai']).to eq(0)
61
+ expect(seats['Escaños en Blanco']).to eq(0)
62
+ expect(seats['Falange Española de las JONS']).to eq(0)
63
+ expect(seats['Sobirania per a les Illes']).to eq(0)
64
+ expect(seats['Som Valencians']).to eq(0)
65
+ expect(seats['Ciudadanos de Centro Democrático']).to eq(0)
66
+ expect(seats['Partit Comunista del Poble de Catalunya']).to eq(0)
67
+ expect(seats['Solidaridad y Autogestión Internacionalista']).to eq(0)
68
+ expect(seats['Partido Humanista']).to eq(0)
69
+ expect(seats['Los Verdes Ecopacifistas']).to eq(0)
70
+ expect(seats['Partido Libertario']).to eq(0)
71
+ expect(seats['Ciudadanos de Centro Democrático–Candidatura Independiente']).to eq(0)
72
+ expect(seats['Unión del Pueblo Leonés']).to eq(0)
73
+ expect(seats['Partido Comunista Obrero Español']).to eq(0)
74
+ expect(seats['Partido Somos Andaluces por Andalucía y los Pueblos']).to eq(0)
75
+ expect(seats['Juntos por Canarias']).to eq(0)
76
+ expect(seats['Partido Familia y Vida']).to eq(0)
77
+ expect(seats['Ciudadanos Libres Unidos']).to eq(0)
78
+ expect(seats['Plataforma per Catalunya']).to eq(0)
79
+ expect(seats['Movimiento Aragonés Social']).to eq(0)
80
+ expect(seats['Izquierda Anticapitalista Revolucionaria']).to eq(0)
81
+ expect(seats['Unidad del Pueblo']).to eq(0)
82
+ expect(seats['Partido Regionalista del País Leonés']).to eq(0)
83
+ expect(seats['Libertate Nafarra']).to eq(0)
84
+ expect(seats['Renovació Política']).to eq(0)
85
+ expect(seats['Independientes por Aragón']).to eq(0)
86
+ expect(seats['ENTABAN']).to eq(0)
87
+ expect(seats['Iniciativa Merindades de Castilla']).to eq(0)
88
+ expect(seats['Partido Unionista Estado de España']).to eq(0)
89
+ expect(seats['La Falange']).to eq(0)
90
+ expect(seats['Alianza de Centro Democrático']).to eq(0)
91
+ expect(seats['La Fuerza de los Mayores de España']).to eq(0)
92
+ expect(seats['Hegoalde Rioja–Libertad Navarra']).to eq(0)
93
+ expect(seats['Unión de Todos']).to eq(0)
94
+ end
95
+ end
96
+
97
+ describe Sapor::Spain, '#threshold' do
98
+ it 'returns a threshold of 3%' do
99
+ expect(Sapor::Spain.instance.threshold).to eq(0.03)
100
+ end
101
+ end
@@ -0,0 +1,112 @@
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::Sweden20140914, '#area_code' do
22
+ it 'returns SE@20140914 as the area code' do
23
+ expect(Sapor::Sweden20140914.instance.area_code).to eq('SE@20140914')
24
+ end
25
+ end
26
+
27
+ describe Sapor::Sweden20140914, '#no_of_seats' do
28
+ it 'returns 349 as the number of seats' do
29
+ expect(Sapor::Sweden20140914.instance.no_of_seats).to eq(349)
30
+ end
31
+ end
32
+
33
+ describe Sapor::Sweden20140914, '#population_size' do
34
+ it 'returns a population size of 6,231,573' do
35
+ expect(Sapor::Sweden20140914.instance.population_size).to \
36
+ eq(6_231_573)
37
+ end
38
+ end
39
+
40
+ describe Sapor::Sweden20140914, '#seats' do
41
+ it 'calculates the number of seats for the election of 2014' do
42
+ results = { 'Sveriges socialdemokratiska arbetareparti' => 1_932_711,
43
+ 'Moderata samlingspartiet' => 1_453_517,
44
+ 'Sverigedemokraterna' => 801_178,
45
+ 'Miljöpartiet de gröna' => 429_275,
46
+ 'Centerpartiet' => 380_937,
47
+ 'Vänsterpartiet' => 356_331,
48
+ 'Folkpartiet liberalerna' => 337_773,
49
+ 'Kristdemokraterna' => 284_806,
50
+ 'Feministiskt initiativ' => 194_719,
51
+ 'Piratpartiet' => 26_515,
52
+ 'Enhet' => 6_277,
53
+ 'Svenskarnas parti' => 4_189,
54
+ 'Djurens parti' => 4_093,
55
+ 'Kristna Värdepartiet' => 3_553,
56
+ 'Landsbygdspartiet oberoende' => 3_450,
57
+ 'SPI Välfärden' => 3_369,
58
+ 'Direktdemokraterna' => 1_417,
59
+ 'Klassiskt liberala partiet' => 1_210,
60
+ 'Vägvalet' => 1_037,
61
+ 'Rättvisepartiet Socialisterna' => 791,
62
+ 'Sveriges kommunistiska parti' => 558,
63
+ 'Framstegspartiet' => 196,
64
+ 'Europeiska arbetarpartiet' => 140,
65
+ 'Hälsopartiet' => 131,
66
+ 'Fredsdemokraterna' => 56,
67
+ 'Gula partiet' => 35,
68
+ 'Nya partiet' => 32,
69
+ 'Frihetliga rättvisepartiet' => 32,
70
+ 'Skånepartiet' => 28,
71
+ 'De nya svenskarna' => 18,
72
+ 'Reformist Neutral Partiet' => 11,
73
+ 'Republikanerna' => 9,
74
+ 'Djurägarpartiet' => 3,
75
+ 'Humandemokraterna' => 2 }
76
+ seats = Sapor::Sweden20140914.instance.seats(results)
77
+ expect(seats['Sveriges socialdemokratiska arbetareparti']).to eq(113 - 1)
78
+ expect(seats['Moderata samlingspartiet']).to eq(84 + 1)
79
+ expect(seats['Sverigedemokraterna']).to eq(49 - 2)
80
+ expect(seats['Miljöpartiet de gröna']).to eq(25)
81
+ expect(seats['Centerpartiet']).to eq(22)
82
+ expect(seats['Vänsterpartiet']).to eq(21)
83
+ expect(seats['Folkpartiet liberalerna']).to eq(19 + 1)
84
+ expect(seats['Kristdemokraterna']).to eq(16 + 1)
85
+ expect(seats['Feministiskt initiativ']).to eq(0)
86
+ expect(seats['Piratpartiet']).to eq(0)
87
+ expect(seats['Enhet']).to eq(0)
88
+ expect(seats['Svenskarnas parti']).to eq(0)
89
+ expect(seats['Djurens parti']).to eq(0)
90
+ expect(seats['Kristna Värdepartiet']).to eq(0)
91
+ expect(seats['Landsbygdspartiet oberoende']).to eq(0)
92
+ expect(seats['SPI Välfärden']).to eq(0)
93
+ expect(seats['Direktdemokraterna']).to eq(0)
94
+ expect(seats['Klassiskt liberala partiet']).to eq(0)
95
+ expect(seats['Vägvalet']).to eq(0)
96
+ expect(seats['Rättvisepartiet Socialisterna']).to eq(0)
97
+ expect(seats['Sveriges kommunistiska parti']).to eq(0)
98
+ expect(seats['Framstegspartiet']).to eq(0)
99
+ expect(seats['Europeiska arbetarpartiet']).to eq(0)
100
+ expect(seats['Hälsopartiet']).to eq(0)
101
+ expect(seats['Fredsdemokraterna']).to eq(0)
102
+ expect(seats['Gula partiet']).to eq(0)
103
+ expect(seats['Nya partiet']).to eq(0)
104
+ expect(seats['Frihetliga rättvisepartiet']).to eq(0)
105
+ expect(seats['Skånepartiet']).to eq(0)
106
+ expect(seats['De nya svenskarna']).to eq(0)
107
+ expect(seats['Reformist Neutral Partiet']).to eq(0)
108
+ expect(seats['Republikanerna']).to eq(0)
109
+ expect(seats['Djurägarpartiet']).to eq(0)
110
+ expect(seats['Humandemokraterna']).to eq(0)
111
+ end
112
+ end
@@ -0,0 +1,113 @@
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::Sweden, '#area_code' do
23
+ it 'returns SE as the area code' do
24
+ expect(Sapor::Sweden.instance.area_code).to eq('SE')
25
+ end
26
+ end
27
+
28
+ describe Sapor::Sweden, '#no_of_seats' do
29
+ it 'returns 349 as the number of seats' do
30
+ expect(Sapor::Sweden.instance.no_of_seats).to eq(349)
31
+ end
32
+ end
33
+
34
+ describe Sapor::Sweden, '#population_size' do
35
+ it 'returns a population size of 6,231,573' do
36
+ expect(Sapor::Sweden.instance.population_size).to \
37
+ eq(6_231_573)
38
+ end
39
+ end
40
+
41
+ describe Sapor::Sweden, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Sveriges socialdemokratiska arbetareparti' => 1_932_711,
44
+ 'Moderata samlingspartiet' => 1_453_517,
45
+ 'Sverigedemokraterna' => 801_178,
46
+ 'Miljöpartiet de gröna' => 429_275,
47
+ 'Centerpartiet' => 380_937,
48
+ 'Vänsterpartiet' => 356_331,
49
+ 'Folkpartiet liberalerna' => 337_773,
50
+ 'Kristdemokraterna' => 284_806,
51
+ 'Feministiskt initiativ' => 194_719,
52
+ 'Piratpartiet' => 26_515,
53
+ 'Enhet' => 6_277,
54
+ 'Svenskarnas parti' => 4_189,
55
+ 'Djurens parti' => 4_093,
56
+ 'Kristna Värdepartiet' => 3_553,
57
+ 'Landsbygdspartiet oberoende' => 3_450,
58
+ 'SPI Välfärden' => 3_369,
59
+ 'Direktdemokraterna' => 1_417,
60
+ 'Klassiskt liberala partiet' => 1_210,
61
+ 'Vägvalet' => 1_037,
62
+ 'Rättvisepartiet Socialisterna' => 791,
63
+ 'Sveriges kommunistiska parti' => 558,
64
+ 'Framstegspartiet' => 196,
65
+ 'Europeiska arbetarpartiet' => 140,
66
+ 'Hälsopartiet' => 131,
67
+ 'Fredsdemokraterna' => 56,
68
+ 'Gula partiet' => 35,
69
+ 'Nya partiet' => 32,
70
+ 'Frihetliga rättvisepartiet' => 32,
71
+ 'Skånepartiet' => 28,
72
+ 'De nya svenskarna' => 18,
73
+ 'Reformist Neutral Partiet' => 11,
74
+ 'Republikanerna' => 9,
75
+ 'Djurägarpartiet' => 3,
76
+ 'Humandemokraterna' => 2 }
77
+ seats = Sapor::Sweden.instance.seats(results)
78
+ expect(seats['Sveriges socialdemokratiska arbetareparti']).to eq(113 - 1)
79
+ expect(seats['Moderata samlingspartiet']).to eq(84 + 1)
80
+ expect(seats['Sverigedemokraterna']).to eq(49 - 2)
81
+ expect(seats['Miljöpartiet de gröna']).to eq(25)
82
+ expect(seats['Centerpartiet']).to eq(22)
83
+ expect(seats['Vänsterpartiet']).to eq(21)
84
+ expect(seats['Folkpartiet liberalerna']).to eq(19 + 1)
85
+ expect(seats['Kristdemokraterna']).to eq(16 + 1)
86
+ expect(seats['Feministiskt initiativ']).to eq(0)
87
+ expect(seats['Piratpartiet']).to eq(0)
88
+ expect(seats['Enhet']).to eq(0)
89
+ expect(seats['Svenskarnas parti']).to eq(0)
90
+ expect(seats['Djurens parti']).to eq(0)
91
+ expect(seats['Kristna Värdepartiet']).to eq(0)
92
+ expect(seats['Landsbygdspartiet oberoende']).to eq(0)
93
+ expect(seats['SPI Välfärden']).to eq(0)
94
+ expect(seats['Direktdemokraterna']).to eq(0)
95
+ expect(seats['Klassiskt liberala partiet']).to eq(0)
96
+ expect(seats['Vägvalet']).to eq(0)
97
+ expect(seats['Rättvisepartiet Socialisterna']).to eq(0)
98
+ expect(seats['Sveriges kommunistiska parti']).to eq(0)
99
+ expect(seats['Framstegspartiet']).to eq(0)
100
+ expect(seats['Europeiska arbetarpartiet']).to eq(0)
101
+ expect(seats['Hälsopartiet']).to eq(0)
102
+ expect(seats['Fredsdemokraterna']).to eq(0)
103
+ expect(seats['Gula partiet']).to eq(0)
104
+ expect(seats['Nya partiet']).to eq(0)
105
+ expect(seats['Frihetliga rättvisepartiet']).to eq(0)
106
+ expect(seats['Skånepartiet']).to eq(0)
107
+ expect(seats['De nya svenskarna']).to eq(0)
108
+ expect(seats['Reformist Neutral Partiet']).to eq(0)
109
+ expect(seats['Republikanerna']).to eq(0)
110
+ expect(seats['Djurägarpartiet']).to eq(0)
111
+ expect(seats['Humandemokraterna']).to eq(0)
112
+ end
113
+ end
@@ -0,0 +1,65 @@
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::UnitedKingdom, '#area_code' do
23
+ it 'returns UK as the area code' do
24
+ expect(Sapor::UnitedKingdom.instance.area_code).to eq('UK')
25
+ end
26
+ end
27
+
28
+ describe Sapor::UnitedKingdom, '#no_of_seats' do
29
+ it 'returns 650 as the number of seats' do
30
+ expect(Sapor::UnitedKingdom.instance.no_of_seats).to eq(650)
31
+ end
32
+ end
33
+
34
+ describe Sapor::UnitedKingdom, '#population_size' do
35
+ it 'returns a population size of 32,204,124' do
36
+ expect(Sapor::UnitedKingdom.instance.population_size).to eq(32_204_124)
37
+ end
38
+ end
39
+
40
+ describe Sapor::UnitedKingdom, '#seats' do
41
+ it 'calculates the number of seats for the election of 8 June 2017' do
42
+ uk = Sapor::UnitedKingdom.instance
43
+ results = uk.overall_election_results_of_2017
44
+ seats = uk.seats(results)
45
+ expect(seats['Conservative Party']).to eq(317 + 1)
46
+ expect(seats['Labour Party']).to eq(262)
47
+ expect(seats['Scottish National Party']).to eq(35)
48
+ expect(seats['Liberal Democrats']).to eq(12)
49
+ expect(seats['Democratic Unionist Party']).to eq(10)
50
+ expect(seats['Sinn Féin']).to eq(7)
51
+ expect(seats['Plaid Cymru']).to eq(4)
52
+ expect(seats['Social Democratic & Labour Party']).to eq(0)
53
+ expect(seats['Ulster Unionist Party']).to eq(0)
54
+ expect(seats['UK Independence Party']).to eq(0)
55
+ expect(seats['Green Party']).to eq(1)
56
+ expect(seats['Small or local party, or independent candidate']).to eq(1)
57
+ expect(seats['All other candidates']).to eq(0)
58
+ end
59
+ end
60
+
61
+ describe Sapor::UnitedKingdom, '#threshold' do
62
+ it 'returns there is no threshold' do
63
+ expect(Sapor::UnitedKingdom.instance.threshold).to be_nil
64
+ end
65
+ end
@@ -0,0 +1,67 @@
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::UnitedKingdomWithBrexitAndChuk, '#area_code' do
23
+ it 'returns UK∪{BREXIT,ChUK} as the area code' do
24
+ expect(Sapor::UnitedKingdomWithBrexitAndChuk.instance.area_code).to eq('UK∪{BREXIT,ChUK}')
25
+ end
26
+ end
27
+
28
+ describe Sapor::UnitedKingdomWithBrexitAndChuk, '#no_of_seats' do
29
+ it 'returns 650 as the number of seats' do
30
+ expect(Sapor::UnitedKingdomWithBrexitAndChuk.instance.no_of_seats).to eq(650)
31
+ end
32
+ end
33
+
34
+ describe Sapor::UnitedKingdomWithBrexitAndChuk, '#population_size' do
35
+ it 'returns a population size of 32,204,124' do
36
+ expect(Sapor::UnitedKingdomWithBrexitAndChuk.instance.population_size).to eq(32_204_124)
37
+ end
38
+ end
39
+
40
+ describe Sapor::UnitedKingdomWithBrexitAndChuk, '#seats' do
41
+ it 'calculates the number of seats for the election of 8 June 2017' do
42
+ uk = Sapor::UnitedKingdomWithBrexitAndChuk.instance
43
+ results = uk.overall_election_results_of_2017
44
+ seats = uk.seats(results)
45
+ expect(seats['Conservative Party']).to eq(317 + 1)
46
+ expect(seats['Labour Party']).to eq(262)
47
+ expect(seats['Scottish National Party']).to eq(35)
48
+ expect(seats['Liberal Democrats']).to eq(12)
49
+ expect(seats['Democratic Unionist Party']).to eq(10)
50
+ expect(seats['Sinn Féin']).to eq(7)
51
+ expect(seats['Plaid Cymru']).to eq(4)
52
+ expect(seats['Social Democratic & Labour Party']).to eq(0)
53
+ expect(seats['Ulster Unionist Party']).to eq(0)
54
+ expect(seats['UK Independence Party']).to eq(0)
55
+ expect(seats['Brexit Party']).to eq(0)
56
+ expect(seats['Green Party']).to eq(1)
57
+ expect(seats['Small or local party, or independent candidate']).to eq(1)
58
+ expect(seats['Change UK']).to eq(0)
59
+ expect(seats['All other candidates']).to eq(0)
60
+ end
61
+ end
62
+
63
+ describe Sapor::UnitedKingdomWithBrexitAndChuk, '#threshold' do
64
+ it 'returns there is no threshold' do
65
+ expect(Sapor::UnitedKingdomWithBrexitAndChuk.instance.threshold).to be_nil
66
+ end
67
+ end