immutable-ruby 0.0.4 → 0.2.0

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 (356) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immutable/_core.rb +3067 -0
  3. data/lib/immutable/core_ext/enumerable.rb +1 -1
  4. data/lib/immutable/core_ext/io.rb +1 -1
  5. data/lib/immutable/core_ext.rb +2 -2
  6. data/lib/immutable/deque.rb +17 -17
  7. data/lib/immutable/enumerable.rb +10 -10
  8. data/lib/immutable/hash.rb +4 -941
  9. data/lib/immutable/list.rb +36 -36
  10. data/lib/immutable/nested.rb +8 -8
  11. data/lib/immutable/set.rb +3 -583
  12. data/lib/immutable/sorted_set.rb +29 -27
  13. data/lib/immutable/trie.rb +2 -2
  14. data/lib/immutable/vector.rb +3 -1549
  15. data/lib/immutable/version.rb +1 -1
  16. data/lib/immutable.rb +9 -9
  17. metadata +34 -696
  18. data/lib/immutable/core_ext/struct.rb +0 -9
  19. data/spec/fixtures/io_spec.txt +0 -3
  20. data/spec/lib/immutable/core_ext/array_spec.rb +0 -13
  21. data/spec/lib/immutable/core_ext/enumerable_spec.rb +0 -29
  22. data/spec/lib/immutable/core_ext/io_spec.rb +0 -28
  23. data/spec/lib/immutable/deque/clear_spec.rb +0 -33
  24. data/spec/lib/immutable/deque/construction_spec.rb +0 -29
  25. data/spec/lib/immutable/deque/copying_spec.rb +0 -19
  26. data/spec/lib/immutable/deque/dequeue_spec.rb +0 -34
  27. data/spec/lib/immutable/deque/empty_spec.rb +0 -39
  28. data/spec/lib/immutable/deque/enqueue_spec.rb +0 -27
  29. data/spec/lib/immutable/deque/first_spec.rb +0 -17
  30. data/spec/lib/immutable/deque/inspect_spec.rb +0 -23
  31. data/spec/lib/immutable/deque/last_spec.rb +0 -17
  32. data/spec/lib/immutable/deque/marshal_spec.rb +0 -33
  33. data/spec/lib/immutable/deque/new_spec.rb +0 -43
  34. data/spec/lib/immutable/deque/pop_spec.rb +0 -36
  35. data/spec/lib/immutable/deque/pretty_print_spec.rb +0 -23
  36. data/spec/lib/immutable/deque/push_spec.rb +0 -36
  37. data/spec/lib/immutable/deque/random_modification_spec.rb +0 -33
  38. data/spec/lib/immutable/deque/rotate_spec.rb +0 -68
  39. data/spec/lib/immutable/deque/shift_spec.rb +0 -29
  40. data/spec/lib/immutable/deque/size_spec.rb +0 -19
  41. data/spec/lib/immutable/deque/to_a_spec.rb +0 -26
  42. data/spec/lib/immutable/deque/to_ary_spec.rb +0 -35
  43. data/spec/lib/immutable/deque/to_list_spec.rb +0 -24
  44. data/spec/lib/immutable/deque/unshift_spec.rb +0 -30
  45. data/spec/lib/immutable/hash/all_spec.rb +0 -53
  46. data/spec/lib/immutable/hash/any_spec.rb +0 -53
  47. data/spec/lib/immutable/hash/assoc_spec.rb +0 -51
  48. data/spec/lib/immutable/hash/clear_spec.rb +0 -42
  49. data/spec/lib/immutable/hash/construction_spec.rb +0 -38
  50. data/spec/lib/immutable/hash/copying_spec.rb +0 -13
  51. data/spec/lib/immutable/hash/default_proc_spec.rb +0 -72
  52. data/spec/lib/immutable/hash/delete_spec.rb +0 -39
  53. data/spec/lib/immutable/hash/dig_spec.rb +0 -34
  54. data/spec/lib/immutable/hash/each_spec.rb +0 -77
  55. data/spec/lib/immutable/hash/each_with_index_spec.rb +0 -29
  56. data/spec/lib/immutable/hash/empty_spec.rb +0 -43
  57. data/spec/lib/immutable/hash/eql_spec.rb +0 -75
  58. data/spec/lib/immutable/hash/except_spec.rb +0 -42
  59. data/spec/lib/immutable/hash/fetch_spec.rb +0 -57
  60. data/spec/lib/immutable/hash/fetch_values_spec.rb +0 -22
  61. data/spec/lib/immutable/hash/find_spec.rb +0 -43
  62. data/spec/lib/immutable/hash/flat_map_spec.rb +0 -35
  63. data/spec/lib/immutable/hash/flatten_spec.rb +0 -98
  64. data/spec/lib/immutable/hash/get_spec.rb +0 -79
  65. data/spec/lib/immutable/hash/has_key_spec.rb +0 -31
  66. data/spec/lib/immutable/hash/has_value_spec.rb +0 -27
  67. data/spec/lib/immutable/hash/hash_spec.rb +0 -29
  68. data/spec/lib/immutable/hash/inspect_spec.rb +0 -30
  69. data/spec/lib/immutable/hash/invert_spec.rb +0 -30
  70. data/spec/lib/immutable/hash/key_spec.rb +0 -27
  71. data/spec/lib/immutable/hash/keys_spec.rb +0 -15
  72. data/spec/lib/immutable/hash/map_spec.rb +0 -45
  73. data/spec/lib/immutable/hash/marshal_spec.rb +0 -28
  74. data/spec/lib/immutable/hash/merge_spec.rb +0 -82
  75. data/spec/lib/immutable/hash/min_max_spec.rb +0 -45
  76. data/spec/lib/immutable/hash/new_spec.rb +0 -70
  77. data/spec/lib/immutable/hash/none_spec.rb +0 -48
  78. data/spec/lib/immutable/hash/partition_spec.rb +0 -35
  79. data/spec/lib/immutable/hash/pretty_print_spec.rb +0 -34
  80. data/spec/lib/immutable/hash/put_spec.rb +0 -111
  81. data/spec/lib/immutable/hash/reduce_spec.rb +0 -35
  82. data/spec/lib/immutable/hash/reject_spec.rb +0 -61
  83. data/spec/lib/immutable/hash/reverse_each_spec.rb +0 -27
  84. data/spec/lib/immutable/hash/sample_spec.rb +0 -13
  85. data/spec/lib/immutable/hash/select_spec.rb +0 -57
  86. data/spec/lib/immutable/hash/size_spec.rb +0 -51
  87. data/spec/lib/immutable/hash/slice_spec.rb +0 -44
  88. data/spec/lib/immutable/hash/sort_spec.rb +0 -26
  89. data/spec/lib/immutable/hash/store_spec.rb +0 -75
  90. data/spec/lib/immutable/hash/subset_spec.rb +0 -42
  91. data/spec/lib/immutable/hash/superset_spec.rb +0 -42
  92. data/spec/lib/immutable/hash/take_spec.rb +0 -35
  93. data/spec/lib/immutable/hash/to_a_spec.rb +0 -13
  94. data/spec/lib/immutable/hash/to_hash_spec.rb +0 -21
  95. data/spec/lib/immutable/hash/to_proc_spec.rb +0 -39
  96. data/spec/lib/immutable/hash/update_in_spec.rb +0 -79
  97. data/spec/lib/immutable/hash/values_at_spec.rb +0 -33
  98. data/spec/lib/immutable/hash/values_spec.rb +0 -23
  99. data/spec/lib/immutable/list/add_spec.rb +0 -25
  100. data/spec/lib/immutable/list/all_spec.rb +0 -57
  101. data/spec/lib/immutable/list/any_spec.rb +0 -49
  102. data/spec/lib/immutable/list/append_spec.rb +0 -38
  103. data/spec/lib/immutable/list/at_spec.rb +0 -29
  104. data/spec/lib/immutable/list/break_spec.rb +0 -69
  105. data/spec/lib/immutable/list/cadr_spec.rb +0 -38
  106. data/spec/lib/immutable/list/chunk_spec.rb +0 -28
  107. data/spec/lib/immutable/list/clear_spec.rb +0 -24
  108. data/spec/lib/immutable/list/combination_spec.rb +0 -33
  109. data/spec/lib/immutable/list/compact_spec.rb +0 -34
  110. data/spec/lib/immutable/list/compare_spec.rb +0 -30
  111. data/spec/lib/immutable/list/cons_spec.rb +0 -25
  112. data/spec/lib/immutable/list/construction_spec.rb +0 -110
  113. data/spec/lib/immutable/list/copying_spec.rb +0 -19
  114. data/spec/lib/immutable/list/count_spec.rb +0 -36
  115. data/spec/lib/immutable/list/cycle_spec.rb +0 -28
  116. data/spec/lib/immutable/list/delete_at_spec.rb +0 -18
  117. data/spec/lib/immutable/list/delete_spec.rb +0 -16
  118. data/spec/lib/immutable/list/drop_spec.rb +0 -30
  119. data/spec/lib/immutable/list/drop_while_spec.rb +0 -38
  120. data/spec/lib/immutable/list/each_slice_spec.rb +0 -51
  121. data/spec/lib/immutable/list/each_spec.rb +0 -40
  122. data/spec/lib/immutable/list/each_with_index_spec.rb +0 -28
  123. data/spec/lib/immutable/list/empty_spec.rb +0 -23
  124. data/spec/lib/immutable/list/eql_spec.rb +0 -61
  125. data/spec/lib/immutable/list/fill_spec.rb +0 -49
  126. data/spec/lib/immutable/list/find_all_spec.rb +0 -70
  127. data/spec/lib/immutable/list/find_index_spec.rb +0 -35
  128. data/spec/lib/immutable/list/find_spec.rb +0 -42
  129. data/spec/lib/immutable/list/flat_map_spec.rb +0 -51
  130. data/spec/lib/immutable/list/flatten_spec.rb +0 -30
  131. data/spec/lib/immutable/list/grep_spec.rb +0 -46
  132. data/spec/lib/immutable/list/group_by_spec.rb +0 -41
  133. data/spec/lib/immutable/list/hash_spec.rb +0 -21
  134. data/spec/lib/immutable/list/head_spec.rb +0 -19
  135. data/spec/lib/immutable/list/include_spec.rb +0 -35
  136. data/spec/lib/immutable/list/index_spec.rb +0 -37
  137. data/spec/lib/immutable/list/indices_spec.rb +0 -61
  138. data/spec/lib/immutable/list/init_spec.rb +0 -28
  139. data/spec/lib/immutable/list/inits_spec.rb +0 -28
  140. data/spec/lib/immutable/list/insert_spec.rb +0 -46
  141. data/spec/lib/immutable/list/inspect_spec.rb +0 -29
  142. data/spec/lib/immutable/list/intersperse_spec.rb +0 -28
  143. data/spec/lib/immutable/list/join_spec.rb +0 -63
  144. data/spec/lib/immutable/list/last_spec.rb +0 -23
  145. data/spec/lib/immutable/list/ltlt_spec.rb +0 -19
  146. data/spec/lib/immutable/list/map_spec.rb +0 -45
  147. data/spec/lib/immutable/list/maximum_spec.rb +0 -39
  148. data/spec/lib/immutable/list/merge_by_spec.rb +0 -51
  149. data/spec/lib/immutable/list/merge_spec.rb +0 -59
  150. data/spec/lib/immutable/list/minimum_spec.rb +0 -39
  151. data/spec/lib/immutable/list/multithreading_spec.rb +0 -47
  152. data/spec/lib/immutable/list/none_spec.rb +0 -47
  153. data/spec/lib/immutable/list/one_spec.rb +0 -49
  154. data/spec/lib/immutable/list/partition_spec.rb +0 -115
  155. data/spec/lib/immutable/list/permutation_spec.rb +0 -55
  156. data/spec/lib/immutable/list/pop_spec.rb +0 -25
  157. data/spec/lib/immutable/list/product_spec.rb +0 -23
  158. data/spec/lib/immutable/list/reduce_spec.rb +0 -53
  159. data/spec/lib/immutable/list/reject_spec.rb +0 -45
  160. data/spec/lib/immutable/list/reverse_spec.rb +0 -34
  161. data/spec/lib/immutable/list/rotate_spec.rb +0 -36
  162. data/spec/lib/immutable/list/sample_spec.rb +0 -13
  163. data/spec/lib/immutable/list/select_spec.rb +0 -70
  164. data/spec/lib/immutable/list/size_spec.rb +0 -25
  165. data/spec/lib/immutable/list/slice_spec.rb +0 -229
  166. data/spec/lib/immutable/list/sorting_spec.rb +0 -46
  167. data/spec/lib/immutable/list/span_spec.rb +0 -76
  168. data/spec/lib/immutable/list/split_at_spec.rb +0 -43
  169. data/spec/lib/immutable/list/subsequences_spec.rb +0 -23
  170. data/spec/lib/immutable/list/sum_spec.rb +0 -23
  171. data/spec/lib/immutable/list/tail_spec.rb +0 -30
  172. data/spec/lib/immutable/list/tails_spec.rb +0 -28
  173. data/spec/lib/immutable/list/take_spec.rb +0 -30
  174. data/spec/lib/immutable/list/take_while_spec.rb +0 -46
  175. data/spec/lib/immutable/list/to_a_spec.rb +0 -39
  176. data/spec/lib/immutable/list/to_ary_spec.rb +0 -41
  177. data/spec/lib/immutable/list/to_list_spec.rb +0 -19
  178. data/spec/lib/immutable/list/to_set_spec.rb +0 -17
  179. data/spec/lib/immutable/list/transpose_spec.rb +0 -19
  180. data/spec/lib/immutable/list/union_spec.rb +0 -31
  181. data/spec/lib/immutable/list/uniq_spec.rb +0 -35
  182. data/spec/lib/immutable/list/zip_spec.rb +0 -23
  183. data/spec/lib/immutable/nested/construction_spec.rb +0 -101
  184. data/spec/lib/immutable/set/add_spec.rb +0 -77
  185. data/spec/lib/immutable/set/all_spec.rb +0 -51
  186. data/spec/lib/immutable/set/any_spec.rb +0 -51
  187. data/spec/lib/immutable/set/clear_spec.rb +0 -33
  188. data/spec/lib/immutable/set/compact_spec.rb +0 -30
  189. data/spec/lib/immutable/set/construction_spec.rb +0 -18
  190. data/spec/lib/immutable/set/copying_spec.rb +0 -13
  191. data/spec/lib/immutable/set/count_spec.rb +0 -36
  192. data/spec/lib/immutable/set/delete_spec.rb +0 -71
  193. data/spec/lib/immutable/set/difference_spec.rb +0 -49
  194. data/spec/lib/immutable/set/disjoint_spec.rb +0 -25
  195. data/spec/lib/immutable/set/each_spec.rb +0 -45
  196. data/spec/lib/immutable/set/empty_spec.rb +0 -44
  197. data/spec/lib/immutable/set/eqeq_spec.rb +0 -103
  198. data/spec/lib/immutable/set/eql_spec.rb +0 -109
  199. data/spec/lib/immutable/set/exclusion_spec.rb +0 -47
  200. data/spec/lib/immutable/set/find_spec.rb +0 -35
  201. data/spec/lib/immutable/set/first_spec.rb +0 -28
  202. data/spec/lib/immutable/set/flatten_spec.rb +0 -46
  203. data/spec/lib/immutable/set/grep_spec.rb +0 -57
  204. data/spec/lib/immutable/set/grep_v_spec.rb +0 -59
  205. data/spec/lib/immutable/set/group_by_spec.rb +0 -59
  206. data/spec/lib/immutable/set/hash_spec.rb +0 -22
  207. data/spec/lib/immutable/set/include_spec.rb +0 -60
  208. data/spec/lib/immutable/set/inspect_spec.rb +0 -47
  209. data/spec/lib/immutable/set/intersect_spec.rb +0 -25
  210. data/spec/lib/immutable/set/intersection_spec.rb +0 -52
  211. data/spec/lib/immutable/set/join_spec.rb +0 -64
  212. data/spec/lib/immutable/set/map_spec.rb +0 -59
  213. data/spec/lib/immutable/set/marshal_spec.rb +0 -28
  214. data/spec/lib/immutable/set/maximum_spec.rb +0 -36
  215. data/spec/lib/immutable/set/minimum_spec.rb +0 -36
  216. data/spec/lib/immutable/set/new_spec.rb +0 -53
  217. data/spec/lib/immutable/set/none_spec.rb +0 -47
  218. data/spec/lib/immutable/set/one_spec.rb +0 -47
  219. data/spec/lib/immutable/set/partition_spec.rb +0 -52
  220. data/spec/lib/immutable/set/product_spec.rb +0 -23
  221. data/spec/lib/immutable/set/reduce_spec.rb +0 -55
  222. data/spec/lib/immutable/set/reject_spec.rb +0 -50
  223. data/spec/lib/immutable/set/reverse_each_spec.rb +0 -38
  224. data/spec/lib/immutable/set/sample_spec.rb +0 -13
  225. data/spec/lib/immutable/set/select_spec.rb +0 -73
  226. data/spec/lib/immutable/set/size_spec.rb +0 -17
  227. data/spec/lib/immutable/set/sorting_spec.rb +0 -65
  228. data/spec/lib/immutable/set/subset_spec.rb +0 -51
  229. data/spec/lib/immutable/set/sum_spec.rb +0 -23
  230. data/spec/lib/immutable/set/superset_spec.rb +0 -51
  231. data/spec/lib/immutable/set/to_a_spec.rb +0 -30
  232. data/spec/lib/immutable/set/to_list_spec.rb +0 -35
  233. data/spec/lib/immutable/set/to_set_spec.rb +0 -19
  234. data/spec/lib/immutable/set/union_spec.rb +0 -63
  235. data/spec/lib/immutable/sorted_set/above_spec.rb +0 -51
  236. data/spec/lib/immutable/sorted_set/add_spec.rb +0 -62
  237. data/spec/lib/immutable/sorted_set/at_spec.rb +0 -24
  238. data/spec/lib/immutable/sorted_set/below_spec.rb +0 -51
  239. data/spec/lib/immutable/sorted_set/between_spec.rb +0 -51
  240. data/spec/lib/immutable/sorted_set/clear_spec.rb +0 -43
  241. data/spec/lib/immutable/sorted_set/copying_spec.rb +0 -20
  242. data/spec/lib/immutable/sorted_set/delete_at_spec.rb +0 -18
  243. data/spec/lib/immutable/sorted_set/delete_spec.rb +0 -89
  244. data/spec/lib/immutable/sorted_set/difference_spec.rb +0 -22
  245. data/spec/lib/immutable/sorted_set/disjoint_spec.rb +0 -25
  246. data/spec/lib/immutable/sorted_set/drop_spec.rb +0 -55
  247. data/spec/lib/immutable/sorted_set/drop_while_spec.rb +0 -34
  248. data/spec/lib/immutable/sorted_set/each_spec.rb +0 -28
  249. data/spec/lib/immutable/sorted_set/empty_spec.rb +0 -34
  250. data/spec/lib/immutable/sorted_set/eql_spec.rb +0 -120
  251. data/spec/lib/immutable/sorted_set/exclusion_spec.rb +0 -22
  252. data/spec/lib/immutable/sorted_set/fetch_spec.rb +0 -64
  253. data/spec/lib/immutable/sorted_set/find_index_spec.rb +0 -40
  254. data/spec/lib/immutable/sorted_set/first_spec.rb +0 -18
  255. data/spec/lib/immutable/sorted_set/from_spec.rb +0 -51
  256. data/spec/lib/immutable/sorted_set/group_by_spec.rb +0 -57
  257. data/spec/lib/immutable/sorted_set/include_spec.rb +0 -23
  258. data/spec/lib/immutable/sorted_set/inspect_spec.rb +0 -37
  259. data/spec/lib/immutable/sorted_set/intersect_spec.rb +0 -25
  260. data/spec/lib/immutable/sorted_set/intersection_spec.rb +0 -28
  261. data/spec/lib/immutable/sorted_set/last_spec.rb +0 -36
  262. data/spec/lib/immutable/sorted_set/map_spec.rb +0 -51
  263. data/spec/lib/immutable/sorted_set/marshal_spec.rb +0 -36
  264. data/spec/lib/immutable/sorted_set/maximum_spec.rb +0 -36
  265. data/spec/lib/immutable/sorted_set/minimum_spec.rb +0 -19
  266. data/spec/lib/immutable/sorted_set/new_spec.rb +0 -137
  267. data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +0 -28
  268. data/spec/lib/immutable/sorted_set/sample_spec.rb +0 -13
  269. data/spec/lib/immutable/sorted_set/select_spec.rb +0 -61
  270. data/spec/lib/immutable/sorted_set/size_spec.rb +0 -17
  271. data/spec/lib/immutable/sorted_set/slice_spec.rb +0 -256
  272. data/spec/lib/immutable/sorted_set/sorting_spec.rb +0 -56
  273. data/spec/lib/immutable/sorted_set/subset_spec.rb +0 -47
  274. data/spec/lib/immutable/sorted_set/superset_spec.rb +0 -47
  275. data/spec/lib/immutable/sorted_set/take_spec.rb +0 -54
  276. data/spec/lib/immutable/sorted_set/take_while_spec.rb +0 -33
  277. data/spec/lib/immutable/sorted_set/to_set_spec.rb +0 -17
  278. data/spec/lib/immutable/sorted_set/union_spec.rb +0 -58
  279. data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
  280. data/spec/lib/immutable/sorted_set/util_spec.rb +0 -48
  281. data/spec/lib/immutable/sorted_set/values_at_spec.rb +0 -33
  282. data/spec/lib/immutable/vector/add_spec.rb +0 -67
  283. data/spec/lib/immutable/vector/any_spec.rb +0 -69
  284. data/spec/lib/immutable/vector/assoc_spec.rb +0 -45
  285. data/spec/lib/immutable/vector/bsearch_spec.rb +0 -65
  286. data/spec/lib/immutable/vector/clear_spec.rb +0 -33
  287. data/spec/lib/immutable/vector/combination_spec.rb +0 -81
  288. data/spec/lib/immutable/vector/compact_spec.rb +0 -29
  289. data/spec/lib/immutable/vector/compare_spec.rb +0 -31
  290. data/spec/lib/immutable/vector/concat_spec.rb +0 -34
  291. data/spec/lib/immutable/vector/copying_spec.rb +0 -20
  292. data/spec/lib/immutable/vector/count_spec.rb +0 -17
  293. data/spec/lib/immutable/vector/delete_at_spec.rb +0 -53
  294. data/spec/lib/immutable/vector/delete_spec.rb +0 -30
  295. data/spec/lib/immutable/vector/dig_spec.rb +0 -30
  296. data/spec/lib/immutable/vector/drop_spec.rb +0 -41
  297. data/spec/lib/immutable/vector/drop_while_spec.rb +0 -54
  298. data/spec/lib/immutable/vector/each_index_spec.rb +0 -40
  299. data/spec/lib/immutable/vector/each_spec.rb +0 -44
  300. data/spec/lib/immutable/vector/each_with_index_spec.rb +0 -39
  301. data/spec/lib/immutable/vector/empty_spec.rb +0 -41
  302. data/spec/lib/immutable/vector/eql_spec.rb +0 -76
  303. data/spec/lib/immutable/vector/fetch_spec.rb +0 -64
  304. data/spec/lib/immutable/vector/fill_spec.rb +0 -88
  305. data/spec/lib/immutable/vector/first_spec.rb +0 -18
  306. data/spec/lib/immutable/vector/flat_map_spec.rb +0 -50
  307. data/spec/lib/immutable/vector/flatten_spec.rb +0 -58
  308. data/spec/lib/immutable/vector/get_spec.rb +0 -74
  309. data/spec/lib/immutable/vector/group_by_spec.rb +0 -57
  310. data/spec/lib/immutable/vector/include_spec.rb +0 -30
  311. data/spec/lib/immutable/vector/insert_spec.rb +0 -68
  312. data/spec/lib/immutable/vector/inspect_spec.rb +0 -49
  313. data/spec/lib/immutable/vector/join_spec.rb +0 -58
  314. data/spec/lib/immutable/vector/last_spec.rb +0 -45
  315. data/spec/lib/immutable/vector/length_spec.rb +0 -45
  316. data/spec/lib/immutable/vector/ltlt_spec.rb +0 -65
  317. data/spec/lib/immutable/vector/map_spec.rb +0 -51
  318. data/spec/lib/immutable/vector/marshal_spec.rb +0 -31
  319. data/spec/lib/immutable/vector/maximum_spec.rb +0 -33
  320. data/spec/lib/immutable/vector/minimum_spec.rb +0 -33
  321. data/spec/lib/immutable/vector/multiply_spec.rb +0 -47
  322. data/spec/lib/immutable/vector/new_spec.rb +0 -50
  323. data/spec/lib/immutable/vector/partition_spec.rb +0 -52
  324. data/spec/lib/immutable/vector/permutation_spec.rb +0 -91
  325. data/spec/lib/immutable/vector/pop_spec.rb +0 -26
  326. data/spec/lib/immutable/vector/product_spec.rb +0 -70
  327. data/spec/lib/immutable/vector/reduce_spec.rb +0 -55
  328. data/spec/lib/immutable/vector/reject_spec.rb +0 -43
  329. data/spec/lib/immutable/vector/repeated_combination_spec.rb +0 -77
  330. data/spec/lib/immutable/vector/repeated_permutation_spec.rb +0 -93
  331. data/spec/lib/immutable/vector/reverse_each_spec.rb +0 -31
  332. data/spec/lib/immutable/vector/reverse_spec.rb +0 -21
  333. data/spec/lib/immutable/vector/rindex_spec.rb +0 -36
  334. data/spec/lib/immutable/vector/rotate_spec.rb +0 -73
  335. data/spec/lib/immutable/vector/sample_spec.rb +0 -13
  336. data/spec/lib/immutable/vector/select_spec.rb +0 -63
  337. data/spec/lib/immutable/vector/set_spec.rb +0 -174
  338. data/spec/lib/immutable/vector/shift_spec.rb +0 -27
  339. data/spec/lib/immutable/vector/shuffle_spec.rb +0 -43
  340. data/spec/lib/immutable/vector/slice_spec.rb +0 -240
  341. data/spec/lib/immutable/vector/sorting_spec.rb +0 -56
  342. data/spec/lib/immutable/vector/sum_spec.rb +0 -17
  343. data/spec/lib/immutable/vector/take_spec.rb +0 -42
  344. data/spec/lib/immutable/vector/take_while_spec.rb +0 -34
  345. data/spec/lib/immutable/vector/to_a_spec.rb +0 -41
  346. data/spec/lib/immutable/vector/to_ary_spec.rb +0 -34
  347. data/spec/lib/immutable/vector/to_list_spec.rb +0 -30
  348. data/spec/lib/immutable/vector/to_set_spec.rb +0 -21
  349. data/spec/lib/immutable/vector/transpose_spec.rb +0 -48
  350. data/spec/lib/immutable/vector/uniq_spec.rb +0 -76
  351. data/spec/lib/immutable/vector/unshift_spec.rb +0 -28
  352. data/spec/lib/immutable/vector/update_in_spec.rb +0 -82
  353. data/spec/lib/immutable/vector/values_at_spec.rb +0 -33
  354. data/spec/lib/immutable/vector/zip_spec.rb +0 -57
  355. data/spec/lib/load_spec.rb +0 -42
  356. data/spec/spec_helper.rb +0 -96
