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,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::EuropeanUnionHungary, '#area_code' do
23
+ it 'returns EU[HU] as the area code' do
24
+ expect(Sapor::EuropeanUnionHungary.instance.area_code).to eq('EU[HU]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionHungary, '#no_of_seats' do
29
+ it 'returns 21 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionHungary.instance.no_of_seats).to eq(21)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionHungary, '#population_size' do
35
+ it 'returns a population size of 3,470,257' do
36
+ expect(Sapor::EuropeanUnionHungary.instance.population_size).to \
37
+ eq(3_470_257)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionHungary, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Fidesz–KDNP (EPP)' => 1_193_991, 'Jobbik (—)' => 340_287,
44
+ 'MSZP (S&D)' => 252_751, 'DK (S&D)' => 226_086,
45
+ 'Együtt (Greens/EFA)' => 168_076, 'LMP (Greens/EFA)' => 116_904,
46
+ 'HNEM (—)' => 12_119, 'SMS (—)' => 9_279 }
47
+ seats = Sapor::EuropeanUnionHungary.instance.seats(results)
48
+ expect(seats['Fidesz–KDNP (EPP)']).to eq(12)
49
+ expect(seats['Jobbik (—)']).to eq(3)
50
+ expect(seats['MSZP (S&D)']).to eq(2)
51
+ expect(seats['DK (S&D)']).to eq(2)
52
+ expect(seats['Együtt (Greens/EFA)']).to eq(1)
53
+ expect(seats['LMP (Greens/EFA)']).to eq(1)
54
+ expect(seats['HNEM (—)']).to eq(0)
55
+ expect(seats['SMS (—)']).to eq(0)
56
+ end
57
+ end
@@ -0,0 +1,72 @@
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::EuropeanUnionIreland, '#area_code' do
23
+ it 'returns EU[IE] as the area code' do
24
+ expect(Sapor::EuropeanUnionIreland.instance.area_code).to \
25
+ eq('EU[IE]')
26
+ end
27
+ end
28
+
29
+ describe Sapor::EuropeanUnionIreland, '#no_of_seats' do
30
+ it 'returns 11 as the number of seats' do
31
+ expect(Sapor::EuropeanUnionIreland.instance.no_of_seats).to eq(11)
32
+ end
33
+ end
34
+
35
+ describe Sapor::EuropeanUnionIreland, '#population_size' do
36
+ it 'returns a population size of 1,678,003' do
37
+ expect(Sapor::EuropeanUnionIreland.instance.population_size).to \
38
+ eq(1_678_003)
39
+ end
40
+ end
41
+
42
+ describe Sapor::EuropeanUnionIreland, '#seats' do
43
+ it 'calculates the number of seats for the election of 2019' do
44
+ results = { 'Fine Gael (EPP)' => 496_459,
45
+ 'Green Party (Greens/EFA)' => 190_755,
46
+ 'Independents 4 Change (GUE/NGL)' => 124_085,
47
+ 'Fianna Fáil (RE)' => 277_705,
48
+ 'Sinn Féin (GUE/NGL)' => 196_001,
49
+ 'Labour Party (S&D)' => 52_753,
50
+ 'Solidarity–People Before Profit (GUE/NGL)' => 38_771,
51
+ 'Social Democrats (S&D)' => 20_331,
52
+ 'Renua Ireland (*)' => 6_897,
53
+ 'Workers’ Party (NI)' => 3_701,
54
+ 'Identity Ireland (*)' => 3_685,
55
+ 'Direct Democracy Ireland (*)' => 2_773,
56
+ 'Independents (*)' => 264_087 }
57
+ seats = Sapor::EuropeanUnionIreland.instance.seats(results)
58
+ expect(seats['Fine Gael (EPP)']).to eq(4 + 1)
59
+ expect(seats['Green Party (Greens/EFA)']).to eq(2 - 1)
60
+ expect(seats['Independents 4 Change (GUE/NGL)']).to eq(2 - 1)
61
+ expect(seats['Fianna Fáil (RE)']).to eq(1 + 1)
62
+ expect(seats['Sinn Féin (GUE/NGL)']).to eq(1 - 1)
63
+ expect(seats['Labour Party (S&D)']).to eq(0)
64
+ expect(seats['Solidarity–People Before Profit (GUE/NGL)']).to eq(0)
65
+ expect(seats['Social Democrats (S&D)']).to eq(0)
66
+ expect(seats['Renua Ireland (*)']).to eq(0)
67
+ expect(seats['Workers’ Party (NI)']).to eq(0)
68
+ expect(seats['Identity Ireland (*)']).to eq(0)
69
+ expect(seats['Direct Democracy Ireland (*)']).to eq(0)
70
+ expect(seats['Independents (*)']).to eq(1 + 1)
71
+ end
72
+ end
@@ -0,0 +1,74 @@
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::EuropeanUnionIrelandWithIa, '#area_code' do
23
+ it 'returns EU[IE]∪{IA} as the area code' do
24
+ expect(Sapor::EuropeanUnionIrelandWithIa.instance.area_code).to \
25
+ eq('EU[IE]∪{IA}')
26
+ end
27
+ end
28
+
29
+ describe Sapor::EuropeanUnionIrelandWithIa, '#no_of_seats' do
30
+ it 'returns 11 as the number of seats' do
31
+ expect(Sapor::EuropeanUnionIrelandWithIa.instance.no_of_seats).to eq(11)
32
+ end
33
+ end
34
+
35
+ describe Sapor::EuropeanUnionIrelandWithIa, '#population_size' do
36
+ it 'returns a population size of 1,678,003' do
37
+ expect(Sapor::EuropeanUnionIrelandWithIa.instance.population_size).to \
38
+ eq(1_678_003)
39
+ end
40
+ end
41
+
42
+ describe Sapor::EuropeanUnionIrelandWithIa, '#seats' do
43
+ it 'calculates the number of seats for the election of 2019' do
44
+ results = { 'Fine Gael (EPP)' => 496_459,
45
+ 'Green Party (Greens/EFA)' => 190_755,
46
+ 'Independents 4 Change (GUE/NGL)' => 124_085,
47
+ 'Fianna Fáil (RE)' => 277_705,
48
+ 'Sinn Féin (GUE/NGL)' => 196_001,
49
+ 'Labour Party (S&D)' => 52_753,
50
+ 'Solidarity–People Before Profit (GUE/NGL)' => 38_771,
51
+ 'Social Democrats (S&D)' => 20_331,
52
+ 'Renua Ireland (*)' => 6_897,
53
+ 'Workers’ Party (NI)' => 3_701,
54
+ 'Identity Ireland (*)' => 3_685,
55
+ 'Direct Democracy Ireland (*)' => 2_773,
56
+ 'Independents (*)' => 264_087,
57
+ 'Independent Alliance (*)' => 264_087 }
58
+ seats = Sapor::EuropeanUnionIrelandWithIa.instance.seats(results)
59
+ expect(seats['Fine Gael (EPP)']).to eq(4 + 1)
60
+ expect(seats['Green Party (Greens/EFA)']).to eq(2 - 1)
61
+ expect(seats['Independents 4 Change (GUE/NGL)']).to eq(2 - 1)
62
+ expect(seats['Fianna Fáil (RE)']).to eq(1 + 1)
63
+ expect(seats['Sinn Féin (GUE/NGL)']).to eq(1 - 1)
64
+ expect(seats['Labour Party (S&D)']).to eq(0)
65
+ expect(seats['Solidarity–People Before Profit (GUE/NGL)']).to eq(0)
66
+ expect(seats['Social Democrats (S&D)']).to eq(0)
67
+ expect(seats['Renua Ireland (*)']).to eq(0)
68
+ expect(seats['Workers’ Party (NI)']).to eq(0)
69
+ expect(seats['Identity Ireland (*)']).to eq(0)
70
+ expect(seats['Direct Democracy Ireland (*)']).to eq(0)
71
+ expect(seats['Independents (*)']).to eq(1 + 1 - 1)
72
+ expect(seats['Independent Alliance (*)']).to eq(1 + 1 - 1)
73
+ end
74
+ 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::EuropeanUnionItaly, '#area_code' do
23
+ it 'returns EU[IT] as the area code' do
24
+ expect(Sapor::EuropeanUnionItaly.instance.area_code).to eq('EU[IT]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionItaly, '#no_of_seats' do
29
+ it 'returns 73 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionItaly.instance.no_of_seats).to eq(73)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionItaly, '#population_size' do
35
+ it 'returns a population size of 26,783,732' do
36
+ expect(Sapor::EuropeanUnionItaly.instance.population_size).to \
37
+ eq(26_783_732)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionItaly, '#seats' do
42
+ it 'calculates the number of seats using the votes of the 2014 election' do
43
+ results = { 'Partito Democratico (S&D)' => 11_203_231,
44
+ 'Movimento 5 Stelle (EFDD)' => 5_792_865,
45
+ 'Forza Italia (EPP)' => 4_614_364,
46
+ 'Lega Nord (ENF)' => 1_688_197,
47
+ 'Nuovo Centrodestra–Unione di Centro (EPP)' => 1_202_350,
48
+ 'L’Altra Europa con Tsipras (GUE/NGL)' => 1_108_457,
49
+ 'Fratelli d’Italia (—)' => 1_006_513,
50
+ 'Verdi Europei–Green Italia (Greens/EFA)' => 250_102,
51
+ 'Scelta Europea (ALDE)' => 197_942,
52
+ 'Italia dei Valori (ALDE)' => 181_373,
53
+ 'Südtiroler Volkspartei (EPP)' => 138_037,
54
+ 'Io Cambio–MAIE (—)' => 50_978 }
55
+ seats = Sapor::EuropeanUnionItaly.instance.seats(results)
56
+ expect(seats['Partito Democratico (S&D)']).to eq(31)
57
+ expect(seats['Movimento 5 Stelle (EFDD)']).to eq(17)
58
+ expect(seats['Forza Italia (EPP)']).to eq(13)
59
+ expect(seats['Lega Nord (ENF)']).to eq(5)
60
+ expect(seats['Nuovo Centrodestra–Unione di Centro (EPP)']).to eq(3)
61
+ expect(seats['L’Altra Europa con Tsipras (GUE/NGL)']).to eq(3)
62
+ expect(seats['Fratelli d’Italia (—)']).to eq(0)
63
+ expect(seats['Verdi Europei–Green Italia (Greens/EFA)']).to eq(0)
64
+ expect(seats['Scelta Europea (ALDE)']).to eq(0)
65
+ expect(seats['Italia dei Valori (ALDE)']).to eq(0)
66
+ expect(seats['Südtiroler Volkspartei (EPP)']).to eq(1)
67
+ expect(seats['Io Cambio–MAIE (—)']).to eq(0)
68
+ end
69
+ end
@@ -0,0 +1,76 @@
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::EuropeanUnionLatvia, '#area_code' do
23
+ it 'returns EU[LV] as the area code' do
24
+ expect(Sapor::EuropeanUnionLatvia.instance.area_code).to eq('EU[LV]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionLatvia, '#no_of_seats' do
29
+ it 'returns 8 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionLatvia.instance.no_of_seats).to eq(8)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionLatvia, '#population_size' do
35
+ it 'returns a population size of 470.460' do
36
+ expect(Sapor::EuropeanUnionLatvia.instance.population_size).to \
37
+ eq(470_460)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionLatvia, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Vienotība (EPP)' => 204_979,
44
+ 'Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un ' \
45
+ 'Brīvībai/LNNK” (ECR)' => 63_229,
46
+ 'Sociāldemokrātiskā Partija “Saskaņa” (S&D)' => 57_863,
47
+ 'Zaļo un Zemnieku savienība (ALDE)' => 36_637,
48
+ 'Latvijas Krievu savienība (Greens/EFA)' => 28_303,
49
+ 'Alternative (*)' => 16_566,
50
+ 'Latvijas Reģionu apvienība (*)' => 11_035,
51
+ 'Latvijas attīstībai (ALDE)' => 9_421,
52
+ 'Latvijas Sociālistiskā partija (NI)' => 6_817,
53
+ 'Latvijas Sociāldemokrātiskā Strādnieku partija (S&D)' => 1_462,
54
+ 'Kristīgi demokrātiskā savienība (ECR)' => 1_453,
55
+ 'Latvijas Atdzimšanas partija (*)' => 1_252,
56
+ 'Par prezidentālu republiku (*)' => 672,
57
+ 'Suverenitāte (*)' => 599 }
58
+ seats = Sapor::EuropeanUnionLatvia.instance.seats(results)
59
+ expect(seats['Vienotība (EPP)']).to eq(4)
60
+ expect(seats['Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un ' \
61
+ 'Brīvībai/LNNK” (ECR)']).to eq(1)
62
+ expect(seats['Sociāldemokrātiskā Partija “Saskaņa” (S&D)']).to eq(1)
63
+ expect(seats['Zaļo un Zemnieku savienība (ALDE)']).to eq(1)
64
+ expect(seats['Latvijas Krievu savienība (Greens/EFA)']).to eq(1)
65
+ expect(seats['Alternative (*)']).to eq(0)
66
+ expect(seats['Latvijas Reģionu apvienība (*)']).to eq(0)
67
+ expect(seats['Latvijas attīstībai (ALDE)']).to eq(0)
68
+ expect(seats['Latvijas Sociālistiskā partija (NI)']).to eq(0)
69
+ expect(seats['Latvijas Sociāldemokrātiskā Strādnieku partija (S&D)']).to \
70
+ eq(0)
71
+ expect(seats['Kristīgi demokrātiskā savienība (ECR)']).to eq(0)
72
+ expect(seats['Latvijas Atdzimšanas partija (*)']).to eq(0)
73
+ expect(seats['Par prezidentālu republiku (*)']).to eq(0)
74
+ expect(seats['Suverenitāte (*)']).to eq(0)
75
+ end
76
+ end
@@ -0,0 +1,68 @@
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::EuropeanUnionLithuania, '#area_code' do
23
+ it 'returns EU[LT] as the area code' do
24
+ expect(Sapor::EuropeanUnionLithuania.instance.area_code).to eq('EU[LT]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionLithuania, '#no_of_seats' do
29
+ it 'returns 11 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionLithuania.instance.no_of_seats).to eq(11)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionLithuania, '#population_size' do
35
+ it 'returns a population size of 1,322,036' do
36
+ expect(Sapor::EuropeanUnionLithuania.instance.population_size).to \
37
+ eq(1_322_036)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionLithuania, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Tėvynės sąjunga–Lietuvos krikščionys demokratai (EPP)' => \
44
+ 199_393,
45
+ 'Lietuvos socialdemokratų partija (S&D)' => 197_477,
46
+ 'Liberalų Sąjūdis (ALDE)' => 189_373,
47
+ 'Partija tvarka ir teisingumas (EFDD)' => 163_049,
48
+ 'Darbo Partija (ALDE)' => 146_607,
49
+ 'Lietuvos lenkų rinkimų akcija–Rusų aljanso (ECR)' => 92_108,
50
+ 'Lietuvos valstiečių ir žaliųjų sąjunga (Greens/EFA)' => 75_643,
51
+ 'Lietuvos Žaliųjų Partija (—)' => 40_696,
52
+ 'Lietuvių tautininkų sąjunga (—)' => 22_858,
53
+ 'Liberalų ir centro sąjunga (ALDE)' => 16_927 }
54
+ seats = Sapor::EuropeanUnionLithuania.instance.seats(results)
55
+ expect(seats['Tėvynės sąjunga–Lietuvos krikščionys demokratai (EPP)']).to \
56
+ eq(2)
57
+ expect(seats['Lietuvos socialdemokratų partija (S&D)']).to eq(2)
58
+ expect(seats['Liberalų Sąjūdis (ALDE)']).to eq(2)
59
+ expect(seats['Partija tvarka ir teisingumas (EFDD)']).to eq(2)
60
+ expect(seats['Darbo Partija (ALDE)']).to eq(1)
61
+ expect(seats['Lietuvos lenkų rinkimų akcija–Rusų aljanso (ECR)']).to eq(1)
62
+ expect(seats['Lietuvos valstiečių ir žaliųjų sąjunga (Greens/EFA)']).to \
63
+ eq(1)
64
+ expect(seats['Lietuvos Žaliųjų Partija (—)']).to eq(0)
65
+ expect(seats['Lietuvių tautininkų sąjunga (—)']).to eq(0)
66
+ expect(seats['Liberalų ir centro sąjunga (ALDE)']).to eq(0)
67
+ end
68
+ end
@@ -0,0 +1,63 @@
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::EuropeanUnionLuxembourg, '#area_code' do
23
+ it 'returns EU[LU] as the area code' do
24
+ expect(Sapor::EuropeanUnionLuxembourg.instance.area_code).to eq('EU[LU]')
25
+ end
26
+ end
27
+
28
+ describe Sapor::EuropeanUnionLuxembourg, '#no_of_seats' do
29
+ it 'returns 6 as the number of seats' do
30
+ expect(Sapor::EuropeanUnionLuxembourg.instance.no_of_seats).to eq(6)
31
+ end
32
+ end
33
+
34
+ describe Sapor::EuropeanUnionLuxembourg, '#population_size' do
35
+ it 'returns a population size of 1,254,363' do
36
+ expect(Sapor::EuropeanUnionLuxembourg.instance.population_size).to \
37
+ eq(1_254_363)
38
+ end
39
+ end
40
+
41
+ describe Sapor::EuropeanUnionLuxembourg, '#seats' do
42
+ it 'calculates the number of seats for the election of 2014' do
43
+ results = { 'Chrëschtlech-Sozial Vollekspartei (EPP)' => 441_578,
44
+ 'déi gréng (Greens/EFA)' => 176_073,
45
+ 'Demokratesch Partei (ALDE)' => 173_255,
46
+ 'Lëtzebuerger Sozialistesch Aarbechterpartei (S&D)' => 137_504,
47
+ 'Alternativ Demokratesch Reformpartei (ECR)' => 88_298,
48
+ 'Déi Lénk (GUE/NGL)' => 67_544,
49
+ 'Kommunistesch Partei Lëtzebuerg (*)' => 17_506,
50
+ 'Piratepartei Lëtzebuerg (Greens/EFA)' => 49_553,
51
+ 'Partei fir Integral Demokratie (*)' => 21_303 }
52
+ seats = Sapor::EuropeanUnionLuxembourg.instance.seats(results)
53
+ expect(seats['Chrëschtlech-Sozial Vollekspartei (EPP)']).to eq(3)
54
+ expect(seats['déi gréng (Greens/EFA)']).to eq(1)
55
+ expect(seats['Demokratesch Partei (ALDE)']).to eq(1)
56
+ expect(seats['Lëtzebuerger Sozialistesch Aarbechterpartei (S&D)']).to eq(1)
57
+ expect(seats['Alternativ Demokratesch Reformpartei (ECR)']).to eq(0)
58
+ expect(seats['Déi Lénk (GUE/NGL)']).to eq(0)
59
+ expect(seats['Kommunistesch Partei Lëtzebuerg (*)']).to eq(0)
60
+ expect(seats['Piratepartei Lëtzebuerg (Greens/EFA)']).to eq(0)
61
+ expect(seats['Partei fir Integral Demokratie (*)']).to eq(0)
62
+ end
63
+ end