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