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,45 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H["a" => 3, "b" => 2, "c" => 1] }
5
-
6
- describe "#min" do
7
- it "returns the smallest key/val pair" do
8
- hash.min.should == ["a", 3]
9
- end
10
- end
11
-
12
- describe "#max" do
13
- it "returns the largest key/val pair" do
14
- hash.max.should == ["c", 1]
15
- end
16
- end
17
-
18
- describe "#min_by" do
19
- it "returns the smallest key/val pair (after passing it through a key function)" do
20
- hash.min_by { |k,v| v }.should == ["c", 1]
21
- end
22
-
23
- it "returns the first key/val pair yielded by #each in case of a tie" do
24
- hash.min_by { 0 }.should == hash.each.first
25
- end
26
-
27
- it "returns nil if the hash is empty" do
28
- H.empty.min_by { |k,v| v }.should be_nil
29
- end
30
- end
31
-
32
- describe "#max_by" do
33
- it "returns the largest key/val pair (after passing it through a key function)" do
34
- hash.max_by { |k,v| v }.should == ["a", 3]
35
- end
36
-
37
- it "returns the first key/val pair yielded by #each in case of a tie" do
38
- hash.max_by { 0 }.should == hash.each.first
39
- end
40
-
41
- it "returns nil if the hash is empty" do
42
- H.empty.max_by { |k,v| v }.should be_nil
43
- end
44
- end
45
- end
@@ -1,70 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe ".new" do
5
- it "is amenable to overriding of #initialize" do
6
- class SnazzyHash < Immutable::Hash
7
- def initialize
8
- super({'snazzy?' => 'oh yeah'})
9
- end
10
- end
11
-
12
- SnazzyHash.new['snazzy?'].should == 'oh yeah'
13
- end
14
-
15
- context "from a subclass" do
16
- it "returns a frozen instance of the subclass" do
17
- subclass = Class.new(Immutable::Hash)
18
- instance = subclass.new("some" => "values")
19
- instance.class.should be(subclass)
20
- instance.frozen?.should be true
21
- end
22
- end
23
-
24
- it "accepts an array as initializer" do
25
- H.new([['a', 'b'], ['c', 'd']]).should eql(H['a' => 'b', 'c' => 'd'])
26
- end
27
-
28
- it "returns a Hash which doesn't change even if initializer is mutated" do
29
- rbhash = {a: 1, b: 2}
30
- hash = H.new(rbhash)
31
- rbhash[:a] = 'BAD'
32
- hash.should eql(H[a: 1, b: 2])
33
- end
34
- end
35
-
36
- describe ".[]" do
37
- it "accepts a Ruby Hash as initializer" do
38
- hash = H[a: 1, b: 2]
39
- hash.class.should be(Immutable::Hash)
40
- hash.size.should == 2
41
- hash.key?(:a).should == true
42
- hash.key?(:b).should == true
43
- end
44
-
45
- it "accepts a Immutable::Hash as initializer" do
46
- hash = H[H.new(a: 1, b: 2)]
47
- hash.class.should be(Immutable::Hash)
48
- hash.size.should == 2
49
- hash.key?(:a).should == true
50
- hash.key?(:b).should == true
51
- end
52
-
53
- it "accepts an array as initializer" do
54
- hash = H[[[:a, 1], [:b, 2]]]
55
- hash.class.should be(Immutable::Hash)
56
- hash.size.should == 2
57
- hash.key?(:a).should == true
58
- hash.key?(:b).should == true
59
- end
60
-
61
- it "can be used with a subclass of Immutable::Hash" do
62
- subclass = Class.new(Immutable::Hash)
63
- instance = subclass[a: 1, b: 2]
64
- instance.class.should be(subclass)
65
- instance.size.should == 2
66
- instance.key?(:a).should == true
67
- instance.key?(:b).should == true
68
- end
69
- end
70
- end
@@ -1,48 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#none?" do
5
- context "when empty" do
6
- it "with a block returns true" do
7
- H.empty.none? {}.should == true
8
- end
9
-
10
- it "with no block returns true" do
11
- H.empty.none?.should == true
12
- end
13
- end
14
-
15
- context "when not empty" do
16
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
17
-
18
- context "with a block" do
19
- [
20
- %w[A aye],
21
- %w[B bee],
22
- %w[C see],
23
- [nil, "NIL"],
24
- ].each do |pair|
25
- it "returns false if the block ever returns true (#{pair.inspect})" do
26
- hash.none? { |key, value| key == pair.first && value == pair.last }.should == false
27
- end
28
-
29
- it "returns true if the block always returns false" do
30
- hash.none? { |key, value| key == "D" && value == "dee" }.should == true
31
- end
32
-
33
- it "stops iterating as soon as the block returns true" do
34
- yielded = []
35
- hash.none? { |k,v| yielded << k; true }
36
- yielded.size.should == 1
37
- end
38
- end
39
- end
40
-
41
- context "with no block" do
42
- it "returns false" do
43
- hash.none?.should == false
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,35 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H["a" => 1, "b" => 2, "c" => 3, "d" => 4] }
5
- let(:partition) { hash.partition { |k,v| v % 2 == 0 }}
6
-
7
- describe "#partition" do
8
- it "returns a pair of Immutable::Hashes" do
9
- partition.each { |h| h.class.should be(Immutable::Hash) }
10
- partition.should be_frozen
11
- end
12
-
13
- it "returns key/val pairs for which predicate is true in first Hash" do
14
- partition[0].should == {"b" => 2, "d" => 4}
15
- end
16
-
17
- it "returns key/val pairs for which predicate is false in second Hash" do
18
- partition[1].should == {"a" => 1, "c" => 3}
19
- end
20
-
21
- it "doesn't modify the original Hash" do
22
- partition
23
- hash.should eql(H["a" => 1, "b" => 2, "c" => 3, "d" => 4])
24
- end
25
-
26
- context "from a subclass" do
27
- it "should return instances of the subclass" do
28
- subclass = Class.new(Immutable::Hash)
29
- instance = subclass.new("a" => 1, "b" => 2, "c" => 3, "d" => 4)
30
- partition = instance.partition { |k,v| v % 2 == 0 }
31
- partition.each { |h| h.class.should be(subclass) }
32
- end
33
- end
34
- end
35
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
- require "pp"
3
- require "stringio"
4
-
5
- describe Immutable::Hash do
6
- describe "#pretty_print" do
7
- let(:hash) { Immutable::Hash.new(DeterministicHash.new(1,1) => "tin", DeterministicHash.new(2,2) => "earwax", DeterministicHash.new(3,3) => "neanderthal") }
8
- let(:stringio) { StringIO.new }
9
-
10
-
11
- it "prints the whole Hash on one line if it fits" do
12
- PP.pp(hash, stringio, 80)
13
- stringio.string.chomp.should == 'Immutable::Hash[1 => "tin", 2 => "earwax", 3 => "neanderthal"]'
14
- end
15
-
16
- it "prints each key/val pair on its own line, if not" do
17
- PP.pp(hash, stringio, 20)
18
- stringio.string.chomp.should == 'Immutable::Hash[
19
- 1 => "tin",
20
- 2 => "earwax",
21
- 3 => "neanderthal"]'
22
- end
23
-
24
- it "prints keys and vals on separate lines, if space is very tight" do
25
- PP.pp(hash, stringio, 15)
26
- # the trailing space after "3 =>" below is needed, don't remove it
27
- stringio.string.chomp.should == 'Immutable::Hash[
28
- 1 => "tin",
29
- 2 => "earwax",
30
- 3 =>
31
- "neanderthal"]'
32
- end
33
- end
34
- end
@@ -1,102 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#put" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
-
7
- context "with a block" do
8
- it "passes the value to the block" do
9
- hash.put("A") { |value| value.should == "aye" }
10
- end
11
-
12
- it "replaces the value with the result of the block" do
13
- result = hash.put("A") { |value| "FLIBBLE" }
14
- result.get("A").should == "FLIBBLE"
15
- end
16
-
17
- it "supports to_proc methods" do
18
- result = hash.put("A", &:upcase)
19
- result.get("A").should == "AYE"
20
- end
21
-
22
- context "if there is no existing association" do
23
- it "passes nil to the block" do
24
- hash.put("D") { |value| value.should be_nil }
25
- end
26
-
27
- it "stores the result of the block as the new value" do
28
- result = hash.put("D") { |value| "FLIBBLE" }
29
- result.get("D").should == "FLIBBLE"
30
- end
31
- end
32
- end
33
-
34
- context "with a unique key" do
35
- let(:result) { hash.put("D", "dee") }
36
-
37
- it "preserves the original" do
38
- result
39
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
40
- end
41
-
42
- it "returns a copy with the superset of key/value pairs" do
43
- result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
44
- end
45
- end
46
-
47
- context "with a duplicate key" do
48
- let(:result) { hash.put("C", "sea") }
49
-
50
- it "preserves the original" do
51
- result
52
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
53
- end
54
-
55
- it "returns a copy with the superset of key/value pairs" do
56
- result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
57
- end
58
- end
59
-
60
- context "with duplicate key and identical value" do
61
- let(:hash) { H["X" => 1, "Y" => 2] }
62
- let(:result) { hash.put("X", 1) }
63
-
64
- it "returns the original hash unmodified" do
65
- result.should be(hash)
66
- end
67
-
68
- context "with big hash (force nested tries)" do
69
- let(:keys) { (0..99).map(&:to_s) }
70
- let(:values) { (100..199).to_a }
71
- let(:hash) { H[keys.zip(values)] }
72
-
73
- it "returns the original hash unmodified for all changes" do
74
- keys.each_with_index do |key, index|
75
- result = hash.put(key, values[index])
76
- result.should be(hash)
77
- end
78
- end
79
- end
80
- end
81
-
82
- context "with unequal keys which hash to the same value" do
83
- let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
84
-
85
- it "stores and can retrieve both" do
86
- result = hash.put(DeterministicHash.new('b', 1), 'bee')
87
- result.get(DeterministicHash.new('a', 1)).should eql('aye')
88
- result.get(DeterministicHash.new('b', 1)).should eql('bee')
89
- end
90
- end
91
-
92
- context "when a String is inserted as key and then mutated" do
93
- it "is not affected" do
94
- string = "a string!"
95
- hash = H.empty.put(string, 'a value!')
96
- string.upcase!
97
- hash['a string!'].should == 'a value!'
98
- hash['A STRING!'].should be_nil
99
- end
100
- end
101
- end
102
- end
@@ -1,35 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- [:reduce, :inject].each do |method|
5
- describe "##{method}" do
6
- context "when empty" do
7
- it "returns the memo" do
8
- H.empty.send(method, "ABC") {}.should == "ABC"
9
- end
10
- end
11
-
12
- context "when not empty" do
13
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
14
-
15
- context "with a block" do
16
- it "returns the final memo" do
17
- hash.send(method, 0) { |memo, key, value| memo + 1 }.should == 3
18
- end
19
- end
20
-
21
- context "with no block" do
22
- let(:hash) { H[a: 1, b: 2] }
23
-
24
- it "uses a passed string as the name of a method to use instead" do
25
- [[:a, 1, :b, 2], [:b, 2, :a, 1]].include?(hash.send(method, "+")).should == true
26
- end
27
-
28
- it "uses a passed symbol as the name of a method to use instead" do
29
- [[:a, 1, :b, 2], [:b, 2, :a, 1]].include?(hash.send(method, :+)).should == true
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,61 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- [:reject, :delete_if].each do |method|
5
- describe "##{method}" do
6
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
7
-
8
- context "when nothing matches" do
9
- it "returns self" do
10
- hash.send(method) { |key, value| false }.should equal(hash)
11
- end
12
- end
13
-
14
- context "when only some things match" do
15
- context "with a block" do
16
- let(:result) { hash.send(method) { |key, value| key == "A" && value == "aye" }}
17
-
18
- it "preserves the original" do
19
- result
20
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
21
- end
22
-
23
- it "returns a set with the matching values" do
24
- result.should eql(H["B" => "bee", "C" => "see"])
25
- end
26
-
27
- it "yields entries in the same order as #each" do
28
- each_pairs = []
29
- remove_pairs = []
30
- hash.each_pair { |k,v| each_pairs << [k,v] }
31
- hash.send(method) { |k,v| remove_pairs << [k,v] }
32
- each_pairs.should == remove_pairs
33
- end
34
- end
35
-
36
- context "with no block" do
37
- it "returns an Enumerator" do
38
- hash.send(method).class.should be(Enumerator)
39
- hash.send(method).to_a.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
40
- hash.send(method).each { true }.should eql(H.empty)
41
- end
42
- end
43
-
44
- context "on a large hash, with many combinations of input" do
45
- it "still works" do
46
- array = 1000.times.collect { |n| [n, n] }
47
- hash = H.new(array)
48
- [0, 10, 100, 200, 500, 800, 900, 999, 1000].each do |threshold|
49
- result = hash.send(method) { |k,v| k >= threshold}
50
- result.size.should == threshold
51
- 0.upto(threshold-1) { |n| result.key?(n).should == true }
52
- threshold.upto(1000) { |n| result.key?(n).should == false }
53
- end
54
- # shouldn't have changed
55
- hash.should eql(H.new(1000.times.collect { |n| [n, n] }))
56
- end
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,27 +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 "#reverse_each" do
7
- context "with a block" do
8
- it "returns self" do
9
- hash.reverse_each {}.should be(hash)
10
- end
11
-
12
- it "yields all key/value pairs in the opposite order as #each" do
13
- result = []
14
- hash.reverse_each { |entry| result << entry }
15
- result.should eql(hash.to_a.reverse)
16
- end
17
- end
18
-
19
- context "with no block" do
20
- it "returns an Enumerator" do
21
- result = hash.reverse_each
22
- result.class.should be(Enumerator)
23
- result.to_a.should eql(hash.to_a.reverse)
24
- end
25
- end
26
- end
27
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#sample" do
5
- let(:hash) { Immutable::Hash.new((:a..:z).zip(1..26)) }
6
-
7
- it "returns a randomly chosen item" do
8
- chosen = 250.times.map { hash.sample }.sort.uniq
9
- chosen.each { |item| hash.include?(item[0]).should == true }
10
- hash.each { |item| chosen.include?(item).should == true }
11
- end
12
- end
13
- end
@@ -1,57 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- [:select, :find_all, :keep_if].each do |method|
5
- describe "##{method}" do
6
- let(:original) { H["A" => "aye", "B" => "bee", "C" => "see"] }
7
-
8
- context "when everything matches" do
9
- it "returns self" do
10
- original.send(method) { |key, value| true }.should equal(original)
11
- end
12
- end
13
-
14
- context "when only some things match" do
15
- context "with a block" do
16
- let(:result) { original.send(method) { |key, value| key == "A" && value == "aye" }}
17
-
18
- it "preserves the original" do
19
- original.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
20
- end
21
-
22
- it "returns a set with the matching values" do
23
- result.should eql(H["A" => "aye"])
24
- end
25
- end
26
-
27
- it "yields entries as [key, value] pairs" do
28
- original.send(method) do |e|
29
- e.should be_kind_of(Array)
30
- ["A", "B", "C"].include?(e[0]).should == true
31
- ["aye", "bee", "see"].include?(e[1]).should == true
32
- end
33
- end
34
-
35
- context "with no block" do
36
- it "returns an Enumerator" do
37
- original.send(method).class.should be(Enumerator)
38
- original.send(method).to_a.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
39
- end
40
- end
41
- end
42
-
43
- it "works on a large hash, with many combinations of input" do
44
- keys = (1..1000).to_a
45
- original = H.new(keys.zip(2..1001))
46
- 25.times do
47
- threshold = rand(1000)
48
- result = original.send(method) { |k,v| k <= threshold }
49
- result.size.should == threshold
50
- result.each_key { |k| k.should <= threshold }
51
- (threshold+1).upto(1000) { |k| result.key?(k).should == false }
52
- end
53
- original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
54
- end
55
- end
56
- end
57
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- [:size, :length].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], 0],
8
- [["A" => "aye"], 1],
9
- [["A" => "bee", "B" => "bee", "C" => "see"], 3],
10
- ].each do |values, result|
11
-
12
- it "returns #{result} for #{values.inspect}" do
13
- H[*values].send(method).should == result
14
- end
15
- end
16
-
17
- lots = (1..10_842).to_a
18
- srand 89_533_474
19
- random_things = (lots + lots).sort_by { |x|rand }
20
-
21
- it "has the correct size after adding lots of things with colliding keys and such" do
22
- h = H.empty
23
- random_things.each do |thing|
24
- h = h.put(thing, thing * 2)
25
- end
26
- h.size.should == 10_842
27
- end
28
-
29
- random_actions = (lots.map { |x|[:add, x] } + lots.map { |x|[:add, x] } + lots.map { |x|[:remove, x] }).sort_by { |x|rand }
30
- ending_size = random_actions.reduce({}) do |h, (act, ob)|
31
- if act == :add
32
- h[ob] = 1
33
- else
34
- h.delete(ob)
35
- end
36
- h
37
- end.size
38
- it "has the correct size after lots of addings and removings" do
39
- h = H.empty
40
- random_actions.each do |(act, ob)|
41
- if act == :add
42
- h = h.put(ob, ob * 3)
43
- else
44
- h = h.delete(ob)
45
- end
46
- end
47
- h.size.should == ending_size
48
- end
49
- end
50
- end
51
- end
@@ -1,44 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL") }
5
-
6
- describe "#slice" do
7
- let(:slice) { hash.slice(*values) }
8
-
9
- context "with all keys present in the Hash" do
10
- let(:values) { ["B", nil] }
11
-
12
- it "returns the sliced values" do
13
- expect(slice).to eq(described_class.new("B" => "bee", nil => "NIL"))
14
- end
15
-
16
- it "doesn't modify the original Hash" do
17
- slice
18
- hash.should eql(H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
19
- end
20
- end
21
-
22
- context "with keys aren't present in the Hash" do
23
- let(:values) { ["B", "A", 3] }
24
-
25
- it "returns the sliced values of the matching keys" do
26
- expect(slice).to eq(described_class.new("A" => "aye", "B" => "bee"))
27
- end
28
-
29
- it "doesn't modify the original Hash" do
30
- slice
31
- hash.should eql(H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
32
- end
33
- end
34
-
35
- context "on a Hash with a default block" do
36
- let(:hash) { H.new('A' => 'aye', 'B' => 'bee') { 'nothing' }}
37
- let(:values) { ["B", nil] }
38
-
39
- it "maintains the default block" do
40
- expect(slice['C']).to eq('nothing')
41
- end
42
- end
43
- end
44
- end
@@ -1,26 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H[a: 3, b: 2, c: 1] }
5
-
6
- describe "#sort" do
7
- it "returns a Vector of sorted key/val pairs" do
8
- hash.sort.should eql(V[[:a, 3], [:b, 2], [:c, 1]])
9
- end
10
-
11
- it "works on large hashes" do
12
- array = (1..1000).map { |n| [n,n] }
13
- H.new(array.shuffle).sort.should eql(V.new(array))
14
- end
15
-
16
- it "uses block as comparator to sort if passed a block" do
17
- hash.sort { |a,b| b <=> a }.should eql(V[[:c, 1], [:b, 2], [:a, 3]])
18
- end
19
- end
20
-
21
- describe "#sort_by" do
22
- it "returns a Vector of key/val pairs, sorted using the block as a key function" do
23
- hash.sort_by { |k,v| v }.should eql(V[[:c, 1], [:b, 2], [:a, 3]])
24
- end
25
- end
26
- end