immutable-ruby 0.0.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immutable/_core.rb +3067 -0
  3. data/lib/immutable/core_ext/enumerable.rb +1 -1
  4. data/lib/immutable/core_ext/io.rb +1 -1
  5. data/lib/immutable/core_ext.rb +2 -2
  6. data/lib/immutable/deque.rb +17 -17
  7. data/lib/immutable/enumerable.rb +10 -10
  8. data/lib/immutable/hash.rb +4 -941
  9. data/lib/immutable/list.rb +36 -36
  10. data/lib/immutable/nested.rb +8 -8
  11. data/lib/immutable/set.rb +3 -583
  12. data/lib/immutable/sorted_set.rb +29 -27
  13. data/lib/immutable/trie.rb +2 -2
  14. data/lib/immutable/vector.rb +3 -1549
  15. data/lib/immutable/version.rb +1 -1
  16. data/lib/immutable.rb +9 -9
  17. metadata +34 -696
  18. data/lib/immutable/core_ext/struct.rb +0 -9
  19. data/spec/fixtures/io_spec.txt +0 -3
  20. data/spec/lib/immutable/core_ext/array_spec.rb +0 -13
  21. data/spec/lib/immutable/core_ext/enumerable_spec.rb +0 -29
  22. data/spec/lib/immutable/core_ext/io_spec.rb +0 -28
  23. data/spec/lib/immutable/deque/clear_spec.rb +0 -33
  24. data/spec/lib/immutable/deque/construction_spec.rb +0 -29
  25. data/spec/lib/immutable/deque/copying_spec.rb +0 -19
  26. data/spec/lib/immutable/deque/dequeue_spec.rb +0 -34
  27. data/spec/lib/immutable/deque/empty_spec.rb +0 -39
  28. data/spec/lib/immutable/deque/enqueue_spec.rb +0 -27
  29. data/spec/lib/immutable/deque/first_spec.rb +0 -17
  30. data/spec/lib/immutable/deque/inspect_spec.rb +0 -23
  31. data/spec/lib/immutable/deque/last_spec.rb +0 -17
  32. data/spec/lib/immutable/deque/marshal_spec.rb +0 -33
  33. data/spec/lib/immutable/deque/new_spec.rb +0 -43
  34. data/spec/lib/immutable/deque/pop_spec.rb +0 -36
  35. data/spec/lib/immutable/deque/pretty_print_spec.rb +0 -23
  36. data/spec/lib/immutable/deque/push_spec.rb +0 -36
  37. data/spec/lib/immutable/deque/random_modification_spec.rb +0 -33
  38. data/spec/lib/immutable/deque/rotate_spec.rb +0 -68
  39. data/spec/lib/immutable/deque/shift_spec.rb +0 -29
  40. data/spec/lib/immutable/deque/size_spec.rb +0 -19
  41. data/spec/lib/immutable/deque/to_a_spec.rb +0 -26
  42. data/spec/lib/immutable/deque/to_ary_spec.rb +0 -35
  43. data/spec/lib/immutable/deque/to_list_spec.rb +0 -24
  44. data/spec/lib/immutable/deque/unshift_spec.rb +0 -30
  45. data/spec/lib/immutable/hash/all_spec.rb +0 -53
  46. data/spec/lib/immutable/hash/any_spec.rb +0 -53
  47. data/spec/lib/immutable/hash/assoc_spec.rb +0 -51
  48. data/spec/lib/immutable/hash/clear_spec.rb +0 -42
  49. data/spec/lib/immutable/hash/construction_spec.rb +0 -38
  50. data/spec/lib/immutable/hash/copying_spec.rb +0 -13
  51. data/spec/lib/immutable/hash/default_proc_spec.rb +0 -72
  52. data/spec/lib/immutable/hash/delete_spec.rb +0 -39
  53. data/spec/lib/immutable/hash/dig_spec.rb +0 -34
  54. data/spec/lib/immutable/hash/each_spec.rb +0 -77
  55. data/spec/lib/immutable/hash/each_with_index_spec.rb +0 -29
  56. data/spec/lib/immutable/hash/empty_spec.rb +0 -43
  57. data/spec/lib/immutable/hash/eql_spec.rb +0 -75
  58. data/spec/lib/immutable/hash/except_spec.rb +0 -42
  59. data/spec/lib/immutable/hash/fetch_spec.rb +0 -57
  60. data/spec/lib/immutable/hash/fetch_values_spec.rb +0 -22
  61. data/spec/lib/immutable/hash/find_spec.rb +0 -43
  62. data/spec/lib/immutable/hash/flat_map_spec.rb +0 -35
  63. data/spec/lib/immutable/hash/flatten_spec.rb +0 -98
  64. data/spec/lib/immutable/hash/get_spec.rb +0 -79
  65. data/spec/lib/immutable/hash/has_key_spec.rb +0 -31
  66. data/spec/lib/immutable/hash/has_value_spec.rb +0 -27
  67. data/spec/lib/immutable/hash/hash_spec.rb +0 -29
  68. data/spec/lib/immutable/hash/inspect_spec.rb +0 -30
  69. data/spec/lib/immutable/hash/invert_spec.rb +0 -30
  70. data/spec/lib/immutable/hash/key_spec.rb +0 -27
  71. data/spec/lib/immutable/hash/keys_spec.rb +0 -15
  72. data/spec/lib/immutable/hash/map_spec.rb +0 -45
  73. data/spec/lib/immutable/hash/marshal_spec.rb +0 -28
  74. data/spec/lib/immutable/hash/merge_spec.rb +0 -82
  75. data/spec/lib/immutable/hash/min_max_spec.rb +0 -45
  76. data/spec/lib/immutable/hash/new_spec.rb +0 -70
  77. data/spec/lib/immutable/hash/none_spec.rb +0 -48
  78. data/spec/lib/immutable/hash/partition_spec.rb +0 -35
  79. data/spec/lib/immutable/hash/pretty_print_spec.rb +0 -34
  80. data/spec/lib/immutable/hash/put_spec.rb +0 -111
  81. data/spec/lib/immutable/hash/reduce_spec.rb +0 -35
  82. data/spec/lib/immutable/hash/reject_spec.rb +0 -61
  83. data/spec/lib/immutable/hash/reverse_each_spec.rb +0 -27
  84. data/spec/lib/immutable/hash/sample_spec.rb +0 -13
  85. data/spec/lib/immutable/hash/select_spec.rb +0 -57
  86. data/spec/lib/immutable/hash/size_spec.rb +0 -51
  87. data/spec/lib/immutable/hash/slice_spec.rb +0 -44
  88. data/spec/lib/immutable/hash/sort_spec.rb +0 -26
  89. data/spec/lib/immutable/hash/store_spec.rb +0 -75
  90. data/spec/lib/immutable/hash/subset_spec.rb +0 -42
  91. data/spec/lib/immutable/hash/superset_spec.rb +0 -42
  92. data/spec/lib/immutable/hash/take_spec.rb +0 -35
  93. data/spec/lib/immutable/hash/to_a_spec.rb +0 -13
  94. data/spec/lib/immutable/hash/to_hash_spec.rb +0 -21
  95. data/spec/lib/immutable/hash/to_proc_spec.rb +0 -39
  96. data/spec/lib/immutable/hash/update_in_spec.rb +0 -79
  97. data/spec/lib/immutable/hash/values_at_spec.rb +0 -33
  98. data/spec/lib/immutable/hash/values_spec.rb +0 -23
  99. data/spec/lib/immutable/list/add_spec.rb +0 -25
  100. data/spec/lib/immutable/list/all_spec.rb +0 -57
  101. data/spec/lib/immutable/list/any_spec.rb +0 -49
  102. data/spec/lib/immutable/list/append_spec.rb +0 -38
  103. data/spec/lib/immutable/list/at_spec.rb +0 -29
  104. data/spec/lib/immutable/list/break_spec.rb +0 -69
  105. data/spec/lib/immutable/list/cadr_spec.rb +0 -38
  106. data/spec/lib/immutable/list/chunk_spec.rb +0 -28
  107. data/spec/lib/immutable/list/clear_spec.rb +0 -24
  108. data/spec/lib/immutable/list/combination_spec.rb +0 -33
  109. data/spec/lib/immutable/list/compact_spec.rb +0 -34
  110. data/spec/lib/immutable/list/compare_spec.rb +0 -30
  111. data/spec/lib/immutable/list/cons_spec.rb +0 -25
  112. data/spec/lib/immutable/list/construction_spec.rb +0 -110
  113. data/spec/lib/immutable/list/copying_spec.rb +0 -19
  114. data/spec/lib/immutable/list/count_spec.rb +0 -36
  115. data/spec/lib/immutable/list/cycle_spec.rb +0 -28
  116. data/spec/lib/immutable/list/delete_at_spec.rb +0 -18
  117. data/spec/lib/immutable/list/delete_spec.rb +0 -16
  118. data/spec/lib/immutable/list/drop_spec.rb +0 -30
  119. data/spec/lib/immutable/list/drop_while_spec.rb +0 -38
  120. data/spec/lib/immutable/list/each_slice_spec.rb +0 -51
  121. data/spec/lib/immutable/list/each_spec.rb +0 -40
  122. data/spec/lib/immutable/list/each_with_index_spec.rb +0 -28
  123. data/spec/lib/immutable/list/empty_spec.rb +0 -23
  124. data/spec/lib/immutable/list/eql_spec.rb +0 -61
  125. data/spec/lib/immutable/list/fill_spec.rb +0 -49
  126. data/spec/lib/immutable/list/find_all_spec.rb +0 -70
  127. data/spec/lib/immutable/list/find_index_spec.rb +0 -35
  128. data/spec/lib/immutable/list/find_spec.rb +0 -42
  129. data/spec/lib/immutable/list/flat_map_spec.rb +0 -51
  130. data/spec/lib/immutable/list/flatten_spec.rb +0 -30
  131. data/spec/lib/immutable/list/grep_spec.rb +0 -46
  132. data/spec/lib/immutable/list/group_by_spec.rb +0 -41
  133. data/spec/lib/immutable/list/hash_spec.rb +0 -21
  134. data/spec/lib/immutable/list/head_spec.rb +0 -19
  135. data/spec/lib/immutable/list/include_spec.rb +0 -35
  136. data/spec/lib/immutable/list/index_spec.rb +0 -37
  137. data/spec/lib/immutable/list/indices_spec.rb +0 -61
  138. data/spec/lib/immutable/list/init_spec.rb +0 -28
  139. data/spec/lib/immutable/list/inits_spec.rb +0 -28
  140. data/spec/lib/immutable/list/insert_spec.rb +0 -46
  141. data/spec/lib/immutable/list/inspect_spec.rb +0 -29
  142. data/spec/lib/immutable/list/intersperse_spec.rb +0 -28
  143. data/spec/lib/immutable/list/join_spec.rb +0 -63
  144. data/spec/lib/immutable/list/last_spec.rb +0 -23
  145. data/spec/lib/immutable/list/ltlt_spec.rb +0 -19
  146. data/spec/lib/immutable/list/map_spec.rb +0 -45
  147. data/spec/lib/immutable/list/maximum_spec.rb +0 -39
  148. data/spec/lib/immutable/list/merge_by_spec.rb +0 -51
  149. data/spec/lib/immutable/list/merge_spec.rb +0 -59
  150. data/spec/lib/immutable/list/minimum_spec.rb +0 -39
  151. data/spec/lib/immutable/list/multithreading_spec.rb +0 -47
  152. data/spec/lib/immutable/list/none_spec.rb +0 -47
  153. data/spec/lib/immutable/list/one_spec.rb +0 -49
  154. data/spec/lib/immutable/list/partition_spec.rb +0 -115
  155. data/spec/lib/immutable/list/permutation_spec.rb +0 -55
  156. data/spec/lib/immutable/list/pop_spec.rb +0 -25
  157. data/spec/lib/immutable/list/product_spec.rb +0 -23
  158. data/spec/lib/immutable/list/reduce_spec.rb +0 -53
  159. data/spec/lib/immutable/list/reject_spec.rb +0 -45
  160. data/spec/lib/immutable/list/reverse_spec.rb +0 -34
  161. data/spec/lib/immutable/list/rotate_spec.rb +0 -36
  162. data/spec/lib/immutable/list/sample_spec.rb +0 -13
  163. data/spec/lib/immutable/list/select_spec.rb +0 -70
  164. data/spec/lib/immutable/list/size_spec.rb +0 -25
  165. data/spec/lib/immutable/list/slice_spec.rb +0 -229
  166. data/spec/lib/immutable/list/sorting_spec.rb +0 -46
  167. data/spec/lib/immutable/list/span_spec.rb +0 -76
  168. data/spec/lib/immutable/list/split_at_spec.rb +0 -43
  169. data/spec/lib/immutable/list/subsequences_spec.rb +0 -23
  170. data/spec/lib/immutable/list/sum_spec.rb +0 -23
  171. data/spec/lib/immutable/list/tail_spec.rb +0 -30
  172. data/spec/lib/immutable/list/tails_spec.rb +0 -28
  173. data/spec/lib/immutable/list/take_spec.rb +0 -30
  174. data/spec/lib/immutable/list/take_while_spec.rb +0 -46
  175. data/spec/lib/immutable/list/to_a_spec.rb +0 -39
  176. data/spec/lib/immutable/list/to_ary_spec.rb +0 -41
  177. data/spec/lib/immutable/list/to_list_spec.rb +0 -19
  178. data/spec/lib/immutable/list/to_set_spec.rb +0 -17
  179. data/spec/lib/immutable/list/transpose_spec.rb +0 -19
  180. data/spec/lib/immutable/list/union_spec.rb +0 -31
  181. data/spec/lib/immutable/list/uniq_spec.rb +0 -35
  182. data/spec/lib/immutable/list/zip_spec.rb +0 -23
  183. data/spec/lib/immutable/nested/construction_spec.rb +0 -101
  184. data/spec/lib/immutable/set/add_spec.rb +0 -77
  185. data/spec/lib/immutable/set/all_spec.rb +0 -51
  186. data/spec/lib/immutable/set/any_spec.rb +0 -51
  187. data/spec/lib/immutable/set/clear_spec.rb +0 -33
  188. data/spec/lib/immutable/set/compact_spec.rb +0 -30
  189. data/spec/lib/immutable/set/construction_spec.rb +0 -18
  190. data/spec/lib/immutable/set/copying_spec.rb +0 -13
  191. data/spec/lib/immutable/set/count_spec.rb +0 -36
  192. data/spec/lib/immutable/set/delete_spec.rb +0 -71
  193. data/spec/lib/immutable/set/difference_spec.rb +0 -49
  194. data/spec/lib/immutable/set/disjoint_spec.rb +0 -25
  195. data/spec/lib/immutable/set/each_spec.rb +0 -45
  196. data/spec/lib/immutable/set/empty_spec.rb +0 -44
  197. data/spec/lib/immutable/set/eqeq_spec.rb +0 -103
  198. data/spec/lib/immutable/set/eql_spec.rb +0 -109
  199. data/spec/lib/immutable/set/exclusion_spec.rb +0 -47
  200. data/spec/lib/immutable/set/find_spec.rb +0 -35
  201. data/spec/lib/immutable/set/first_spec.rb +0 -28
  202. data/spec/lib/immutable/set/flatten_spec.rb +0 -46
  203. data/spec/lib/immutable/set/grep_spec.rb +0 -57
  204. data/spec/lib/immutable/set/grep_v_spec.rb +0 -59
  205. data/spec/lib/immutable/set/group_by_spec.rb +0 -59
  206. data/spec/lib/immutable/set/hash_spec.rb +0 -22
  207. data/spec/lib/immutable/set/include_spec.rb +0 -60
  208. data/spec/lib/immutable/set/inspect_spec.rb +0 -47
  209. data/spec/lib/immutable/set/intersect_spec.rb +0 -25
  210. data/spec/lib/immutable/set/intersection_spec.rb +0 -52
  211. data/spec/lib/immutable/set/join_spec.rb +0 -64
  212. data/spec/lib/immutable/set/map_spec.rb +0 -59
  213. data/spec/lib/immutable/set/marshal_spec.rb +0 -28
  214. data/spec/lib/immutable/set/maximum_spec.rb +0 -36
  215. data/spec/lib/immutable/set/minimum_spec.rb +0 -36
  216. data/spec/lib/immutable/set/new_spec.rb +0 -53
  217. data/spec/lib/immutable/set/none_spec.rb +0 -47
  218. data/spec/lib/immutable/set/one_spec.rb +0 -47
  219. data/spec/lib/immutable/set/partition_spec.rb +0 -52
  220. data/spec/lib/immutable/set/product_spec.rb +0 -23
  221. data/spec/lib/immutable/set/reduce_spec.rb +0 -55
  222. data/spec/lib/immutable/set/reject_spec.rb +0 -50
  223. data/spec/lib/immutable/set/reverse_each_spec.rb +0 -38
  224. data/spec/lib/immutable/set/sample_spec.rb +0 -13
  225. data/spec/lib/immutable/set/select_spec.rb +0 -73
  226. data/spec/lib/immutable/set/size_spec.rb +0 -17
  227. data/spec/lib/immutable/set/sorting_spec.rb +0 -65
  228. data/spec/lib/immutable/set/subset_spec.rb +0 -51
  229. data/spec/lib/immutable/set/sum_spec.rb +0 -23
  230. data/spec/lib/immutable/set/superset_spec.rb +0 -51
  231. data/spec/lib/immutable/set/to_a_spec.rb +0 -30
  232. data/spec/lib/immutable/set/to_list_spec.rb +0 -35
  233. data/spec/lib/immutable/set/to_set_spec.rb +0 -19
  234. data/spec/lib/immutable/set/union_spec.rb +0 -63
  235. data/spec/lib/immutable/sorted_set/above_spec.rb +0 -51
  236. data/spec/lib/immutable/sorted_set/add_spec.rb +0 -62
  237. data/spec/lib/immutable/sorted_set/at_spec.rb +0 -24
  238. data/spec/lib/immutable/sorted_set/below_spec.rb +0 -51
  239. data/spec/lib/immutable/sorted_set/between_spec.rb +0 -51
  240. data/spec/lib/immutable/sorted_set/clear_spec.rb +0 -43
  241. data/spec/lib/immutable/sorted_set/copying_spec.rb +0 -20
  242. data/spec/lib/immutable/sorted_set/delete_at_spec.rb +0 -18
  243. data/spec/lib/immutable/sorted_set/delete_spec.rb +0 -89
  244. data/spec/lib/immutable/sorted_set/difference_spec.rb +0 -22
  245. data/spec/lib/immutable/sorted_set/disjoint_spec.rb +0 -25
  246. data/spec/lib/immutable/sorted_set/drop_spec.rb +0 -55
  247. data/spec/lib/immutable/sorted_set/drop_while_spec.rb +0 -34
  248. data/spec/lib/immutable/sorted_set/each_spec.rb +0 -28
  249. data/spec/lib/immutable/sorted_set/empty_spec.rb +0 -34
  250. data/spec/lib/immutable/sorted_set/eql_spec.rb +0 -120
  251. data/spec/lib/immutable/sorted_set/exclusion_spec.rb +0 -22
  252. data/spec/lib/immutable/sorted_set/fetch_spec.rb +0 -64
  253. data/spec/lib/immutable/sorted_set/find_index_spec.rb +0 -40
  254. data/spec/lib/immutable/sorted_set/first_spec.rb +0 -18
  255. data/spec/lib/immutable/sorted_set/from_spec.rb +0 -51
  256. data/spec/lib/immutable/sorted_set/group_by_spec.rb +0 -57
  257. data/spec/lib/immutable/sorted_set/include_spec.rb +0 -23
  258. data/spec/lib/immutable/sorted_set/inspect_spec.rb +0 -37
  259. data/spec/lib/immutable/sorted_set/intersect_spec.rb +0 -25
  260. data/spec/lib/immutable/sorted_set/intersection_spec.rb +0 -28
  261. data/spec/lib/immutable/sorted_set/last_spec.rb +0 -36
  262. data/spec/lib/immutable/sorted_set/map_spec.rb +0 -51
  263. data/spec/lib/immutable/sorted_set/marshal_spec.rb +0 -36
  264. data/spec/lib/immutable/sorted_set/maximum_spec.rb +0 -36
  265. data/spec/lib/immutable/sorted_set/minimum_spec.rb +0 -19
  266. data/spec/lib/immutable/sorted_set/new_spec.rb +0 -137
  267. data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +0 -28
  268. data/spec/lib/immutable/sorted_set/sample_spec.rb +0 -13
  269. data/spec/lib/immutable/sorted_set/select_spec.rb +0 -61
  270. data/spec/lib/immutable/sorted_set/size_spec.rb +0 -17
  271. data/spec/lib/immutable/sorted_set/slice_spec.rb +0 -256
  272. data/spec/lib/immutable/sorted_set/sorting_spec.rb +0 -56
  273. data/spec/lib/immutable/sorted_set/subset_spec.rb +0 -47
  274. data/spec/lib/immutable/sorted_set/superset_spec.rb +0 -47
  275. data/spec/lib/immutable/sorted_set/take_spec.rb +0 -54
  276. data/spec/lib/immutable/sorted_set/take_while_spec.rb +0 -33
  277. data/spec/lib/immutable/sorted_set/to_set_spec.rb +0 -17
  278. data/spec/lib/immutable/sorted_set/union_spec.rb +0 -58
  279. data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
  280. data/spec/lib/immutable/sorted_set/util_spec.rb +0 -48
  281. data/spec/lib/immutable/sorted_set/values_at_spec.rb +0 -33
  282. data/spec/lib/immutable/vector/add_spec.rb +0 -67
  283. data/spec/lib/immutable/vector/any_spec.rb +0 -69
  284. data/spec/lib/immutable/vector/assoc_spec.rb +0 -45
  285. data/spec/lib/immutable/vector/bsearch_spec.rb +0 -65
  286. data/spec/lib/immutable/vector/clear_spec.rb +0 -33
  287. data/spec/lib/immutable/vector/combination_spec.rb +0 -81
  288. data/spec/lib/immutable/vector/compact_spec.rb +0 -29
  289. data/spec/lib/immutable/vector/compare_spec.rb +0 -31
  290. data/spec/lib/immutable/vector/concat_spec.rb +0 -34
  291. data/spec/lib/immutable/vector/copying_spec.rb +0 -20
  292. data/spec/lib/immutable/vector/count_spec.rb +0 -17
  293. data/spec/lib/immutable/vector/delete_at_spec.rb +0 -53
  294. data/spec/lib/immutable/vector/delete_spec.rb +0 -30
  295. data/spec/lib/immutable/vector/dig_spec.rb +0 -30
  296. data/spec/lib/immutable/vector/drop_spec.rb +0 -41
  297. data/spec/lib/immutable/vector/drop_while_spec.rb +0 -54
  298. data/spec/lib/immutable/vector/each_index_spec.rb +0 -40
  299. data/spec/lib/immutable/vector/each_spec.rb +0 -44
  300. data/spec/lib/immutable/vector/each_with_index_spec.rb +0 -39
  301. data/spec/lib/immutable/vector/empty_spec.rb +0 -41
  302. data/spec/lib/immutable/vector/eql_spec.rb +0 -76
  303. data/spec/lib/immutable/vector/fetch_spec.rb +0 -64
  304. data/spec/lib/immutable/vector/fill_spec.rb +0 -88
  305. data/spec/lib/immutable/vector/first_spec.rb +0 -18
  306. data/spec/lib/immutable/vector/flat_map_spec.rb +0 -50
  307. data/spec/lib/immutable/vector/flatten_spec.rb +0 -58
  308. data/spec/lib/immutable/vector/get_spec.rb +0 -74
  309. data/spec/lib/immutable/vector/group_by_spec.rb +0 -57
  310. data/spec/lib/immutable/vector/include_spec.rb +0 -30
  311. data/spec/lib/immutable/vector/insert_spec.rb +0 -68
  312. data/spec/lib/immutable/vector/inspect_spec.rb +0 -49
  313. data/spec/lib/immutable/vector/join_spec.rb +0 -58
  314. data/spec/lib/immutable/vector/last_spec.rb +0 -45
  315. data/spec/lib/immutable/vector/length_spec.rb +0 -45
  316. data/spec/lib/immutable/vector/ltlt_spec.rb +0 -65
  317. data/spec/lib/immutable/vector/map_spec.rb +0 -51
  318. data/spec/lib/immutable/vector/marshal_spec.rb +0 -31
  319. data/spec/lib/immutable/vector/maximum_spec.rb +0 -33
  320. data/spec/lib/immutable/vector/minimum_spec.rb +0 -33
  321. data/spec/lib/immutable/vector/multiply_spec.rb +0 -47
  322. data/spec/lib/immutable/vector/new_spec.rb +0 -50
  323. data/spec/lib/immutable/vector/partition_spec.rb +0 -52
  324. data/spec/lib/immutable/vector/permutation_spec.rb +0 -91
  325. data/spec/lib/immutable/vector/pop_spec.rb +0 -26
  326. data/spec/lib/immutable/vector/product_spec.rb +0 -70
  327. data/spec/lib/immutable/vector/reduce_spec.rb +0 -55
  328. data/spec/lib/immutable/vector/reject_spec.rb +0 -43
  329. data/spec/lib/immutable/vector/repeated_combination_spec.rb +0 -77
  330. data/spec/lib/immutable/vector/repeated_permutation_spec.rb +0 -93
  331. data/spec/lib/immutable/vector/reverse_each_spec.rb +0 -31
  332. data/spec/lib/immutable/vector/reverse_spec.rb +0 -21
  333. data/spec/lib/immutable/vector/rindex_spec.rb +0 -36
  334. data/spec/lib/immutable/vector/rotate_spec.rb +0 -73
  335. data/spec/lib/immutable/vector/sample_spec.rb +0 -13
  336. data/spec/lib/immutable/vector/select_spec.rb +0 -63
  337. data/spec/lib/immutable/vector/set_spec.rb +0 -174
  338. data/spec/lib/immutable/vector/shift_spec.rb +0 -27
  339. data/spec/lib/immutable/vector/shuffle_spec.rb +0 -43
  340. data/spec/lib/immutable/vector/slice_spec.rb +0 -240
  341. data/spec/lib/immutable/vector/sorting_spec.rb +0 -56
  342. data/spec/lib/immutable/vector/sum_spec.rb +0 -17
  343. data/spec/lib/immutable/vector/take_spec.rb +0 -42
  344. data/spec/lib/immutable/vector/take_while_spec.rb +0 -34
  345. data/spec/lib/immutable/vector/to_a_spec.rb +0 -41
  346. data/spec/lib/immutable/vector/to_ary_spec.rb +0 -34
  347. data/spec/lib/immutable/vector/to_list_spec.rb +0 -30
  348. data/spec/lib/immutable/vector/to_set_spec.rb +0 -21
  349. data/spec/lib/immutable/vector/transpose_spec.rb +0 -48
  350. data/spec/lib/immutable/vector/uniq_spec.rb +0 -76
  351. data/spec/lib/immutable/vector/unshift_spec.rb +0 -28
  352. data/spec/lib/immutable/vector/update_in_spec.rb +0 -82
  353. data/spec/lib/immutable/vector/values_at_spec.rb +0 -33
  354. data/spec/lib/immutable/vector/zip_spec.rb +0 -57
  355. data/spec/lib/load_spec.rb +0 -42
  356. data/spec/spec_helper.rb +0 -96