@@ -1,38 +0,0 @@
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
@@ -1,51 +0,0 @@
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
- -> { BigList.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
@@ -1,40 +0,0 @@
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
- -> { BigList.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
@@ -1,28 +0,0 @@
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
@@ -1,23 +0,0 @@
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
- -> { BigList.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
@@ -1,61 +0,0 @@
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
- -> { BigList.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
@@ -1,49 +0,0 @@
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
@@ -1,70 +0,0 @@
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
@@ -1,35 +0,0 @@
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
- -> { BigList.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
@@ -1,42 +0,0 @@
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
- -> { BigList.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
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- let(:list) { L[*values] }
5
-
6
- describe "#flat_map" do
7
- let(:block) { ->(item) { [item, item + 1, item * item] } }
8
- let(:flat_map) { list.flat_map(&block) }
9
- let(:flattened_list) { L[*flattened_values] }
10
-
11
- shared_examples "checking flattened result" do
12
-
13
- it "returns the flattened values as a Immutable::List" do
14
- expect(flat_map).to eq(flattened_list)
15
- end
16
-
17
- it "returns a Immutable::List" do
18
- expect(flat_map).to be_a(Immutable::List)
19
- end
20
- end
21
-
22
- context "with an empty list" do
23
- let(:values) { [] }
24
- let(:flattened_values) { [] }
25
-
26
- include_examples "checking flattened result"
27
- end
28
-
29
- context "with a block that returns an empty list" do
30
- let(:block) { ->(item) { [] } }
31
- let(:values) { [1, 2, 3] }
32
- let(:flattened_values) { [] }
33
-
34
- include_examples "checking flattened result"
35
- end
36
-
37
- context "with a list of one item" do
38
- let(:values) { [7] }
39
- let(:flattened_values) { [7, 8, 49] }
40
-
41
- include_examples "checking flattened result"
42
- end
43
-
44
- context "with a list of multiple items" do
45
- let(:values) { [1, 2, 3] }
46
- let(:flattened_values) { [1, 2, 1, 2, 3, 4, 3, 4, 9] }
47
-
48
- include_examples "checking flattened result"
49
- end
50
- end
51
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable do
4
- describe "#flatten" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.flatten }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], ["A"]],
12
- [%w[A B C], %w[A B C]],
13
- [["A", L["B"], "C"], %w[A B C]],
14
- [[L["A"], L["B"], L["C"]], %w[A B C]],
15
- ].each do |values, expected|
16
- context "on #{values}" do
17
- let(:list) { L[*values] }
18
-
19
- it "preserves the original" do
20
- list.flatten
21
- list.should eql(L[*values])
22
- end
23
-
24
- it "returns an empty list" do
25
- list.flatten.should eql(L[*expected])
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,46 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#grep" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.grep(Object) { |item| item } }.should_not raise_error
7
- end
8
-
9
- context "without a block" do
10
- [
11
- [[], []],
12
- [["A"], ["A"]],
13
- [[1], []],
14
- [["A", 2, "C"], %w[A C]],
15
- ].each do |values, expected|
16
- context "on #{values.inspect}" do
17
- it "returns #{expected.inspect}" do
18
- L[*values].grep(String).should eql(L[*expected])
19
- end
20
- end
21
- end
22
- end
23
-
24
- context "with a block" do
25
- [
26
- [[], []],
27
- [["A"], ["a"]],
28
- [[1], []],
29
- [["A", 2, "C"], %w[a c]],
30
- ].each do |values, expected|
31
- context "on #{values.inspect}" do
32
- let(:list) { L[*values] }
33
-
34
- it "preserves the original" do
35
- list.grep(String, &:downcase)
36
- list.should eql(L[*values])
37
- end
38
-
39
- it "returns #{expected.inspect}" do
40
- list.grep(String, &:downcase).should eql(L[*expected])
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,41 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:group_by, :group].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
- -> { BigList.send(method) }.should_not raise_error
9
- end
10
- end
11
-
12
- context "with a block" do
13
- [
14
- [[], []],
15
- [[1], [true => L[1]]],
16
- [[1, 2, 3, 4], [true => L[3, 1], false => L[4, 2]]],
17
- ].each do |values, expected|
18
- context "on #{values.inspect}" do
19
- it "returns #{expected.inspect}" do
20
- L[*values].send(method, &:odd?).should eql(H[*expected])
21
- end
22
- end
23
- end
24
- end
25
-
26
- context "without a block" do
27
- [
28
- [[], []],
29
- [[1], [1 => L[1]]],
30
- [[1, 2, 3, 4], [1 => L[1], 2 => L[2], 3 => L[3], 4 => L[4]]],
31
- ].each do |values, expected|
32
- context "on #{values.inspect}" do
33
- it "returns #{expected.inspect}" do
34
- L[*values].send(method).should eql(H[*expected])
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#hash" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { BigList.hash }.should_not raise_error
8
- end
9
- end
10
-
11
- context "on an empty list" do
12
- it "returns 0" do
13
- expect(L.empty.hash).to eq(0)
14
- end
15
- end
16
-
17
- it "values are sufficiently distributed" do
18
- (1..4000).each_slice(4).map { |a, b, c, d| L[a, b, c, d].hash }.uniq.size.should == 1000
19
- end
20
- end
21
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:head, :first].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], nil],
8
- [["A"], "A"],
9
- [%w[A B C], "A"],
10
- ].each do |values, expected|
11
- context "on #{values.inspect}" do
12
- it "returns #{expected.inspect}" do
13
- L[*values].send(method).should == expected
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end