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,75 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#store" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
-
7
- context "with a unique key" do
8
- let(:result) { hash.store("D", "dee") }
9
-
10
- it "preserves the original" do
11
- result
12
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
13
- end
14
-
15
- it "returns a copy with the superset of key/value pairs" do
16
- result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
17
- end
18
- end
19
-
20
- context "with a duplicate key" do
21
- let(:result) { hash.store("C", "sea") }
22
-
23
- it "preserves the original" do
24
- result
25
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
26
- end
27
-
28
- it "returns a copy with the superset of key/value pairs" do
29
- result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
30
- end
31
- end
32
-
33
- context "with duplicate key and identical value" do
34
- let(:hash) { H["X" => 1, "Y" => 2] }
35
- let(:result) { hash.store("X", 1) }
36
-
37
- it "returns the original hash unmodified" do
38
- result.should be(hash)
39
- end
40
-
41
- context "with big hash (force nested tries)" do
42
- let(:keys) { (0..99).map(&:to_s) }
43
- let(:values) { (100..199).to_a }
44
- let(:hash) { H[keys.zip(values)] }
45
-
46
- it "returns the original hash unmodified for all changes" do
47
- keys.each_with_index do |key, index|
48
- result = hash.store(key, values[index])
49
- result.should be(hash)
50
- end
51
- end
52
- end
53
- end
54
-
55
- context "with unequal keys which hash to the same value" do
56
- let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
57
-
58
- it "stores and can retrieve both" do
59
- result = hash.store(DeterministicHash.new('b', 1), 'bee')
60
- result.get(DeterministicHash.new('a', 1)).should eql('aye')
61
- result.get(DeterministicHash.new('b', 1)).should eql('bee')
62
- end
63
- end
64
-
65
- context "when a String is inserted as key and then mutated" do
66
- it "is not affected" do
67
- string = "a string!"
68
- hash = H.empty.store(string, 'a value!')
69
- string.upcase!
70
- hash['a string!'].should == 'a value!'
71
- hash['A STRING!'].should be_nil
72
- end
73
- end
74
- end
75
- end
@@ -1,35 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
5
-
6
- describe "#take" do
7
- it "returns the first N key/val pairs from hash" do
8
- hash.take(0).should == []
9
- [[['A', 'aye']], [['B', 'bee']], [['C', 'see']]].include?(hash.take(1)).should == true
10
- [['A', 'aye'], ['B', 'bee'], ['C', 'see']].combination(2).include?(hash.take(2).sort).should == true
11
- hash.take(3).sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
12
- hash.take(4).sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
13
- end
14
- end
15
-
16
- describe "#take_while" do
17
- it "passes elements to the block until the block returns nil/false" do
18
- passed = nil
19
- hash.take_while { |k,v| passed = k; false }
20
- ['A', 'B', 'C'].include?(passed).should == true
21
- end
22
-
23
- it "returns an array of all elements before the one which returned nil/false" do
24
- count = 0
25
- result = hash.take_while { count += 1; count < 3 }
26
- [['A', 'aye'], ['B', 'bee'], ['C', 'see']].combination(2).include?(result.sort).should == true
27
- end
28
-
29
- it "passes all elements if the block never returns nil/false" do
30
- passed = []
31
- hash.take_while { |k,v| passed << [k, v]; true }.should == hash.to_a
32
- passed.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
33
- end
34
- end
35
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#to_a" do
5
- it "returns an Array of [key, value] pairs in same order as #each" do
6
- hash = H[:a => 1, 1 => :a, 3 => :b, :b => 5]
7
- pairs = []
8
- hash.each_pair { |k,v| pairs << [k,v] }
9
- hash.to_a.should be_kind_of(Array)
10
- hash.to_a.should == pairs
11
- end
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- [:to_hash, :to_h].each do |method|
5
- describe "##{method}" do
6
- it "converts an empty Immutable::Hash to an empty Ruby Hash" do
7
- H.empty.send(method).should eql({})
8
- end
9
-
10
- it "converts a non-empty Immutable::Hash to a Hash with the same keys and values" do
11
- H[a: 1, b: 2].send(method).should eql({a: 1, b: 2})
12
- end
13
-
14
- it "doesn't modify the receiver" do
15
- hash = H[a: 1, b: 2]
16
- hash.send(method)
17
- hash.should eql(H[a: 1, b: 2])
18
- end
19
- end
20
- end
21
- end
@@ -1,79 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#update_in" do
5
- let(:hash) {
6
- Immutable::Hash[
7
- "A" => "aye",
8
- "B" => Immutable::Hash["C" => "see", "D" => Immutable::Hash["E" => "eee"]],
9
- "F" => Immutable::Vector["G", Immutable::Hash["H" => "eitch"], "I"]
10
- ]
11
- }
12
-
13
- context "with one level on existing key" do
14
- it "passes the value to the block" do
15
- hash.update_in("A") { |value| value.should == "aye" }
16
- end
17
-
18
- it "replaces the value with the result of the block" do
19
- result = hash.update_in("A") { |value| "FLIBBLE" }
20
- result.get("A").should == "FLIBBLE"
21
- end
22
-
23
- it "should preserve the original" do
24
- result = hash.update_in("A") { |value| "FLIBBLE" }
25
- hash.get("A").should == "aye"
26
- end
27
- end
28
-
29
- context "with multi-level on existing keys" do
30
- it "passes the value to the block" do
31
- hash.update_in("B", "D", "E") { |value| value.should == "eee" }
32
- end
33
-
34
- it "replaces the value with the result of the block" do
35
- result = hash.update_in("B", "D", "E") { |value| "FLIBBLE" }
36
- result["B"]["D"]["E"].should == "FLIBBLE"
37
- end
38
-
39
- it "should preserve the original" do
40
- result = hash.update_in("B", "D", "E") { |value| "FLIBBLE" }
41
- hash["B"]["D"]["E"].should == "eee"
42
- end
43
- end
44
-
45
- context "with multi-level creating sub-hashes when keys don't exist" do
46
- it "passes nil to the block" do
47
- hash.update_in("B", "X", "Y") { |value| value.should be_nil }
48
- end
49
-
50
- it "creates subhashes on the way to set the value" do
51
- result = hash.update_in("B", "X", "Y") { |value| "NEWVALUE" }
52
- result["B"]["X"]["Y"].should == "NEWVALUE"
53
- result["B"]["D"]["E"].should == "eee"
54
- end
55
- end
56
-
57
- context "with multi-level including vector with existing keys" do
58
- it "passes the value to the block" do
59
- hash.update_in("F", 1, "H") { |value| value.should == "eitch" }
60
- end
61
-
62
- it "replaces the value with the result of the block" do
63
- result = hash.update_in("F", 1, "H") { |value| "FLIBBLE" }
64
- result["F"][1]["H"].should == "FLIBBLE"
65
- end
66
-
67
- it "should preserve the original" do
68
- result = hash.update_in("F", 1, "H") { |value| "FLIBBLE" }
69
- hash["F"][1]["H"].should == "eitch"
70
- end
71
- end
72
-
73
- context "with empty key_path" do
74
- it "raises ArguemntError" do
75
- expect { hash.update_in() { |v| 42 } }.to raise_error(ArgumentError)
76
- end
77
- end
78
- end
79
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#values_at" do
5
- it "returns a vector of values for the given keys" do
6
- h = H[:a => 9, :b => 'a', :c => -10, :d => nil]
7
- h.values_at.should be_kind_of(Immutable::Vector)
8
- h.values_at.should eql(V.empty)
9
- h.values_at(:a, :d, :b).should be_kind_of(Immutable::Vector)
10
- h.values_at(:a, :d, :b).should eql(V[9, nil, 'a'])
11
- end
12
- end
13
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#values" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
- let(:result) { hash.values }
7
-
8
- it "returns the keys as a Vector" do
9
- result.should be_a Immutable::Vector
10
- result.to_a.sort.should == %w(aye bee see)
11
- end
12
-
13
- context "with duplicates" do
14
- let(:hash) { H[:A => 15, :B => 19, :C => 15] }
15
- let(:result) { hash.values }
16
-
17
- it "returns the keys as a Vector" do
18
- result.class.should be(Immutable::Vector)
19
- result.to_a.sort.should == [15, 15, 19]
20
- end
21
- end
22
- end
23
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#add" 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.add(new_value)
16
- list.should eql(L[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- list.add(new_value).should eql(L[*expected])
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,57 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#all?" do
5
- context "on a really big list" do
6
- let(:list) { Immutable.interval(0, STACK_OVERFLOW_DEPTH) }
7
-
8
- it "doesn't run out of stack" do
9
- -> { list.all? }.should_not raise_error
10
- end
11
- end
12
-
13
- context "when empty" do
14
- it "with a block returns true" do
15
- L.empty.all? {}.should == true
16
- end
17
-
18
- it "with no block returns true" do
19
- L.empty.all?.should == true
20
- end
21
- end
22
-
23
- context "when not empty" do
24
- context "with a block" do
25
- let(:list) { L["A", "B", "C"] }
26
-
27
- context "if the block always returns true" do
28
- it "returns true" do
29
- list.all? { |item| true }.should == true
30
- end
31
- end
32
-
33
- context "if the block ever returns false" do
34
- it "returns false" do
35
- list.all? { |item| item == "D" }.should == false
36
- end
37
- end
38
- end
39
-
40
- context "with no block" do
41
- context "if all values are truthy" do
42
- it "returns true" do
43
- L[true, "A"].all?.should == true
44
- end
45
- end
46
-
47
- [nil, false].each do |value|
48
- context "if any value is #{value.inspect}" do
49
- it "returns false" do
50
- L[value, true, "A"].all?.should == false
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -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) { Immutable.interval(0, STACK_OVERFLOW_DEPTH) }
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) { Immutable.interval(0, STACK_OVERFLOW_DEPTH) }
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