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,73 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#rotate" do
5
- let(:vector) { V[1,2,3,4,5] }
6
-
7
- context "when passed no argument" do
8
- it "returns a new vector with the first element moved to the end" do
9
- vector.rotate.should eql(V[2,3,4,5,1])
10
- end
11
- end
12
-
13
- context "with an integral argument n" do
14
- it "returns a new vector with the first (n % size) elements moved to the end" do
15
- vector.rotate(2).should eql(V[3,4,5,1,2])
16
- vector.rotate(3).should eql(V[4,5,1,2,3])
17
- vector.rotate(4).should eql(V[5,1,2,3,4])
18
- vector.rotate(5).should eql(V[1,2,3,4,5])
19
- vector.rotate(-1).should eql(V[5,1,2,3,4])
20
- end
21
- end
22
-
23
- context "with a floating-point argument n" do
24
- it "coerces the argument to integer using to_int" do
25
- vector.rotate(2.1).should eql(V[3,4,5,1,2])
26
- end
27
- end
28
-
29
- context "with a non-numeric argument" do
30
- it "raises a TypeError" do
31
- -> { vector.rotate('hello') }.should raise_error(TypeError)
32
- end
33
- end
34
-
35
- context "with an argument of zero" do
36
- it "returns self" do
37
- vector.rotate(0).should be(vector)
38
- end
39
- end
40
-
41
- context "with an argument equal to the vector's size" do
42
- it "returns self" do
43
- vector.rotate(5).should be(vector)
44
- end
45
- end
46
-
47
- [31, 32, 33, 1000, 1023, 1024, 1025].each do |size|
48
- context "on a #{size}-item vector" do
49
- it "behaves like Array#rotate" do
50
- array = (1..size).to_a
51
- vector = V.new(array)
52
- 10.times do
53
- offset = rand(size)
54
- vector.rotate(offset).should == array.rotate(offset)
55
- end
56
- end
57
- end
58
- end
59
-
60
- context "from a subclass" do
61
- it "returns an instance of the subclass" do
62
- subclass = Class.new(Immutable::Vector)
63
- instance = subclass.new([1,2,3])
64
- instance.rotate(2).class.should be(subclass)
65
- end
66
- end
67
-
68
- it "leaves the original unmodified" do
69
- vector.rotate(3)
70
- vector.should eql(V[1,2,3,4,5])
71
- end
72
- end
73
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#sample" do
5
- let(:vector) { V.new(1..10) }
6
-
7
- it "returns a randomly chosen item" do
8
- chosen = 100.times.map { vector.sample }
9
- chosen.each { |item| vector.include?(item).should == true }
10
- vector.each { |item| chosen.include?(item).should == true }
11
- end
12
- end
13
- end
@@ -1,63 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- [:select, :find_all].each do |method|
5
- describe "##{method}" do
6
- let(:vector) { V["A", "B", "C"] }
7
-
8
- describe "with a block" do
9
- it "preserves the original" do
10
- vector.send(method) { |item| item == "A" }
11
- vector.should eql(V["A", "B", "C"])
12
- end
13
-
14
- it "returns a vector with the matching values" do
15
- vector.send(method) { |item| item == "A" }.should eql(V["A"])
16
- end
17
- end
18
-
19
- describe "with no block" do
20
- it "returns an Enumerator" do
21
- vector.send(method).class.should be(Enumerator)
22
- vector.send(method).each { |item| item == "A" }.should eql(V["A"])
23
- end
24
- end
25
-
26
- describe "when nothing matches" do
27
- it "preserves the original" do
28
- vector.send(method) { |item| false }
29
- vector.should eql(V["A", "B", "C"])
30
- end
31
-
32
- it "returns an empty vector" do
33
- vector.send(method) { |item| false }.should equal(V.empty)
34
- end
35
- end
36
-
37
- context "on an empty vector" do
38
- it "returns self" do
39
- V.empty.send(method) { |item| true }.should be(V.empty)
40
- end
41
- end
42
-
43
- context "from a subclass" do
44
- it "returns an instance of the subclass" do
45
- subclass = Class.new(Immutable::Vector)
46
- instance = subclass[1,2,3]
47
- instance.send(method) { |x| x > 1 }.class.should be(subclass)
48
- end
49
- end
50
-
51
- it "works with a variety of inputs" do
52
- [1, 2, 10, 31, 32, 33, 1023, 1024, 1025].each do |size|
53
- [0, 5, 32, 50, 500, 800, 1024].each do |threshold|
54
- vector = V.new(1..size)
55
- result = vector.send(method) { |item| item <= threshold }
56
- result.size.should == [size, threshold].min
57
- result.should eql(V.new(1..[size, threshold].min))
58
- end
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,174 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- let(:vector) { V[*values] }
5
-
6
- describe "#set" do
7
- context "when empty" do
8
- let(:vector) { V.empty }
9
-
10
- it "raises an error for index -1" do
11
- expect { vector.set(-1, :a) }.to raise_error
12
- end
13
-
14
- it "allows indexes 0 and 1 to be set" do
15
- vector.set(0, :a).should eql(V[:a])
16
- vector.set(1, :a).should eql(V[nil, :a])
17
- end
18
- end
19
-
20
- context "when not empty" do
21
- let(:vector) { V["A", "B", "C"] }
22
-
23
- context "with a block" do
24
- context "and a positive index" do
25
- context "within the absolute bounds of the vector" do
26
- it "passes the current value to the block" do
27
- vector.set(1) { |value| value.should == "B" }
28
- end
29
-
30
- it "replaces the value with the result of the block" do
31
- result = vector.set(1) { |value| "FLIBBLE" }
32
- result.should eql(V["A", "FLIBBLE", "C"])
33
- end
34
-
35
- it "supports to_proc methods" do
36
- result = vector.set(1, &:downcase)
37
- result.should eql(V["A", "b", "C"])
38
- end
39
- end
40
-
41
- context "just past the end of the vector" do
42
- it "passes nil to the block and adds a new value" do
43
- result = vector.set(3) { |value| value.should be_nil; "D" }
44
- result.should eql(V["A", "B", "C", "D"])
45
- end
46
- end
47
-
48
- context "further outside the bounds of the vector" do
49
- it "passes nil to the block, fills up missing nils, and adds a new value" do
50
- result = vector.set(5) { |value| value.should be_nil; "D" }
51
- result.should eql(V["A", "B", "C", nil, nil, "D"])
52
- end
53
- end
54
- end
55
-
56
- context "and a negative index" do
57
- context "within the absolute bounds of the vector" do
58
- it "passes the current value to the block" do
59
- vector.set(-2) { |value| value.should == "B" }
60
- end
61
-
62
- it "replaces the value with the result of the block" do
63
- result = vector.set(-2) { |value| "FLIBBLE" }
64
- result.should eql(V["A", "FLIBBLE", "C"])
65
- end
66
-
67
- it "supports to_proc methods" do
68
- result = vector.set(-2, &:downcase)
69
- result.should eql(V["A", "b", "C"])
70
- end
71
- end
72
-
73
- context "outside the absolute bounds of the vector" do
74
- it "raises an error" do
75
- expect { vector.set(-vector.size.next) {} }.to raise_error
76
- end
77
- end
78
- end
79
- end
80
-
81
- context "with a value" do
82
- context "and a positive index" do
83
- context "within the absolute bounds of the vector" do
84
- let(:set) { vector.set(1, "FLIBBLE") }
85
-
86
- it "preserves the original" do
87
- vector.should eql(V["A", "B", "C"])
88
- end
89
-
90
- it "sets the new value at the specified index" do
91
- set.should eql(V["A", "FLIBBLE", "C"])
92
- end
93
- end
94
-
95
- context "just past the end of the vector" do
96
- it "adds a new value" do
97
- result = vector.set(3, "FLIBBLE")
98
- result.should eql(V["A", "B", "C", "FLIBBLE"])
99
- end
100
- end
101
-
102
- context "outside the absolute bounds of the vector" do
103
- it "fills up with nils" do
104
- result = vector.set(5, "FLIBBLE")
105
- result.should eql(V["A", "B", "C", nil, nil, "FLIBBLE"])
106
- end
107
- end
108
- end
109
-
110
- context "with a negative index" do
111
- let(:set) { vector.set(-2, "FLIBBLE") }
112
-
113
- it "preserves the original" do
114
- set
115
- vector.should eql(V["A", "B", "C"])
116
- end
117
-
118
- it "sets the new value at the specified index" do
119
- set.should eql(V["A", "FLIBBLE", "C"])
120
- end
121
- end
122
-
123
- context "outside the absolute bounds of the vector" do
124
- it "raises an error" do
125
- expect { vector.set(-vector.size.next, "FLIBBLE") }.to raise_error
126
- end
127
- end
128
- end
129
- end
130
-
131
- context "from a subclass" do
132
- it "returns an instance of the subclass" do
133
- subclass = Class.new(Immutable::Vector)
134
- instance = subclass[1,2,3]
135
- instance.set(1, 2.5).class.should be(subclass)
136
- end
137
- end
138
-
139
- [10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
140
- context "on a #{size}-item vector" do
141
- it "works correctly" do
142
- array = (1..size).to_a
143
- vector = V.new(array)
144
-
145
- [0, 1, 10, 31, 32, 33, 100, 500, 1000, 1023, 1024, 1025, 1998, 1999].select { |n| n < size }.each do |i|
146
- value = rand(10000)
147
- array[i] = value
148
- vector = vector.set(i, value)
149
- vector[i].should be(value)
150
- end
151
-
152
- 0.upto(size-1) do |i|
153
- vector.get(i).should == array[i]
154
- end
155
- end
156
- end
157
- end
158
-
159
- context "with an identical value to an existing item" do
160
- [1, 2, 5, 31,32, 33, 100, 200].each do |size|
161
- context "on a #{size}-item vector" do
162
- let(:array) { (0...size).map { |x| x * x} }
163
- let(:vector) { V.new(array) }
164
-
165
- it "returns self" do
166
- (0...size).each do |index|
167
- vector.set(index, index * index).should equal(vector)
168
- end
169
- end
170
- end
171
- end
172
- end
173
- end
174
- end
@@ -1,27 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#shift" do
5
- [
6
- [[], []],
7
- [["A"], []],
8
- [%w[A B C], %w[B C]],
9
- [1..31, 2..31],
10
- [1..32, 2..32],
11
- [1..33, 2..33]
12
- ].each do |values, expected|
13
- context "on #{values.inspect}" do
14
- let(:vector) { V[*values] }
15
-
16
- it "preserves the original" do
17
- vector.shift
18
- vector.should eql(V[*values])
19
- end
20
-
21
- it "returns #{expected.inspect}" do
22
- vector.shift.should eql(V[*expected])
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#shuffle" do
5
- let(:vector) { V[1,2,3,4] }
6
-
7
- it "returns the same values, in a usually different order" do
8
- different = false
9
- 10.times do
10
- shuffled = vector.shuffle
11
- shuffled.sort.should eql(vector)
12
- different ||= (shuffled != vector)
13
- end
14
- different.should be(true)
15
- end
16
-
17
- it "leaves the original unchanged" do
18
- vector.shuffle
19
- vector.should eql(V[1,2,3,4])
20
- end
21
-
22
- context "from a subclass" do
23
- it "returns an instance of the subclass" do
24
- subclass = Class.new(Immutable::Vector)
25
- instance = subclass.new([1,2,3])
26
- instance.shuffle.class.should be(subclass)
27
- end
28
- end
29
-
30
- [32, 33, 1023, 1024, 1025].each do |size|
31
- context "on a #{size}-item vector" do
32
- it "works correctly" do
33
- vector = V.new(1..size)
34
- shuffled = vector.shuffle
35
- shuffled = vector.shuffle while shuffled.eql?(vector) # in case we get the same
36
- vector.should eql(V.new(1..size))
37
- shuffled.size.should == vector.size
38
- shuffled.sort.should eql(vector)
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -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