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,240 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- let(:vector) { V[1,2,3,4] }
5
- let(:big) { V.new(1..10000) }
6
-
7
- [:slice, :[]].each do |method|
8
- describe "##{method}" do
9
- context "when passed a positive integral index" do
10
- it "returns the element at that index" do
11
- vector.send(method, 0).should be(1)
12
- vector.send(method, 1).should be(2)
13
- vector.send(method, 2).should be(3)
14
- vector.send(method, 3).should be(4)
15
- vector.send(method, 4).should be(nil)
16
- vector.send(method, 10).should be(nil)
17
-
18
- big.send(method, 0).should be(1)
19
- big.send(method, 9999).should be(10000)
20
- end
21
-
22
- it "leaves the original unchanged" do
23
- vector.should eql(V[1,2,3,4])
24
- end
25
- end
26
-
27
- context "when passed a negative integral index" do
28
- it "returns the element which is number (index.abs) counting from the end of the vector" do
29
- vector.send(method, -1).should be(4)
30
- vector.send(method, -2).should be(3)
31
- vector.send(method, -3).should be(2)
32
- vector.send(method, -4).should be(1)
33
- vector.send(method, -5).should be(nil)
34
- vector.send(method, -10).should be(nil)
35
-
36
- big.send(method, -1).should be(10000)
37
- big.send(method, -10000).should be(1)
38
- end
39
- end
40
-
41
- context "when passed a positive integral index and count" do
42
- it "returns 'count' elements starting from 'index'" do
43
- vector.send(method, 0, 0).should eql(V.empty)
44
- vector.send(method, 0, 1).should eql(V[1])
45
- vector.send(method, 0, 2).should eql(V[1,2])
46
- vector.send(method, 0, 4).should eql(V[1,2,3,4])
47
- vector.send(method, 0, 6).should eql(V[1,2,3,4])
48
- vector.send(method, 0, -1).should be_nil
49
- vector.send(method, 0, -2).should be_nil
50
- vector.send(method, 0, -4).should be_nil
51
- vector.send(method, 2, 0).should eql(V.empty)
52
- vector.send(method, 2, 1).should eql(V[3])
53
- vector.send(method, 2, 2).should eql(V[3,4])
54
- vector.send(method, 2, 4).should eql(V[3,4])
55
- vector.send(method, 2, -1).should be_nil
56
- vector.send(method, 4, 0).should eql(V.empty)
57
- vector.send(method, 4, 2).should eql(V.empty)
58
- vector.send(method, 4, -1).should be_nil
59
- vector.send(method, 5, 0).should be_nil
60
- vector.send(method, 5, 2).should be_nil
61
- vector.send(method, 5, -1).should be_nil
62
- vector.send(method, 6, 0).should be_nil
63
- vector.send(method, 6, 2).should be_nil
64
- vector.send(method, 6, -1).should be_nil
65
-
66
- big.send(method, 0, 3).should eql(V[1,2,3])
67
- big.send(method, 1023, 4).should eql(V[1024,1025,1026,1027])
68
- big.send(method, 1024, 4).should eql(V[1025,1026,1027,1028])
69
- end
70
-
71
- it "leaves the original unchanged" do
72
- vector.should eql(V[1,2,3,4])
73
- end
74
- end
75
-
76
- context "when passed a negative integral index and count" do
77
- it "returns 'count' elements, starting from index which is number 'index.abs' counting from the end of the array" do
78
- vector.send(method, -1, 0).should eql(V.empty)
79
- vector.send(method, -1, 1).should eql(V[4])
80
- vector.send(method, -1, 2).should eql(V[4])
81
- vector.send(method, -1, -1).should be_nil
82
- vector.send(method, -2, 0).should eql(V.empty)
83
- vector.send(method, -2, 1).should eql(V[3])
84
- vector.send(method, -2, 2).should eql(V[3,4])
85
- vector.send(method, -2, 4).should eql(V[3,4])
86
- vector.send(method, -2, -1).should be_nil
87
- vector.send(method, -4, 0).should eql(V.empty)
88
- vector.send(method, -4, 1).should eql(V[1])
89
- vector.send(method, -4, 2).should eql(V[1,2])
90
- vector.send(method, -4, 4).should eql(V[1,2,3,4])
91
- vector.send(method, -4, 6).should eql(V[1,2,3,4])
92
- vector.send(method, -4, -1).should be_nil
93
- vector.send(method, -5, 0).should be_nil
94
- vector.send(method, -5, 1).should be_nil
95
- vector.send(method, -5, 10).should be_nil
96
- vector.send(method, -5, -1).should be_nil
97
-
98
- big.send(method, -1, 1).should eql(V[10000])
99
- big.send(method, -1, 2).should eql(V[10000])
100
- big.send(method, -6, 2).should eql(V[9995,9996])
101
- end
102
- end
103
-
104
- context "when passed a Range" do
105
- it "returns the elements whose indexes are within the given Range" do
106
- vector.send(method, 0..-1).should eql(V[1,2,3,4])
107
- vector.send(method, 0..-10).should eql(V.empty)
108
- vector.send(method, 0..0).should eql(V[1])
109
- vector.send(method, 0..1).should eql(V[1,2])
110
- vector.send(method, 0..2).should eql(V[1,2,3])
111
- vector.send(method, 0..3).should eql(V[1,2,3,4])
112
- vector.send(method, 0..4).should eql(V[1,2,3,4])
113
- vector.send(method, 0..10).should eql(V[1,2,3,4])
114
- vector.send(method, 2..-10).should eql(V.empty)
115
- vector.send(method, 2..0).should eql(V.empty)
116
- vector.send(method, 2..2).should eql(V[3])
117
- vector.send(method, 2..3).should eql(V[3,4])
118
- vector.send(method, 2..4).should eql(V[3,4])
119
- vector.send(method, 3..0).should eql(V.empty)
120
- vector.send(method, 3..3).should eql(V[4])
121
- vector.send(method, 3..4).should eql(V[4])
122
- vector.send(method, 4..0).should eql(V.empty)
123
- vector.send(method, 4..4).should eql(V.empty)
124
- vector.send(method, 4..5).should eql(V.empty)
125
- vector.send(method, 5..0).should be_nil
126
- vector.send(method, 5..5).should be_nil
127
- vector.send(method, 5..6).should be_nil
128
-
129
- big.send(method, 159..162).should eql(V[160,161,162,163])
130
- big.send(method, 160..162).should eql(V[161,162,163])
131
- big.send(method, 161..162).should eql(V[162,163])
132
- big.send(method, 9999..10100).should eql(V[10000])
133
- big.send(method, 10000..10100).should eql(V.empty)
134
- big.send(method, 10001..10100).should be_nil
135
-
136
- vector.send(method, 0...-1).should eql(V[1,2,3])
137
- vector.send(method, 0...-10).should eql(V.empty)
138
- vector.send(method, 0...0).should eql(V.empty)
139
- vector.send(method, 0...1).should eql(V[1])
140
- vector.send(method, 0...2).should eql(V[1,2])
141
- vector.send(method, 0...3).should eql(V[1,2,3])
142
- vector.send(method, 0...4).should eql(V[1,2,3,4])
143
- vector.send(method, 0...10).should eql(V[1,2,3,4])
144
- vector.send(method, 2...-10).should eql(V.empty)
145
- vector.send(method, 2...0).should eql(V.empty)
146
- vector.send(method, 2...2).should eql(V.empty)
147
- vector.send(method, 2...3).should eql(V[3])
148
- vector.send(method, 2...4).should eql(V[3,4])
149
- vector.send(method, 3...0).should eql(V.empty)
150
- vector.send(method, 3...3).should eql(V.empty)
151
- vector.send(method, 3...4).should eql(V[4])
152
- vector.send(method, 4...0).should eql(V.empty)
153
- vector.send(method, 4...4).should eql(V.empty)
154
- vector.send(method, 4...5).should eql(V.empty)
155
- vector.send(method, 5...0).should be_nil
156
- vector.send(method, 5...5).should be_nil
157
- vector.send(method, 5...6).should be_nil
158
-
159
- big.send(method, 159...162).should eql(V[160,161,162])
160
- big.send(method, 160...162).should eql(V[161,162])
161
- big.send(method, 161...162).should eql(V[162])
162
- big.send(method, 9999...10100).should eql(V[10000])
163
- big.send(method, 10000...10100).should eql(V.empty)
164
- big.send(method, 10001...10100).should be_nil
165
-
166
- vector.send(method, -1..-1).should eql(V[4])
167
- vector.send(method, -1...-1).should eql(V.empty)
168
- vector.send(method, -1..3).should eql(V[4])
169
- vector.send(method, -1...3).should eql(V.empty)
170
- vector.send(method, -1..4).should eql(V[4])
171
- vector.send(method, -1...4).should eql(V[4])
172
- vector.send(method, -1..10).should eql(V[4])
173
- vector.send(method, -1...10).should eql(V[4])
174
- vector.send(method, -1..0).should eql(V.empty)
175
- vector.send(method, -1..-4).should eql(V.empty)
176
- vector.send(method, -1...-4).should eql(V.empty)
177
- vector.send(method, -1..-6).should eql(V.empty)
178
- vector.send(method, -1...-6).should eql(V.empty)
179
- vector.send(method, -2..-2).should eql(V[3])
180
- vector.send(method, -2...-2).should eql(V.empty)
181
- vector.send(method, -2..-1).should eql(V[3,4])
182
- vector.send(method, -2...-1).should eql(V[3])
183
- vector.send(method, -2..10).should eql(V[3,4])
184
- vector.send(method, -2...10).should eql(V[3,4])
185
-
186
- big.send(method, -1..-1).should eql(V[10000])
187
- big.send(method, -1..9999).should eql(V[10000])
188
- big.send(method, -1...9999).should eql(V.empty)
189
- big.send(method, -2...9999).should eql(V[9999])
190
- big.send(method, -2..-1).should eql(V[9999,10000])
191
-
192
- vector.send(method, -4..-4).should eql(V[1])
193
- vector.send(method, -4..-2).should eql(V[1,2,3])
194
- vector.send(method, -4...-2).should eql(V[1,2])
195
- vector.send(method, -4..-1).should eql(V[1,2,3,4])
196
- vector.send(method, -4...-1).should eql(V[1,2,3])
197
- vector.send(method, -4..3).should eql(V[1,2,3,4])
198
- vector.send(method, -4...3).should eql(V[1,2,3])
199
- vector.send(method, -4..4).should eql(V[1,2,3,4])
200
- vector.send(method, -4...4).should eql(V[1,2,3,4])
201
- vector.send(method, -4..0).should eql(V[1])
202
- vector.send(method, -4...0).should eql(V.empty)
203
- vector.send(method, -4..1).should eql(V[1,2])
204
- vector.send(method, -4...1).should eql(V[1])
205
-
206
- vector.send(method, -5..-5).should be_nil
207
- vector.send(method, -5...-5).should be_nil
208
- vector.send(method, -5..-4).should be_nil
209
- vector.send(method, -5..-1).should be_nil
210
- vector.send(method, -5..10).should be_nil
211
-
212
- big.send(method, -10001..-1).should be_nil
213
- end
214
-
215
- it "leaves the original unchanged" do
216
- vector.should eql(V[1,2,3,4])
217
- end
218
- end
219
- end
220
-
221
- context "when passed a subclass of Range" do
222
- it "works the same as with a Range" do
223
- subclass = Class.new(Range)
224
- vector.send(method, subclass.new(1,2)).should eql(V[2,3])
225
- vector.send(method, subclass.new(-3,-1,true)).should eql(V[2,3])
226
- end
227
- end
228
-
229
- context "on a subclass of Vector" do
230
- it "with index and count or a range, returns an instance of the subclass" do
231
- subclass = Class.new(Immutable::Vector)
232
- instance = subclass.new([1,2,3])
233
- instance.send(method, 0, 0).class.should be(subclass)
234
- instance.send(method, 0, 2).class.should be(subclass)
235
- instance.send(method, 0..0).class.should be(subclass)
236
- instance.send(method, 1..-1).class.should be(subclass)
237
- end
238
- end
239
- end
240
- end
@@ -1,56 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- [
5
- [:sort, ->(left, right) { left.length <=> right.length }],
6
- [:sort_by, ->(item) { item.length }],
7
- ].each do |method, comparator|
8
- describe "##{method}" do
9
- [
10
- [[], []],
11
- [["A"], ["A"]],
12
- [%w[Ichi Ni San], %w[Ni San Ichi]],
13
- ].each do |values, expected|
14
- describe "on #{values.inspect}" do
15
- let(:vector) { V[*values] }
16
-
17
- context "with a block" do
18
- it "preserves the original" do
19
- vector.send(method, &comparator)
20
- vector.should eql(V[*values])
21
- end
22
-
23
- it "returns #{expected.inspect}" do
24
- vector.send(method, &comparator).should eql(V[*expected])
25
- end
26
- end
27
-
28
- context "without a block" do
29
- it "preserves the original" do
30
- vector.send(method)
31
- vector.should eql(V[*values])
32
- end
33
-
34
- it "returns #{expected.sort.inspect}" do
35
- vector.send(method).should eql(V[*expected.sort])
36
- end
37
- end
38
- end
39
- end
40
-
41
- [10, 31, 32, 33, 1023, 1024, 1025].each do |size|
42
- context "on a #{size}-item vector" do
43
- it "behaves like Array#{method}" do
44
- array = size.times.map { rand(10000) }
45
- vector = V.new(array)
46
- if method == :sort
47
- vector.sort.should == array.sort
48
- else
49
- vector.sort_by { |x| -x }.should == array.sort_by { |x| -x }
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#sum" do
5
- [
6
- [[], 0],
7
- [[2], 2],
8
- [[1, 3, 5, 7, 11], 27],
9
- ].each do |values, expected|
10
- describe "on #{values.inspect}" do
11
- it "returns #{expected.inspect}" do
12
- V[*values].sum.should == expected
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,42 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#take" do
5
- [
6
- [[], 10, []],
7
- [["A"], 10, ["A"]],
8
- [%w[A B C], 0, []],
9
- [%w[A B C], 2, %w[A B]],
10
- [(1..32), 1, [1]],
11
- [(1..33), 32, (1..32)],
12
- [(1..100), 40, (1..40)]
13
- ].each do |values, number, expected|
14
- describe "#{number} from #{values.inspect}" do
15
- let(:vector) { V[*values] }
16
-
17
- it "preserves the original" do
18
- vector.take(number)
19
- vector.should eql(V[*values])
20
- end
21
-
22
- it "returns #{expected.inspect}" do
23
- vector.take(number).should eql(V[*expected])
24
- end
25
- end
26
- end
27
-
28
- context "when number of elements specified is identical to size" do
29
- let(:vector) { V[1, 2, 3, 4, 5, 6] }
30
- it "returns self" do
31
- vector.take(vector.size).should be(vector)
32
- end
33
- end
34
-
35
- context "when number of elements specified is bigger than size" do
36
- let(:vector) { V[1, 2, 3, 4, 5, 6] }
37
- it "returns self" do
38
- vector.take(vector.size + 1).should be(vector)
39
- end
40
- end
41
- end
42
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#take_while" do
5
- [
6
- [[], []],
7
- [["A"], ["A"]],
8
- [%w[A B C], %w[A B]]
9
- ].each do |values, expected|
10
- describe "on #{values.inspect}" do
11
- let(:vector) { V[*values] }
12
- let(:result) { vector.take_while { |item| item < "C" }}
13
-
14
- describe "with a block" do
15
- it "returns #{expected.inspect}" do
16
- result.should eql(V[*expected])
17
- end
18
-
19
- it "preserves the original" do
20
- result
21
- vector.should eql(V[*values])
22
- end
23
- end
24
-
25
- describe "without a block" do
26
- it "returns an Enumerator" do
27
- vector.take_while.class.should be(Enumerator)
28
- vector.take_while.each { |item| item < "C" }.should eql(V[*expected])
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,41 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- let(:vector) { V[*values] }
5
-
6
- describe "#to_a" do
7
- let(:to_a) { vector.to_a }
8
-
9
- shared_examples "checking to_a values" do
10
- it "returns the values" do
11
- expect(to_a).to eq(values)
12
- end
13
- end
14
-
15
- context "with an empty vector" do
16
- let(:values) { [] }
17
-
18
- include_examples "checking to_a values"
19
- end
20
-
21
- context "with an single item vector" do
22
- let(:values) { %w[A] }
23
-
24
- include_examples "checking to_a values"
25
- end
26
-
27
- context "with an multi-item vector" do
28
- let(:values) { %w[A B] }
29
-
30
- include_examples "checking to_a values"
31
- end
32
-
33
- [10, 31, 32, 33, 1000, 1023, 1024, 1025].each do |size|
34
- context "with a #{size}-item vector" do
35
- let(:values) { (1..size).to_a }
36
-
37
- include_examples "checking to_a values"
38
- end
39
- end
40
- end
41
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- let(:vector) { V[*values] }
5
-
6
- describe "#to_ary" do
7
- let(:values) { %w[A B C D] }
8
-
9
- it "converts using block parameters" do
10
- def expectations(&block)
11
- yield(vector)
12
- end
13
- expectations do |a, b, *c|
14
- expect(a).to eq("A")
15
- expect(b).to eq("B")
16
- expect(c).to eq(%w[C D])
17
- end
18
- end
19
-
20
- it "converts using method arguments" do
21
- def expectations(a, b, *c)
22
- expect(a).to eq("A")
23
- expect(b).to eq("B")
24
- expect(c).to eq(%w[C D])
25
- end
26
- expectations(*vector)
27
- end
28
-
29
- it "converts using splat" do
30
- array = *vector
31
- expect(array).to eq(%w[A B C D])
32
- end
33
- end
34
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#to_list" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- describe "on #{values.inspect}" do
11
- let(:vector) { V.new(values) }
12
- let(:list) { vector.to_list }
13
-
14
- it "returns a list" do
15
- list.is_a?(Immutable::List).should == true
16
- end
17
-
18
- describe "the returned list" do
19
- it "has the correct length" do
20
- list.size.should == values.size
21
- end
22
-
23
- it "contains all values" do
24
- list.to_a.should == values
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#to_set" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- (1..10),
10
- (1..32),
11
- (1..33),
12
- (1..1000)
13
- ].each do |values|
14
- describe "on #{values.inspect}" do
15
- it "returns a set with the same values" do
16
- V[*values].to_set.should eql(S[*values])
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,48 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#transpose" do
5
- it "takes a vector of vectors and transposes rows and columns" do
6
- V[V[1, 'a'], V[2, 'b'], V[3, 'c']].transpose.should eql(V[V[1, 2, 3], V["a", "b", "c"]])
7
- V[V[1, 2, 3], V["a", "b", "c"]].transpose.should eql(V[V[1, 'a'], V[2, 'b'], V[3, 'c']])
8
- V[].transpose.should eql(V[])
9
- V[V[]].transpose.should eql(V[])
10
- V[V[], V[]].transpose.should eql(V[])
11
- V[V[0]].transpose.should eql(V[V[0]])
12
- V[V[0], V[1]].transpose.should eql(V[V[0, 1]])
13
- end
14
-
15
- it "raises an IndexError if the vectors are not of the same length" do
16
- -> { V[V[1,2], V[:a]].transpose }.should raise_error(IndexError)
17
- end
18
-
19
- it "also works on Vectors of Arrays" do
20
- V[[1,2,3], [4,5,6]].transpose.should eql(V[V[1,4], V[2,5], V[3,6]])
21
- end
22
-
23
- [10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
24
- context "on #{size}-item vectors" do
25
- it "behaves like Array#transpose" do
26
- array = rand(10).times.map { size.times.map { rand(10000) }}
27
- vector = V.new(array)
28
- result = vector.transpose
29
- # Array#== uses Object#== to compare corresponding elements,
30
- # so although Vector#== does type coercion, it does not consider
31
- # nested Arrays and corresponding nested Vectors to be equal
32
- # That is why the following ".map { |a| V.new(a) }" is needed
33
- result.should == array.transpose.map { |a| V.new(a) }
34
- result.each { |v| v.class.should be(Immutable::Vector) }
35
- end
36
- end
37
- end
38
-
39
- context "on a subclass of Vector" do
40
- it "returns instances of the subclass" do
41
- subclass = Class.new(V)
42
- instance = subclass.new([[1,2,3], [4,5,6]])
43
- instance.transpose.class.should be(subclass)
44
- instance.transpose.each { |v| v.class.should be(subclass) }
45
- end
46
- end
47
- end
48
- end
@@ -1,76 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#uniq" do
5
- let(:vector) { V['a', 'b', 'a', 'a', 'c', 'b'] }
6
-
7
- it "returns a vector with no duplicates" do
8
- vector.uniq.should eql(V['a', 'b', 'c'])
9
- end
10
-
11
- it "leaves the original unmodified" do
12
- vector.uniq
13
- vector.should eql(V['a', 'b', 'a', 'a', 'c', 'b'])
14
- end
15
-
16
- it "uses #eql? semantics" do
17
- V[1.0, 1].uniq.should eql(V[1.0, 1])
18
- end
19
-
20
- it "also uses #hash when determining which values are duplicates" do
21
- x = double(1)
22
- x.should_receive(:hash).at_least(1).times.and_return(1)
23
- y = double(2)
24
- y.should_receive(:hash).at_least(1).times.and_return(2)
25
- V[x, y].uniq
26
- end
27
-
28
- it "keeps the first of each group of duplicate values" do
29
- x, y, z = 'a', 'a', 'a'
30
- result = V[x, y, z].uniq
31
- result.size.should == 1
32
- result[0].should be(x)
33
- end
34
-
35
- context "when passed a block" do
36
- it "uses the return value of the block to determine which items are duplicate" do
37
- v = V['a', 'A', 'B', 'b']
38
- v.uniq(&:upcase).should == V['a', 'B']
39
- end
40
- end
41
-
42
- context "on a vector with no duplicates" do
43
- it "returns an unchanged vector" do
44
- V[1, 2, 3].uniq.should eql(V[1, 2, 3])
45
- end
46
-
47
- context "if the vector has more than 32 elements and is initialized with Vector.new" do
48
- # Regression test for GitHub issue #182
49
- it "returns an unchanged vector" do
50
- vector1,vector2 = 2.times.collect { V.new(0..36) }
51
- vector1.uniq.should eql(vector2)
52
- end
53
- end
54
- end
55
-
56
- [10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
57
- context "on a #{size}-item vector" do
58
- it "behaves like Array#uniq" do
59
- array = size.times.map { rand(size*2) }
60
- vector = V.new(array)
61
- result = vector.uniq
62
- result.should == array.uniq
63
- result.class.should be(Immutable::Vector)
64
- end
65
- end
66
- end
67
-
68
- context "from a subclass" do
69
- it "returns an instance of the subclass" do
70
- subclass = Class.new(Immutable::Vector)
71
- instance = subclass.new([1,2,3])
72
- instance.uniq.class.should be(subclass)
73
- end
74
- end
75
- end
76
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector 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
- [1..31, 0, 0..31],
11
- [1..32, 0, 0..32],
12
- [1..33, 0, 0..33]
13
- ].each do |values, new_value, expected|
14
- context "on #{values.inspect} with #{new_value.inspect}" do
15
- let(:vector) { V[*values] }
16
-
17
- it "preserves the original" do
18
- vector.unshift(new_value)
19
- vector.should eql(V[*values])
20
- end
21
-
22
- it "returns #{expected.inspect}" do
23
- vector.unshift(new_value).should eql(V[*expected])
24
- end
25
- end
26
- end
27
- end
28
- end