@@ -1,45 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- [:map, :collect].each do |method|
5
- describe "##{method}" do
6
- context "when empty" do
7
- it "returns self" do
8
- H.empty.send(method) {}.should equal(H.empty)
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
- let(:mapped) { hash.send(method) { |key, value| [key.downcase, value.upcase] }}
17
-
18
- it "preserves the original values" do
19
- mapped
20
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
21
- end
22
-
23
- it "returns a new hash with the mapped values" do
24
- mapped.should eql(H["a" => "AYE", "b" => "BEE", "c" => "SEE"])
25
- end
26
- end
27
-
28
- context "with no block" do
29
- it "returns an Enumerator" do
30
- hash.send(method).class.should be(Enumerator)
31
- hash.send(method).each { |k,v| [k.downcase, v] }.should == hash.map { |k,v| [k.downcase, v] }
32
- end
33
- end
34
- end
35
-
36
- context "from a subclass" do
37
- it "returns an instance of the subclass" do
38
- subclass = Class.new(Immutable::Hash)
39
- instance = subclass.new('a' => 'aye', 'b' => 'bee')
40
- instance.map { |k,v| [k, v.upcase] }.class.should be(subclass)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#marshal_dump/#marshal_load" do
5
- let(:ruby) do
6
- File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
7
- end
8
- let(:child_cmd) do
9
- %Q|#{ruby} -I lib -r immutable -e 'dict = Immutable::Hash[existing_key: 42, other_thing: "data"]; $stdout.write(Marshal.dump(dict))'|
10
- end
11
-
12
- let(:reloaded_hash) do
13
- IO.popen(child_cmd, "r+") do |child|
14
- reloaded_hash = Marshal.load(child)
15
- child.close
16
- reloaded_hash
17
- end
18
- end
19
-
20
- it "can survive dumping and loading into a new process" do
21
- expect(reloaded_hash).to eql(H[existing_key: 42, other_thing: "data"])
22
- end
23
-
24
- it "is still possible to find items by key after loading" do
25
- expect(reloaded_hash[:existing_key]).to eq(42)
26
- end
27
- end
28
- end
@@ -1,82 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#merge" do
5
- [
6
- [{}, {}, {}],
7
- [{"A" => "aye"}, {}, {"A" => "aye"}],
8
- [{"A" => "aye"}, {"A" => "bee"}, {"A" => "bee"}],
9
- [{"A" => "aye"}, {"B" => "bee"}, {"A" => "aye", "B" => "bee"}],
10
- [(1..300).zip(1..300), (150..450).zip(150..450), (1..450).zip(1..450)]
11
- ].each do |a, b, expected|
12
- context "for #{a.inspect} and #{b.inspect}" do
13
- let(:hash_a) { H[a] }
14
- let(:hash_b) { H[b] }
15
- let(:result) { hash_a.merge(hash_b) }
16
-
17
- it "returns #{expected.inspect} when passed an Immutable::Hash" do
18
- result.should eql(H[expected])
19
- end
20
-
21
- it "returns #{expected.inspect} when passed a Ruby Hash" do
22
- H[a].merge(::Hash[b]).should eql(H[expected])
23
- end
24
-
25
- it "doesn't change the original Hashes" do
26
- result
27
- hash_a.should eql(H[a])
28
- hash_b.should eql(H[b])
29
- end
30
- end
31
- end
32
-
33
- context "when merging with an empty Hash" do
34
- it "returns self" do
35
- hash = H[a: 1, b: 2]
36
- hash.merge(H.empty).should be(hash)
37
- end
38
- end
39
-
40
- context "when merging with subset Hash" do
41
- it "returns self" do
42
- big_hash = H[(1..300).zip(1..300)]
43
- small_hash = H[(1..200).zip(1..200)]
44
- big_hash.merge(small_hash).should be(big_hash)
45
- end
46
- end
47
-
48
- context "when called on a subclass" do
49
- it "returns an instance of the subclass" do
50
- subclass = Class.new(Immutable::Hash)
51
- instance = subclass.new(a: 1, b: 2)
52
- instance.merge(c: 3, d: 4).class.should be(subclass)
53
- end
54
- end
55
-
56
- it "sets any duplicate key to the value of block if passed a block" do
57
- h1 = H[a: 2, b: 1, d: 5]
58
- h2 = H[a: -2, b: 4, c: -3]
59
- r = h1.merge(h2) { |k,x,y| nil }
60
- r.should eql(H[a: nil, b: nil, c: -3, d: 5])
61
-
62
- r = h1.merge(h2) { |k,x,y| "#{k}:#{x+2*y}" }
63
- r.should eql(H[a: "a:-2", b: "b:9", c: -3, d: 5])
64
-
65
- lambda {
66
- h1.merge(h2) { |k, x, y| raise(IndexError) }
67
- }.should raise_error(IndexError)
68
-
69
- r = h1.merge(h1) { |k,x,y| :x }
70
- r.should eql(H[a: :x, b: :x, d: :x])
71
- end
72
-
73
- it "yields key/value pairs in the same order as #each" do
74
- hash = H[a: 1, b: 2, c: 3]
75
- each_pairs = []
76
- merge_pairs = []
77
- hash.each { |k, v| each_pairs << [k, v] }
78
- hash.merge(hash) { |k, v1, v2| merge_pairs << [k, v1] }
79
- each_pairs.should == merge_pairs
80
- end
81
- end
82
- end
@@ -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,111 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#[]=" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
-
7
- it 'raises error pointing to #put' do
8
- expect { hash[:A] = 'aye' }
9
- .to raise_error(NoMethodError, /Immutable::Hash.*`put'/)
10
- end
11
- end
12
-
13
- describe "#put" do
14
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
15
-
16
- context "with a block" do
17
- it "passes the value to the block" do
18
- hash.put("A") { |value| value.should == "aye" }
19
- end
20
-
21
- it "replaces the value with the result of the block" do
22
- result = hash.put("A") { |value| "FLIBBLE" }
23
- result.get("A").should == "FLIBBLE"
24
- end
25
-
26
- it "supports to_proc methods" do
27
- result = hash.put("A", &:upcase)
28
- result.get("A").should == "AYE"
29
- end
30
-
31
- context "if there is no existing association" do
32
- it "passes nil to the block" do
33
- hash.put("D") { |value| value.should be_nil }
34
- end
35
-
36
- it "stores the result of the block as the new value" do
37
- result = hash.put("D") { |value| "FLIBBLE" }
38
- result.get("D").should == "FLIBBLE"
39
- end
40
- end
41
- end
42
-
43
- context "with a unique key" do
44
- let(:result) { hash.put("D", "dee") }
45
-
46
- it "preserves the original" do
47
- result
48
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
49
- end
50
-
51
- it "returns a copy with the superset of key/value pairs" do
52
- result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
53
- end
54
- end
55
-
56
- context "with a duplicate key" do
57
- let(:result) { hash.put("C", "sea") }
58
-
59
- it "preserves the original" do
60
- result
61
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
62
- end
63
-
64
- it "returns a copy with the superset of key/value pairs" do
65
- result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
66
- end
67
- end
68
-
69
- context "with duplicate key and identical value" do
70
- let(:hash) { H["X" => 1, "Y" => 2] }
71
- let(:result) { hash.put("X", 1) }
72
-
73
- it "returns the original hash unmodified" do
74
- result.should be(hash)
75
- end
76
-
77
- context "with big hash (force nested tries)" do
78
- let(:keys) { (0..99).map(&:to_s) }
79
- let(:values) { (100..199).to_a }
80
- let(:hash) { H[keys.zip(values)] }
81
-
82
- it "returns the original hash unmodified for all changes" do
83
- keys.each_with_index do |key, index|
84
- result = hash.put(key, values[index])
85
- result.should be(hash)
86
- end
87
- end
88
- end
89
- end
90
-
91
- context "with unequal keys which hash to the same value" do
92
- let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
93
-
94
- it "stores and can retrieve both" do
95
- result = hash.put(DeterministicHash.new('b', 1), 'bee')
96
- result.get(DeterministicHash.new('a', 1)).should eql('aye')
97
- result.get(DeterministicHash.new('b', 1)).should eql('bee')
98
- end
99
- end
100
-
101
- context "when a String is inserted as key and then mutated" do
102
- it "is not affected" do
103
- string = "a string!"
104
- hash = H.empty.put(string, 'a value!')
105
- string.upcase!
106
- hash['a string!'].should == 'a value!'
107
- hash['A STRING!'].should be_nil
108
- end
109
- end
110
- end
111
- 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