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,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#unshift" 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(:deque) { D[*values] }
13
-
14
- it "preserves the original" do
15
- deque.unshift(new_value)
16
- deque.should eql(D[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- deque.unshift(new_value).should eql(D[*expected])
21
- end
22
-
23
-
24
- it "returns a frozen instance" do
25
- deque.unshift(new_value).should be_frozen
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,53 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H[values] }
5
-
6
- describe "#all?" do
7
- context "when empty" do
8
- let(:values) { H.new }
9
-
10
- context "without a block" do
11
- it "returns true" do
12
- hash.all?.should == true
13
- end
14
- end
15
-
16
- context "with a block" do
17
- it "returns true" do
18
- hash.all? { false }.should == true
19
- end
20
- end
21
- end
22
-
23
- context "when not empty" do
24
- let(:values) { { "A" => 1, "B" => 2, "C" => 3 } }
25
-
26
- context "without a block" do
27
- it "returns true" do
28
- hash.all?.should == true
29
- end
30
- end
31
-
32
- context "with a block" do
33
- it "returns true if the block always returns true" do
34
- hash.all? { true }.should == true
35
- end
36
-
37
- it "returns false if the block ever returns false" do
38
- hash.all? { |k,v| k != 'C' }.should == false
39
- end
40
-
41
- it "propagates an exception from the block" do
42
- -> { hash.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
43
- end
44
-
45
- it "stops iterating as soon as the block returns false" do
46
- yielded = []
47
- hash.all? { |k,v| yielded << k; false }
48
- yielded.size.should == 1
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,53 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#any?" do
5
- context "when empty" do
6
- it "with a block returns false" do
7
- H.empty.any? {}.should == false
8
- end
9
-
10
- it "with no block returns false" do
11
- H.empty.any?.should == false
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
-
26
- it "returns true if the block ever returns true (#{pair.inspect})" do
27
- hash.any? { |key, value| key == pair.first && value == pair.last }.should == true
28
- end
29
-
30
- it "returns false if the block always returns false" do
31
- hash.any? { |key, value| key == "D" && value == "dee" }.should == false
32
- end
33
- end
34
-
35
- it "propagates exceptions raised in the block" do
36
- -> { hash.any? { |k,v| raise "help" } }.should raise_error(RuntimeError)
37
- end
38
-
39
- it "stops iterating as soon as the block returns true" do
40
- yielded = []
41
- hash.any? { |k,v| yielded << k; true }
42
- yielded.size.should == 1
43
- end
44
- end
45
-
46
- context "with no block" do
47
- it "returns true" do
48
- hash.any?.should == true
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,51 +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 "#assoc" do
7
- it "searches for a key/val pair with a given key" do
8
- hash.assoc(:a).should == [:a, 3]
9
- hash.assoc(:b).should == [:b, 2]
10
- hash.assoc(:c).should == [:c, 1]
11
- end
12
-
13
- it "returns nil if a matching key is not found" do
14
- hash.assoc(:d).should be_nil
15
- hash.assoc(nil).should be_nil
16
- hash.assoc(0).should be_nil
17
- end
18
-
19
- it "returns nil even if there is a default" do
20
- H.new(a: 1, b: 2) { fail }.assoc(:c).should be_nil
21
- end
22
-
23
- it "uses #== to compare keys with provided object" do
24
- hash.assoc(EqualNotEql.new).should_not be_nil
25
- hash.assoc(EqlNotEqual.new).should be_nil
26
- end
27
- end
28
-
29
- describe "#rassoc" do
30
- it "searches for a key/val pair with a given value" do
31
- hash.rassoc(1).should == [:c, 1]
32
- hash.rassoc(2).should == [:b, 2]
33
- hash.rassoc(3).should == [:a, 3]
34
- end
35
-
36
- it "returns nil if a matching value is not found" do
37
- hash.rassoc(0).should be_nil
38
- hash.rassoc(4).should be_nil
39
- hash.rassoc(nil).should be_nil
40
- end
41
-
42
- it "returns nil even if there is a default" do
43
- H.new(a: 1, b: 2) { fail }.rassoc(3).should be_nil
44
- end
45
-
46
- it "uses #== to compare values with provided object" do
47
- hash.rassoc(EqualNotEql.new).should_not be_nil
48
- hash.rassoc(EqlNotEqual.new).should be_nil
49
- end
50
- end
51
- end
@@ -1,42 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#clear" do
5
- [
6
- [],
7
- ["A" => "aye"],
8
- ["A" => "aye", "B" => "bee", "C" => "see"],
9
- ].each do |values|
10
- context "on #{values}" do
11
- let(:original) { H[*values] }
12
- let(:result) { original.clear }
13
-
14
- it "preserves the original" do
15
- result
16
- original.should eql(H[*values])
17
- end
18
-
19
- it "returns an empty hash" do
20
- result.should equal(H.empty)
21
- result.should be_empty
22
- end
23
- end
24
- end
25
-
26
- it "maintains the default Proc, if there is one" do
27
- hash = H.new(a: 1) { 1 }
28
- hash.clear[:b].should == 1
29
- hash.clear[:c].should == 1
30
- hash.clear.default_proc.should_not be_nil
31
- end
32
-
33
- context "on a subclass" do
34
- it "returns an empty instance of the subclass" do
35
- subclass = Class.new(Immutable::Hash)
36
- instance = subclass.new(a: 1, b: 2)
37
- instance.clear.class.should be(subclass)
38
- instance.clear.should be_empty
39
- end
40
- end
41
- end
42
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe ".hash" do
5
- context "with nothing" do
6
- it "returns the canonical empty hash" do
7
- H.empty.should be_empty
8
- H.empty.should equal(Immutable::EmptyHash)
9
- end
10
- end
11
-
12
- context "with an implicit hash" do
13
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
14
-
15
- it "is equivalent to repeatedly using #put" do
16
- hash.should eql(H.empty.put("A", "aye").put("B", "bee").put("C", "see"))
17
- hash.size.should == 3
18
- end
19
- end
20
-
21
- context "with an array of pairs" do
22
- let(:hash) { H[[[:a, 1], [:b, 2]]] }
23
-
24
- it "initializes a new Hash" do
25
- hash.should eql(H[a: 1, b: 2])
26
- end
27
- end
28
-
29
- context "with an Immutable::Hash" do
30
- let(:hash) { H[a: 1, b: 2] }
31
- let(:other) { H[hash] }
32
-
33
- it "initializes an equivalent Hash" do
34
- hash.should eql(other)
35
- end
36
- end
37
- end
38
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
5
-
6
- [:dup, :clone].each do |method|
7
- describe "##{method}" do
8
- it "returns self" do
9
- hash.send(method).should equal(hash)
10
- end
11
- end
12
- end
13
- end
@@ -1,72 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#default_proc" do
5
- let(:hash) { H.new(1 => 2, 2 => 4) { |k| k * 2 } }
6
-
7
- it "returns the default block given when the Hash was created" do
8
- hash.default_proc.class.should be(Proc)
9
- hash.default_proc.call(3).should == 6
10
- end
11
-
12
- it "returns nil if no default block was given" do
13
- H.empty.default_proc.should be_nil
14
- end
15
-
16
- context "after a key/val pair are inserted" do
17
- it "doesn't change" do
18
- other = hash.put(3, 6)
19
- other.default_proc.should be(hash.default_proc)
20
- other.default_proc.call(4).should == 8
21
- end
22
- end
23
-
24
- context "after all key/val pairs are filtered out" do
25
- it "doesn't change" do
26
- other = hash.reject { true }
27
- other.default_proc.should be(hash.default_proc)
28
- other.default_proc.call(4).should == 8
29
- end
30
- end
31
-
32
- context "after Hash is inverted" do
33
- it "doesn't change" do
34
- other = hash.invert
35
- other.default_proc.should be(hash.default_proc)
36
- other.default_proc.call(4).should == 8
37
- end
38
- end
39
-
40
- context "when a slice is taken" do
41
- it "doesn't change" do
42
- other = hash.slice(1)
43
- other.default_proc.should be(hash.default_proc)
44
- other.default_proc.call(5).should == 10
45
- end
46
- end
47
-
48
- context "when keys are removed with #except" do
49
- it "doesn't change" do
50
- other = hash.except(1, 2)
51
- other.default_proc.should be(hash.default_proc)
52
- other.default_proc.call(5).should == 10
53
- end
54
- end
55
-
56
- context "when Hash is mapped" do
57
- it "doesn't change" do
58
- other = hash.map { |k,v| [k + 10, v] }
59
- other.default_proc.should be(hash.default_proc)
60
- other.default_proc.call(5).should == 10
61
- end
62
- end
63
-
64
- context "when another Hash is merged in" do
65
- it "doesn't change" do
66
- other = hash.merge(3 => 6, 4 => 8)
67
- other.default_proc.should be(hash.default_proc)
68
- other.default_proc.call(5).should == 10
69
- end
70
- end
71
- end
72
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#delete" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
-
7
- context "with an existing key" do
8
- let(:result) { hash.delete("B") }
9
-
10
- it "preserves the original" do
11
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
12
- end
13
-
14
- it "returns a copy with the remaining key/value pairs" do
15
- result.should eql(H["A" => "aye", "C" => "see"])
16
- end
17
- end
18
-
19
- context "with a non-existing key" do
20
- let(:result) { hash.delete("D") }
21
-
22
- it "preserves the original values" do
23
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
24
- end
25
-
26
- it "returns self" do
27
- result.should equal(hash)
28
- end
29
- end
30
-
31
- context "when removing the last key" do
32
- context "from a Hash with no default block" do
33
- it "returns the canonical empty Hash" do
34
- hash.delete('A').delete('B').delete('C').should be(Immutable::EmptyHash)
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,77 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
5
-
6
- [:each, :each_pair].each do |method|
7
- describe "##{method}" do
8
- context "with a block (internal iteration)" do
9
- it "returns self" do
10
- hash.send(method) {}.should be(hash)
11
- end
12
-
13
- it "yields all key/value pairs" do
14
- actual_pairs = {}
15
- hash.send(method) { |key, value| actual_pairs[key] = value }
16
- actual_pairs.should == { "A" => "aye", "B" => "bee", "C" => "see" }
17
- end
18
-
19
- it "yields key/value pairs in the same order as #each_key and #each_value" do
20
- hash.each.to_a.should eql(hash.each_key.zip(hash.each_value))
21
- end
22
-
23
- it "yields both of a pair of colliding keys" do
24
- yielded = []
25
- hash = H[DeterministicHash.new('a', 1) => 1, DeterministicHash.new('b', 1) => 1]
26
- hash.each { |k,v| yielded << k }
27
- yielded.size.should == 2
28
- yielded.map { |x| x.value }.sort.should == ['a', 'b']
29
- end
30
-
31
- it "yields only the key to a block expecting |key,|" do
32
- keys = []
33
- hash.each { |key,| keys << key }
34
- keys.sort.should == ["A", "B", "C"]
35
- end
36
- end
37
-
38
- context "with no block" do
39
- it "returns an Enumerator" do
40
- @result = hash.send(method)
41
- @result.class.should be(Enumerator)
42
- @result.to_a.should == hash.to_a
43
- end
44
- end
45
- end
46
- end
47
-
48
- describe "#each_key" do
49
- it "yields all keys" do
50
- keys = []
51
- hash.each_key { |k| keys << k }
52
- keys.sort.should == ['A', 'B', 'C']
53
- end
54
-
55
- context "with no block" do
56
- it "returns an Enumerator" do
57
- hash.each_key.class.should be(Enumerator)
58
- hash.each_key.to_a.sort.should == ['A', 'B', 'C']
59
- end
60
- end
61
- end
62
-
63
- describe "#each_value" do
64
- it "yields all values" do
65
- values = []
66
- hash.each_value { |v| values << v }
67
- values.sort.should == ['aye', 'bee', 'see']
68
- end
69
-
70
- context "with no block" do
71
- it "returns an Enumerator" do
72
- hash.each_value.class.should be(Enumerator)
73
- hash.each_value.to_a.sort.should == ['aye', 'bee', 'see']
74
- end
75
- end
76
- end
77
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#each_with_index" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
6
-
7
- describe "with a block (internal iteration)" do
8
- it "returns self" do
9
- hash.each_with_index {}.should be(hash)
10
- end
11
-
12
- it "yields all key/value pairs with numeric indexes" do
13
- actual_pairs = {}
14
- indexes = []
15
- hash.each_with_index { |(key, value), index| actual_pairs[key] = value; indexes << index }
16
- actual_pairs.should == { "A" => "aye", "B" => "bee", "C" => "see" }
17
- indexes.sort.should == [0, 1, 2]
18
- end
19
- end
20
-
21
- describe "with no block" do
22
- it "returns an Enumerator" do
23
- hash.each_with_index.should be_kind_of(Enumerator)
24
- hash.each_with_index.to_a.map(&:first).sort.should eql([["A", "aye"], ["B", "bee"], ["C", "see"]])
25
- hash.each_with_index.to_a.map(&:last).should eql([0,1,2])
26
- end
27
- end
28
- end
29
- end
@@ -1,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#empty?" do
5
- [
6
- [[], true],
7
- [["A" => "aye"], false],
8
- [["A" => "aye", "B" => "bee", "C" => "see"], false],
9
- ].each do |pairs, result|
10
- it "returns #{result} for #{pairs.inspect}" do
11
- H[*pairs].empty?.should == result
12
- end
13
- end
14
-
15
- it "returns true for empty hashes which have a default block" do
16
- H.new { 'default' }.empty?.should == true
17
- end
18
- end
19
-
20
- describe ".empty" do
21
- it "returns the canonical empty Hash" do
22
- H.empty.should be_empty
23
- H.empty.should be(Immutable::EmptyHash)
24
- end
25
-
26
- context "from a subclass" do
27
- it "returns an empty instance of the subclass" do
28
- subclass = Class.new(Immutable::Hash)
29
- subclass.empty.class.should be subclass
30
- subclass.empty.should be_empty
31
- end
32
-
33
- it "calls overridden #initialize when creating empty Hash" do
34
- subclass = Class.new(Immutable::Hash) do
35
- def initialize
36
- @variable = 'value'
37
- end
38
- end
39
- subclass.empty.instance_variable_get(:@variable).should == 'value'
40
- end
41
- end
42
- end
43
- end
@@ -1,69 +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 "#eql?" do
7
- it "returns false when comparing with a standard hash" do
8
- hash.eql?("A" => "aye", "B" => "bee", "C" => "see").should == false
9
- end
10
-
11
- it "returns false when comparing with an arbitrary object" do
12
- hash.eql?(Object.new).should == false
13
- end
14
-
15
- it "returns false when comparing with a subclass of Immutable::Hash" do
16
- subclass = Class.new(Immutable::Hash)
17
- instance = subclass.new("A" => "aye", "B" => "bee", "C" => "see")
18
- hash.eql?(instance).should == false
19
- end
20
- end
21
-
22
- describe "#==" do
23
- it "returns true when comparing with a standard hash" do
24
- (hash == {"A" => "aye", "B" => "bee", "C" => "see"}).should == true
25
- end
26
-
27
- it "returns false when comparing with an arbitrary object" do
28
- (hash == Object.new).should == false
29
- end
30
-
31
- it "returns true when comparing with a subclass of Immutable::Hash" do
32
- subclass = Class.new(Immutable::Hash)
33
- instance = subclass.new("A" => "aye", "B" => "bee", "C" => "see")
34
- (hash == instance).should == true
35
- end
36
- end
37
-
38
- [:eql?, :==].each do |method|
39
- describe "##{method}" do
40
- [
41
- [{}, {}, true],
42
- [{ "A" => "aye" }, {}, false],
43
- [{}, { "A" => "aye" }, false],
44
- [{ "A" => "aye" }, { "A" => "aye" }, true],
45
- [{ "A" => "aye" }, { "B" => "bee" }, false],
46
- [{ "A" => "aye", "B" => "bee" }, { "A" => "aye" }, false],
47
- [{ "A" => "aye" }, { "A" => "aye", "B" => "bee" }, false],
48
- [{ "A" => "aye", "B" => "bee", "C" => "see" }, { "A" => "aye", "B" => "bee", "C" => "see" }, true],
49
- [{ "C" => "see", "A" => "aye", "B" => "bee" }, { "A" => "aye", "B" => "bee", "C" => "see" }, true],
50
- ].each do |a, b, expected|
51
- describe "returns #{expected.inspect}" do
52
- it "for #{a.inspect} and #{b.inspect}" do
53
- H[a].send(method, H[b]).should == expected
54
- end
55
-
56
- it "for #{b.inspect} and #{a.inspect}" do
57
- H[b].send(method, H[a]).should == expected
58
- end
59
- end
60
- end
61
- end
62
- end
63
-
64
- it "returns true on a large hash which is modified and then modified back again" do
65
- hash = H.new((1..1000).zip(2..1001))
66
- hash.put('a', 1).delete('a').should == hash
67
- hash.put('b', 2).delete('b').should eql(hash)
68
- end
69
- end
@@ -1,42 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Hash do
4
- describe "#except" do
5
- let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
6
-
7
- context "with only keys that the Hash has" do
8
- it "returns a Hash without those values" do
9
- hash.except("B", nil).should eql(H["A" => "aye", "C" => "see"])
10
- end
11
-
12
- it "doesn't change the original Hash" do
13
- hash.except("B", nil)
14
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
15
- end
16
- end
17
-
18
- context "with keys that the Hash doesn't have" do
19
- it "returns a Hash without the values that it had keys for" do
20
- hash.except("B", "A", 3).should eql(H["C" => "see", nil => "NIL"])
21
- end
22
-
23
- it "doesn't change the original Hash" do
24
- hash.except("B", "A", 3)
25
- hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
26
- end
27
- end
28
-
29
- it "works on a large Hash, with many combinations of input" do
30
- keys = (1..1000).to_a
31
- original = H.new(keys.zip(2..1001))
32
- 100.times do
33
- to_remove = rand(100).times.collect { keys.sample }
34
- result = original.except(*to_remove)
35
- result.size.should == original.size - to_remove.uniq.size
36
- to_remove.each { |key| result.key?(key).should == false }
37
- (keys.sample(100) - to_remove).each { |key| result.key?(key).should == true }
38
- end
39
- original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
40
- end
41
- end
42
- end