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.
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 +81 -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,60 @@
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::EuropeanUnionMalta, '#area_code' do
23
+ it 'returns EU[MT] as the area code' do
24
+ expect(Sapor::EuropeanUnionMalta.instance.area_code).to \
25
+ eq('EU[MT]')
26
+ end
27
+ end
28
+
29
+ describe Sapor::EuropeanUnionMalta, '#no_of_seats' do
30
+ it 'returns 6 as the number of seats' do
31
+ expect(Sapor::EuropeanUnionMalta.instance.no_of_seats).to eq(6)
32
+ end
33
+ end
34
+
35
+ describe Sapor::EuropeanUnionMalta, '#population_size' do
36
+ it 'returns a population size of 251,851' do
37
+ expect(Sapor::EuropeanUnionMalta.instance.population_size).to \
38
+ eq(260_160)
39
+ end
40
+ end
41
+
42
+ describe Sapor::EuropeanUnionMalta, '#seats' do
43
+ it 'calculates the number of seats for the election of 2014' do
44
+ results = { 'Partit Laburista (S&D)' => 134_462,
45
+ 'Partit Nazzjonalista (EPP)' => 100_785,
46
+ 'Alternattiva Demokratika (Greens/EFA)' => 7_418,
47
+ 'Imperium Europa (*)' => 6_761,
48
+ 'Ajkla (*)' => 1_208,
49
+ 'Alleanza Bidla (*)' => 1_015,
50
+ 'Alleanza Liberali (*)' => 202 }
51
+ seats = Sapor::EuropeanUnionMalta.instance.seats(results)
52
+ expect(seats['Partit Laburista (S&D)']).to eq(3 + 1)
53
+ expect(seats['Partit Nazzjonalista (EPP)']).to eq(3 - 1)
54
+ expect(seats['Alternattiva Demokratika (Greens/EFA)']).to eq(0)
55
+ expect(seats['Imperium Europa (*)']).to eq(0)
56
+ expect(seats['Ajkla (*)']).to eq(0)
57
+ expect(seats['Alleanza Bidla (*)']).to eq(0)
58
+ expect(seats['Alleanza Liberali (*)']).to eq(0)
59
+ end
60
+ 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
+ require 'spec_helper'
21
+
22
+ describe Sapor::EuropeanUnionNetherlands, '#area_code' do
23
+ it 'returns EU[NL] as the area code' do
24
+ expect(Sapor::EuropeanUnionNetherlands.instance.area_code).to eq('EU[NL]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionNetherlands, '#no_of_seats' do
29
+ it 'returns 26 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionNetherlands.instance.no_of_seats).to eq(26)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionNetherlands, '#population_size' do
35
+ it 'returns a population size of 5,497,813' do
36
+ expect(Sapor::EuropeanUnionNetherlands.instance.population_size).to \
37
+ eq(5_497_813)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionNetherlands, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Democraten 66 (ALDE)' => 735_825,
44
+ 'Christen-Democratisch Appèl–ChristenUnie–Staatkundig' \
45
+ ' Gereformeerde Partij (EPP)' => 721_766 + 364_843,
46
+ 'Partij voor de Vrijheid (ENF)' => 633_114,
47
+ 'Volkspartij voor Vrijheid en Democratie (ALDE)' => 571_176,
48
+ 'Socialistische Partij (GUE/NGL)' => 458_079,
49
+ 'Partij van de Arbeid–GroenLinks (S&D)' => 446_763 + 331_594,
50
+ 'Partij voor de Dieren (GUE/NGL)' => 200_254,
51
+ '50Plus (ALDE)' => 175_343,
52
+ 'Piratenpartij (Greens/EFA)' => 40_216,
53
+ 'Artikel 50 (—)' => 24_069,
54
+ 'Anti Europa Partij (—)' => 12_290,
55
+ 'De Groenen (Greens/EFA)' => 10_833,
56
+ 'Jezus Leeft (—)' => 9_507,
57
+ 'ikkiesvooreerlijk.eu (—)' => 6_796,
58
+ 'Liberaal Democratische Partij (—)' => 6_349,
59
+ 'Aandacht en Eenvoud (—)' => 3_174,
60
+ 'IQ, de Rechten-Plichten-Partij (—)' => 1_705 }
61
+ seats = Sapor::EuropeanUnionNetherlands.instance.seats(results)
62
+ expect(seats['Democraten 66 (ALDE)']).to eq(4)
63
+ expect(seats['Christen-Democratisch Appèl–ChristenUnie–Staatkundig' \
64
+ ' Gereformeerde Partij (EPP)']).to eq(5 + 2)
65
+ expect(seats['Partij voor de Vrijheid (ENF)']).to eq(4)
66
+ expect(seats['Volkspartij voor Vrijheid en Democratie (ALDE)']).to eq(3)
67
+ expect(seats['Socialistische Partij (GUE/NGL)']).to eq(2)
68
+ expect(seats['Partij van de Arbeid–GroenLinks (S&D)']).to eq(3 + 2)
69
+ expect(seats['Partij voor de Dieren (GUE/NGL)']).to eq(1)
70
+ expect(seats['50Plus (ALDE)']).to eq(0)
71
+ expect(seats['Piratenpartij (Greens/EFA)']).to eq(0)
72
+ expect(seats['Artikel 50 (—)']).to eq(0)
73
+ expect(seats['Anti Europa Partij (—)']).to eq(0)
74
+ expect(seats['De Groenen (Greens/EFA)']).to eq(0)
75
+ expect(seats['Jezus Leeft (—)']).to eq(0)
76
+ expect(seats['ikkiesvooreerlijk.eu (—)']).to eq(0)
77
+ expect(seats['Liberaal Democratische Partij (—)']).to eq(0)
78
+ expect(seats['Aandacht en Eenvoud (—)']).to eq(0)
79
+ expect(seats['IQ, de Rechten-Plichten-Partij (—)']).to eq(0)
80
+ end
81
+ end
@@ -0,0 +1,66 @@
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::EuropeanUnionNorthernIreland, '#area_code' do
23
+ it 'returns EU[GB-NIR] as the area code' do
24
+ expect(Sapor::EuropeanUnionNorthernIreland.instance.area_code).to \
25
+ eq('EU[GB-NIR]')
26
+ end
27
+ end
28
+
29
+ describe Sapor::EuropeanUnionNorthernIreland, '#no_of_seats' do
30
+ it 'returns 3 as the number of seats' do
31
+ expect(Sapor::EuropeanUnionNorthernIreland.instance.no_of_seats).to eq(3)
32
+ end
33
+ end
34
+
35
+ describe Sapor::EuropeanUnionNorthernIreland, '#population_size' do
36
+ it 'returns a population size of 572,447' do
37
+ expect(Sapor::EuropeanUnionNorthernIreland.instance.population_size).to \
38
+ eq(572_447)
39
+ end
40
+ end
41
+
42
+ describe Sapor::EuropeanUnionNorthernIreland, '#seats' do
43
+ it 'calculates the number of seats for the election of 2014' do
44
+ results = { 'Sinn Féin (GUE/NGL)' => 159_813,
45
+ 'Democratic Unionist Party (NI)' => 131_163,
46
+ 'Ulster Unionist Party (ECR)' => 83_438,
47
+ 'Social Democratic and Labour Party (S&D)' => 81_594,
48
+ 'Traditional Unionist Voice (*)' => 75_806,
49
+ 'Alliance Party of Northern Ireland (ALDE)' => 44_432,
50
+ 'UK Independence Party (ENF)' => 24_584,
51
+ 'Green Party in Northern Ireland (Greens/EFA)' => 10_598,
52
+ 'NI21 (*)' => 10_553,
53
+ 'Northern Ireland Conservatives (ECR)' => 4_144}
54
+ seats = Sapor::EuropeanUnionNorthernIreland.instance.seats(results)
55
+ expect(seats['Sinn Féin (GUE/NGL)']).to eq(1)
56
+ expect(seats['Democratic Unionist Party (NI)']).to eq(1)
57
+ expect(seats['Ulster Unionist Party (ECR)']).to eq(1)
58
+ expect(seats['Social Democratic and Labour Party (S&D)']).to eq(0)
59
+ expect(seats['Traditional Unionist Voice (*)']).to eq(0)
60
+ expect(seats['Alliance Party of Northern Ireland (ALDE)']).to eq(0)
61
+ expect(seats['UK Independence Party (ENF)']).to eq(0)
62
+ expect(seats['Green Party in Northern Ireland (Greens/EFA)']).to eq(0)
63
+ expect(seats['NI21 (*)']).to eq(0)
64
+ expect(seats['Northern Ireland Conservatives (ECR)']).to eq(0)
65
+ end
66
+ end
@@ -0,0 +1,69 @@
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::EuropeanUnionPoland, '#area_code' do
23
+ it 'returns EU[PL] as the area code' do
24
+ expect(Sapor::EuropeanUnionPoland.instance.area_code).to eq('EU[PL]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionPoland, '#no_of_seats' do
29
+ it 'returns 51 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionPoland.instance.no_of_seats).to eq(51)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionPoland, '#population_size' do
35
+ it 'returns a population size of 13,647,311' do
36
+ expect(Sapor::EuropeanUnionPoland.instance.population_size).to \
37
+ eq(13_647_311)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionPoland, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Platforma Obywatelska (EPP)' => 2_271_215,
44
+ 'Prawo i Sprawiedliwość (ECR)' => 2_246_870,
45
+ 'Sojusz Lewicy Demokratycznej–Unia Pracy (S&D)' => 667_319,
46
+ 'Kongres Nowej Prawicy (ENF)' => 505_586,
47
+ 'Polskie Stronnictwo Ludowe (EPP)' => 480_846,
48
+ 'Solidarna Polska Zbigniewa Ziobro (EFDD)' => 281_079,
49
+ 'Europa Plus–Twój Ruch (ALDE)' => 252_779,
50
+ 'Polska Razem (ECR)' => 223_733,
51
+ 'Ruch Narodowy (—)' => 98_626,
52
+ 'Partia Zieloni (Greens/EFA)' => 22_481,
53
+ 'Demokracja Bezpośrednia (—)' => 16_222,
54
+ 'Samoobrona (—)' => 2_729 }
55
+ seats = Sapor::EuropeanUnionPoland.instance.seats(results)
56
+ expect(seats['Platforma Obywatelska (EPP)']).to eq(19)
57
+ expect(seats['Prawo i Sprawiedliwość (ECR)']).to eq(19)
58
+ expect(seats['Sojusz Lewicy Demokratycznej–Unia Pracy (S&D)']).to eq(5)
59
+ expect(seats['Kongres Nowej Prawicy (ENF)']).to eq(4)
60
+ expect(seats['Polskie Stronnictwo Ludowe (EPP)']).to eq(4)
61
+ expect(seats['Solidarna Polska Zbigniewa Ziobro (EFDD)']).to eq(0)
62
+ expect(seats['Europa Plus–Twój Ruch (ALDE)']).to eq(0)
63
+ expect(seats['Polska Razem (ECR)']).to eq(0)
64
+ expect(seats['Ruch Narodowy (—)']).to eq(0)
65
+ expect(seats['Partia Zieloni (Greens/EFA)']).to eq(0)
66
+ expect(seats['Demokracja Bezpośrednia (—)']).to eq(0)
67
+ expect(seats['Samoobrona (—)']).to eq(0)
68
+ end
69
+ end
@@ -0,0 +1,77 @@
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::EuropeanUnionPortugal, '#area_code' do
23
+ it 'returns EU[PT] as the area code' do
24
+ expect(Sapor::EuropeanUnionPortugal.instance.area_code).to eq('EU[PT]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionPortugal, '#no_of_seats' do
29
+ it 'returns 21 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionPortugal.instance.no_of_seats).to eq(21)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionPortugal, '#population_size' do
35
+ it 'returns a population size of 3,084,505' do
36
+ expect(Sapor::EuropeanUnionPortugal.instance.population_size).to \
37
+ eq(3_084_505)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionPortugal, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Partido Socialista (S&D)' => 1_033_158,
44
+ 'Aliança Portugal (EPP)' => 909_932,
45
+ 'Coligação Democrática Unitária (GUE/NGL)' => 416_446,
46
+ 'Partido da Terra (ALDE)' => 234_603,
47
+ 'Bloco de Esquerda (GUE/NGL)' => 149_628,
48
+ 'LIVRE (Greens/EFA)' => 71_602,
49
+ 'Partido pelos Animais e pela Natureza (GUE/NGL)' => 56_363,
50
+ 'PCTP/MRPP (—)' => 54_622,
51
+ 'Partido da Nova Democracia (ALDE)' => 23_046,
52
+ 'Partido Trabalhista Português (—)' => 22_531,
53
+ 'Partido Popular Monárquico (—)' => 17_732,
54
+ 'Partido Nacional Renovador (—)' => 15_036,
55
+ 'Movimento Alternativa Socialista (—)' => 12_442,
56
+ 'Portugal pro Vida (—)' => 12_017,
57
+ 'Partido Democrático do Atlântico (ALDE)' => 5_300,
58
+ 'Partido Operário de Unidade Socialista (—)' => 3_695 }
59
+ seats = Sapor::EuropeanUnionPortugal.instance.seats(results)
60
+ expect(seats['Partido Socialista (S&D)']).to eq(8)
61
+ expect(seats['Aliança Portugal (EPP)']).to eq(7)
62
+ expect(seats['Coligação Democrática Unitária (GUE/NGL)']).to eq(3)
63
+ expect(seats['Partido da Terra (ALDE)']).to eq(2)
64
+ expect(seats['Bloco de Esquerda (GUE/NGL)']).to eq(1)
65
+ expect(seats['LIVRE (Greens/EFA)']).to eq(0)
66
+ expect(seats['Partido pelos Animais e pela Natureza (GUE/NGL)']).to eq(0)
67
+ expect(seats['PCTP/MRPP (—)']).to eq(0)
68
+ expect(seats['Partido da Nova Democracia (ALDE)']).to eq(0)
69
+ expect(seats['Partido Trabalhista Português (—)']).to eq(0)
70
+ expect(seats['Partido Popular Monárquico (—)']).to eq(0)
71
+ expect(seats['Partido Nacional Renovador (—)']).to eq(0)
72
+ expect(seats['Movimento Alternativa Socialista (—)']).to eq(0)
73
+ expect(seats['Portugal pro Vida (—)']).to eq(0)
74
+ expect(seats['Partido Democrático do Atlântico (ALDE)']).to eq(0)
75
+ expect(seats['Partido Operário de Unidade Socialista (—)']).to eq(0)
76
+ end
77
+ 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::EuropeanUnionRomania, '#area_code' do
23
+ it 'returns EU[RO] as the area code' do
24
+ expect(Sapor::EuropeanUnionRomania.instance.area_code).to eq('EU[RO]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionRomania, '#no_of_seats' do
29
+ it 'returns 32 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionRomania.instance.no_of_seats).to eq(32)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionRomania, '#population_size' do
35
+ it 'returns a population size of 9,352,472' do
36
+ expect(Sapor::EuropeanUnionRomania.instance.population_size).to \
37
+ eq(9_352_472)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionRomania, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Uniunea Social Democrată (S&D)' => 2_093_237,
44
+ 'Partidul Național Liberal (ALDE)' => 835_531,
45
+ 'Partidul Democrat Liberal (EPP)' => 680_853,
46
+ 'Mircea Diaconu (ALDE)' => 379_582,
47
+ 'Uniunea Democrată Maghiară din România (EPP)' => 350_689,
48
+ 'Partidul Mișcarea Populară (EPP)' => 345_973,
49
+ 'Partidul Poporului–Dan Diaconescu (—)' => 204_310,
50
+ 'Partidul România Mare (—)' => 150_484,
51
+ 'Forța Civică (EPP)' => 145_181,
52
+ 'Partidul Ecologist Român (—)' => 64_232 }
53
+ seats = Sapor::EuropeanUnionRomania.instance.seats(results)
54
+ expect(seats['Uniunea Social Democrată (S&D)']).to eq(15)
55
+ # Uniunea Social Democrata got in reality the extra seat from Mircea Diaconu
56
+ expect(seats['Partidul Național Liberal (ALDE)']).to eq(6)
57
+ expect(seats['Partidul Democrat Liberal (EPP)']).to eq(5)
58
+ expect(seats['Partidul Democrat Liberal (EPP)']).to eq(5)
59
+ expect(seats['Mircea Diaconu (ALDE)']).to eq(2) # Only one candidate
60
+ expect(seats['Uniunea Democrată Maghiară din România (EPP)']).to eq(2)
61
+ expect(seats['Partidul Mișcarea Populară (EPP)']).to eq(2)
62
+ expect(seats['Partidul Poporului–Dan Diaconescu (—)']).to eq(0)
63
+ expect(seats['Partidul România Mare (—)']).to eq(0)
64
+ expect(seats['Forța Civică (EPP)']).to eq(0)
65
+ expect(seats['Partidul Ecologist Român (—)']).to eq(0)
66
+ end
67
+ end
@@ -0,0 +1,111 @@
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::EuropeanUnionSlovakia, '#area_code' do
23
+ it 'returns EU[SK] as the area code' do
24
+ expect(Sapor::EuropeanUnionSlovakia.instance.area_code).to eq('EU[SK]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionSlovakia, '#no_of_seats' do
29
+ it 'returns 13 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionSlovakia.instance.no_of_seats).to eq(13)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionSlovakia, '#population_size' do
35
+ it 'returns a population size of 1,007,398' do
36
+ expect(Sapor::EuropeanUnionSlovakia.instance.population_size).to \
37
+ eq(1_007_398)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionSlovakia, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'SMER–sociálna demokracia (S&D)' => 135_089,
44
+ 'Kresťanskodemokratické hnutie (EPP)' => 74_108,
45
+ 'Slovenská demokratická a kresťanská únia–Demokratická' \
46
+ ' strana (EPP)' => 43_467,
47
+ 'OBYČAJNÍ ĽUDIA a nezávislé osobnosti (ECR)' => 41_829,
48
+ 'NOVA–Konzervatívni demokrati Slovenska–Občianska' \
49
+ ' konzervatívna strana (ECR)' => 38_316,
50
+ 'Sloboda a Solidarita (ALDE)' => 37_376,
51
+ 'Strana maďarskej koalície–Magyar Koalíció Pártja (EPP)' \
52
+ => 36_629,
53
+ 'MOST–HÍD (EPP)' => 32_708,
54
+ 'Strana TIP (—)' => 20_730,
55
+ 'Slovenská národná strana (EFDD)' => 20_244,
56
+ 'Ľudová strana Naše Slovensko (NI)' => 9_749,
57
+ 'PRÁVO A SPRAVODLIVOSŤ (—)' => 9_322,
58
+ 'Komunistická strana Slovenska (GUE/NGL)' => 8_510,
59
+ 'Strana demokratického Slovenska (ALDE)' => 8_378,
60
+ 'Národ a Spravodlivosť–naša strana (—)' => 7_763,
61
+ 'Magnificat Slovakia (—)' => 6_646,
62
+ 'Európska demokratická strana (ALDE)' => 3_739,
63
+ 'Kresťanská SLOVENSKÁ NÁRODNÁ STRANA (—)' => 3_631,
64
+ 'Strana moderného Slovenska (—)' => 2_851,
65
+ 'ÚSVIT (—)' => 2_773,
66
+ '7 STATOČNÝCH REGIONÁLNA STRANA SLOVENSKA (—)' => 2_696,
67
+ 'Strana zelených (Greens/EFA)' => 2_623,
68
+ 'Slovenská ľudová strana (—)' => 2_590,
69
+ 'PRIAMA DEMOKRACIA–Kresťanská ľudová strana (ALDE)' => 2_405,
70
+ 'VZDOR–strana práce (—)' => 1_769,
71
+ 'Strana občianskej ľavice (—)' => 1_311,
72
+ 'DEMOKRATICKÁ OBČIANSKA STRANA (—)' => 1_273,
73
+ 'Maďarská kresťanskodemokratická aliancia–Magyar' \
74
+ ' Kereszténydemokrata Szövetség (Greens/EFA)' => 1_170,
75
+ 'Nový parlament (—)' => 900 }
76
+ seats = Sapor::EuropeanUnionSlovakia.instance.seats(results)
77
+ expect(seats['SMER–sociálna demokracia (S&D)']).to eq(4)
78
+ expect(seats['Kresťanskodemokratické hnutie (EPP)']).to eq(2)
79
+ expect(seats['Slovenská demokratická a kresťanská únia–Demokratická' \
80
+ ' strana (EPP)']).to eq(2)
81
+ expect(seats['OBYČAJNÍ ĽUDIA a nezávislé osobnosti (ECR)']).to eq(1)
82
+ expect(seats['NOVA–Konzervatívni demokrati Slovenska–Občianska' \
83
+ ' konzervatívna strana (ECR)']).to eq(1)
84
+ expect(seats['Sloboda a Solidarita (ALDE)']).to eq(1)
85
+ expect(seats['Strana maďarskej koalície–Magyar Koalíció Pártja (EPP)']).to \
86
+ eq(1)
87
+ expect(seats['MOST–HÍD (EPP)']).to eq(1)
88
+ expect(seats['Strana TIP (—)']).to eq(0)
89
+ expect(seats['Slovenská národná strana (EFDD)']).to eq(0)
90
+ expect(seats['Ľudová strana Naše Slovensko (NI)']).to eq(0)
91
+ expect(seats['PRÁVO A SPRAVODLIVOSŤ (—)']).to eq(0)
92
+ expect(seats['Komunistická strana Slovenska (GUE/NGL)']).to eq(0)
93
+ expect(seats['Strana demokratického Slovenska (ALDE)']).to eq(0)
94
+ expect(seats['Národ a Spravodlivosť–naša strana (—)']).to eq(0)
95
+ expect(seats['Magnificat Slovakia (—)']).to eq(0)
96
+ expect(seats['Európska demokratická strana (ALDE)']).to eq(0)
97
+ expect(seats['Kresťanská SLOVENSKÁ NÁRODNÁ STRANA (—)']).to eq(0)
98
+ expect(seats['Strana moderného Slovenska (—)']).to eq(0)
99
+ expect(seats['ÚSVIT (—)']).to eq(0)
100
+ expect(seats['7 STATOČNÝCH REGIONÁLNA STRANA SLOVENSKA (—)']).to eq(0)
101
+ expect(seats['Strana zelených (Greens/EFA)']).to eq(0)
102
+ expect(seats['Slovenská ľudová strana (—)']).to eq(0)
103
+ expect(seats['PRIAMA DEMOKRACIA–Kresťanská ľudová strana (ALDE)']).to eq(0)
104
+ expect(seats['VZDOR–strana práce (—)']).to eq(0)
105
+ expect(seats['Strana občianskej ľavice (—)']).to eq(0)
106
+ expect(seats['DEMOKRATICKÁ OBČIANSKA STRANA (—)']).to eq(0)
107
+ expect(seats['Maďarská kresťanskodemokratická aliancia–Magyar' \
108
+ ' Kereszténydemokrata Szövetség (Greens/EFA)']).to eq(0)
109
+ expect(seats['Nový parlament (—)']).to eq(0)
110
+ end
111
+ end