immutable-ruby 0.0.1

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 (346) hide show
  1. checksums.yaml +7 -0
  2. data/lib/immutable.rb +9 -0
  3. data/lib/immutable/core_ext.rb +2 -0
  4. data/lib/immutable/core_ext/enumerable.rb +11 -0
  5. data/lib/immutable/core_ext/io.rb +21 -0
  6. data/lib/immutable/deque.rb +254 -0
  7. data/lib/immutable/enumerable.rb +152 -0
  8. data/lib/immutable/hash.rb +841 -0
  9. data/lib/immutable/list.rb +1595 -0
  10. data/lib/immutable/nested.rb +75 -0
  11. data/lib/immutable/set.rb +583 -0
  12. data/lib/immutable/sorted_set.rb +1464 -0
  13. data/lib/immutable/trie.rb +338 -0
  14. data/lib/immutable/undefined.rb +5 -0
  15. data/lib/immutable/vector.rb +1539 -0
  16. data/lib/immutable/version.rb +5 -0
  17. data/spec/fixtures/io_spec.txt +3 -0
  18. data/spec/lib/immutable/core_ext/array_spec.rb +13 -0
  19. data/spec/lib/immutable/core_ext/enumerable_spec.rb +29 -0
  20. data/spec/lib/immutable/core_ext/io_spec.rb +28 -0
  21. data/spec/lib/immutable/deque/clear_spec.rb +33 -0
  22. data/spec/lib/immutable/deque/construction_spec.rb +29 -0
  23. data/spec/lib/immutable/deque/copying_spec.rb +19 -0
  24. data/spec/lib/immutable/deque/dequeue_spec.rb +34 -0
  25. data/spec/lib/immutable/deque/empty_spec.rb +39 -0
  26. data/spec/lib/immutable/deque/enqueue_spec.rb +27 -0
  27. data/spec/lib/immutable/deque/first_spec.rb +17 -0
  28. data/spec/lib/immutable/deque/inspect_spec.rb +23 -0
  29. data/spec/lib/immutable/deque/last_spec.rb +17 -0
  30. data/spec/lib/immutable/deque/marshal_spec.rb +33 -0
  31. data/spec/lib/immutable/deque/new_spec.rb +43 -0
  32. data/spec/lib/immutable/deque/pop_spec.rb +36 -0
  33. data/spec/lib/immutable/deque/pretty_print_spec.rb +23 -0
  34. data/spec/lib/immutable/deque/push_spec.rb +36 -0
  35. data/spec/lib/immutable/deque/random_modification_spec.rb +33 -0
  36. data/spec/lib/immutable/deque/shift_spec.rb +29 -0
  37. data/spec/lib/immutable/deque/size_spec.rb +19 -0
  38. data/spec/lib/immutable/deque/to_a_spec.rb +26 -0
  39. data/spec/lib/immutable/deque/to_ary_spec.rb +35 -0
  40. data/spec/lib/immutable/deque/to_list_spec.rb +24 -0
  41. data/spec/lib/immutable/deque/unshift_spec.rb +30 -0
  42. data/spec/lib/immutable/hash/all_spec.rb +53 -0
  43. data/spec/lib/immutable/hash/any_spec.rb +53 -0
  44. data/spec/lib/immutable/hash/assoc_spec.rb +51 -0
  45. data/spec/lib/immutable/hash/clear_spec.rb +42 -0
  46. data/spec/lib/immutable/hash/construction_spec.rb +38 -0
  47. data/spec/lib/immutable/hash/copying_spec.rb +13 -0
  48. data/spec/lib/immutable/hash/default_proc_spec.rb +72 -0
  49. data/spec/lib/immutable/hash/delete_spec.rb +39 -0
  50. data/spec/lib/immutable/hash/each_spec.rb +77 -0
  51. data/spec/lib/immutable/hash/each_with_index_spec.rb +29 -0
  52. data/spec/lib/immutable/hash/empty_spec.rb +43 -0
  53. data/spec/lib/immutable/hash/eql_spec.rb +69 -0
  54. data/spec/lib/immutable/hash/except_spec.rb +42 -0
  55. data/spec/lib/immutable/hash/fetch_spec.rb +57 -0
  56. data/spec/lib/immutable/hash/find_spec.rb +43 -0
  57. data/spec/lib/immutable/hash/flat_map_spec.rb +35 -0
  58. data/spec/lib/immutable/hash/flatten_spec.rb +98 -0
  59. data/spec/lib/immutable/hash/get_spec.rb +79 -0
  60. data/spec/lib/immutable/hash/has_key_spec.rb +31 -0
  61. data/spec/lib/immutable/hash/has_value_spec.rb +27 -0
  62. data/spec/lib/immutable/hash/hash_spec.rb +29 -0
  63. data/spec/lib/immutable/hash/inspect_spec.rb +30 -0
  64. data/spec/lib/immutable/hash/invert_spec.rb +30 -0
  65. data/spec/lib/immutable/hash/key_spec.rb +27 -0
  66. data/spec/lib/immutable/hash/keys_spec.rb +15 -0
  67. data/spec/lib/immutable/hash/map_spec.rb +45 -0
  68. data/spec/lib/immutable/hash/marshal_spec.rb +28 -0
  69. data/spec/lib/immutable/hash/merge_spec.rb +82 -0
  70. data/spec/lib/immutable/hash/min_max_spec.rb +45 -0
  71. data/spec/lib/immutable/hash/new_spec.rb +70 -0
  72. data/spec/lib/immutable/hash/none_spec.rb +48 -0
  73. data/spec/lib/immutable/hash/partition_spec.rb +35 -0
  74. data/spec/lib/immutable/hash/pretty_print_spec.rb +34 -0
  75. data/spec/lib/immutable/hash/put_spec.rb +102 -0
  76. data/spec/lib/immutable/hash/reduce_spec.rb +35 -0
  77. data/spec/lib/immutable/hash/reject_spec.rb +61 -0
  78. data/spec/lib/immutable/hash/reverse_each_spec.rb +27 -0
  79. data/spec/lib/immutable/hash/sample_spec.rb +13 -0
  80. data/spec/lib/immutable/hash/select_spec.rb +57 -0
  81. data/spec/lib/immutable/hash/size_spec.rb +51 -0
  82. data/spec/lib/immutable/hash/slice_spec.rb +44 -0
  83. data/spec/lib/immutable/hash/sort_spec.rb +26 -0
  84. data/spec/lib/immutable/hash/store_spec.rb +75 -0
  85. data/spec/lib/immutable/hash/take_spec.rb +35 -0
  86. data/spec/lib/immutable/hash/to_a_spec.rb +13 -0
  87. data/spec/lib/immutable/hash/to_hash_spec.rb +21 -0
  88. data/spec/lib/immutable/hash/update_in_spec.rb +79 -0
  89. data/spec/lib/immutable/hash/values_at_spec.rb +13 -0
  90. data/spec/lib/immutable/hash/values_spec.rb +23 -0
  91. data/spec/lib/immutable/list/add_spec.rb +25 -0
  92. data/spec/lib/immutable/list/all_spec.rb +57 -0
  93. data/spec/lib/immutable/list/any_spec.rb +49 -0
  94. data/spec/lib/immutable/list/append_spec.rb +38 -0
  95. data/spec/lib/immutable/list/at_spec.rb +29 -0
  96. data/spec/lib/immutable/list/break_spec.rb +69 -0
  97. data/spec/lib/immutable/list/cadr_spec.rb +38 -0
  98. data/spec/lib/immutable/list/chunk_spec.rb +28 -0
  99. data/spec/lib/immutable/list/clear_spec.rb +24 -0
  100. data/spec/lib/immutable/list/combination_spec.rb +33 -0
  101. data/spec/lib/immutable/list/compact_spec.rb +34 -0
  102. data/spec/lib/immutable/list/compare_spec.rb +30 -0
  103. data/spec/lib/immutable/list/cons_spec.rb +25 -0
  104. data/spec/lib/immutable/list/construction_spec.rb +110 -0
  105. data/spec/lib/immutable/list/copying_spec.rb +19 -0
  106. data/spec/lib/immutable/list/count_spec.rb +36 -0
  107. data/spec/lib/immutable/list/cycle_spec.rb +28 -0
  108. data/spec/lib/immutable/list/delete_at_spec.rb +18 -0
  109. data/spec/lib/immutable/list/delete_spec.rb +16 -0
  110. data/spec/lib/immutable/list/drop_spec.rb +30 -0
  111. data/spec/lib/immutable/list/drop_while_spec.rb +38 -0
  112. data/spec/lib/immutable/list/each_slice_spec.rb +51 -0
  113. data/spec/lib/immutable/list/each_spec.rb +40 -0
  114. data/spec/lib/immutable/list/each_with_index_spec.rb +28 -0
  115. data/spec/lib/immutable/list/empty_spec.rb +23 -0
  116. data/spec/lib/immutable/list/eql_spec.rb +61 -0
  117. data/spec/lib/immutable/list/fill_spec.rb +49 -0
  118. data/spec/lib/immutable/list/find_all_spec.rb +70 -0
  119. data/spec/lib/immutable/list/find_index_spec.rb +35 -0
  120. data/spec/lib/immutable/list/find_spec.rb +42 -0
  121. data/spec/lib/immutable/list/flat_map_spec.rb +51 -0
  122. data/spec/lib/immutable/list/flatten_spec.rb +30 -0
  123. data/spec/lib/immutable/list/grep_spec.rb +46 -0
  124. data/spec/lib/immutable/list/group_by_spec.rb +41 -0
  125. data/spec/lib/immutable/list/hash_spec.rb +21 -0
  126. data/spec/lib/immutable/list/head_spec.rb +19 -0
  127. data/spec/lib/immutable/list/include_spec.rb +35 -0
  128. data/spec/lib/immutable/list/index_spec.rb +33 -0
  129. data/spec/lib/immutable/list/indices_spec.rb +61 -0
  130. data/spec/lib/immutable/list/init_spec.rb +28 -0
  131. data/spec/lib/immutable/list/inits_spec.rb +28 -0
  132. data/spec/lib/immutable/list/insert_spec.rb +46 -0
  133. data/spec/lib/immutable/list/inspect_spec.rb +29 -0
  134. data/spec/lib/immutable/list/intersperse_spec.rb +28 -0
  135. data/spec/lib/immutable/list/join_spec.rb +63 -0
  136. data/spec/lib/immutable/list/last_spec.rb +23 -0
  137. data/spec/lib/immutable/list/ltlt_spec.rb +19 -0
  138. data/spec/lib/immutable/list/map_spec.rb +45 -0
  139. data/spec/lib/immutable/list/maximum_spec.rb +39 -0
  140. data/spec/lib/immutable/list/merge_by_spec.rb +51 -0
  141. data/spec/lib/immutable/list/merge_spec.rb +59 -0
  142. data/spec/lib/immutable/list/minimum_spec.rb +39 -0
  143. data/spec/lib/immutable/list/multithreading_spec.rb +47 -0
  144. data/spec/lib/immutable/list/none_spec.rb +47 -0
  145. data/spec/lib/immutable/list/one_spec.rb +49 -0
  146. data/spec/lib/immutable/list/partition_spec.rb +115 -0
  147. data/spec/lib/immutable/list/permutation_spec.rb +55 -0
  148. data/spec/lib/immutable/list/pop_spec.rb +25 -0
  149. data/spec/lib/immutable/list/product_spec.rb +23 -0
  150. data/spec/lib/immutable/list/reduce_spec.rb +53 -0
  151. data/spec/lib/immutable/list/reject_spec.rb +45 -0
  152. data/spec/lib/immutable/list/reverse_spec.rb +34 -0
  153. data/spec/lib/immutable/list/rotate_spec.rb +36 -0
  154. data/spec/lib/immutable/list/sample_spec.rb +13 -0
  155. data/spec/lib/immutable/list/select_spec.rb +70 -0
  156. data/spec/lib/immutable/list/size_spec.rb +25 -0
  157. data/spec/lib/immutable/list/slice_spec.rb +229 -0
  158. data/spec/lib/immutable/list/sorting_spec.rb +46 -0
  159. data/spec/lib/immutable/list/span_spec.rb +76 -0
  160. data/spec/lib/immutable/list/split_at_spec.rb +43 -0
  161. data/spec/lib/immutable/list/subsequences_spec.rb +23 -0
  162. data/spec/lib/immutable/list/sum_spec.rb +23 -0
  163. data/spec/lib/immutable/list/tail_spec.rb +30 -0
  164. data/spec/lib/immutable/list/tails_spec.rb +28 -0
  165. data/spec/lib/immutable/list/take_spec.rb +30 -0
  166. data/spec/lib/immutable/list/take_while_spec.rb +46 -0
  167. data/spec/lib/immutable/list/to_a_spec.rb +39 -0
  168. data/spec/lib/immutable/list/to_ary_spec.rb +41 -0
  169. data/spec/lib/immutable/list/to_list_spec.rb +19 -0
  170. data/spec/lib/immutable/list/to_set_spec.rb +17 -0
  171. data/spec/lib/immutable/list/transpose_spec.rb +19 -0
  172. data/spec/lib/immutable/list/union_spec.rb +31 -0
  173. data/spec/lib/immutable/list/uniq_spec.rb +35 -0
  174. data/spec/lib/immutable/list/zip_spec.rb +23 -0
  175. data/spec/lib/immutable/nested/construction_spec.rb +95 -0
  176. data/spec/lib/immutable/set/add_spec.rb +75 -0
  177. data/spec/lib/immutable/set/all_spec.rb +51 -0
  178. data/spec/lib/immutable/set/any_spec.rb +51 -0
  179. data/spec/lib/immutable/set/clear_spec.rb +33 -0
  180. data/spec/lib/immutable/set/compact_spec.rb +30 -0
  181. data/spec/lib/immutable/set/construction_spec.rb +18 -0
  182. data/spec/lib/immutable/set/copying_spec.rb +13 -0
  183. data/spec/lib/immutable/set/count_spec.rb +36 -0
  184. data/spec/lib/immutable/set/delete_spec.rb +71 -0
  185. data/spec/lib/immutable/set/difference_spec.rb +49 -0
  186. data/spec/lib/immutable/set/disjoint_spec.rb +25 -0
  187. data/spec/lib/immutable/set/each_spec.rb +45 -0
  188. data/spec/lib/immutable/set/empty_spec.rb +44 -0
  189. data/spec/lib/immutable/set/eqeq_spec.rb +103 -0
  190. data/spec/lib/immutable/set/eql_spec.rb +109 -0
  191. data/spec/lib/immutable/set/exclusion_spec.rb +47 -0
  192. data/spec/lib/immutable/set/find_spec.rb +35 -0
  193. data/spec/lib/immutable/set/first_spec.rb +28 -0
  194. data/spec/lib/immutable/set/flatten_spec.rb +46 -0
  195. data/spec/lib/immutable/set/grep_spec.rb +57 -0
  196. data/spec/lib/immutable/set/group_by_spec.rb +59 -0
  197. data/spec/lib/immutable/set/hash_spec.rb +22 -0
  198. data/spec/lib/immutable/set/include_spec.rb +60 -0
  199. data/spec/lib/immutable/set/inspect_spec.rb +47 -0
  200. data/spec/lib/immutable/set/intersect_spec.rb +25 -0
  201. data/spec/lib/immutable/set/intersection_spec.rb +52 -0
  202. data/spec/lib/immutable/set/join_spec.rb +64 -0
  203. data/spec/lib/immutable/set/map_spec.rb +59 -0
  204. data/spec/lib/immutable/set/marshal_spec.rb +28 -0
  205. data/spec/lib/immutable/set/maximum_spec.rb +36 -0
  206. data/spec/lib/immutable/set/minimum_spec.rb +36 -0
  207. data/spec/lib/immutable/set/new_spec.rb +53 -0
  208. data/spec/lib/immutable/set/none_spec.rb +47 -0
  209. data/spec/lib/immutable/set/one_spec.rb +47 -0
  210. data/spec/lib/immutable/set/partition_spec.rb +52 -0
  211. data/spec/lib/immutable/set/product_spec.rb +23 -0
  212. data/spec/lib/immutable/set/reduce_spec.rb +55 -0
  213. data/spec/lib/immutable/set/reject_spec.rb +50 -0
  214. data/spec/lib/immutable/set/reverse_each_spec.rb +38 -0
  215. data/spec/lib/immutable/set/sample_spec.rb +13 -0
  216. data/spec/lib/immutable/set/select_spec.rb +73 -0
  217. data/spec/lib/immutable/set/size_spec.rb +17 -0
  218. data/spec/lib/immutable/set/sorting_spec.rb +59 -0
  219. data/spec/lib/immutable/set/subset_spec.rb +51 -0
  220. data/spec/lib/immutable/set/sum_spec.rb +23 -0
  221. data/spec/lib/immutable/set/superset_spec.rb +51 -0
  222. data/spec/lib/immutable/set/to_a_spec.rb +30 -0
  223. data/spec/lib/immutable/set/to_list_spec.rb +35 -0
  224. data/spec/lib/immutable/set/to_set_spec.rb +19 -0
  225. data/spec/lib/immutable/set/union_spec.rb +63 -0
  226. data/spec/lib/immutable/sorted_set/above_spec.rb +51 -0
  227. data/spec/lib/immutable/sorted_set/add_spec.rb +62 -0
  228. data/spec/lib/immutable/sorted_set/at_spec.rb +24 -0
  229. data/spec/lib/immutable/sorted_set/below_spec.rb +51 -0
  230. data/spec/lib/immutable/sorted_set/between_spec.rb +51 -0
  231. data/spec/lib/immutable/sorted_set/clear_spec.rb +43 -0
  232. data/spec/lib/immutable/sorted_set/copying_spec.rb +20 -0
  233. data/spec/lib/immutable/sorted_set/delete_at_spec.rb +18 -0
  234. data/spec/lib/immutable/sorted_set/delete_spec.rb +89 -0
  235. data/spec/lib/immutable/sorted_set/difference_spec.rb +22 -0
  236. data/spec/lib/immutable/sorted_set/disjoint_spec.rb +25 -0
  237. data/spec/lib/immutable/sorted_set/drop_spec.rb +55 -0
  238. data/spec/lib/immutable/sorted_set/drop_while_spec.rb +34 -0
  239. data/spec/lib/immutable/sorted_set/each_spec.rb +28 -0
  240. data/spec/lib/immutable/sorted_set/empty_spec.rb +34 -0
  241. data/spec/lib/immutable/sorted_set/eql_spec.rb +120 -0
  242. data/spec/lib/immutable/sorted_set/exclusion_spec.rb +22 -0
  243. data/spec/lib/immutable/sorted_set/fetch_spec.rb +64 -0
  244. data/spec/lib/immutable/sorted_set/find_index_spec.rb +40 -0
  245. data/spec/lib/immutable/sorted_set/first_spec.rb +18 -0
  246. data/spec/lib/immutable/sorted_set/from_spec.rb +51 -0
  247. data/spec/lib/immutable/sorted_set/group_by_spec.rb +57 -0
  248. data/spec/lib/immutable/sorted_set/include_spec.rb +23 -0
  249. data/spec/lib/immutable/sorted_set/inspect_spec.rb +37 -0
  250. data/spec/lib/immutable/sorted_set/intersect_spec.rb +25 -0
  251. data/spec/lib/immutable/sorted_set/intersection_spec.rb +28 -0
  252. data/spec/lib/immutable/sorted_set/last_spec.rb +36 -0
  253. data/spec/lib/immutable/sorted_set/map_spec.rb +43 -0
  254. data/spec/lib/immutable/sorted_set/marshal_spec.rb +36 -0
  255. data/spec/lib/immutable/sorted_set/maximum_spec.rb +36 -0
  256. data/spec/lib/immutable/sorted_set/minimum_spec.rb +19 -0
  257. data/spec/lib/immutable/sorted_set/new_spec.rb +71 -0
  258. data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +28 -0
  259. data/spec/lib/immutable/sorted_set/sample_spec.rb +13 -0
  260. data/spec/lib/immutable/sorted_set/select_spec.rb +61 -0
  261. data/spec/lib/immutable/sorted_set/size_spec.rb +17 -0
  262. data/spec/lib/immutable/sorted_set/slice_spec.rb +256 -0
  263. data/spec/lib/immutable/sorted_set/sorting_spec.rb +44 -0
  264. data/spec/lib/immutable/sorted_set/subset_spec.rb +47 -0
  265. data/spec/lib/immutable/sorted_set/superset_spec.rb +47 -0
  266. data/spec/lib/immutable/sorted_set/take_spec.rb +54 -0
  267. data/spec/lib/immutable/sorted_set/take_while_spec.rb +33 -0
  268. data/spec/lib/immutable/sorted_set/to_set_spec.rb +17 -0
  269. data/spec/lib/immutable/sorted_set/union_spec.rb +27 -0
  270. data/spec/lib/immutable/sorted_set/up_to_spec.rb +52 -0
  271. data/spec/lib/immutable/sorted_set/values_at_spec.rb +33 -0
  272. data/spec/lib/immutable/vector/add_spec.rb +67 -0
  273. data/spec/lib/immutable/vector/any_spec.rb +69 -0
  274. data/spec/lib/immutable/vector/assoc_spec.rb +45 -0
  275. data/spec/lib/immutable/vector/bsearch_spec.rb +65 -0
  276. data/spec/lib/immutable/vector/clear_spec.rb +33 -0
  277. data/spec/lib/immutable/vector/combination_spec.rb +81 -0
  278. data/spec/lib/immutable/vector/compact_spec.rb +29 -0
  279. data/spec/lib/immutable/vector/compare_spec.rb +31 -0
  280. data/spec/lib/immutable/vector/concat_spec.rb +34 -0
  281. data/spec/lib/immutable/vector/copying_spec.rb +20 -0
  282. data/spec/lib/immutable/vector/count_spec.rb +17 -0
  283. data/spec/lib/immutable/vector/delete_at_spec.rb +53 -0
  284. data/spec/lib/immutable/vector/delete_spec.rb +30 -0
  285. data/spec/lib/immutable/vector/drop_spec.rb +41 -0
  286. data/spec/lib/immutable/vector/drop_while_spec.rb +54 -0
  287. data/spec/lib/immutable/vector/each_index_spec.rb +40 -0
  288. data/spec/lib/immutable/vector/each_spec.rb +44 -0
  289. data/spec/lib/immutable/vector/each_with_index_spec.rb +39 -0
  290. data/spec/lib/immutable/vector/empty_spec.rb +41 -0
  291. data/spec/lib/immutable/vector/eql_spec.rb +76 -0
  292. data/spec/lib/immutable/vector/fetch_spec.rb +64 -0
  293. data/spec/lib/immutable/vector/fill_spec.rb +88 -0
  294. data/spec/lib/immutable/vector/first_spec.rb +18 -0
  295. data/spec/lib/immutable/vector/flat_map_spec.rb +50 -0
  296. data/spec/lib/immutable/vector/flatten_spec.rb +58 -0
  297. data/spec/lib/immutable/vector/get_spec.rb +74 -0
  298. data/spec/lib/immutable/vector/group_by_spec.rb +57 -0
  299. data/spec/lib/immutable/vector/include_spec.rb +30 -0
  300. data/spec/lib/immutable/vector/insert_spec.rb +68 -0
  301. data/spec/lib/immutable/vector/inspect_spec.rb +49 -0
  302. data/spec/lib/immutable/vector/join_spec.rb +58 -0
  303. data/spec/lib/immutable/vector/last_spec.rb +45 -0
  304. data/spec/lib/immutable/vector/length_spec.rb +45 -0
  305. data/spec/lib/immutable/vector/ltlt_spec.rb +65 -0
  306. data/spec/lib/immutable/vector/map_spec.rb +51 -0
  307. data/spec/lib/immutable/vector/marshal_spec.rb +31 -0
  308. data/spec/lib/immutable/vector/maximum_spec.rb +33 -0
  309. data/spec/lib/immutable/vector/minimum_spec.rb +33 -0
  310. data/spec/lib/immutable/vector/multiply_spec.rb +47 -0
  311. data/spec/lib/immutable/vector/new_spec.rb +50 -0
  312. data/spec/lib/immutable/vector/partition_spec.rb +52 -0
  313. data/spec/lib/immutable/vector/permutation_spec.rb +91 -0
  314. data/spec/lib/immutable/vector/pop_spec.rb +26 -0
  315. data/spec/lib/immutable/vector/product_spec.rb +70 -0
  316. data/spec/lib/immutable/vector/reduce_spec.rb +55 -0
  317. data/spec/lib/immutable/vector/reject_spec.rb +43 -0
  318. data/spec/lib/immutable/vector/repeated_combination_spec.rb +77 -0
  319. data/spec/lib/immutable/vector/repeated_permutation_spec.rb +93 -0
  320. data/spec/lib/immutable/vector/reverse_each_spec.rb +31 -0
  321. data/spec/lib/immutable/vector/reverse_spec.rb +21 -0
  322. data/spec/lib/immutable/vector/rindex_spec.rb +36 -0
  323. data/spec/lib/immutable/vector/rotate_spec.rb +73 -0
  324. data/spec/lib/immutable/vector/sample_spec.rb +13 -0
  325. data/spec/lib/immutable/vector/select_spec.rb +63 -0
  326. data/spec/lib/immutable/vector/set_spec.rb +174 -0
  327. data/spec/lib/immutable/vector/shift_spec.rb +27 -0
  328. data/spec/lib/immutable/vector/shuffle_spec.rb +43 -0
  329. data/spec/lib/immutable/vector/slice_spec.rb +240 -0
  330. data/spec/lib/immutable/vector/sorting_spec.rb +56 -0
  331. data/spec/lib/immutable/vector/sum_spec.rb +17 -0
  332. data/spec/lib/immutable/vector/take_spec.rb +42 -0
  333. data/spec/lib/immutable/vector/take_while_spec.rb +34 -0
  334. data/spec/lib/immutable/vector/to_a_spec.rb +41 -0
  335. data/spec/lib/immutable/vector/to_ary_spec.rb +34 -0
  336. data/spec/lib/immutable/vector/to_list_spec.rb +30 -0
  337. data/spec/lib/immutable/vector/to_set_spec.rb +21 -0
  338. data/spec/lib/immutable/vector/transpose_spec.rb +48 -0
  339. data/spec/lib/immutable/vector/uniq_spec.rb +76 -0
  340. data/spec/lib/immutable/vector/unshift_spec.rb +28 -0
  341. data/spec/lib/immutable/vector/update_in_spec.rb +82 -0
  342. data/spec/lib/immutable/vector/values_at_spec.rb +33 -0
  343. data/spec/lib/immutable/vector/zip_spec.rb +57 -0
  344. data/spec/lib/load_spec.rb +42 -0
  345. data/spec/spec_helper.rb +92 -0
  346. metadata +830 -0
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ [:difference, :subtract, :-].each do |method|
5
+ describe "##{method}" do
6
+ [
7
+ [[], [], []],
8
+ [["A"], [], ["A"]],
9
+ [["A"], ["A"], []],
10
+ [%w[A B C], ["B"], %w[A C]],
11
+ [%w[A B C], %w[A C], ["B"]],
12
+ [%w[A B C D E F], %w[B E F G M X], %w[A C D]]
13
+ ].each do |a, b, expected|
14
+ context "for #{a.inspect} and #{b.inspect}" do
15
+ it "returns #{expected.inspect}" do
16
+ SS[*a].send(method, SS[*b]).should eql(SS[*expected])
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ describe "#disjoint?" do
5
+ [
6
+ [[], [], true],
7
+ [["A"], [], true],
8
+ [[], ["A"], true],
9
+ [["A"], ["A"], false],
10
+ [%w[A B C], ["B"], false],
11
+ [["B"], %w[A B C], false],
12
+ [%w[A B C], %w[D E], true],
13
+ [%w[F G H I], %w[A B C], true],
14
+ [%w[A B C], %w[A B C], false],
15
+ [%w[A B C], %w[A B C D], false],
16
+ [%w[D E F G], %w[A B C], true],
17
+ ].each do |a, b, expected|
18
+ context "for #{a.inspect} and #{b.inspect}" do
19
+ it "returns #{expected}" do
20
+ SS[*a].disjoint?(SS[*b]).should be(expected)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,55 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ describe "#drop" do
5
+ [
6
+ [[], 0, []],
7
+ [[], 10, []],
8
+ [["A"], 10, []],
9
+ [%w[A B C], 0, %w[A B C]],
10
+ [%w[A B C], 1, %w[B C]],
11
+ [%w[A B C], 2, ["C"]],
12
+ [%w[A B C], 3, []]
13
+ ].each do |values, number, expected|
14
+ context "#{number} from #{values.inspect}" do
15
+ let(:sorted_set) { SS[*values] }
16
+
17
+ it "preserves the original" do
18
+ sorted_set.drop(number)
19
+ sorted_set.should eql(SS[*values])
20
+ end
21
+
22
+ it "returns #{expected.inspect}" do
23
+ sorted_set.drop(number).should eql(SS[*expected])
24
+ end
25
+ end
26
+ end
27
+
28
+ context "when argument is zero" do
29
+ let(:sorted_set) { SS[6, 7, 8, 9] }
30
+ it "returns self" do
31
+ sorted_set.drop(0).should be(sorted_set)
32
+ end
33
+ end
34
+
35
+ context "when the set has a custom order" do
36
+ let(:sorted_set) { SS.new([1, 2, 3]) { |x| -x }}
37
+ it "maintains the custom order" do
38
+ sorted_set.drop(1).to_a.should == [2, 1]
39
+ sorted_set.drop(2).to_a.should == [1]
40
+ end
41
+
42
+ it "keeps the comparator even when set is cleared" do
43
+ s = sorted_set.drop(3)
44
+ s.add(4).add(5).add(6).to_a.should == [6, 5, 4]
45
+ end
46
+ end
47
+
48
+ context "when called on a subclass" do
49
+ it "should return an instance of the subclass" do
50
+ subclass = Class.new(Immutable::SortedSet)
51
+ subclass.new([1,2,3]).drop(1).class.should be(subclass)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ describe "#drop_while" do
5
+ [
6
+ [[], []],
7
+ [["A"], []],
8
+ [%w[A B C], ["C"]],
9
+ [%w[A B C D E F G], %w[C D E F G]]
10
+ ].each do |values, expected|
11
+ context "on #{values.inspect}" do
12
+ let(:sorted_set) { SS[*values] }
13
+
14
+ context "with a block" do
15
+ it "preserves the original" do
16
+ sorted_set.drop_while { |item| item < "C" }
17
+ sorted_set.should eql(SS[*values])
18
+ end
19
+
20
+ it "returns #{expected.inspect}" do
21
+ sorted_set.drop_while { |item| item < "C" }.should eql(SS[*expected])
22
+ end
23
+ end
24
+
25
+ context "without a block" do
26
+ it "returns an Enumerator" do
27
+ sorted_set.drop_while.class.should be(Enumerator)
28
+ sorted_set.drop_while.each { |item| item < "C" }.should eql(SS[*expected])
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ describe "#each" do
5
+ context "with no block" do
6
+ let(:sorted_set) { SS["A", "B", "C"] }
7
+
8
+ it "returns an Enumerator" do
9
+ sorted_set.each.class.should be(Enumerator)
10
+ sorted_set.each.to_a.should eql(sorted_set.to_a)
11
+ end
12
+ end
13
+
14
+ context "with a block" do
15
+ let(:sorted_set) { SS.new((1..1025).to_a.reverse) }
16
+
17
+ it "returns self" do
18
+ sorted_set.each {}.should be(sorted_set)
19
+ end
20
+
21
+ it "iterates over the items in order" do
22
+ items = []
23
+ sorted_set.each { |item| items << item }
24
+ items.should == (1..1025).to_a
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ describe "#empty?" do
5
+ [
6
+ [[], true],
7
+ [["A"], false],
8
+ [%w[A B C], false],
9
+ ].each do |values, expected|
10
+ context "on #{values.inspect}" do
11
+ let(:sorted_set) { SS[*values] }
12
+
13
+ it "returns #{expected.inspect}" do
14
+ sorted_set.empty?.should == expected
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ describe ".empty" do
21
+ it "returns the canonical empty set" do
22
+ SS.empty.size.should be(0)
23
+ SS.empty.object_id.should be(SS.empty.object_id)
24
+ end
25
+
26
+ context "from a subclass" do
27
+ it "returns an empty instance of the subclass" do
28
+ subclass = Class.new(Immutable::SortedSet)
29
+ subclass.empty.class.should be(subclass)
30
+ subclass.empty.should be_empty
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,120 @@
1
+ require "spec_helper"
2
+ require "set"
3
+
4
+ describe Immutable::SortedSet do
5
+ let(:set) { SS[*values] }
6
+ let(:comparison) { SS[*comparison_values] }
7
+
8
+ describe "#eql?" do
9
+ let(:eql?) { set.eql?(comparison) }
10
+
11
+ shared_examples "comparing something which is not a sorted set" do
12
+ let(:values) { %w[A B C] }
13
+
14
+ it "returns false" do
15
+ expect(eql?).to eq(false)
16
+ end
17
+ end
18
+
19
+ context "when comparing to a standard set" do
20
+ let(:comparison) { ::Set.new(%w[A B C]) }
21
+ include_examples "comparing something which is not a sorted set"
22
+ end
23
+
24
+ context "when comparing to a arbitrary object" do
25
+ let(:comparison) { Object.new }
26
+ include_examples "comparing something which is not a sorted set"
27
+ end
28
+
29
+ context "when comparing to an Immutable::Set" do
30
+ let(:comparison) { Immutable::Set.new(%w[A B C]) }
31
+ include_examples "comparing something which is not a sorted set"
32
+ end
33
+
34
+ context "when comparing with a subclass of Immutable::SortedSet" do
35
+ let(:comparison) { Class.new(Immutable::SortedSet).new(%w[A B C]) }
36
+ include_examples "comparing something which is not a sorted set"
37
+ end
38
+
39
+ context "with an empty set for each comparison" do
40
+ let(:values) { [] }
41
+ let(:comparison_values) { [] }
42
+
43
+ it "returns true" do
44
+ expect(eql?).to eq(true)
45
+ end
46
+ end
47
+
48
+ context "with an empty set and a set with nil" do
49
+ let(:values) { [] }
50
+ let(:comparison_values) { [nil] }
51
+
52
+ it "returns false" do
53
+ expect(eql?).to eq(false)
54
+ end
55
+ end
56
+
57
+ context "with a single item array and empty array" do
58
+ let(:values) { ["A"] }
59
+ let(:comparison_values) { [] }
60
+
61
+ it "returns false" do
62
+ expect(eql?).to eq(false)
63
+ end
64
+ end
65
+
66
+ context "with matching single item array" do
67
+ let(:values) { ["A"] }
68
+ let(:comparison_values) { ["A"] }
69
+
70
+ it "returns true" do
71
+ expect(eql?).to eq(true)
72
+ end
73
+ end
74
+
75
+ context "with mismatching single item array" do
76
+ let(:values) { ["A"] }
77
+ let(:comparison_values) { ["B"] }
78
+
79
+ it "returns false" do
80
+ expect(eql?).to eq(false)
81
+ end
82
+ end
83
+
84
+ context "with a multi-item array and single item array" do
85
+ let(:values) { %w[A B] }
86
+ let(:comparison_values) { ["A"] }
87
+
88
+ it "returns false" do
89
+ expect(eql?).to eq(false)
90
+ end
91
+ end
92
+
93
+ context "with matching multi-item array" do
94
+ let(:values) { %w[A B] }
95
+ let(:comparison_values) { %w[A B] }
96
+
97
+ it "returns true" do
98
+ expect(eql?).to eq(true)
99
+ end
100
+ end
101
+
102
+ context "with a mismatching multi-item array" do
103
+ let(:values) { %w[A B] }
104
+ let(:comparison_values) { %w[B A] }
105
+
106
+ it "returns true" do
107
+ expect(eql?).to eq(true)
108
+ end
109
+ end
110
+
111
+ context "with the same values, but a different sort order" do
112
+ let(:set) { SS[1, 2, 3] }
113
+ let(:comparison) { SS.new([1, 2, 3]) { |n| -n }}
114
+
115
+ it "returns false" do
116
+ expect(eql?).to eq(false)
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ [:exclusion, :^].each do |method|
5
+ describe "##{method}" do
6
+ [
7
+ [[], [], []],
8
+ [["A"], [], ["A"]],
9
+ [["A"], ["A"], []],
10
+ [%w[A B C], ["B"], %w[A C]],
11
+ [%w[A B C], %w[B C D], %w[A D]],
12
+ [%w[A B C], %w[D E F], %w[A B C D E F]],
13
+ ].each do |a, b, expected|
14
+ context "for #{a.inspect} and #{b.inspect}" do
15
+ it "returns #{expected.inspect}" do
16
+ SS[*a].send(method, SS[*b]).should eql(SS[*expected])
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ describe "#fetch" do
5
+ let(:sorted_set) { SS['a', 'b', 'c'] }
6
+
7
+ context "with no default provided" do
8
+ context "when the index exists" do
9
+ it "returns the value at the index" do
10
+ sorted_set.fetch(0).should == "a"
11
+ sorted_set.fetch(1).should == "b"
12
+ sorted_set.fetch(2).should == "c"
13
+ end
14
+ end
15
+
16
+ context "when the key does not exist" do
17
+ it "raises an IndexError" do
18
+ -> { sorted_set.fetch(3) }.should raise_error(IndexError)
19
+ -> { sorted_set.fetch(-4) }.should raise_error(IndexError)
20
+ end
21
+ end
22
+ end
23
+
24
+ context "with a default value" do
25
+ context "when the index exists" do
26
+ it "returns the value at the index" do
27
+ sorted_set.fetch(0, "default").should == "a"
28
+ sorted_set.fetch(1, "default").should == "b"
29
+ sorted_set.fetch(2, "default").should == "c"
30
+ end
31
+ end
32
+
33
+ context "when the index does not exist" do
34
+ it "returns the default value" do
35
+ sorted_set.fetch(3, "default").should == "default"
36
+ sorted_set.fetch(-4, "default").should == "default"
37
+ end
38
+ end
39
+ end
40
+
41
+ context "with a default block" do
42
+ context "when the index exists" do
43
+ it "returns the value at the index" do
44
+ sorted_set.fetch(0) { "default".upcase }.should == "a"
45
+ sorted_set.fetch(1) { "default".upcase }.should == "b"
46
+ sorted_set.fetch(2) { "default".upcase }.should == "c"
47
+ end
48
+ end
49
+
50
+ context "when the index does not exist" do
51
+ it "invokes the block with the missing index as parameter" do
52
+ sorted_set.fetch(3) { |index| index.should == 3 }
53
+ sorted_set.fetch(-4) { |index| index.should == -4 }
54
+ sorted_set.fetch(3) { "default".upcase }.should == "DEFAULT"
55
+ sorted_set.fetch(-4) { "default".upcase }.should == "DEFAULT"
56
+ end
57
+ end
58
+ end
59
+
60
+ it "gives precedence to default block over default argument if passed both" do
61
+ sorted_set.fetch(3, 'one') { 'two' }.should == 'two'
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::SortedSet do
4
+ [:find_index, :index].each do |method|
5
+ describe "##{method}" do
6
+ [
7
+ [[], "A", nil],
8
+ [[], nil, nil],
9
+ [["A"], "A", 0],
10
+ [["A"], "B", nil],
11
+ [["A"], nil, nil],
12
+ [["A", "B", "C"], "A", 0],
13
+ [["A", "B", "C"], "B", 1],
14
+ [["A", "B", "C"], "C", 2],
15
+ [["A", "B", "C"], "D", nil],
16
+ [0..1, 1, 1],
17
+ [0..10, 5, 5],
18
+ [0..10, 10, 10],
19
+ [[2], 2, 0],
20
+ [[2], 2.0, 0],
21
+ [[2.0], 2.0, 0],
22
+ [[2.0], 2, 0],
23
+ ].each do |values, item, expected|
24
+ unless item.nil? # test breaks otherwise
25
+ context "looking for #{item.inspect} in #{values.inspect} without block" do
26
+ it "returns #{expected.inspect}" do
27
+ SS[*values].send(method, item).should == expected
28
+ end
29
+ end
30
+ end
31
+
32
+ context "looking for #{item.inspect} in #{values.inspect} with block" do
33
+ it "returns #{expected.inspect}" do
34
+ SS[*values].send(method) { |x| x == item }.should == expected
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end