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,53 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe ".new" do
5
- it "initializes a new set" do
6
- set = S.new([1,2,3])
7
- set.size.should be(3)
8
- [1,2,3].each { |n| set.include?(n).should == true }
9
- end
10
-
11
- it "accepts a Range" do
12
- set = S.new(1..3)
13
- set.size.should be(3)
14
- [1,2,3].each { |n| set.include?(n).should == true }
15
- end
16
-
17
- it "returns a Set which doesn't change even if the initializer is mutated" do
18
- array = [1,2,3]
19
- set = S.new([1,2,3])
20
- array.push('BAD')
21
- set.should eql(S[1,2,3])
22
- end
23
-
24
- context "from a subclass" do
25
- it "returns a frozen instance of the subclass" do
26
- subclass = Class.new(Immutable::Set)
27
- instance = subclass.new(["some", "values"])
28
- instance.class.should be subclass
29
- instance.should be_frozen
30
- end
31
- end
32
-
33
- it "is amenable to overriding of #initialize" do
34
- class SnazzySet < Immutable::Set
35
- def initialize
36
- super(['SNAZZY!!!'])
37
- end
38
- end
39
-
40
- set = SnazzySet.new
41
- set.size.should be(1)
42
- set.include?('SNAZZY!!!').should == true
43
- end
44
- end
45
-
46
- describe "[]" do
47
- it "accepts any number of arguments and initializes a new set" do
48
- set = S[1,2,3,4]
49
- set.size.should be(4)
50
- [1,2,3,4].each { |n| set.include?(n).should == true }
51
- end
52
- end
53
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#none?" do
5
- context "when empty" do
6
- it "with a block returns true" do
7
- S.empty.none? {}.should == true
8
- end
9
-
10
- it "with no block returns true" do
11
- S.empty.none?.should == true
12
- end
13
- end
14
-
15
- context "when not empty" do
16
- context "with a block" do
17
- let(:set) { S["A", "B", "C", nil] }
18
-
19
- ["A", "B", "C", nil].each do |value|
20
- it "returns false if the block ever returns true (#{value.inspect})" do
21
- set.none? { |item| item == value }.should == false
22
- end
23
- end
24
-
25
- it "returns true if the block always returns false" do
26
- set.none? { |item| item == "D" }.should == true
27
- end
28
-
29
- it "stops iterating as soon as the block returns true" do
30
- yielded = []
31
- set.none? { |item| yielded << item; true }
32
- yielded.size.should == 1
33
- end
34
- end
35
-
36
- context "with no block" do
37
- it "returns false if any value is truthy" do
38
- S[nil, false, true, "A"].none?.should == false
39
- end
40
-
41
- it "returns true if all values are falsey" do
42
- S[nil, false].none?.should == true
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#one?" do
5
- context "when empty" do
6
- it "with a block returns false" do
7
- S.empty.one? {}.should == false
8
- end
9
-
10
- it "with no block returns false" do
11
- S.empty.one?.should == false
12
- end
13
- end
14
-
15
- context "when not empty" do
16
- context "with a block" do
17
- let(:set) { S["A", "B", "C"] }
18
-
19
- it "returns false if the block returns true more than once" do
20
- set.one? { |item| true }.should == false
21
- end
22
-
23
- it "returns false if the block never returns true" do
24
- set.one? { |item| false }.should == false
25
- end
26
-
27
- it "returns true if the block only returns true once" do
28
- set.one? { |item| item == "A" }.should == true
29
- end
30
- end
31
-
32
- context "with no block" do
33
- it "returns false if more than one value is truthy" do
34
- S[nil, true, "A"].one?.should == false
35
- end
36
-
37
- it "returns true if only one value is truthy" do
38
- S[nil, true, false].one?.should == true
39
- end
40
-
41
- it "returns false if no values are truthy" do
42
- S[nil, false].one?.should == false
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,52 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#partition" do
5
- [
6
- [[], [], []],
7
- [[1], [1], []],
8
- [[1, 2], [1], [2]],
9
- [[1, 2, 3], [1, 3], [2]],
10
- [[1, 2, 3, 4], [1, 3], [2, 4]],
11
- [[2, 3, 4], [3], [2, 4]],
12
- [[3, 4], [3], [4]],
13
- [[4], [], [4]],
14
- ].each do |values, expected_matches, expected_remainder|
15
- context "on #{values.inspect}" do
16
- let(:set) { S[*values] }
17
-
18
- context "with a block" do
19
- let(:result) { set.partition(&:odd?) }
20
- let(:matches) { result.first }
21
- let(:remainder) { result.last }
22
-
23
- it "preserves the original" do
24
- result
25
- set.should eql(S[*values])
26
- end
27
-
28
- it "returns a frozen array with two items" do
29
- result.class.should be(Array)
30
- result.should be_frozen
31
- result.size.should be(2)
32
- end
33
-
34
- it "correctly identifies the matches" do
35
- matches.should eql(S[*expected_matches])
36
- end
37
-
38
- it "correctly identifies the remainder" do
39
- remainder.should eql(S[*expected_remainder])
40
- end
41
- end
42
-
43
- describe "without a block" do
44
- it "returns an Enumerator" do
45
- set.partition.class.should be(Enumerator)
46
- set.partition.each(&:odd?).should eql([S.new(expected_matches), S.new(expected_remainder)])
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#product" do
5
- [
6
- [[], 1],
7
- [[2], 2],
8
- [[1, 3, 5, 7, 11], 1155],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- let(:set) { S[*values] }
12
-
13
- it "returns #{expected.inspect}" do
14
- set.product.should == expected
15
- end
16
-
17
- it "doesn't change the original Set" do
18
- set.should eql(S.new(values))
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,55 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:reduce, :inject].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], 10, 10],
8
- [[1], 10, 9],
9
- [[1, 2, 3], 10, 4],
10
- ].each do |values, initial, expected|
11
- describe "on #{values.inspect}" do
12
- let(:set) { S[*values] }
13
-
14
- context "with an initial value of #{initial}" do
15
- context "and a block" do
16
- it "returns #{expected.inspect}" do
17
- set.send(method, initial) { |memo, item| memo - item }.should == expected
18
- end
19
- end
20
- end
21
- end
22
- end
23
-
24
- [
25
- [[], nil],
26
- [[1], 1],
27
- [[1, 2, 3], 6],
28
- ].each do |values, expected|
29
- describe "on #{values.inspect}" do
30
- let(:set) { S[*values] }
31
-
32
- context "with no initial value" do
33
- context "and a block" do
34
- it "returns #{expected.inspect}" do
35
- set.send(method) { |memo, item| memo + item }.should == expected
36
- end
37
- end
38
- end
39
- end
40
- end
41
-
42
- describe "with no block and a symbol argument" do
43
- it "uses the symbol as the name of a method to reduce with" do
44
- S[1, 2, 3].reduce(:+).should == 6
45
- end
46
- end
47
-
48
- describe "with no block and a string argument" do
49
- it "uses the string as the name of a method to reduce with" do
50
- S[1, 2, 3].reduce('+').should == 6
51
- end
52
- end
53
- end
54
- end
55
- end
@@ -1,50 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:reject, :delete_if].each do |method|
5
- describe "##{method}" do
6
- let(:set) { S["A", "B", "C"] }
7
-
8
- context "when nothing matches" do
9
- it "returns self" do
10
- set.send(method) { |item| false }.should equal(set)
11
- end
12
- end
13
-
14
- context "when only some things match" do
15
- context "with a block" do
16
- let(:result) { set.send(method) { |item| item == "A" }}
17
-
18
- it "preserves the original" do
19
- result
20
- set.should eql(S["A", "B", "C"])
21
- end
22
-
23
- it "returns a set with the matching values" do
24
- result.should eql(S["B", "C"])
25
- end
26
- end
27
-
28
- context "with no block" do
29
- it "returns self" do
30
- set.send(method).class.should be(Enumerator)
31
- set.send(method).each { |item| item == "A" }.should == S["B", "C"]
32
- end
33
- end
34
- end
35
-
36
- context "on a large set, with many combinations of input" do
37
- it "still works" do
38
- array = (1..1000).to_a
39
- set = S.new(array)
40
- [0, 10, 100, 200, 500, 800, 900, 999, 1000].each do |threshold|
41
- result = set.send(method) { |item| item > threshold }
42
- result.size.should == threshold
43
- 1.upto(threshold) { |n| result.include?(n).should == true }
44
- (threshold+1).upto(1000) { |n| result.include?(n).should == false }
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
- require "set"
3
-
4
- describe Immutable::Set do
5
- let(:set) { S["A", "B", "C"] }
6
-
7
- describe "#reverse_each" do
8
- let(:reverse_each) { set.reverse_each(&block) }
9
-
10
- context "without a block" do
11
- let(:block) { nil }
12
-
13
- it "returns an Enumerator" do
14
- expect(reverse_each.class).to be(Enumerator)
15
- expect(reverse_each.to_a).to eq(set.to_a.reverse)
16
- end
17
- end
18
-
19
- context "with an empty block" do
20
- let(:block) { ->(item) {} }
21
-
22
- it "returns self" do
23
- expect(reverse_each).to be(set)
24
- end
25
- end
26
-
27
- context "with a block" do
28
- let(:items) { ::Set.new }
29
- let(:values) { ::Set.new(%w[A B C]) }
30
- let(:block) { ->(item) { items << item } }
31
- before(:each) { reverse_each }
32
-
33
- it "yields all values" do
34
- expect(items).to eq(values)
35
- end
36
- end
37
- end
38
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#sample" do
5
- let(:set) { S.new(1..10) }
6
-
7
- it "returns a randomly chosen item" do
8
- chosen = 100.times.map { set.sample }
9
- chosen.each { |item| set.include?(item).should == true }
10
- set.each { |item| chosen.include?(item).should == true }
11
- end
12
- end
13
- end
@@ -1,73 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:select, :find_all].each do |method|
5
- describe "##{method}" do
6
- let(:set) { S["A", "B", "C"] }
7
-
8
- context "when everything matches" do
9
- it "returns self" do
10
- set.send(method) { |item| true }.should equal(set)
11
- end
12
- end
13
-
14
- context "when only some things match" do
15
- context "with a block" do
16
- let(:result) { set.send(method) { |item| item == "A" }}
17
-
18
- it "preserves the original" do
19
- result
20
- set.should eql(S["A", "B", "C"])
21
- end
22
-
23
- it "returns a set with the matching values" do
24
- result.should eql(S["A"])
25
- end
26
- end
27
-
28
- context "with no block" do
29
- it "returns an Enumerator" do
30
- set.send(method).class.should be(Enumerator)
31
- set.send(method).each { |item| item == "A" }.should eql(S["A"])
32
- end
33
- end
34
- end
35
-
36
- context "when nothing matches" do
37
- let(:result) { set.send(method) { |item| false }}
38
-
39
- it "preserves the original" do
40
- result
41
- set.should eql(S["A", "B", "C"])
42
- end
43
-
44
- it "returns the canonical empty set" do
45
- result.should equal(Immutable::EmptySet)
46
- end
47
- end
48
-
49
- context "from a subclass" do
50
- it "returns an instance of the same class" do
51
- subclass = Class.new(Immutable::Set)
52
- instance = subclass.new(['A', 'B', 'C'])
53
- instance.send(method) { true }.class.should be(subclass)
54
- instance.send(method) { false }.class.should be(subclass)
55
- instance.send(method) { rand(2) == 0 }.class.should be(subclass)
56
- end
57
- end
58
-
59
- it "works on a large set, with many combinations of input" do
60
- items = (1..1000).to_a
61
- original = S.new(items)
62
- 30.times do
63
- threshold = rand(1000)
64
- result = original.send(method) { |item| item <= threshold }
65
- result.size.should == threshold
66
- result.each { |item| item.should <= threshold }
67
- (threshold+1).upto(1000) { |item| result.include?(item).should == false }
68
- end
69
- original.should eql(S.new(items))
70
- end
71
- end
72
- end
73
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set 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
- S[*values].send(method).should == result
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,59 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set 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(:set) { S[*values] }
16
-
17
- describe "with a block" do
18
- let(:result) { set.send(method, &comparator) }
19
-
20
- it "returns #{expected.inspect}" do
21
- result.should eql(SS.new(expected, &comparator))
22
- result.to_a.should == expected
23
- end
24
-
25
- it "doesn't change the original Set" do
26
- result
27
- set.should eql(S.new(values))
28
- end
29
- end
30
-
31
- describe "without a block" do
32
- let(:result) { set.send(method) }
33
-
34
- it "returns #{expected.sort.inspect}" do
35
- result.should eql(SS[*expected])
36
- result.to_a.should == expected.sort
37
- end
38
-
39
- it "doesn't change the original Set" do
40
- result
41
- set.should eql(S.new(values))
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
48
-
49
- describe "#sort_by" do
50
- it "only calls the passed block once for each item" do
51
- count = 0
52
- fn = lambda { |x| count += 1; -x }
53
- items = 100.times.collect { rand(10000) }.uniq
54
-
55
- S[*items].sort_by(&fn).to_a.should == items.sort.reverse
56
- count.should == items.length
57
- end
58
- end
59
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:subset?, :<=].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], [], true],
8
- [["A"], [], false],
9
- [[], ["A"], true],
10
- [["A"], ["A"], true],
11
- [%w[A B C], ["B"], false],
12
- [["B"], %w[A B C], true],
13
- [%w[A B C], %w[A C], false],
14
- [%w[A C], %w[A B C], true],
15
- [%w[A B C], %w[A B C], true],
16
- [%w[A B C], %w[A B C D], true],
17
- [%w[A B C D], %w[A B C], false],
18
- ].each do |a, b, expected|
19
- describe "for #{a.inspect} and #{b.inspect}" do
20
- it "returns #{expected}" do
21
- S[*a].send(method, S[*b]).should == expected
22
- end
23
- end
24
- end
25
- end
26
- end
27
-
28
- [:proper_subset?, :<].each do |method|
29
- describe "##{method}" do
30
- [
31
- [[], [], false],
32
- [["A"], [], false],
33
- [[], ["A"], true],
34
- [["A"], ["A"], false],
35
- [%w[A B C], ["B"], false],
36
- [["B"], %w[A B C], true],
37
- [%w[A B C], %w[A C], false],
38
- [%w[A C], %w[A B C], true],
39
- [%w[A B C], %w[A B C], false],
40
- [%w[A B C], %w[A B C D], true],
41
- [%w[A B C D], %w[A B C], false],
42
- ].each do |a, b, expected|
43
- describe "for #{a.inspect} and #{b.inspect}" do
44
- it "returns #{expected}" do
45
- S[*a].send(method, S[*b]).should == expected
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#sum" do
5
- [
6
- [[], 0],
7
- [[2], 2],
8
- [[1, 3, 5, 7, 11], 27],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- let(:set) { S[*values] }
12
-
13
- it "returns #{expected.inspect}" do
14
- set.sum.should == expected
15
- end
16
-
17
- it "doesn't change the original Set" do
18
- set.should eql(S.new(values))
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:superset?, :>=].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], [], true],
8
- [["A"], [], true],
9
- [[], ["A"], false],
10
- [["A"], ["A"], true],
11
- [%w[A B C], ["B"], true],
12
- [["B"], %w[A B C], false],
13
- [%w[A B C], %w[A C], true],
14
- [%w[A C], %w[A B C], false],
15
- [%w[A B C], %w[A B C], true],
16
- [%w[A B C], %w[A B C D], false],
17
- [%w[A B C D], %w[A B C], true],
18
- ].each do |a, b, expected|
19
- describe "for #{a.inspect} and #{b.inspect}" do
20
- it "returns #{expected}" do
21
- S[*a].send(method, S[*b]).should == expected
22
- end
23
- end
24
- end
25
- end
26
- end
27
-
28
- [:proper_superset?, :>].each do |method|
29
- describe "##{method}" do
30
- [
31
- [[], [], false],
32
- [["A"], [], true],
33
- [[], ["A"], false],
34
- [["A"], ["A"], false],
35
- [%w[A B C], ["B"], true],
36
- [["B"], %w[A B C], false],
37
- [%w[A B C], %w[A C], true],
38
- [%w[A C], %w[A B C], false],
39
- [%w[A B C], %w[A B C], false],
40
- [%w[A B C], %w[A B C D], false],
41
- [%w[A B C D], %w[A B C], true],
42
- ].each do |a, b, expected|
43
- describe "for #{a.inspect} and #{b.inspect}" do
44
- it "returns #{expected}" do
45
- S[*a].send(method, S[*b]).should == expected
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:to_a, :entries].each do |method|
5
- describe "##{method}" do
6
- ('a'..'z').each do |letter|
7
- let(:values) { ('a'..letter).to_a }
8
- let(:set) { S.new(values) }
9
- let(:result) { set.send(method) }
10
-
11
- context "on 'a'..'#{letter}'" do
12
- it "returns an equivalent array" do
13
- result.sort.should == values.sort
14
- end
15
-
16
- it "doesn't change the original Set" do
17
- result
18
- set.should eql(S[*values])
19
- end
20
-
21
- it "returns a mutable array" do
22
- expect(result.last).to_not eq("The End")
23
- result << "The End"
24
- result.last.should == "The End"
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end