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,38 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ describe "#drop_while" do
5
+ it "is lazy" do
6
+ -> { Immutable.stream { fail }.drop_while { false } }.should_not raise_error
7
+ end
8
+
9
+ [
10
+ [[], []],
11
+ [["A"], []],
12
+ [%w[A B C], ["C"]],
13
+ ].each do |values, expected|
14
+ context "on #{values.inspect}" do
15
+ let(:list) { L[*values] }
16
+
17
+ context "with a block" do
18
+ it "preserves the original" do
19
+ list.drop_while { |item| item < "C" }
20
+ list.should eql(L[*values])
21
+ end
22
+
23
+ it "returns #{expected.inspect}" do
24
+ list.drop_while { |item| item < "C" }.should eql(L[*expected])
25
+ end
26
+ end
27
+
28
+ context "without a block" do
29
+ it "returns an Enumerator" do
30
+ list.drop_while.class.should be(Enumerator)
31
+ list.drop_while.each { false }.should eql(list)
32
+ list.drop_while.each { true }.should be_empty
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,51 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ [:each_chunk, :each_slice].each do |method|
5
+ describe "##{method}" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).send(method, 1) { |item| } }.should_not raise_error
9
+ end
10
+ end
11
+
12
+ [
13
+ [[], []],
14
+ [["A"], [L["A"]]],
15
+ [%w[A B C], [L["A", "B"], L["C"]]],
16
+ ].each do |values, expected|
17
+ context "on #{values.inspect}" do
18
+ let(:list) { L[*values] }
19
+
20
+ context "with a block" do
21
+ it "preserves the original" do
22
+ list.should eql(L[*values])
23
+ end
24
+
25
+ it "iterates over the items in order" do
26
+ yielded = []
27
+ list.send(method, 2) { |item| yielded << item }
28
+ yielded.should eql(expected)
29
+ end
30
+
31
+ it "returns self" do
32
+ list.send(method, 2) { |item| item }.should be(list)
33
+ end
34
+ end
35
+
36
+ context "without a block" do
37
+ it "preserves the original" do
38
+ list.send(method, 2)
39
+ list.should eql(L[*values])
40
+ end
41
+
42
+ it "returns an Enumerator" do
43
+ list.send(method, 2).class.should be(Enumerator)
44
+ list.send(method, 2).to_a.should eql(expected)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ describe "#each" do
5
+ context "on a really big list" do
6
+ it "doesn't run out of stack" do
7
+ -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).each { |item| } }.should_not raise_error
8
+ end
9
+ end
10
+
11
+ [
12
+ [],
13
+ ["A"],
14
+ %w[A B C],
15
+ ].each do |values|
16
+ context "on #{values.inspect}" do
17
+ let(:list) { L[*values] }
18
+
19
+ context "with a block" do
20
+ it "iterates over the items in order" do
21
+ yielded = []
22
+ list.each { |item| yielded << item }
23
+ yielded.should == values
24
+ end
25
+
26
+ it "returns nil" do
27
+ list.each { |item| item }.should be_nil
28
+ end
29
+ end
30
+
31
+ context "without a block" do
32
+ it "returns an Enumerator" do
33
+ list.each.class.should be(Enumerator)
34
+ Immutable::List[*list.each].should eql(list)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ describe "#each_with_index" do
5
+ context "with no block" do
6
+ let(:list) { L["A", "B", "C"] }
7
+
8
+ it "returns an Enumerator" do
9
+ list.each_with_index.class.should be(Enumerator)
10
+ list.each_with_index.to_a.should == [['A', 0], ['B', 1], ['C', 2]]
11
+ end
12
+ end
13
+
14
+ context "with a block" do
15
+ let(:list) { Immutable.interval(1, 1025) }
16
+
17
+ it "returns self" do
18
+ list.each_with_index { |item, index| item }.should be(list)
19
+ end
20
+
21
+ it "iterates over the items in order, yielding item and index" do
22
+ yielded = []
23
+ list.each_with_index { |item, index| yielded << [item, index] }
24
+ yielded.should == (1..list.size).zip(0..list.size.pred)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ describe "#empty?" do
5
+ context "on a really big list" do
6
+ it "doesn't run out of stack" do
7
+ -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).select(&:nil?).empty? }.should_not raise_error
8
+ end
9
+ end
10
+
11
+ [
12
+ [[], true],
13
+ [["A"], false],
14
+ [%w[A B C], false],
15
+ ].each do |values, expected|
16
+ context "on #{values.inspect}" do
17
+ it "returns #{expected.inspect}" do
18
+ L[*values].empty?.should == expected
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ describe "#eql?" do
5
+ context "on a really big list" do
6
+ it "doesn't run out of stack" do
7
+ -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).eql?(Immutable.interval(0, STACK_OVERFLOW_DEPTH)) }.should_not raise_error
8
+ end
9
+ end
10
+ end
11
+
12
+ shared_examples 'equal using eql?' do |a, b|
13
+ specify "#{a.inspect} should eql? #{b.inspect}" do
14
+ expect(a).to eql b
15
+ end
16
+
17
+ specify "#{a.inspect} should == #{b.inspect}" do
18
+ expect(a).to eq b
19
+ end
20
+ end
21
+
22
+ shared_examples 'not equal using eql?' do |a, b|
23
+ specify "#{a.inspect} should not eql? #{b.inspect}" do
24
+ expect(a).to_not eql b
25
+ end
26
+ end
27
+
28
+ shared_examples 'equal using ==' do |a, b|
29
+ specify "#{a.inspect} should == #{b.inspect}" do
30
+ expect(a).to eq b
31
+ end
32
+ end
33
+
34
+ shared_examples 'not equal using ==' do |a, b|
35
+ specify "#{a.inspect} should not == #{b.inspect}" do
36
+ expect(a).to_not eq b
37
+ end
38
+ end
39
+
40
+ include_examples 'equal using ==' , L["A", "B", "C"], %w[A B C]
41
+ include_examples 'not equal using eql?' , L["A", "B", "C"], %w[A B C]
42
+ include_examples 'not equal using ==' , L["A", "B", "C"], Object.new
43
+ include_examples 'not equal using eql?' , L["A", "B", "C"], Object.new
44
+ include_examples 'equal using ==' , L.empty, []
45
+ include_examples 'not equal using eql?' , L.empty, []
46
+
47
+ include_examples 'equal using eql?' , L.empty, L.empty
48
+ include_examples 'not equal using eql?' , L.empty, L[nil]
49
+ include_examples 'not equal using eql?' , L["A"], L.empty
50
+ include_examples 'equal using eql?' , L["A"], L["A"]
51
+ include_examples 'not equal using eql?' , L["A"], L["B"]
52
+ include_examples 'not equal using eql?' , L["A", "B"], L["A"]
53
+ include_examples 'equal using eql?' , L["A", "B", "C"], L["A", "B", "C"]
54
+ include_examples 'not equal using eql?' , L["C", "A", "B"], L["A", "B", "C"]
55
+
56
+ include_examples 'equal using ==' , L['A'], ['A']
57
+ include_examples 'equal using ==' , ['A'], L['A']
58
+
59
+ include_examples 'not equal using eql?' , L['A'], ['A']
60
+ include_examples 'not equal using eql?' , ['A'], L['A']
61
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ describe "#fill" do
5
+ let(:list) { L[1, 2, 3, 4, 5, 6] }
6
+
7
+ it "can replace a range of items at the beginning of a list" do
8
+ list.fill(:a, 0, 3).should eql(L[:a, :a, :a, 4, 5, 6])
9
+ end
10
+
11
+ it "can replace a range of items in the middle of a list" do
12
+ list.fill(:a, 3, 2).should eql(L[1, 2, 3, :a, :a, 6])
13
+ end
14
+
15
+ it "can replace a range of items at the end of a list" do
16
+ list.fill(:a, 4, 2).should eql(L[1, 2, 3, 4, :a, :a])
17
+ end
18
+
19
+ it "can replace all the items in a list" do
20
+ list.fill(:a, 0, 6).should eql(L[:a, :a, :a, :a, :a, :a])
21
+ end
22
+
23
+ it "can fill past the end of the list" do
24
+ list.fill(:a, 3, 6).should eql(L[1, 2, 3, :a, :a, :a, :a, :a, :a])
25
+ end
26
+
27
+ context "with 1 argument" do
28
+ it "replaces all the items in the list by default" do
29
+ list.fill(:a).should eql(L[:a, :a, :a, :a, :a, :a])
30
+ end
31
+ end
32
+
33
+ context "with 2 arguments" do
34
+ it "replaces up to the end of the list by default" do
35
+ list.fill(:a, 4).should eql(L[1, 2, 3, 4, :a, :a])
36
+ end
37
+ end
38
+
39
+ context "when index and length are 0" do
40
+ it "leaves the list unmodified" do
41
+ list.fill(:a, 0, 0).should eql(list)
42
+ end
43
+ end
44
+
45
+ it "is lazy" do
46
+ -> { Immutable.stream { fail }.fill(:a, 0, 1) }.should_not raise_error
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ let(:list) { L[*values] }
5
+ let(:found_list) { L[*found_values] }
6
+
7
+ describe "#find_all" do
8
+ it "is lazy" do
9
+ expect { Immutable.stream { fail }.find_all { |item| false } }.to_not raise_error
10
+ end
11
+
12
+ shared_examples "checking values" do
13
+ context "with a block" do
14
+ let(:find_all) { list.find_all { |item| item == item.upcase } }
15
+
16
+ it "preserves the original" do
17
+ expect(list).to eq(L[*values])
18
+ end
19
+
20
+ it "returns the found list" do
21
+ expect(find_all).to eq(found_list)
22
+ end
23
+ end
24
+
25
+ context "without a block" do
26
+ let(:find_all) { list.find_all }
27
+
28
+ it "returns an Enumerator" do
29
+ expect(find_all.class).to be(Enumerator)
30
+ expect(find_all.each { |item| item == item.upcase }).to eq(found_list)
31
+ end
32
+ end
33
+ end
34
+
35
+ context "with an empty array" do
36
+ let(:values) { [] }
37
+ let(:found_values) { [] }
38
+
39
+ include_examples "checking values"
40
+ end
41
+
42
+ context "with a single item array" do
43
+ let(:values) { ["A"] }
44
+ let(:found_values) { ["A"] }
45
+
46
+ include_examples "checking values"
47
+ end
48
+
49
+ context "with a multi-item array" do
50
+ let(:values) { %w[A B] }
51
+ let(:found_values) { %w[A B] }
52
+
53
+ include_examples "checking values"
54
+ end
55
+
56
+ context "with a multi-item single find_allable array" do
57
+ let(:values) { %w[A b] }
58
+ let(:found_values) { ["A"] }
59
+
60
+ include_examples "checking values"
61
+ end
62
+
63
+ context "with a multi-item multi-find_allable array" do
64
+ let(:values) { %w[a b] }
65
+ let(:found_values) { [] }
66
+
67
+ include_examples "checking values"
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ [:find_index, :index].each do |method|
5
+ describe "##{method}" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).send(method) { |item| false } }.should_not raise_error
9
+ end
10
+ end
11
+
12
+ [
13
+ [[], "A", nil],
14
+ [[], nil, nil],
15
+ [["A"], "A", 0],
16
+ [["A"], "B", nil],
17
+ [["A"], nil, nil],
18
+ [["A", "B", nil], "A", 0],
19
+ [["A", "B", nil], "B", 1],
20
+ [["A", "B", nil], nil, 2],
21
+ [["A", "B", nil], "C", nil],
22
+ [[2], 2, 0],
23
+ [[2], 2.0, 0],
24
+ [[2.0], 2.0, 0],
25
+ [[2.0], 2, 0],
26
+ ].each do |values, item, expected|
27
+ context "looking for #{item.inspect} in #{values.inspect}" do
28
+ it "returns #{expected.inspect}" do
29
+ L[*values].send(method) { |x| x == item }.should == expected
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ require "spec_helper"
2
+
3
+ describe Immutable::List do
4
+ [:find, :detect].each do |method|
5
+ describe "##{method}" do
6
+ context "on a really big list" do
7
+ it "doesn't run out of stack" do
8
+ -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).send(method) { false } }.should_not raise_error
9
+ end
10
+ end
11
+
12
+ [
13
+ [[], "A", nil],
14
+ [[], nil, nil],
15
+ [["A"], "A", "A"],
16
+ [["A"], "B", nil],
17
+ [["A"], nil, nil],
18
+ [["A", "B", nil], "A", "A"],
19
+ [["A", "B", nil], "B", "B"],
20
+ [["A", "B", nil], nil, nil],
21
+ [["A", "B", nil], "C", nil],
22
+ ].each do |values, item, expected|
23
+ context "on #{values.inspect}" do
24
+ let(:list) { L[*values] }
25
+
26
+ context "with a block" do
27
+ it "returns #{expected.inspect}" do
28
+ list.send(method) { |x| x == item }.should == expected
29
+ end
30
+ end
31
+
32
+ context "without a block" do
33
+ it "returns an Enumerator" do
34
+ list.send(method).class.should be(Enumerator)
35
+ list.send(method).each { |x| x == item }.should == expected
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end