immutable-ruby 0.0.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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,49 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#any?" do
5
- context "on a really big list" do
6
- let(:list) { BigList }
7
-
8
- it "doesn't run out of stack" do
9
- -> { list.any? { false } }.should_not raise_error
10
- end
11
- end
12
-
13
- context "when empty" do
14
- it "with a block returns false" do
15
- L.empty.any? {}.should == false
16
- end
17
-
18
- it "with no block returns false" do
19
- L.empty.any?.should == false
20
- end
21
- end
22
-
23
- context "when not empty" do
24
- context "with a block" do
25
- let(:list) { L["A", "B", "C", nil] }
26
-
27
- ["A", "B", "C", nil].each do |value|
28
- it "returns true if the block ever returns true (#{value.inspect})" do
29
- list.any? { |item| item == value }.should == true
30
- end
31
- end
32
-
33
- it "returns false if the block always returns false" do
34
- list.any? { |item| item == "D" }.should == false
35
- end
36
- end
37
-
38
- context "with no block" do
39
- it "returns true if any value is truthy" do
40
- L[nil, false, "A", true].any?.should == true
41
- end
42
-
43
- it "returns false if all values are falsey" do
44
- L[nil, false].any?.should == false
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:append, :concat, :+].each do |method|
5
- describe "##{method}" do
6
- it "is lazy" do
7
- -> { Immutable.stream { fail }.append(Immutable.stream { fail }) }.should_not raise_error
8
- end
9
-
10
- [
11
- [[], [], []],
12
- [["A"], [], ["A"]],
13
- [[], ["A"], ["A"]],
14
- [%w[A B], %w[C D], %w[A B C D]],
15
- ].each do |left_values, right_values, expected|
16
- context "on #{left_values.inspect} and #{right_values.inspect}" do
17
- let(:left) { L[*left_values] }
18
- let(:right) { L[*right_values] }
19
- let(:result) { left.append(right) }
20
-
21
- it "preserves the left" do
22
- result
23
- left.should eql(L[*left_values])
24
- end
25
-
26
- it "preserves the right" do
27
- result
28
- right.should eql(L[*right_values])
29
- end
30
-
31
- it "returns #{expected.inspect}" do
32
- result.should eql(L[*expected])
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#at" do
5
- context "on a really big list" do
6
- let(:list) { BigList }
7
-
8
- it "doesn't run out of stack" do
9
- -> { list.at(STACK_OVERFLOW_DEPTH) }.should_not raise_error
10
- end
11
- end
12
-
13
- [
14
- [[], 10, nil],
15
- [["A"], 10, nil],
16
- [%w[A B C], 0, "A"],
17
- [%w[A B C], 2, "C"],
18
- [%w[A B C], -1, "C"],
19
- [%w[A B C], -2, "B"],
20
- [%w[A B C], -4, nil]
21
- ].each do |values, number, expected|
22
- describe "#{values.inspect} with #{number}" do
23
- it "returns #{expected.inspect}" do
24
- L[*values].at(number).should == expected
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,69 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#break" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.break { |item| false } }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], [], []],
11
- [[1], [1], []],
12
- [[1, 2], [1, 2], []],
13
- [[1, 2, 3], [1, 2], [3]],
14
- [[1, 2, 3, 4], [1, 2], [3, 4]],
15
- [[2, 3, 4], [2], [3, 4]],
16
- [[3, 4], [], [3, 4]],
17
- [[4], [], [4]],
18
- ].each do |values, expected_prefix, expected_remainder|
19
- context "on #{values.inspect}" do
20
- let(:list) { L[*values] }
21
-
22
- context "with a block" do
23
- let(:result) { list.break { |item| item > 2 }}
24
- let(:prefix) { result.first }
25
- let(:remainder) { result.last }
26
-
27
- it "preserves the original" do
28
- result
29
- list.should eql(L[*values])
30
- end
31
-
32
- it "returns a frozen array with two items" do
33
- result.class.should be(Array)
34
- result.should be_frozen
35
- result.size.should be(2)
36
- end
37
-
38
- it "correctly identifies the prefix" do
39
- prefix.should eql(L[*expected_prefix])
40
- end
41
-
42
- it "correctly identifies the remainder" do
43
- remainder.should eql(L[*expected_remainder])
44
- end
45
- end
46
-
47
- context "without a block" do
48
- let(:result) { list.break }
49
- let(:prefix) { result.first }
50
- let(:remainder) { result.last }
51
-
52
- it "returns a frozen array with two items" do
53
- result.class.should be(Array)
54
- result.should be_frozen
55
- result.size.should be(2)
56
- end
57
-
58
- it "returns self as the prefix" do
59
- prefix.should equal(list)
60
- end
61
-
62
- it "leaves the remainder empty" do
63
- remainder.should be_empty
64
- end
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [
5
- [[], :car, nil],
6
- [["A"], :car, "A"],
7
- [%w[A B C], :car, "A"],
8
- [%w[A B C], :cadr, "B"],
9
- [%w[A B C], :caddr, "C"],
10
- [%w[A B C], :cadddr, nil],
11
- [%w[A B C], :caddddr, nil],
12
- [[], :cdr, L.empty],
13
- [["A"], :cdr, L.empty],
14
- [%w[A B C], :cdr, L["B", "C"]],
15
- [%w[A B C], :cddr, L["C"]],
16
- [%w[A B C], :cdddr, L.empty],
17
- [%w[A B C], :cddddr, L.empty],
18
- ].each do |values, method, expected|
19
- describe "##{method}" do
20
- it "is responded to" do
21
- L.empty.respond_to?(method).should == true
22
- end
23
-
24
- context "on #{values.inspect}" do
25
- let(:list) { L[*values] }
26
-
27
- it "preserves the original" do
28
- list.send(method)
29
- list.should eql(L[*values])
30
- end
31
-
32
- it "returns #{expected.inspect}" do
33
- list.send(method).should == expected
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#chunk" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.chunk(2) }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], [L["A"]]],
12
- [%w[A B C], [L["A", "B"], L["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.chunk(2)
19
- list.should eql(L[*values])
20
- end
21
-
22
- it "returns #{expected.inspect}" do
23
- list.chunk(2).should eql(L[*expected])
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,24 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#clear" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- describe "on #{values}" do
11
- let(:list) { L[*values] }
12
-
13
- it "preserves the original" do
14
- list.clear
15
- list.should eql(L[*values])
16
- end
17
-
18
- it "returns an empty list" do
19
- list.clear.should equal(L.empty)
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#combination" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.combination(2) }.should_not raise_error
7
- end
8
-
9
- [
10
- [%w[A B C D], 1, [L["A"], L["B"], L["C"], L["D"]]],
11
- [%w[A B C D], 2, [L["A","B"], L["A","C"], L["A","D"], L["B","C"], L["B","D"], L["C","D"]]],
12
- [%w[A B C D], 3, [L["A","B","C"], L["A","B","D"], L["A","C","D"], L["B","C","D"]]],
13
- [%w[A B C D], 4, [L["A", "B", "C", "D"]]],
14
- [%w[A B C D], 0, [EmptyList]],
15
- [%w[A B C D], 5, []],
16
- [[], 0, [EmptyList]],
17
- [[], 1, []],
18
- ].each do |values, number, expected|
19
- context "on #{values.inspect} in groups of #{number}" do
20
- let(:list) { L[*values] }
21
-
22
- it "preserves the original" do
23
- list.combination(number)
24
- list.should eql(L[*values])
25
- end
26
-
27
- it "returns #{expected.inspect}" do
28
- list.combination(number).should eql(L[*expected])
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#compact" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.compact }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], ["A"]],
12
- [%w[A B C], %w[A B C]],
13
- [[nil], []],
14
- [[nil, "B"], ["B"]],
15
- [["A", nil], ["A"]],
16
- [[nil, nil], []],
17
- [["A", nil, "C"], %w[A C]],
18
- [[nil, "B", nil], ["B"]],
19
- ].each do |values, expected|
20
- context "on #{values.inspect}" do
21
- let(:list) { L[*values] }
22
-
23
- it "preserves the original" do
24
- list.compact
25
- list.should eql(L[*values])
26
- end
27
-
28
- it "returns #{expected.inspect}" do
29
- list.compact.should eql(L[*expected])
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#<=>" do
5
- [
6
- [[], [1]],
7
- [[1], [2]],
8
- [[1], [1, 2]],
9
- [[2, 3, 4], [3, 4, 5]]
10
- ].each do |items1, items2|
11
- context "with #{items1} and #{items2}" do
12
- it "returns -1" do
13
- (L[*items1] <=> L[*items2]).should be(-1)
14
- end
15
- end
16
-
17
- context "with #{items2} and #{items1}" do
18
- it "returns 1" do
19
- (L[*items2] <=> L[*items1]).should be(1)
20
- end
21
- end
22
-
23
- context "with #{items1} and #{items1}" do
24
- it "returns 0" do
25
- (L[*items1] <=> L[*items1]).should be(0)
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#cons" do
5
- [
6
- [[], "A", ["A"]],
7
- [["A"], "B", %w[B A]],
8
- [["A"], "A", %w[A A]],
9
- [%w[A B C], "D", %w[D A B C]],
10
- ].each do |values, new_value, expected|
11
- context "on #{values.inspect} with #{new_value.inspect}" do
12
- let(:list) { L[*values] }
13
-
14
- it "preserves the original" do
15
- list.cons(new_value)
16
- list.should eql(L[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- list.cons(new_value).should eql(L[*expected])
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,110 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable do
4
- describe ".list" do
5
- context "with no arguments" do
6
- it "always returns the same instance" do
7
- L.empty.should equal(L.empty)
8
- end
9
-
10
- it "returns an empty list" do
11
- L.empty.should be_empty
12
- end
13
- end
14
-
15
- context "with a number of items" do
16
- it "always returns a different instance" do
17
- L["A", "B", "C"].should_not equal(L["A", "B", "C"])
18
- end
19
-
20
- it "is the same as repeatedly using #cons" do
21
- L["A", "B", "C"].should eql(L.empty.cons("C").cons("B").cons("A"))
22
- end
23
- end
24
- end
25
-
26
- describe ".stream" do
27
- context "with no block" do
28
- it "returns an empty list" do
29
- Immutable.stream.should eql(L.empty)
30
- end
31
- end
32
-
33
- context "with a block" do
34
- let(:list) { count = 0; Immutable.stream { count += 1 }}
35
-
36
- it "repeatedly calls the block" do
37
- list.take(5).should eql(L[1, 2, 3, 4, 5])
38
- end
39
- end
40
- end
41
-
42
- describe ".interval" do
43
- context "for numbers" do
44
- it "is equivalent to a list with explicit values" do
45
- Immutable.interval(98, 102).should eql(L[98, 99, 100, 101, 102])
46
- end
47
- end
48
-
49
- context "for strings" do
50
- it "is equivalent to a list with explicit values" do
51
- Immutable.interval("A", "AA").should eql(L["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA"])
52
- end
53
- end
54
- end
55
-
56
- describe ".repeat" do
57
- it "returns an infinite list with specified value for each element" do
58
- Immutable.repeat("A").take(5).should eql(L["A", "A", "A", "A", "A"])
59
- end
60
- end
61
-
62
- describe ".replicate" do
63
- it "returns a list with the specified value repeated the specified number of times" do
64
- Immutable.replicate(5, "A").should eql(L["A", "A", "A", "A", "A"])
65
- end
66
- end
67
-
68
- describe ".iterate" do
69
- it "returns an infinite list where the first item is calculated by applying the block on the initial argument, the second item by applying the function on the previous result and so on" do
70
- Immutable.iterate(1) { |item| item * 2 }.take(10).should eql(L[1, 2, 4, 8, 16, 32, 64, 128, 256, 512])
71
- end
72
- end
73
-
74
- describe ".enumerate" do
75
- let(:enum) do
76
- Enumerator.new do |yielder|
77
- yielder << 1
78
- yielder << 2
79
- yielder << 3
80
- raise "list fully realized"
81
- end
82
- end
83
-
84
- let(:list) { Immutable.enumerate(enum) }
85
-
86
- it "returns a list based on the values yielded from the enumerator" do
87
- expect(list.take(2)).to eq L[1, 2]
88
- end
89
-
90
- it "realizes values as they are needed" do
91
- # this example shows that Lists are not as lazy as they could be
92
- # if Lists were fully lazy, you would have to take(4) to hit the exception
93
- expect { list.take(3).to_a }.to raise_exception(RuntimeError)
94
- end
95
- end
96
-
97
- describe "[]" do
98
- it "takes a variable number of items and returns a list" do
99
- list = Immutable::List[1,2,3]
100
- list.should be_kind_of(Immutable::List)
101
- list.size.should be(3)
102
- list.to_a.should == [1,2,3]
103
- end
104
-
105
- it "returns an empty list when called without arguments" do
106
- L[].should be_kind_of(Immutable::List)
107
- L[].should be_empty
108
- end
109
- end
110
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:dup, :clone].each do |method|
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- context "on #{values.inspect}" do
11
- let(:list) { L[*values] }
12
-
13
- it "returns self" do
14
- list.send(method).should equal(list)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#count" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { BigList.count }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], 0],
13
- [[1], 1],
14
- [[1, 2], 1],
15
- [[1, 2, 3], 2],
16
- [[1, 2, 3, 4], 2],
17
- [[1, 2, 3, 4, 5], 3],
18
- ].each do |values, expected|
19
- context "on #{values.inspect}" do
20
- let(:list) { L[*values] }
21
-
22
- context "with a block" do
23
- it "returns #{expected.inspect}" do
24
- list.count(&:odd?).should == expected
25
- end
26
- end
27
-
28
- context "without a block" do
29
- it "returns length" do
30
- list.count.should == list.length
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable do
4
- describe "#cycle" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.cycle }.should_not raise_error
7
- end
8
-
9
- context "with an empty list" do
10
- it "returns an empty list" do
11
- L.empty.cycle.should be_empty
12
- end
13
- end
14
-
15
- context "with a non-empty list" do
16
- let(:list) { L["A", "B", "C"] }
17
-
18
- it "preserves the original" do
19
- list.cycle
20
- list.should == L["A", "B", "C"]
21
- end
22
-
23
- it "infinitely cycles through all values" do
24
- list.cycle.take(7).should == L["A", "B", "C", "A", "B", "C", "A"]
25
- end
26
- end
27
- end
28
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#delete_at" do
5
- let(:list) { L[1,2,3,4,5] }
6
-
7
- it "removes the element at the specified index" do
8
- list.delete_at(0).should eql(L[2,3,4,5])
9
- list.delete_at(2).should eql(L[1,2,4,5])
10
- list.delete_at(-1).should eql(L[1,2,3,4])
11
- end
12
-
13
- it "makes no modification if the index is out of range" do
14
- list.delete_at(5).should eql(list)
15
- list.delete_at(-6).should eql(list)
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#delete" do
5
- it "removes elements that are #== to the argument" do
6
- L[1,2,3].delete(1).should eql(L[2,3])
7
- L[1,2,3].delete(2).should eql(L[1,3])
8
- L[1,2,3].delete(3).should eql(L[1,2])
9
- L[1,2,3].delete(0).should eql(L[1,2,3])
10
- L['a','b','a','c','a','a','d'].delete('a').should eql(L['b','c','d'])
11
-
12
- L[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(L[])
13
- L[EqlNotEqual.new, EqlNotEqual.new].delete(:something).should_not be_empty
14
- end
15
- end
16
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#drop" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.drop(1) }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], 10, []],
11
- [["A"], 10, []],
12
- [["A"], -1, ["A"]],
13
- [%w[A B C], 0, %w[A B C]],
14
- [%w[A B C], 2, ["C"]],
15
- ].each do |values, number, expected|
16
- context "with #{number} from #{values.inspect}" do
17
- let(:list) { L[*values] }
18
-
19
- it "preserves the original" do
20
- list.drop(number)
21
- list.should eql(L[*values])
22
- end
23
-
24
- it "returns #{expected.inspect}" do
25
- list.drop(number).should == L[*expected]
26
- end
27
- end
28
- end
29
- end
30
- end