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,61 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- [:select, :find_all].each do |method|
5
- describe "##{method}" do
6
- let(:sorted_set) { SS["A", "B", "C"] }
7
-
8
- context "when everything matches" do
9
- it "preserves the original" do
10
- sorted_set.send(method) { true }
11
- sorted_set.should eql(SS["A", "B", "C"])
12
- end
13
-
14
- it "returns self" do
15
- sorted_set.send(method) { |item| true }.should equal(sorted_set)
16
- end
17
- end
18
-
19
- context "when only some things match" do
20
- context "with a block" do
21
- it "preserves the original" do
22
- sorted_set.send(method) { |item| item == "A" }
23
- sorted_set.should eql(SS["A", "B", "C"])
24
- end
25
-
26
- it "returns a set with the matching values" do
27
- sorted_set.send(method) { |item| item == "A" }.should eql(SS["A"])
28
- end
29
- end
30
-
31
- context "with no block" do
32
- it "returns an Enumerator" do
33
- sorted_set.send(method).class.should be(Enumerator)
34
- sorted_set.send(method).each { |item| item == "A" }.should eql(SS["A"])
35
- end
36
- end
37
- end
38
-
39
- context "when nothing matches" do
40
- it "preserves the original" do
41
- sorted_set.send(method) { |item| false }
42
- sorted_set.should eql(SS["A", "B", "C"])
43
- end
44
-
45
- it "returns the canonical empty set" do
46
- sorted_set.send(method) { |item| false }.should equal(Immutable::EmptySortedSet)
47
- end
48
- end
49
-
50
- context "from a subclass" do
51
- it "returns an instance of the same class" do
52
- subclass = Class.new(Immutable::SortedSet)
53
- instance = subclass.new(['A', 'B', 'C'])
54
- instance.send(method) { true }.class.should be(subclass)
55
- instance.send(method) { false }.class.should be(subclass)
56
- instance.send(method) { rand(2) == 0 }.class.should be(subclass)
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- [:size, :length].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], 0],
8
- [["A"], 1],
9
- [%w[A B C], 3],
10
- ].each do |values, result|
11
- it "returns #{result} for #{values.inspect}" do
12
- SS[*values].send(method).should == result
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,256 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- let(:sorted_set) { SS[1,2,3,4] }
5
- let(:big) { SS.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
- sorted_set.send(method, 0).should be(1)
12
- sorted_set.send(method, 1).should be(2)
13
- sorted_set.send(method, 2).should be(3)
14
- sorted_set.send(method, 3).should be(4)
15
- sorted_set.send(method, 4).should be(nil)
16
- sorted_set.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
- sorted_set.should eql(SS[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 sorted_set" do
29
- sorted_set.send(method, -1).should be(4)
30
- sorted_set.send(method, -2).should be(3)
31
- sorted_set.send(method, -3).should be(2)
32
- sorted_set.send(method, -4).should be(1)
33
- sorted_set.send(method, -5).should be(nil)
34
- sorted_set.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
- sorted_set.send(method, 0, 0).should eql(SS.empty)
44
- sorted_set.send(method, 0, 1).should eql(SS[1])
45
- sorted_set.send(method, 0, 2).should eql(SS[1,2])
46
- sorted_set.send(method, 0, 4).should eql(SS[1,2,3,4])
47
- sorted_set.send(method, 0, 6).should eql(SS[1,2,3,4])
48
- sorted_set.send(method, 0, -1).should be_nil
49
- sorted_set.send(method, 0, -2).should be_nil
50
- sorted_set.send(method, 0, -4).should be_nil
51
- sorted_set.send(method, 2, 0).should eql(SS.empty)
52
- sorted_set.send(method, 2, 1).should eql(SS[3])
53
- sorted_set.send(method, 2, 2).should eql(SS[3,4])
54
- sorted_set.send(method, 2, 4).should eql(SS[3,4])
55
- sorted_set.send(method, 2, -1).should be_nil
56
- sorted_set.send(method, 4, 0).should eql(SS.empty)
57
- sorted_set.send(method, 4, 2).should eql(SS.empty)
58
- sorted_set.send(method, 4, -1).should be_nil
59
- sorted_set.send(method, 5, 0).should be_nil
60
- sorted_set.send(method, 5, 2).should be_nil
61
- sorted_set.send(method, 5, -1).should be_nil
62
- sorted_set.send(method, 6, 0).should be_nil
63
- sorted_set.send(method, 6, 2).should be_nil
64
- sorted_set.send(method, 6, -1).should be_nil
65
-
66
- big.send(method, 0, 3).should eql(SS[1,2,3])
67
- big.send(method, 1023, 4).should eql(SS[1024,1025,1026,1027])
68
- big.send(method, 1024, 4).should eql(SS[1025,1026,1027,1028])
69
- end
70
-
71
- it "leaves the original unchanged" do
72
- sorted_set.should eql(SS[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
- sorted_set.send(method, -1, 0).should eql(SS.empty)
79
- sorted_set.send(method, -1, 1).should eql(SS[4])
80
- sorted_set.send(method, -1, 2).should eql(SS[4])
81
- sorted_set.send(method, -1, -1).should be_nil
82
- sorted_set.send(method, -2, 0).should eql(SS.empty)
83
- sorted_set.send(method, -2, 1).should eql(SS[3])
84
- sorted_set.send(method, -2, 2).should eql(SS[3,4])
85
- sorted_set.send(method, -2, 4).should eql(SS[3,4])
86
- sorted_set.send(method, -2, -1).should be_nil
87
- sorted_set.send(method, -4, 0).should eql(SS.empty)
88
- sorted_set.send(method, -4, 1).should eql(SS[1])
89
- sorted_set.send(method, -4, 2).should eql(SS[1,2])
90
- sorted_set.send(method, -4, 4).should eql(SS[1,2,3,4])
91
- sorted_set.send(method, -4, 6).should eql(SS[1,2,3,4])
92
- sorted_set.send(method, -4, -1).should be_nil
93
- sorted_set.send(method, -5, 0).should be_nil
94
- sorted_set.send(method, -5, 1).should be_nil
95
- sorted_set.send(method, -5, 10).should be_nil
96
- sorted_set.send(method, -5, -1).should be_nil
97
-
98
- big.send(method, -1, 1).should eql(SS[10000])
99
- big.send(method, -1, 2).should eql(SS[10000])
100
- big.send(method, -6, 2).should eql(SS[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
- sorted_set.send(method, 0..-1).should eql(SS[1,2,3,4])
107
- sorted_set.send(method, 0..-10).should eql(SS.empty)
108
- sorted_set.send(method, 0..0).should eql(SS[1])
109
- sorted_set.send(method, 0..1).should eql(SS[1,2])
110
- sorted_set.send(method, 0..2).should eql(SS[1,2,3])
111
- sorted_set.send(method, 0..3).should eql(SS[1,2,3,4])
112
- sorted_set.send(method, 0..4).should eql(SS[1,2,3,4])
113
- sorted_set.send(method, 0..10).should eql(SS[1,2,3,4])
114
- sorted_set.send(method, 2..-10).should eql(SS.empty)
115
- sorted_set.send(method, 2..0).should eql(SS.empty)
116
- sorted_set.send(method, 2..2).should eql(SS[3])
117
- sorted_set.send(method, 2..3).should eql(SS[3,4])
118
- sorted_set.send(method, 2..4).should eql(SS[3,4])
119
- sorted_set.send(method, 3..0).should eql(SS.empty)
120
- sorted_set.send(method, 3..3).should eql(SS[4])
121
- sorted_set.send(method, 3..4).should eql(SS[4])
122
- sorted_set.send(method, 4..0).should eql(SS.empty)
123
- sorted_set.send(method, 4..4).should eql(SS.empty)
124
- sorted_set.send(method, 4..5).should eql(SS.empty)
125
- sorted_set.send(method, 5..0).should be_nil
126
- sorted_set.send(method, 5..5).should be_nil
127
- sorted_set.send(method, 5..6).should be_nil
128
-
129
- big.send(method, 159..162).should eql(SS[160,161,162,163])
130
- big.send(method, 160..162).should eql(SS[161,162,163])
131
- big.send(method, 161..162).should eql(SS[162,163])
132
- big.send(method, 9999..10100).should eql(SS[10000])
133
- big.send(method, 10000..10100).should eql(SS.empty)
134
- big.send(method, 10001..10100).should be_nil
135
-
136
- sorted_set.send(method, 0...-1).should eql(SS[1,2,3])
137
- sorted_set.send(method, 0...-10).should eql(SS.empty)
138
- sorted_set.send(method, 0...0).should eql(SS.empty)
139
- sorted_set.send(method, 0...1).should eql(SS[1])
140
- sorted_set.send(method, 0...2).should eql(SS[1,2])
141
- sorted_set.send(method, 0...3).should eql(SS[1,2,3])
142
- sorted_set.send(method, 0...4).should eql(SS[1,2,3,4])
143
- sorted_set.send(method, 0...10).should eql(SS[1,2,3,4])
144
- sorted_set.send(method, 2...-10).should eql(SS.empty)
145
- sorted_set.send(method, 2...0).should eql(SS.empty)
146
- sorted_set.send(method, 2...2).should eql(SS.empty)
147
- sorted_set.send(method, 2...3).should eql(SS[3])
148
- sorted_set.send(method, 2...4).should eql(SS[3,4])
149
- sorted_set.send(method, 3...0).should eql(SS.empty)
150
- sorted_set.send(method, 3...3).should eql(SS.empty)
151
- sorted_set.send(method, 3...4).should eql(SS[4])
152
- sorted_set.send(method, 4...0).should eql(SS.empty)
153
- sorted_set.send(method, 4...4).should eql(SS.empty)
154
- sorted_set.send(method, 4...5).should eql(SS.empty)
155
- sorted_set.send(method, 5...0).should be_nil
156
- sorted_set.send(method, 5...5).should be_nil
157
- sorted_set.send(method, 5...6).should be_nil
158
-
159
- big.send(method, 159...162).should eql(SS[160,161,162])
160
- big.send(method, 160...162).should eql(SS[161,162])
161
- big.send(method, 161...162).should eql(SS[162])
162
- big.send(method, 9999...10100).should eql(SS[10000])
163
- big.send(method, 10000...10100).should eql(SS.empty)
164
- big.send(method, 10001...10100).should be_nil
165
-
166
- sorted_set.send(method, -1..-1).should eql(SS[4])
167
- sorted_set.send(method, -1...-1).should eql(SS.empty)
168
- sorted_set.send(method, -1..3).should eql(SS[4])
169
- sorted_set.send(method, -1...3).should eql(SS.empty)
170
- sorted_set.send(method, -1..4).should eql(SS[4])
171
- sorted_set.send(method, -1...4).should eql(SS[4])
172
- sorted_set.send(method, -1..10).should eql(SS[4])
173
- sorted_set.send(method, -1...10).should eql(SS[4])
174
- sorted_set.send(method, -1..0).should eql(SS.empty)
175
- sorted_set.send(method, -1..-4).should eql(SS.empty)
176
- sorted_set.send(method, -1...-4).should eql(SS.empty)
177
- sorted_set.send(method, -1..-6).should eql(SS.empty)
178
- sorted_set.send(method, -1...-6).should eql(SS.empty)
179
- sorted_set.send(method, -2..-2).should eql(SS[3])
180
- sorted_set.send(method, -2...-2).should eql(SS.empty)
181
- sorted_set.send(method, -2..-1).should eql(SS[3,4])
182
- sorted_set.send(method, -2...-1).should eql(SS[3])
183
- sorted_set.send(method, -2..10).should eql(SS[3,4])
184
- sorted_set.send(method, -2...10).should eql(SS[3,4])
185
-
186
- big.send(method, -1..-1).should eql(SS[10000])
187
- big.send(method, -1..9999).should eql(SS[10000])
188
- big.send(method, -1...9999).should eql(SS.empty)
189
- big.send(method, -2...9999).should eql(SS[9999])
190
- big.send(method, -2..-1).should eql(SS[9999,10000])
191
-
192
- sorted_set.send(method, -4..-4).should eql(SS[1])
193
- sorted_set.send(method, -4..-2).should eql(SS[1,2,3])
194
- sorted_set.send(method, -4...-2).should eql(SS[1,2])
195
- sorted_set.send(method, -4..-1).should eql(SS[1,2,3,4])
196
- sorted_set.send(method, -4...-1).should eql(SS[1,2,3])
197
- sorted_set.send(method, -4..3).should eql(SS[1,2,3,4])
198
- sorted_set.send(method, -4...3).should eql(SS[1,2,3])
199
- sorted_set.send(method, -4..4).should eql(SS[1,2,3,4])
200
- sorted_set.send(method, -4...4).should eql(SS[1,2,3,4])
201
- sorted_set.send(method, -4..0).should eql(SS[1])
202
- sorted_set.send(method, -4...0).should eql(SS.empty)
203
- sorted_set.send(method, -4..1).should eql(SS[1,2])
204
- sorted_set.send(method, -4...1).should eql(SS[1])
205
-
206
- sorted_set.send(method, -5..-5).should be_nil
207
- sorted_set.send(method, -5...-5).should be_nil
208
- sorted_set.send(method, -5..-4).should be_nil
209
- sorted_set.send(method, -5..-1).should be_nil
210
- sorted_set.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
- sorted_set.should eql(SS[1,2,3,4])
217
- end
218
- end
219
- end
220
-
221
- context "when passed an empty Range" do
222
- it "does not lose custom sort order" do
223
- ss = SS.new(["yogurt", "cake", "pistachios"]) { |word| word.length }
224
- ss = ss.send(method, 1...1).add("tea").add("fruitcake").add("toast")
225
- ss.to_a.should == ["tea", "toast", "fruitcake"]
226
- end
227
- end
228
-
229
- context "when passed a length of zero" do
230
- it "does not lose custom sort order" do
231
- ss = SS.new(["yogurt", "cake", "pistachios"]) { |word| word.length }
232
- ss = ss.send(method, 0, 0).add("tea").add("fruitcake").add("toast")
233
- ss.to_a.should == ["tea", "toast", "fruitcake"]
234
- end
235
- end
236
-
237
- context "when passed a subclass of Range" do
238
- it "works the same as with a Range" do
239
- subclass = Class.new(Range)
240
- sorted_set.send(method, subclass.new(1,2)).should eql(SS[2,3])
241
- sorted_set.send(method, subclass.new(-3,-1,true)).should eql(SS[2,3])
242
- end
243
- end
244
-
245
- context "on a subclass of SortedSet" do
246
- it "with index and count or a range, returns an instance of the subclass" do
247
- subclass = Class.new(Immutable::SortedSet)
248
- instance = subclass.new([1,2,3])
249
- instance.send(method, 0, 0).class.should be(subclass)
250
- instance.send(method, 0, 2).class.should be(subclass)
251
- instance.send(method, 0..0).class.should be(subclass)
252
- instance.send(method, 1..-1).class.should be(subclass)
253
- end
254
- end
255
- end
256
- end
@@ -1,56 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet 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(:sorted_set) { SS.new(values) { |item| item.reverse }}
16
-
17
- context "with a block" do
18
- it "preserves the original" do
19
- sorted_set.send(method, &comparator)
20
- sorted_set.to_a.should == SS.new(values) { |item| item.reverse }
21
- end
22
-
23
- it "returns #{expected.inspect}" do
24
- sorted_set.send(method, &comparator).class.should be(Immutable::SortedSet)
25
- sorted_set.send(method, &comparator).to_a.should == expected
26
- end
27
- end
28
-
29
- context "without a block" do
30
- it "preserves the original" do
31
- sorted_set.send(method)
32
- sorted_set.to_a.should == SS.new(values) { |item| item.reverse }
33
- end
34
-
35
- it "returns #{expected.sort.inspect}" do
36
- sorted_set.send(method).class.should be(Immutable::SortedSet)
37
- sorted_set.send(method).to_a.should == expected.sort
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
44
-
45
- describe :sort do
46
- context "on a SortedSet with custom sort order" do
47
- let(:sorted_set) { SS.new([1,2,3,4]) { |x,y| y <=> x }}
48
-
49
- it "returns a SortedSet with the natural sort order" do
50
- result = sorted_set.sort
51
- expect(sorted_set.to_a).to eq([4,3,2,1])
52
- expect(result.to_a).to eq([1,2,3,4])
53
- end
54
- end
55
- end
56
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- describe "#subset?" do
5
- [
6
- [[], [], true],
7
- [["A"], [], false],
8
- [[], ["A"], true],
9
- [["A"], ["A"], true],
10
- [%w[A B C], ["B"], false],
11
- [["B"], %w[A B C], true],
12
- [%w[A B C], %w[A C], false],
13
- [%w[A C], %w[A B C], true],
14
- [%w[A B C], %w[A B C], true],
15
- [%w[A B C], %w[A B C D], true],
16
- [%w[A B C D], %w[A B C], false],
17
- ].each do |a, b, expected|
18
- context "for #{a.inspect} and #{b.inspect}" do
19
- it "returns #{expected}" do
20
- SS[*a].subset?(SS[*b]).should == expected
21
- end
22
- end
23
- end
24
- end
25
-
26
- describe "#proper_subset?" do
27
- [
28
- [[], [], false],
29
- [["A"], [], false],
30
- [[], ["A"], true],
31
- [["A"], ["A"], false],
32
- [%w[A B C], ["B"], false],
33
- [["B"], %w[A B C], true],
34
- [%w[A B C], %w[A C], false],
35
- [%w[A C], %w[A B C], true],
36
- [%w[A B C], %w[A B C], false],
37
- [%w[A B C], %w[A B C D], true],
38
- [%w[A B C D], %w[A B C], false],
39
- ].each do |a, b, expected|
40
- context "for #{a.inspect} and #{b.inspect}" do
41
- it "returns #{expected}" do
42
- SS[*a].proper_subset?(SS[*b]).should == expected
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- describe "#superset?" do
5
- [
6
- [[], [], true],
7
- [["A"], [], true],
8
- [[], ["A"], false],
9
- [["A"], ["A"], true],
10
- [%w[A B C], ["B"], true],
11
- [["B"], %w[A B C], false],
12
- [%w[A B C], %w[A C], true],
13
- [%w[A C], %w[A B C], false],
14
- [%w[A B C], %w[A B C], true],
15
- [%w[A B C], %w[A B C D], false],
16
- [%w[A B C D], %w[A B C], true],
17
- ].each do |a, b, expected|
18
- context "for #{a.inspect} and #{b.inspect}" do
19
- it "returns #{expected}" do
20
- SS[*a].superset?(SS[*b]).should == expected
21
- end
22
- end
23
- end
24
- end
25
-
26
- describe "#proper_superset?" do
27
- [
28
- [[], [], false],
29
- [["A"], [], true],
30
- [[], ["A"], false],
31
- [["A"], ["A"], false],
32
- [%w[A B C], ["B"], true],
33
- [["B"], %w[A B C], false],
34
- [%w[A B C], %w[A C], true],
35
- [%w[A C], %w[A B C], false],
36
- [%w[A B C], %w[A B C], false],
37
- [%w[A B C], %w[A B C D], false],
38
- [%w[A B C D], %w[A B C], true],
39
- ].each do |a, b, expected|
40
- context "for #{a.inspect} and #{b.inspect}" do
41
- it "returns #{expected}" do
42
- SS[*a].proper_superset?(SS[*b]).should == expected
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,54 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet 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
- ].each do |values, number, expected|
11
- context "#{number} from #{values.inspect}" do
12
- let(:sorted_set) { SS[*values] }
13
-
14
- it "preserves the original" do
15
- sorted_set.take(number)
16
- sorted_set.should eql(SS[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- sorted_set.take(number).should eql(SS[*expected])
21
- end
22
- end
23
- end
24
-
25
- context "when argument is at least size of receiver" do
26
- let(:sorted_set) { SS[6, 7, 8, 9] }
27
- it "returns self" do
28
- sorted_set.take(sorted_set.size).should be(sorted_set)
29
- sorted_set.take(sorted_set.size + 1).should be(sorted_set)
30
- end
31
- end
32
-
33
- context "when the set has a custom order" do
34
- let(:sorted_set) { SS.new([1, 2, 3]) { |x| -x }}
35
- it "maintains the custom order" do
36
- sorted_set.take(1).to_a.should == [3]
37
- sorted_set.take(2).to_a.should == [3, 2]
38
- sorted_set.take(3).to_a.should == [3, 2, 1]
39
- end
40
-
41
- it "keeps the comparator even when set is cleared" do
42
- s = sorted_set.take(0)
43
- s.add(4).add(5).add(6).to_a.should == [6, 5, 4]
44
- end
45
- end
46
-
47
- context "when called on a subclass" do
48
- it "should return an instance of the subclass" do
49
- subclass = Class.new(Immutable::SortedSet)
50
- subclass.new([1,2,3]).take(1).class.should be(subclass)
51
- end
52
- end
53
- end
54
- end
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet 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
- context "on #{values.inspect}" do
11
- let(:sorted_set) { SS[*values] }
12
-
13
- context "with a block" do
14
- it "returns #{expected.inspect}" do
15
- sorted_set.take_while { |item| item < "C" }.should eql(SS[*expected])
16
- end
17
-
18
- it "preserves the original" do
19
- sorted_set.take_while { |item| item < "C" }
20
- sorted_set.should eql(SS[*values])
21
- end
22
- end
23
-
24
- context "without a block" do
25
- it "returns an Enumerator" do
26
- sorted_set.take_while.class.should be(Enumerator)
27
- sorted_set.take_while.each { |item| item < "C" }.should eql(SS[*expected])
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- describe "#to_set" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- context "on #{values.inspect}" do
11
- it "returns a set with the same values" do
12
- SS[*values].to_set.should eql(S[*values])
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,58 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::SortedSet do
4
- [:union, :|, :+, :merge].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], [], []],
8
- [["A"], [], ["A"]],
9
- [["A"], ["A"], ["A"]],
10
- [%w[A B C], [], %w[A B C]],
11
- [%w[A C E G X], %w[B C D E H M], %w[A B C D E G H M X]]
12
- ].each do |a, b, expected|
13
- context "for #{a.inspect} and #{b.inspect}" do
14
- it "returns #{expected.inspect}" do
15
- SS[*a].send(method, SS[*b]).should eql(SS[*expected])
16
- end
17
- end
18
-
19
- context "for #{b.inspect} and #{a.inspect}" do
20
- it "returns #{expected.inspect}" do
21
- SS[*b].send(method, SS[*a]).should eql(SS[*expected])
22
- end
23
- end
24
- end
25
- end
26
- end
27
-
28
- describe :union do
29
- it "filters out duplicates when passed an Array" do
30
- sorted_set = SS['A', 'B', 'C', 'D'].union(['A', 'A', 'A', 'C', 'A', 'B', 'E'])
31
- expect(sorted_set.to_a).to eq(['A', 'B', 'C', 'D', 'E'])
32
- end
33
-
34
- it "doesn't mutate an Array which is passed in" do
35
- array = [3,2,1,3]
36
- sorted_set = SS[1,2,5].union(array)
37
- expect(array).to eq([3,2,1,3])
38
- end
39
-
40
- context "on a set ordered by a comparator" do
41
- # Completely different code is executed when #union is called on a SS
42
- # with a comparator block, so we should repeat all the same tests
43
-
44
- it "still filters out duplicates when passed an Array" do
45
- sorted_set = SS.new([1,2,3]) { |x,y| (x%7) <=> (y%7) }
46
- sorted_set = sorted_set.union([7,8,9])
47
- expect(sorted_set.to_a).to eq([7,1,2,3])
48
- end
49
-
50
- it "still doesn't mutate an Array which is passed in" do
51
- array = [3,2,1,3]
52
- sorted_set = SS.new([1,2,5]) { |x,y| y <=> x }
53
- sorted_set = sorted_set.union(array)
54
- expect(array).to eq([3,2,1,3])
55
- end
56
- end
57
- end
58
- end