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,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- [:dup, :clone].each do |method|
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- (1..32),
10
- ].each do |values|
11
- describe "on #{values.inspect}" do
12
- let(:vector) { V[*values] }
13
-
14
- it "returns self" do
15
- vector.send(method).should equal(vector)
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#count" do
5
- it "returns the number of elements" do
6
- V[:a, :b, :c].count.should == 3
7
- end
8
-
9
- it "returns the number of elements that equal the argument" do
10
- V[:a, :b, :b, :c].count(:b).should == 2
11
- end
12
-
13
- it "returns the number of element for which the block evaluates to true" do
14
- V[:a, :b, :c].count { |s| s != :b }.should == 2
15
- end
16
- end
17
- end
@@ -1,53 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#delete_at" do
5
- let(:vector) { V[1,2,3,4,5] }
6
-
7
- it "removes the element at the specified index" do
8
- vector.delete_at(0).should eql(V[2,3,4,5])
9
- vector.delete_at(2).should eql(V[1,2,4,5])
10
- vector.delete_at(-1).should eql(V[1,2,3,4])
11
- end
12
-
13
- it "makes no modification if the index is out of range" do
14
- vector.delete_at(5).should eql(vector)
15
- vector.delete_at(-6).should eql(vector)
16
- end
17
-
18
- it "works when deleting last item at boundary where vector trie needs to get shallower" do
19
- vector = Immutable::Vector.new(1..33)
20
- vector.delete_at(32).size.should == 32
21
- vector.delete_at(32).to_a.should eql((1..32).to_a)
22
- end
23
-
24
- it "works on an empty vector" do
25
- V.empty.delete_at(0).should be(V.empty)
26
- V.empty.delete_at(1).should be(V.empty)
27
- end
28
-
29
- it "works on a vector with 1 item" do
30
- V[10].delete_at(0).should eql(V.empty)
31
- V[10].delete_at(1).should eql(V[10])
32
- end
33
-
34
- it "works on a vector with 32 items" do
35
- V.new(1..32).delete_at(0).should eql(V.new(2..32))
36
- V.new(1..32).delete_at(31).should eql(V.new(1..31))
37
- end
38
-
39
- it "has the right size and contents after many deletions" do
40
- array = (1..2000).to_a # we use an Array as standard of correctness
41
- vector = Immutable::Vector.new(array)
42
- 500.times do
43
- index = rand(vector.size)
44
- vector = vector.delete_at(index)
45
- array.delete_at(index)
46
- vector.size.should == array.size
47
- ary = vector.to_a
48
- ary.size.should == vector.size
49
- ary.should eql(array)
50
- end
51
- end
52
- end
53
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#delete" do
5
- it "removes elements that are #== to the argument" do
6
- V[1,2,3].delete(1).should eql(V[2,3])
7
- V[1,2,3].delete(2).should eql(V[1,3])
8
- V[1,2,3].delete(3).should eql(V[1,2])
9
- V[1,2,3].delete(0).should eql(V[1,2,3])
10
- V['a','b','a','c','a','a','d'].delete('a').should eql(V['b','c','d'])
11
-
12
- V[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(V.empty)
13
- V[EqlNotEqual.new, EqlNotEqual.new].delete(:something).should_not be_empty
14
- end
15
-
16
- context "on an empty vector" do
17
- it "returns self" do
18
- V.empty.delete(1).should be(V.empty)
19
- end
20
- end
21
-
22
- context "on a subclass of Vector" 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.delete(1).class.should be(subclass)
27
- end
28
- end
29
- end
30
- end
@@ -1,41 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#drop" do
5
- [
6
- [[], 10, []],
7
- [["A"], 10, []],
8
- [["A"], 1, []],
9
- [["A"], 0, ["A"]],
10
- [%w[A B C], 0, %w[A B C]],
11
- [%w[A B C], 2, ["C"]],
12
- [(1..32), 3, (4..32)],
13
- [(1..33), 32, [33]]
14
- ].each do |values, number, expected|
15
- describe "#{number} from #{values.inspect}" do
16
- let(:vector) { V[*values] }
17
-
18
- it "preserves the original" do
19
- vector.drop(number)
20
- vector.should eql(V[*values])
21
- end
22
-
23
- it "returns #{expected.inspect}" do
24
- vector.drop(number).should eql(V[*expected])
25
- end
26
- end
27
- end
28
-
29
- it "raises an ArgumentError if number of elements specified is negative" do
30
- -> { V[1, 2, 3].drop(-1) }.should raise_error(ArgumentError)
31
- -> { V[1, 2, 3].drop(-3) }.should raise_error(ArgumentError)
32
- end
33
-
34
- context "when number of elements specified is zero" do
35
- let(:vector) { V[1, 2, 3, 4, 5, 6] }
36
- it "returns self" do
37
- vector.drop(0).should be(vector)
38
- end
39
- end
40
- end
41
- end
@@ -1,54 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#drop_while" do
5
- [
6
- [[], []],
7
- [["A"], []],
8
- [%w[A B C], ["C"]],
9
- ].each do |values, expected|
10
- describe "on #{values.inspect}" do
11
- let(:vector) { V[*values] }
12
-
13
- describe "with a block" do
14
- let(:result) { vector.drop_while { |item| item < "C" } }
15
-
16
- it "preserves the original" do
17
- result
18
- vector.should eql(V[*values])
19
- end
20
-
21
- it "returns #{expected.inspect}" do
22
- result.should eql(V[*expected])
23
- end
24
- end
25
-
26
- describe "without a block" do
27
- it "returns an Enumerator" do
28
- vector.drop_while.class.should be(Enumerator)
29
- vector.drop_while.each { |item| item < "C" }.should eql(V[*expected])
30
- end
31
- end
32
- end
33
- end
34
-
35
- context "on an empty vector" do
36
- it "returns an empty vector" do
37
- V.empty.drop_while { false }.should eql(V.empty)
38
- end
39
- end
40
-
41
- it "returns an empty vector if block is always true" do
42
- V.new(1..32).drop_while { true }.should eql(V.empty)
43
- V.new(1..100).drop_while { true }.should eql(V.empty)
44
- end
45
-
46
- it "stops dropping items if block returns nil" do
47
- V[1, 2, 3, nil, 4, 5].drop_while { |x| x }.should eql(V[nil, 4, 5])
48
- end
49
-
50
- it "stops dropping items if block returns false" do
51
- V[1, 2, 3, false, 4, 5].drop_while { |x| x }.should eql(V[false, 4, 5])
52
- end
53
- end
54
- end
@@ -1,40 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#each_index" do
5
- let(:vector) { V[1,2,3,4] }
6
-
7
- context "with a block" do
8
- it "yields all the valid indices into the vector" do
9
- result = []
10
- vector.each_index { |i| result << i }
11
- result.should eql([0,1,2,3])
12
- end
13
-
14
- it "returns self" do
15
- vector.each_index {}.should be(vector)
16
- end
17
- end
18
-
19
- context "without a block" do
20
- it "returns an Enumerator" do
21
- vector.each_index.class.should be(Enumerator)
22
- vector.each_index.to_a.should eql([0,1,2,3])
23
- end
24
- end
25
-
26
- context "on an empty vector" do
27
- it "doesn't yield anything" do
28
- V.empty.each_index { fail }
29
- end
30
- end
31
-
32
- [1, 2, 10, 31, 32, 33, 1000, 1024, 1025].each do |size|
33
- context "on a #{size}-item vector" do
34
- it "yields all valid indices" do
35
- V.new(1..size).each_index.to_a.should == (0..(size-1)).to_a
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,44 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#each" do
5
- describe "with no block" do
6
- let(:vector) { V["A", "B", "C"] }
7
-
8
- it "returns an Enumerator" do
9
- vector.each.class.should be(Enumerator)
10
- vector.each.to_a.should == vector
11
- end
12
- end
13
-
14
- [31, 32, 33, 1023, 1024, 1025].each do |size|
15
- context "on a #{size}-item vector" do
16
- describe "with a block" do
17
- let(:vector) { V.new(1..size) }
18
-
19
- it "returns self" do
20
- items = []
21
- vector.each { |item| items << item }.should be(vector)
22
- end
23
-
24
- it "yields all the items" do
25
- items = []
26
- vector.each { |item| items << item }
27
- items.should == (1..size).to_a
28
- end
29
-
30
- it "iterates over the items in order" do
31
- vector.each.first.should == 1
32
- vector.each.to_a.last.should == size
33
- end
34
- end
35
- end
36
- end
37
-
38
- context "on an empty vector" do
39
- it "doesn't yield anything" do
40
- V.empty.each { fail }
41
- end
42
- end
43
- end
44
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#each_with_index" do
5
- describe "with no block" do
6
- let(:vector) { V["A", "B", "C"] }
7
-
8
- it "returns an Enumerator" do
9
- vector.each_with_index.class.should be(Enumerator)
10
- vector.each_with_index.to_a.should == [['A', 0], ['B', 1], ['C', 2]]
11
- end
12
- end
13
-
14
- [1, 2, 31, 32, 33, 1023, 1024, 1025].each do |size|
15
- context "on a #{size}-item vector" do
16
- describe "with a block" do
17
- let(:vector) { V.new(1..size) }
18
-
19
- it "returns self" do
20
- pairs = []
21
- vector.each_with_index { |item, index| pairs << [item, index] }.should be(vector)
22
- end
23
-
24
- it "iterates over the items in order" do
25
- pairs = []
26
- vector.each_with_index { |item, index| pairs << [item, index] }.should be(vector)
27
- pairs.should == (1..size).zip(0..size.pred)
28
- end
29
- end
30
- end
31
- end
32
-
33
- context "on an empty vector" do
34
- it "doesn't yield anything" do
35
- V.empty.each_with_index { |item, index| fail }
36
- end
37
- end
38
- end
39
- end
@@ -1,41 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#empty?" do
5
- [
6
- [[], true],
7
- [["A"], false],
8
- [%w[A B C], false],
9
- ].each do |values, expected|
10
- describe "on #{values.inspect}" do
11
- it "returns #{expected.inspect}" do
12
- V[*values].empty?.should == expected
13
- end
14
- end
15
- end
16
- end
17
-
18
- describe ".empty" do
19
- it "returns the canonical empty vector" do
20
- V.empty.size.should be(0)
21
- V.empty.object_id.should be(V.empty.object_id)
22
- end
23
-
24
- context "from a subclass" do
25
- it "returns an empty instance of the subclass" do
26
- subclass = Class.new(Immutable::Vector)
27
- subclass.empty.class.should be(subclass)
28
- subclass.empty.should be_empty
29
- end
30
-
31
- it "calls overridden #initialize when creating empty Hash" do
32
- subclass = Class.new(Immutable::Vector) do
33
- def initialize
34
- @variable = 'value'
35
- end
36
- end
37
- subclass.empty.instance_variable_get(:@variable).should == 'value'
38
- end
39
- end
40
- end
41
- end
@@ -1,76 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#eql" do
5
- let(:vector) { V["A", "B", "C"] }
6
-
7
- it "returns false when comparing with an array with the same contents" do
8
- vector.eql?(%w[A B C]).should == false
9
- end
10
-
11
- it "returns false when comparing with an arbitrary object" do
12
- vector.eql?(Object.new).should == false
13
- end
14
-
15
- it "returns false when comparing an empty vector with an empty array" do
16
- V.empty.eql?([]).should == false
17
- end
18
-
19
- it "returns false when comparing with a subclass of Immutable::Vector" do
20
- vector.eql?(Class.new(Immutable::Vector).new(%w[A B C])).should == false
21
- end
22
- end
23
-
24
- describe "#==" do
25
- let(:vector) { V["A", "B", "C"] }
26
-
27
- it "returns true when comparing with an array with the same contents" do
28
- (vector == %w[A B C]).should == true
29
- end
30
-
31
- it "returns false when comparing with an arbitrary object" do
32
- (vector == Object.new).should == false
33
- end
34
-
35
- it "returns true when comparing an empty vector with an empty array" do
36
- (V.empty == []).should == true
37
- end
38
-
39
- it "returns true when comparing with a subclass of Immutable::Vector" do
40
- (vector == Class.new(Immutable::Vector).new(%w[A B C])).should == true
41
- end
42
-
43
- it "works on larger vectors" do
44
- array = 2000.times.map { rand(10000) }
45
- (V.new(array.dup) == array).should == true
46
- end
47
- end
48
-
49
- [:eql?, :==].each do |method|
50
- describe "##{method}" do
51
- [
52
- [[], [], true],
53
- [[], [nil], false],
54
- [["A"], [], false],
55
- [["A"], ["A"], true],
56
- [["A"], ["B"], false],
57
- [%w[A B], ["A"], false],
58
- [%w[A B C], %w[A B C], true],
59
- [%w[C A B], %w[A B C], false],
60
- ].each do |a, b, expected|
61
- describe "returns #{expected.inspect}" do
62
- let(:vector_a) { V[*a] }
63
- let(:vector_b) { V[*b] }
64
-
65
- it "for vectors #{a.inspect} and #{b.inspect}" do
66
- vector_a.send(method, vector_b).should == expected
67
- end
68
-
69
- it "for vectors #{b.inspect} and #{a.inspect}" do
70
- vector_b.send(method, vector_a).should == expected
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,64 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#fetch" do
5
- let(:vector) { V['a', 'b', 'c'] }
6
-
7
- context "with no default provided" do
8
- context "when the index exists" do
9
- it "returns the value at the index" do
10
- vector.fetch(0).should == "a"
11
- vector.fetch(1).should == "b"
12
- vector.fetch(2).should == "c"
13
- end
14
- end
15
-
16
- context "when the key does not exist" do
17
- it "raises an IndexError" do
18
- -> { vector.fetch(3) }.should raise_error(IndexError)
19
- -> { vector.fetch(-4) }.should raise_error(IndexError)
20
- end
21
- end
22
- end
23
-
24
- context "with a default value" do
25
- context "when the index exists" do
26
- it "returns the value at the index" do
27
- vector.fetch(0, "default").should == "a"
28
- vector.fetch(1, "default").should == "b"
29
- vector.fetch(2, "default").should == "c"
30
- end
31
- end
32
-
33
- context "when the index does not exist" do
34
- it "returns the default value" do
35
- vector.fetch(3, "default").should == "default"
36
- vector.fetch(-4, "default").should == "default"
37
- end
38
- end
39
- end
40
-
41
- context "with a default block" do
42
- context "when the index exists" do
43
- it "returns the value at the index" do
44
- vector.fetch(0) { "default".upcase }.should == "a"
45
- vector.fetch(1) { "default".upcase }.should == "b"
46
- vector.fetch(2) { "default".upcase }.should == "c"
47
- end
48
- end
49
-
50
- context "when the index does not exist" do
51
- it "invokes the block with the missing index as parameter" do
52
- vector.fetch(3) { |index| index.should == 3}
53
- vector.fetch(-4) { |index| index.should == -4 }
54
- vector.fetch(3) { "default".upcase }.should == "DEFAULT"
55
- vector.fetch(-4) { "default".upcase }.should == "DEFAULT"
56
- end
57
- end
58
- end
59
-
60
- it "gives precedence to default block over default argument if passed both" do
61
- vector.fetch(3, 'one') { 'two' }.should == 'two'
62
- end
63
- end
64
- end
@@ -1,88 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#fill" do
5
- let(:vector) { V[1, 2, 3, 4, 5, 6] }
6
-
7
- it "can replace a range of items at the beginning of a vector" do
8
- vector.fill(:a, 0, 3).should eql(V[:a, :a, :a, 4, 5, 6])
9
- end
10
-
11
- it "can replace a range of items in the middle of a vector" do
12
- vector.fill(:a, 3, 2).should eql(V[1, 2, 3, :a, :a, 6])
13
- end
14
-
15
- it "can replace a range of items at the end of a vector" do
16
- vector.fill(:a, 4, 2).should eql(V[1, 2, 3, 4, :a, :a])
17
- end
18
-
19
- it "can replace all the items in a vector" do
20
- vector.fill(:a, 0, 6).should eql(V[:a, :a, :a, :a, :a, :a])
21
- end
22
-
23
- it "can fill past the end of the vector" do
24
- vector.fill(:a, 3, 6).should eql(V[1, 2, 3, :a, :a, :a, :a, :a, :a])
25
- end
26
-
27
- context "with 1 argument" do
28
- it "replaces all the items in the vector by default" do
29
- vector.fill(:a).should eql(V[:a, :a, :a, :a, :a, :a])
30
- end
31
- end
32
-
33
- context "with 2 arguments" do
34
- it "replaces up to the end of the vector by default" do
35
- vector.fill(:a, 4).should eql(V[1, 2, 3, 4, :a, :a])
36
- end
37
- end
38
-
39
- context "when index and length are 0" do
40
- it "leaves the vector unmodified" do
41
- vector.fill(:a, 0, 0).should eql(vector)
42
- end
43
- end
44
-
45
- context "when expanding a vector past boundary where vector trie needs to deepen" do
46
- it "works the same" do
47
- vector.fill(:a, 32, 3).size.should == 35
48
- vector.fill(:a, 32, 3).to_a.size.should == 35
49
- end
50
- end
51
-
52
- [1000, 1023, 1024, 1025, 2000].each do |size|
53
- context "on a #{size}-item vector" do
54
- it "works the same" do
55
- array = (0..size).to_a
56
- vector = V.new(array)
57
- [[:a, 0, 5], [:b, 31, 2], [:c, 32, 60], [:d, 1000, 20], [:e, 1024, 33], [:f, 1200, 35]].each do |obj, index, length|
58
- next if index > size
59
- vector = vector.fill(obj, index, length)
60
- array.fill(obj, index, length)
61
- vector.size.should == array.size
62
- ary = vector.to_a
63
- ary.size.should == vector.size
64
- ary.should eql(array)
65
- end
66
- end
67
- end
68
- end
69
-
70
- it "behaves like Array#fill, on a variety of inputs" do
71
- 50.times do
72
- array = rand(100).times.map { rand(1000) }
73
- index = rand(array.size)
74
- length = rand(50)
75
- V.new(array).fill(:a, index, length).should == array.fill(:a, index, length)
76
- end
77
- 10.times do
78
- array = rand(100).times.map { rand(10000) }
79
- length = rand(100)
80
- V.new(array).fill(:a, array.size, length).should == array.fill(:a, array.size, length)
81
- end
82
- 10.times do
83
- array = rand(100).times.map { rand(10000) }
84
- V.new(array).fill(:a).should == array.fill(:a)
85
- end
86
- end
87
- end
88
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- describe "#first" do
5
- [
6
- [[], nil],
7
- [["A"], "A"],
8
- [%w[A B C], "A"],
9
- [(1..32), 1],
10
- ].each do |values, expected|
11
- describe "on #{values.inspect}" do
12
- it "returns #{expected.inspect}" do
13
- V[*values].first.should == expected
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,50 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Vector do
4
- let(:vector) { V[*values] }
5
-
6
- describe "#flat_map" do
7
- let(:block) { ->(item) { [item, item + 1, item * item] } }
8
- let(:flat_map) { vector.flat_map(&block) }
9
- let(:flattened_vector) { V[*flattened_values] }
10
-
11
- shared_examples "checking flattened result" do
12
- it "returns the flattened values as an Immutable::Vector" do
13
- expect(flat_map).to eq(flattened_vector)
14
- end
15
-
16
- it "returns an Immutable::Vector" do
17
- expect(flat_map).to be_a(Immutable::Vector)
18
- end
19
- end
20
-
21
- context "with an empty vector" do
22
- let(:values) { [] }
23
- let(:flattened_values) { [] }
24
-
25
- include_examples "checking flattened result"
26
- end
27
-
28
- context "with a block that returns an empty vector" do
29
- let(:block) { ->(item) { [] } }
30
- let(:values) { [1, 2, 3] }
31
- let(:flattened_values) { [] }
32
-
33
- include_examples "checking flattened result"
34
- end
35
-
36
- context "with a vector of one item" do
37
- let(:values) { [7] }
38
- let(:flattened_values) { [7, 8, 49] }
39
-
40
- include_examples "checking flattened result"
41
- end
42
-
43
- context "with a vector of multiple items" do
44
- let(:values) { [1, 2, 3] }
45
- let(:flattened_values) { [1, 2, 1, 2, 3, 4, 3, 4, 9] }
46
-
47
- include_examples "checking flattened result"
48
- end
49
- end
50
- end