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,60 +0,0 @@
1
- require "spec_helper"
2
- require 'set'
3
-
4
- describe Immutable::Set do
5
- [:include?, :member?].each do |method|
6
- describe "##{method}" do
7
- let(:set) { S["A", "B", "C", 2.0, nil] }
8
-
9
- ["A", "B", "C", 2.0, nil].each do |value|
10
- it "returns true for an existing value (#{value.inspect})" do
11
- set.send(method, value).should == true
12
- end
13
- end
14
-
15
- it "returns false for a non-existing value" do
16
- set.send(method, "D").should == false
17
- end
18
-
19
- it "returns true even if existing value is nil" do
20
- S[nil].include?(nil).should == true
21
- end
22
-
23
- it "returns true even if existing value is false" do
24
- S[false].include?(false).should == true
25
- end
26
-
27
- it "returns false for a mutable item which is mutated after adding" do
28
- item = ['mutable']
29
- item = [rand(1000000)] while (item.hash.abs & 31 == [item[0], 'HOSED!'].hash.abs & 31)
30
- set = S[item]
31
- item.push('HOSED!')
32
- set.include?(item).should == false
33
- end
34
-
35
- it "uses #eql? for equality" do
36
- set.send(method, 2).should == false
37
- end
38
-
39
- it "returns the right answers after a lot of addings and removings" do
40
- array, set, rb_set = [], S.new, ::Set.new
41
-
42
- 1000.times do
43
- if rand(2) == 0
44
- array << (item = rand(10000))
45
- rb_set.add(item)
46
- set = set.add(item)
47
- set.include?(item).should == true
48
- else
49
- item = array.sample
50
- rb_set.delete(item)
51
- set = set.delete(item)
52
- set.include?(item).should == false
53
- end
54
- end
55
-
56
- array.each { |item| set.include?(item).should == rb_set.include?(item) }
57
- end
58
- end
59
- end
60
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#inspect" do
5
- [
6
- [[], "Immutable::Set[]"],
7
- [["A"], 'Immutable::Set["A"]'],
8
- ].each do |values, expected|
9
- describe "on #{values.inspect}" do
10
- let(:set) { S[*values] }
11
-
12
- it "returns #{expected.inspect}" do
13
- set.inspect.should == expected
14
- end
15
-
16
- it "returns a string which can be eval'd to get an equivalent set" do
17
- eval(set.inspect).should eql(set)
18
- end
19
- end
20
- end
21
-
22
- describe 'on ["A", "B", "C"]' do
23
- let(:set) { S["A", "B", "C"] }
24
-
25
- it "returns a programmer-readable representation of the set contents" do
26
- set.inspect.should match(/^Immutable::Set\["[A-C]", "[A-C]", "[A-C]"\]$/)
27
- end
28
-
29
- it "returns a string which can be eval'd to get an equivalent set" do
30
- eval(set.inspect).should eql(set)
31
- end
32
- end
33
-
34
- context "from a subclass" do
35
- MySet = Class.new(Immutable::Set)
36
- let(:set) { MySet[1, 2] }
37
-
38
- it "returns a programmer-readable representation of the set contents" do
39
- set.inspect.should match(/^MySet\[[1-2], [1-2]\]$/)
40
- end
41
-
42
- it "returns a string which can be eval'd to get an equivalent set" do
43
- eval(set.inspect).should eql(set)
44
- end
45
- end
46
- end
47
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#intersect?" do
5
- [
6
- [[], [], false],
7
- [["A"], [], false],
8
- [[], ["A"], false],
9
- [["A"], ["A"], true],
10
- [%w[A B C], ["B"], true],
11
- [["B"], %w[A B C], true],
12
- [%w[A B C], %w[D E], false],
13
- [%w[F G H I], %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], true],
16
- [%w[D E F G], %w[A B C], false],
17
- ].each do |a, b, expected|
18
- describe "for #{a.inspect} and #{b.inspect}" do
19
- it "returns #{expected}" do
20
- S[*a].intersect?(S[*b]).should be(expected)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,52 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:intersection, :&].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], [], []],
8
- [["A"], [], []],
9
- [["A"], ["A"], ["A"]],
10
- [%w[A B C], ["B"], ["B"]],
11
- [%w[A B C], %w[A C], %w[A C]],
12
- ].each do |a, b, expected|
13
- context "for #{a.inspect} and #{b.inspect}" do
14
- let(:set_a) { S[*a] }
15
- let(:set_b) { S[*b] }
16
-
17
- it "returns #{expected.inspect}, without changing the original Sets" do
18
- set_a.send(method, set_b).should eql(S[*expected])
19
- set_a.should eql(S.new(a))
20
- set_b.should eql(S.new(b))
21
- end
22
- end
23
-
24
- context "for #{b.inspect} and #{a.inspect}" do
25
- let(:set_a) { S[*a] }
26
- let(:set_b) { S[*b] }
27
-
28
- it "returns #{expected.inspect}, without changing the original Sets" do
29
- set_b.send(method, set_a).should eql(S[*expected])
30
- set_a.should eql(S.new(a))
31
- set_b.should eql(S.new(b))
32
- end
33
- end
34
-
35
- context "when passed a Ruby Array" do
36
- it "returns the expected Set" do
37
- S[*a].send(method, b.freeze).should eql(S[*expected])
38
- end
39
- end
40
- end
41
-
42
- it "returns results consistent with Array#&" do
43
- 50.times do
44
- array1 = rand(100).times.map { rand(1000000).to_s(16) }
45
- array2 = rand(100).times.map { rand(1000000).to_s(16) }
46
- result = S.new(array1).send(method, S.new(array2))
47
- result.to_a.sort.should eql((array1 & array2).sort)
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,64 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#join" do
5
- context "with a separator" do
6
- [
7
- [[], ""],
8
- [["A"], "A"],
9
- [[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)], "A|B|C"]
10
- ].each do |values, expected|
11
- context "on #{values.inspect}" do
12
- let(:set) { S[*values] }
13
-
14
- it "preserves the original" do
15
- set.join("|")
16
- set.should eql(S[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- set.join("|").should eql(expected)
21
- end
22
- end
23
- end
24
- end
25
-
26
- context "without a separator" do
27
- [
28
- [[], ""],
29
- [["A"], "A"],
30
- [[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)], "ABC"]
31
- ].each do |values, expected|
32
- context "on #{values.inspect}" do
33
- let(:set) { S[*values] }
34
-
35
- it "preserves the original" do
36
- set.join
37
- set.should eql(S[*values])
38
- end
39
-
40
- it "returns #{expected.inspect}" do
41
- set.join.should eql(expected)
42
- end
43
- end
44
- end
45
- end
46
-
47
- context "without a separator (with global default separator set)" do
48
- before { $, = '**' }
49
- let(:set) { S[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)] }
50
- after { $, = nil }
51
-
52
- context "on ['A', 'B', 'C']" do
53
- it "preserves the original" do
54
- set.join
55
- set.should eql(S[DeterministicHash.new("A", 1), DeterministicHash.new("B", 2), DeterministicHash.new("C", 3)])
56
- end
57
-
58
- it "returns #{@expected.inspect}" do
59
- set.join.should == "A**B**C"
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,59 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- [:map, :collect].each do |method|
5
- describe "##{method}" do
6
- context "when empty" do
7
- it "returns self" do
8
- S.empty.send(method) {}.should equal(S.empty)
9
- end
10
- end
11
-
12
- context "when not empty" do
13
- let(:set) { S["A", "B", "C"] }
14
-
15
- context "with a block" do
16
- it "preserves the original values" do
17
- set.send(method, &:downcase)
18
- set.should eql(S["A", "B", "C"])
19
- end
20
-
21
- it "returns a new set with the mapped values" do
22
- set.send(method, &:downcase).should eql(S["a", "b", "c"])
23
- end
24
- end
25
-
26
- context "with no block" do
27
- it "returns an Enumerator" do
28
- set.send(method).class.should be(Enumerator)
29
- set.send(method).each(&:downcase).should == S['a', 'b', 'c']
30
- end
31
- end
32
- end
33
-
34
- context "from a subclass" do
35
- it "returns an instance of the subclass" do
36
- subclass = Class.new(Immutable::Set)
37
- instance = subclass['a', 'b']
38
- instance.map { |item| item.upcase }.class.should be(subclass)
39
- end
40
- end
41
-
42
- context "when multiple items map to the same value" do
43
- it "filters out the duplicates" do
44
- set = S.new('aa'..'zz')
45
- result = set.map { |s| s[0] }
46
- result.should eql(Immutable::Set.new('a'..'z'))
47
- result.size.should == 26
48
- end
49
- end
50
-
51
- it "works on large sets" do
52
- set = S.new(1..1000)
53
- result = set.map { |x| x * 10 }
54
- result.size.should == 1000
55
- 1.upto(1000) { |n| result.include?(n * 10).should == true }
56
- end
57
- end
58
- end
59
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#marshal_dump/#marshal_load" do
5
- let(:ruby) { File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"]) }
6
-
7
- let(:child_cmd) do
8
- %Q|#{ruby} -I lib -r immutable -e 'set = Immutable::Set[:one, :two]; $stdout.write(Marshal.dump(set))'|
9
- end
10
-
11
- let(:reloaded_hash) do
12
- IO.popen(child_cmd, "r+") do |child|
13
- reloaded_hash = Marshal.load(child)
14
- child.close
15
- reloaded_hash
16
- end
17
- end
18
-
19
- it "can survive dumping and loading into a new process" do
20
- reloaded_hash.should eql(S[:one, :two])
21
- end
22
-
23
- it "is still possible to test items by key after loading" do
24
- reloaded_hash.should include :one
25
- reloaded_hash.should include :two
26
- end
27
- end
28
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#max" do
5
- context "with a block" do
6
- [
7
- [[], nil],
8
- [["A"], "A"],
9
- [%w[Ichi Ni San], "Ichi"],
10
- ].each do |values, expected|
11
- describe "on #{values.inspect}" do
12
- let(:set) { S[*values] }
13
- let(:result) { set.max { |maximum, item| maximum.length <=> item.length }}
14
-
15
- it "returns #{expected.inspect}" do
16
- result.should == expected
17
- end
18
- end
19
- end
20
- end
21
-
22
- context "without a block" do
23
- [
24
- [[], nil],
25
- [["A"], "A"],
26
- [%w[Ichi Ni San], "San"],
27
- ].each do |values, expected|
28
- describe "on #{values.inspect}" do
29
- it "returns #{expected.inspect}" do
30
- S[*values].max.should == expected
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#min" do
5
- context "with a block" do
6
- [
7
- [[], nil],
8
- [["A"], "A"],
9
- [%w[Ichi Ni San], "Ni"],
10
- ].each do |values, expected|
11
- describe "on #{values.inspect}" do
12
- let(:set) { S[*values] }
13
- let(:result) { set.min { |minimum, item| minimum.length <=> item.length }}
14
-
15
- it "returns #{expected.inspect}" do
16
- result.should == expected
17
- end
18
- end
19
- end
20
- end
21
-
22
- context "without a block" do
23
- [
24
- [[], nil],
25
- [["A"], "A"],
26
- [%w[Ichi Ni San], "Ichi"],
27
- ].each do |values, expected|
28
- describe "on #{values.inspect}" do
29
- it "returns #{expected.inspect}" do
30
- S[*values].min.should == expected
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -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