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,38 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ require 'spec_helper'
21
+
22
+ describe Sapor::LatviaKpvPPar, '#area_code' do
23
+ it 'returns LV∪{KPV,P,PAR} as the area code' do
24
+ expect(Sapor::LatviaKpvPPar.instance.area_code).to eq('LV∪{KPV,P,PAR}')
25
+ end
26
+ end
27
+
28
+ describe Sapor::LatviaKpvPPar, '#no_of_seats' do
29
+ it 'returns 100 as the number of seats' do
30
+ expect(Sapor::LatviaKpvPPar.instance.no_of_seats).to eq(100)
31
+ end
32
+ end
33
+
34
+ describe Sapor::LatviaKpvPPar, '#population_size' do
35
+ it 'returns a population size of 913,491' do
36
+ expect(Sapor::LatviaKpvPPar.instance.population_size).to eq(913_491)
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ require 'spec_helper'
21
+
22
+ describe Sapor::LatviaKpvPar, '#area_code' do
23
+ it 'returns LV∪{KPV,PAR} as the area code' do
24
+ expect(Sapor::LatviaKpvPar.instance.area_code).to eq('LV∪{KPV,PAR}')
25
+ end
26
+ end
27
+
28
+ describe Sapor::LatviaKpvPar, '#no_of_seats' do
29
+ it 'returns 100 as the number of seats' do
30
+ expect(Sapor::LatviaKpvPar.instance.no_of_seats).to eq(100)
31
+ end
32
+ end
33
+
34
+ describe Sapor::LatviaKpvPar, '#population_size' do
35
+ it 'returns a population size of 913,491' do
36
+ expect(Sapor::LatviaKpvPar.instance.population_size).to eq(913_491)
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ require 'spec_helper'
21
+
22
+ describe Sapor::LatviaKpv, '#area_code' do
23
+ it 'returns LV∪{KPV} as the area code' do
24
+ expect(Sapor::LatviaKpv.instance.area_code).to eq('LV∪{KPV}')
25
+ end
26
+ end
27
+
28
+ describe Sapor::LatviaKpv, '#no_of_seats' do
29
+ it 'returns 100 as the number of seats' do
30
+ expect(Sapor::LatviaKpv.instance.no_of_seats).to eq(100)
31
+ end
32
+ end
33
+
34
+ describe Sapor::LatviaKpv, '#population_size' do
35
+ it 'returns a population size of 913,491' do
36
+ expect(Sapor::LatviaKpv.instance.population_size).to eq(913_491)
37
+ end
38
+ end
@@ -0,0 +1,60 @@
1
+ #
2
+ # Statistical Analysis of Polling Results (SAPoR)
3
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
4
+ #
5
+ # This file is part of SAPoR.
6
+ #
7
+ # SAPoR is free software: you can redistribute it and/or modify it under the
8
+ # terms of the GNU General Public License as published by the Free Software
9
+ # Foundation, either version 3 of the License, or (at your option) any later
10
+ # version.
11
+ #
12
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
13
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
+ #
16
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Sapor::Latvia, '#area_code' do
22
+ it 'returns LV as the area code' do
23
+ expect(Sapor::Latvia.instance.area_code).to eq('LV')
24
+ end
25
+ end
26
+
27
+ describe Sapor::Latvia, '#no_of_seats' do
28
+ it 'returns 100 as the number of seats' do
29
+ expect(Sapor::Latvia.instance.no_of_seats).to eq(100)
30
+ end
31
+ end
32
+
33
+ describe Sapor::Latvia, '#population_size' do
34
+ it 'returns a population size of 913,491' do
35
+ expect(Sapor::Latvia.instance.population_size).to eq(913_491)
36
+ end
37
+ end
38
+
39
+ describe Sapor::Latvia, '#seats' do
40
+ it 'calculates the number of seats for the election of 2014 correctly' do
41
+ Latvia = Sapor::Latvia.instance
42
+ results = Latvia.overall_election_results_of_2014
43
+ seats = Latvia.seats(results)
44
+ expect(seats['Sociāldemokrātiskā Partija “Saskaņa”']).to eq(24)
45
+ expect(seats['Vienotība']).to eq(23)
46
+ expect(seats['Zaļo un Zemnieku savienība']).to eq(21)
47
+ expect(seats['Nacionālā apvienība „Visu Latvijai!”–„Tēvzemei un ' \
48
+ 'Brīvībai/LNNK”']).to eq(17)
49
+ expect(seats['Latvijas Reģionu apvienība']).to eq(8)
50
+ expect(seats['No sirds Latvijai']).to eq(7)
51
+ expect(seats['Latvijas Krievu savienība']).to eq(0)
52
+ expect(seats['Latvijas attīstībai']).to eq(0)
53
+ expect(seats['“Suverenitāte”']).to eq(0)
54
+ expect(seats['Partija “Brīvība. Brīvs no bailēm, naida un dusmām”']).to \
55
+ eq(0)
56
+ expect(seats['Politiskā partija Izaugsme']).to eq(0)
57
+ expect(seats['Vienoti Latvijai']).to eq(0)
58
+ expect(seats['Jaunā konservatīvā partija']).to eq(0)
59
+ end
60
+ end
@@ -0,0 +1,54 @@
1
+ #
2
+ # Statistical Analysis of Polling Results (SAPoR)
3
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
4
+ #
5
+ # This file is part of SAPoR.
6
+ #
7
+ # SAPoR is free software: you can redistribute it and/or modify it under the
8
+ # terms of the GNU General Public License as published by the Free Software
9
+ # Foundation, either version 3 of the License, or (at your option) any later
10
+ # version.
11
+ #
12
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
13
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
+ #
16
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Sapor::Luxembourg, '#area_code' do
22
+ it 'returns LU as the area code' do
23
+ expect(Sapor::Luxembourg.instance.area_code).to eq('LU')
24
+ end
25
+ end
26
+
27
+ describe Sapor::Luxembourg, '#no_of_seats' do
28
+ it 'returns 60 as the number of seats' do
29
+ expect(Sapor::Luxembourg.instance.no_of_seats).to eq(60)
30
+ end
31
+ end
32
+
33
+ describe Sapor::Luxembourg, '#population_size' do
34
+ it 'returns a population size of 3,276,692' do
35
+ expect(Sapor::Luxembourg.instance.population_size).to eq(3_276_692)
36
+ end
37
+ end
38
+
39
+ describe Sapor::Luxembourg, '#seats' do
40
+ it 'calculates the number of seats for the election of 2013 correctly' do
41
+ Luxembourg = Sapor::Luxembourg.instance
42
+ results = Luxembourg.overall_election_results_of_2013
43
+ seats = Luxembourg.seats(results)
44
+ expect(seats['Chrëschtlech-Sozial Vollekspartei']).to eq(23)
45
+ expect(seats['Lëtzebuerger Sozialistesch Aarbechterpartei']).to eq(13)
46
+ expect(seats['Demokratesch Partei']).to eq(13)
47
+ expect(seats['déi gréng']).to eq(6)
48
+ expect(seats['Alternativ Demokratesch Reformpartei']).to eq(3)
49
+ expect(seats['Déi Lénk']).to eq(2)
50
+ expect(seats['Piratepartei Lëtzebuerg']).to eq(0)
51
+ expect(seats['Kommunistesch Partei Lëtzebuerg']).to eq(0)
52
+ expect(seats['Partei fir Integral Demokratie']).to eq(0)
53
+ end
54
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ require 'spec_helper'
21
+
22
+ SAMPLE_ELECTION_RESULT = { 'Red' => 120, 'Green' => 120, 'Blue' => 100 }.freeze
23
+
24
+ SAMPLE_DETAILED_ELECTION_RESULT = { 'North' => { 'Red' => 50, 'Green' => 70 },
25
+ 'South' => { 'Red' => 70, 'Green' => 50,
26
+ 'Blue' => 100 } }.freeze
27
+
28
+ SAMPLE_SEAT_DISTRIBUTION = { 'North' => 3, 'South' => 5 }.freeze
29
+
30
+ SAMPLE_LEVELING_SEATS = 2
31
+
32
+ SAMPLE_LEVELING_THRESHOLD = 0.05
33
+
34
+ SAMPLE_POLL_RESULT = { 'Red' => 120, 'Green' => 120 }.freeze
35
+
36
+ LEVELED = Sapor::MultiDistrictLeveledProportional.new( \
37
+ SAMPLE_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
38
+ SAMPLE_SEAT_DISTRIBUTION, SAMPLE_LEVELING_SEATS, SAMPLE_LEVELING_THRESHOLD,
39
+ Sapor::SainteLague14Denominators
40
+ )
41
+
42
+ describe Sapor::MultiDistrictLeveledProportional, '#project' do
43
+ it 'projects same result as last result if fed with last election result' do
44
+ projection = LEVELED.project(SAMPLE_POLL_RESULT)
45
+ expect(projection['Red']).to eq(4)
46
+ expect(projection['Green']).to eq(4)
47
+ expect(projection['Blue']).to eq(2)
48
+ end
49
+ end
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Statistical Analysis of Polling Results (SAPoR)
4
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
5
+ #
6
+ # This file is part of SAPoR.
7
+ #
8
+ # SAPoR is free software: you can redistribute it and/or modify it under the
9
+ # terms of the GNU General Public License as published by the Free Software
10
+ # Foundation, either version 3 of the License, or (at your option) any later
11
+ # version.
12
+ #
13
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
14
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
+ #
17
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
18
+ #
19
+
20
+ SAMPLE_RGB_ELECTION_RESULT = { 'Red' => 120, 'Green' => 120, 'Blue' => 100 }
21
+
22
+ SAMPLE_DETAILED_ELECTION_RESULT = { 'North' => { 'Red' => 50, 'Green' => 70
23
+ },
24
+ 'South' => { 'Red' => 70, 'Green' => 50,
25
+ 'Blue' => 100 } }
26
+
27
+ SAMPLE_SEAT_DISTRIBUTION = { 'North' => 3, 'South' => 5 }
28
+
29
+ PROPORTIONAL = Sapor::MultiDistrictProportional.new( \
30
+ SAMPLE_RGB_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
31
+ SAMPLE_SEAT_DISTRIBUTION, Sapor::DhondtDenominators)
32
+
33
+ describe Sapor::MultiDistrictProportional, '#project' do
34
+ # Seat distribution:
35
+ # North: Green 1 70, Red 1 50, Green 2 35, (Red 2 25)
36
+ # South: Blue 1 100, Red 1 70, Green 1 50, Blue 2 50, Red 2 35, (Blue 3 33)
37
+ it 'projects same result as last result if fed with last election result' do
38
+ projection = PROPORTIONAL.project(SAMPLE_RGB_ELECTION_RESULT)
39
+ expect(projection['Red']).to eq(3)
40
+ expect(projection['Green']).to eq(3)
41
+ expect(projection['Blue']).to eq(2)
42
+ end
43
+
44
+ # Seat distribution:
45
+ # North: Green 1 62, Red 1 44, Green 2 31, (Red 2 22)
46
+ # South: Blue 1 128, Red 1 62, Green 1 44, Blue 2 64, Blue 3 42, (Red 2 31)
47
+ it 'extrapolates the seat distribution according to the new result' do
48
+ new_result = { 'Red' => 100, 'Green' => 100, 'Blue' => 120 }
49
+ projection = PROPORTIONAL.project(new_result)
50
+ expect(projection['Red']).to eq(2)
51
+ expect(projection['Green']).to eq(3)
52
+ expect(projection['Blue']).to eq(3)
53
+ end
54
+
55
+ # Seat distribution:
56
+ # North: Green 1 70, Red 1 50, Green 2 35 (Red 2 25, Green 3 23)
57
+ # South: Blue 1 100, Red 1 70, Blue 2 50, Red 2 35, Blue 3 33, (Blue 4 25,
58
+ # Red 3 23, Green below threshold)
59
+ it 'excludes parties below the threshold' do
60
+ proportional = Sapor::MultiDistrictProportional.new( \
61
+ SAMPLE_RGB_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
62
+ SAMPLE_SEAT_DISTRIBUTION, Sapor::DhondtDenominators, 51.to_f / 220)
63
+ projection = proportional.project(SAMPLE_RGB_ELECTION_RESULT)
64
+ expect(projection['Red']).to eq(3)
65
+ expect(projection['Green']).to eq(2)
66
+ expect(projection['Blue']).to eq(3)
67
+ end
68
+
69
+ # Seat distribution:
70
+ # North: Green 1 70, Red 1 50, Green 2 35, (Red 2 25)
71
+ # South: Blue 1 100, Red 1 70, Green 1 50, Blue 2 50, Red 2 35, (Blue 3 33)
72
+ it 'includes parties at the threshold' do
73
+ proportional = Sapor::MultiDistrictProportional.new( \
74
+ SAMPLE_RGB_ELECTION_RESULT, SAMPLE_DETAILED_ELECTION_RESULT,
75
+ SAMPLE_SEAT_DISTRIBUTION, Sapor::DhondtDenominators, 50.to_f / 220)
76
+ projection = proportional.project(SAMPLE_RGB_ELECTION_RESULT)
77
+ expect(projection['Red']).to eq(3)
78
+ expect(projection['Green']).to eq(3)
79
+ expect(projection['Blue']).to eq(2)
80
+ end
81
+ end
@@ -0,0 +1,107 @@
1
+ #
2
+ # Statistical Analysis of Polling Results (SAPoR)
3
+ # Copyright (C) 2016 Filip van Laenen <f.a.vanlaenen@ieee.org>
4
+ #
5
+ # This file is part of SAPoR.
6
+ #
7
+ # SAPoR is free software: you can redistribute it and/or modify it under the
8
+ # terms of the GNU General Public License as published by the Free Software
9
+ # Foundation, either version 3 of the License, or (at your option) any later
10
+ # version.
11
+ #
12
+ # SAPoR is distributed in the hope that it will be useful, but WITHOUT ANY
13
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
+ #
16
+ # You can find a copy of the GNU General Public License in /doc/gpl.txt
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Sapor::Netherlands, '#area_code' do
22
+ it 'returns NL as the area code' do
23
+ expect(Sapor::Netherlands.instance.area_code).to eq('NL')
24
+ end
25
+ end
26
+
27
+ describe Sapor::Netherlands, '#no_of_seats' do
28
+ it 'returns 150 as the number of seats' do
29
+ expect(Sapor::Netherlands.instance.no_of_seats).to eq(150)
30
+ end
31
+ end
32
+
33
+ describe Sapor::Netherlands, '#population_size' do
34
+ it 'returns a population size of 10,516,041' do
35
+ expect(Sapor::Netherlands.instance.population_size).to eq(10_516_041)
36
+ end
37
+ end
38
+
39
+ describe Sapor::Netherlands, '#threshold' do
40
+ it 'returns a threshold of 1/150' do
41
+ expect(Sapor::Netherlands.instance.threshold).to eq(1 / 150.to_f)
42
+ end
43
+ end
44
+
45
+ describe Sapor::Netherlands, '#seats' do
46
+ it 'calculates the number of seats for the election of 2017' do
47
+ results = { 'Volkspartij voor Vrijheid en Democratie' => 2_238_351,
48
+ 'Partij voor de Vrijheid' => 1_372_941,
49
+ 'Christen-Democratisch Appèl' => 1_301_796,
50
+ 'Democraten 66' => 1_285_819,
51
+ 'GroenLinks' => 959_600,
52
+ 'Socialistische Partij' => 955_633,
53
+ 'Partij van de Arbeid' => 599_699,
54
+ 'ChristenUnie' => 356_271,
55
+ 'Partij voor de Dieren' => 335_214,
56
+ '50Plus' => 327_131,
57
+ 'Staatkundig Gereformeerde Partij' => 218_950,
58
+ 'DENK' => 216_147,
59
+ 'Forum voor Democratie' => 187_162,
60
+ 'VoorNederland' => 38_209,
61
+ 'Piratenpartij' => 35_478,
62
+ 'Artikel 1' => 28_700,
63
+ 'Nieuwe Wegen' => 14_362,
64
+ 'OndernemersPartij' => 12_570,
65
+ 'Lokaal in de Kamer' => 6_858,
66
+ 'Niet Stemmers' => 6_025,
67
+ 'De Burger Beweging' => 5_221,
68
+ 'GeenPeil' => 4_945,
69
+ 'Jezus Leeft' => 3_099,
70
+ 'Vrijzinnige Partij' => 2_938,
71
+ 'Libertarische Partij' => 1_492,
72
+ 'Partij voor Mens en Spirit–Basisinkomen Partij–Vrede en ' \
73
+ 'Recht' => 726,
74
+ 'StemNL' => 527,
75
+ 'Vrije Democratische Partij' => 177 }
76
+ seats = Sapor::Netherlands.instance.seats(results)
77
+ expect(seats['Volkspartij voor Vrijheid en Democratie']).to eq(33)
78
+ expect(seats['Partij voor de Vrijheid']).to eq(20)
79
+ expect(seats['Christen-Democratisch Appèl']).to eq(19)
80
+ expect(seats['Democraten 66']).to eq(19)
81
+ expect(seats['GroenLinks']).to eq(14)
82
+ expect(seats['Socialistische Partij']).to eq(14)
83
+ expect(seats['Partij van de Arbeid']).to eq(9)
84
+ expect(seats['ChristenUnie']).to eq(5)
85
+ expect(seats['Partij voor de Dieren']).to eq(5)
86
+ expect(seats['50Plus']).to eq(4)
87
+ expect(seats['Staatkundig Gereformeerde Partij']).to eq(3)
88
+ expect(seats['DENK']).to eq(3)
89
+ expect(seats['Forum voor Democratie']).to eq(2)
90
+ expect(seats['VoorNederland']).to eq(0)
91
+ expect(seats['Piratenpartij']).to eq(0)
92
+ expect(seats['Artikel 1']).to eq(0)
93
+ expect(seats['Nieuwe Wegen']).to eq(0)
94
+ expect(seats['OndernemersPartij']).to eq(0)
95
+ expect(seats['Lokaal in de Kamer']).to eq(0)
96
+ expect(seats['Niet Stemmers']).to eq(0)
97
+ expect(seats['De Burger Beweging']).to eq(0)
98
+ expect(seats['GeenPeil']).to eq(0)
99
+ expect(seats['Jezus Leeft']).to eq(0)
100
+ expect(seats['Vrijzinnige Partij']).to eq(0)
101
+ expect(seats['Libertarische Partij']).to eq(0)
102
+ expect(seats['Partij voor Mens en Spirit–Basisinkomen Partij–Vrede en ' \
103
+ 'Recht']).to eq(0)
104
+ expect(seats['StemNL']).to eq(0)
105
+ expect(seats['Vrije Democratische Partij']).to eq(0)
106
+ end
107
+ end