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,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#none?" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { BigList.none? { false } }.should_not raise_error
8
- end
9
- end
10
-
11
- context "when empty" do
12
- it "with a block returns true" do
13
- L.empty.none? {}.should == true
14
- end
15
-
16
- it "with no block returns true" do
17
- L.empty.none?.should == true
18
- end
19
- end
20
-
21
- context "when not empty" do
22
- context "with a block" do
23
- let(:list) { L["A", "B", "C", nil] }
24
-
25
- ["A", "B", "C", nil].each do |value|
26
- it "returns false if the block ever returns true (#{value.inspect})" do
27
- list.none? { |item| item == value }.should == false
28
- end
29
- end
30
-
31
- it "returns true if the block always returns false" do
32
- list.none? { |item| item == "D" }.should == true
33
- end
34
- end
35
-
36
- context "with no block" do
37
- it "returns false if any value is truthy" do
38
- L[nil, false, true, "A"].none?.should == false
39
- end
40
-
41
- it "returns true if all values are falsey" do
42
- L[nil, false].none?.should == true
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,49 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#one?" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { BigList.one? { false } }.should_not raise_error
8
- end
9
- end
10
-
11
- context "when empty" do
12
- it "with a block returns false" do
13
- L.empty.one? {}.should == false
14
- end
15
-
16
- it "with no block returns false" do
17
- L.empty.one?.should == false
18
- end
19
- end
20
-
21
- context "when not empty" do
22
- context "with a block" do
23
- let(:list) { L["A", "B", "C"] }
24
-
25
- it "returns false if the block returns true more than once" do
26
- list.one? { |item| true }.should == false
27
- end
28
-
29
- it "returns false if the block never returns true" do
30
- list.one? { |item| false }.should == false
31
- end
32
-
33
- it "returns true if the block only returns true once" do
34
- list.one? { |item| item == "A" }.should == true
35
- end
36
- end
37
-
38
- context "with no block" do
39
- it "returns false if more than one value is truthy" do
40
- L[nil, true, "A"].one?.should == false
41
- end
42
-
43
- it "returns true if only one value is truthy" do
44
- L[nil, true, false].one?.should == true
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,115 +0,0 @@
1
- require "spec_helper"
2
- require "thread"
3
-
4
- describe Immutable::List do
5
- describe "#partition" do
6
- it "is lazy" do
7
- -> { Immutable.stream { fail }.partition }.should_not raise_error
8
- end
9
-
10
- it "calls the passed block only once for each item" do
11
- count = 0
12
- a,b = L[1, 2, 3].partition { |item| count += 1; item.odd? }
13
- (a.size + b.size).should be(3) # force realization of lazy lists
14
- count.should be(3)
15
- end
16
-
17
- # note: Lists are not as lazy as they could be!
18
- # they always realize elements a bit ahead of the current one
19
-
20
- it "returns a lazy list of items for which predicate is true" do
21
- count = 0
22
- a,b = L[1, 2, 3, 4].partition { |item| count += 1; item.odd? }
23
- a.take(1).should == [1]
24
- count.should be(3) # would be 1 if lists were lazier
25
- a.take(2).should == [1, 3]
26
- count.should be(4) # would be 3 if lists were lazier
27
- end
28
-
29
- it "returns a lazy list of items for which predicate is false" do
30
- count = 0
31
- a,b = L[1, 2, 3, 4].partition { |item| count += 1; item.odd? }
32
- b.take(1).should == [2]
33
- count.should be(4) # would be 2 if lists were lazier
34
- b.take(2).should == [2, 4]
35
- count.should be(4)
36
- end
37
-
38
- it "calls the passed block only once for each item, even with multiple threads" do
39
- mutex = Mutex.new
40
- yielded = [] # record all the numbers yielded to the block, to make sure each is yielded only once
41
- list = Immutable.iterate(0) do |n|
42
- sleep(rand / 500) # give another thread a chance to get in
43
- mutex.synchronize { yielded << n }
44
- sleep(rand / 500)
45
- n + 1
46
- end
47
- left, right = list.partition(&:odd?)
48
-
49
- 10.times.collect do |i|
50
- Thread.new do
51
- # half of the threads will consume the "left" lazy list, while half consume
52
- # the "right" lazy list
53
- # make sure that only one thread will run the above "iterate" block at a
54
- # time, regardless
55
- if i % 2 == 0
56
- left.take(100).sum.should == 10000
57
- else
58
- right.take(100).sum.should == 9900
59
- end
60
- end
61
- end.each(&:join)
62
-
63
- # if no threads "stepped on" each other, the following should be true
64
- # make some allowance for "lazy" lists which actually realize a little bit ahead:
65
- (200..203).include?(yielded.size).should == true
66
- yielded.should == (0..(yielded.size-1)).to_a
67
- end
68
-
69
- [
70
- [[], [], []],
71
- [[1], [1], []],
72
- [[1, 2], [1], [2]],
73
- [[1, 2, 3], [1, 3], [2]],
74
- [[1, 2, 3, 4], [1, 3], [2, 4]],
75
- [[2, 3, 4], [3], [2, 4]],
76
- [[3, 4], [3], [4]],
77
- [[4], [], [4]],
78
- ].each do |values, expected_matches, expected_remainder|
79
- context "on #{values.inspect}" do
80
- let(:list) { L[*values] }
81
-
82
- context "with a block" do
83
- let(:result) { list.partition(&:odd?) }
84
- let(:matches) { result.first }
85
- let(:remainder) { result.last }
86
-
87
- it "preserves the original" do
88
- list.should eql(L[*values])
89
- end
90
-
91
- it "returns a frozen array with two items" do
92
- result.class.should be(Array)
93
- result.should be_frozen
94
- result.size.should be(2)
95
- end
96
-
97
- it "correctly identifies the matches" do
98
- matches.should eql(L[*expected_matches])
99
- end
100
-
101
- it "correctly identifies the remainder" do
102
- remainder.should eql(L[*expected_remainder])
103
- end
104
- end
105
-
106
- context "without a block" do
107
- it "returns an Enumerator" do
108
- list.partition.class.should be(Enumerator)
109
- list.partition.each(&:odd?).should eql([L[*expected_matches], L[*expected_remainder]])
110
- end
111
- end
112
- end
113
- end
114
- end
115
- end
@@ -1,55 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#permutation" do
5
- let(:list) { L[1,2,3,4] }
6
-
7
- context "with no block" do
8
- it "returns an Enumerator" do
9
- list.permutation.class.should be(Enumerator)
10
- list.permutation.to_a.sort.should == [1,2,3,4].permutation.to_a.sort
11
- end
12
- end
13
-
14
- context "with no argument" do
15
- it "yields all permutations of the list" do
16
- perms = list.permutation.to_a
17
- perms.size.should be(24)
18
- perms.sort.should == [1,2,3,4].permutation.to_a.sort
19
- perms.each { |item| item.should be_kind_of(Immutable::List) }
20
- end
21
- end
22
-
23
- context "with a length argument" do
24
- it "yields all N-size permutations of the list" do
25
- perms = list.permutation(2).to_a
26
- perms.size.should be(12)
27
- perms.sort.should == [1,2,3,4].permutation(2).to_a.sort
28
- perms.each { |item| item.should be_kind_of(Immutable::List) }
29
- end
30
- end
31
-
32
- context "with a length argument greater than length of list" do
33
- it "yields nothing" do
34
- list.permutation(5).to_a.should be_empty
35
- end
36
- end
37
-
38
- context "with a length argument of 0" do
39
- it "yields an empty list" do
40
- perms = list.permutation(0).to_a
41
- perms.size.should be(1)
42
- perms[0].should be_kind_of(Immutable::List)
43
- perms[0].should be_empty
44
- end
45
- end
46
-
47
- context "with a block" do
48
- it "returns the original list" do
49
- list.permutation(0) {}.should be(list)
50
- list.permutation(1) {}.should be(list)
51
- list.permutation {}.should be(list)
52
- end
53
- end
54
- end
55
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- let(:list) { L[*values] }
5
-
6
- describe "#pop" do
7
- let(:pop) { list.pop }
8
-
9
- context "with an empty list" do
10
- let(:values) { [] }
11
-
12
- it "returns an empty list" do
13
- expect(pop).to eq(L.empty)
14
- end
15
- end
16
-
17
- context "with a list with a few items" do
18
- let(:values) { %w[a b c] }
19
-
20
- it "removes the last item" do
21
- expect(pop).to eq(L["a", "b"])
22
- end
23
- end
24
- end
25
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#product" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { BigList.product }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], 1],
13
- [[2], 2],
14
- [[1, 3, 5, 7, 11], 1155],
15
- ].each do |values, expected|
16
- context "on #{values.inspect}" do
17
- it "returns #{expected.inspect}" do
18
- L[*values].product.should == expected
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,53 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:reduce, :inject].each do |method|
5
- describe "##{method}" do
6
- context "on a really big list" do
7
- it "doesn't run out of stack" do
8
- -> { BigList.send(method, &:+) }.should_not raise_error
9
- end
10
- end
11
-
12
- [
13
- [[], 10, 10],
14
- [[1], 10, 9],
15
- [[1, 2, 3], 10, 4],
16
- ].each do |values, initial, expected|
17
- context "on #{values.inspect}" do
18
- context "with an initial value of #{initial} and a block" do
19
- it "returns #{expected.inspect}" do
20
- L[*values].send(method, initial) { |memo, item| memo - item }.should == expected
21
- end
22
- end
23
- end
24
- end
25
-
26
- [
27
- [[], nil],
28
- [[1], 1],
29
- [[1, 2, 3], -4],
30
- ].each do |values, expected|
31
- context "on #{values.inspect}" do
32
- context "with no initial value and a block" do
33
- it "returns #{expected.inspect}" do
34
- L[*values].send(method) { |memo, item| memo - item }.should == expected
35
- end
36
- end
37
- end
38
- end
39
-
40
- context "with no block and a symbol argument" do
41
- it "uses the symbol as the name of a method to reduce with" do
42
- L[1, 2, 3].send(method, :+).should == 6
43
- end
44
- end
45
-
46
- context "with no block and a string argument" do
47
- it "uses the string as the name of a method to reduce with" do
48
- L[1, 2, 3].send(method, '+').should == 6
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,45 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:reject, :delete_if].each do |method|
5
- describe "##{method}" do
6
- it "is lazy" do
7
- -> { Immutable.stream { fail }.send(method) { |item| false } }.should_not raise_error
8
- end
9
-
10
- [
11
- [[], []],
12
- [["A"], ["A"]],
13
- [%w[A B C], %w[A B C]],
14
- [%w[A b C], %w[A C]],
15
- [%w[a b c], []],
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- let(:list) { L[*values] }
19
-
20
- context "with a block" do
21
- it "returns #{expected.inspect}" do
22
- list.send(method) { |item| item == item.downcase }.should eql(L[*expected])
23
- end
24
-
25
- it "is lazy" do
26
- count = 0
27
- list.send(method) do |item|
28
- count += 1
29
- false
30
- end
31
- count.should <= 1
32
- end
33
- end
34
-
35
- context "without a block" do
36
- it "returns an Enumerator" do
37
- list.send(method).class.should be(Enumerator)
38
- list.send(method).each { |item| item == item.downcase }.should eql(L[*expected])
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#reverse" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { BigList.reverse }.should_not raise_error
8
- end
9
- end
10
-
11
- it "is lazy" do
12
- -> { Immutable.stream { fail }.reverse }.should_not raise_error
13
- end
14
-
15
- [
16
- [[], []],
17
- [["A"], ["A"]],
18
- [%w[A B C], %w[C B A]],
19
- ].each do |values, expected|
20
- context "on #{values.inspect}" do
21
- let(:list) { L[*values] }
22
-
23
- it "preserves the original" do
24
- list.reverse { |item| item.downcase }
25
- list.should eql(L[*values])
26
- end
27
-
28
- it "returns #{expected.inspect}" do
29
- list.reverse { |item| item.downcase }.should == L[*expected]
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#rotate" do
5
- let(:list) { L[1,2,3,4,5] }
6
-
7
- context "when passed no argument" do
8
- it "returns a new list with the first element moved to the end" do
9
- list.rotate.should eql(L[2,3,4,5,1])
10
- end
11
- end
12
-
13
- context "with an integral argument n" do
14
- it "returns a new list with the first (n % size) elements moved to the end" do
15
- list.rotate(2).should eql(L[3,4,5,1,2])
16
- list.rotate(3).should eql(L[4,5,1,2,3])
17
- list.rotate(4).should eql(L[5,1,2,3,4])
18
- list.rotate(5).should eql(L[1,2,3,4,5])
19
- list.rotate(-1).should eql(L[5,1,2,3,4])
20
- end
21
- end
22
-
23
- context "with a non-numeric argument" do
24
- it "raises a TypeError" do
25
- -> { list.rotate('hello') }.should raise_error(TypeError)
26
- end
27
- end
28
-
29
- context "with an argument of zero (or one evenly divisible by list length)" do
30
- it "it returns self" do
31
- list.rotate(0).should be(list)
32
- list.rotate(5).should be(list)
33
- end
34
- end
35
- end
36
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#sample" do
5
- let(:list) { (1..10).to_list }
6
-
7
- it "returns a randomly chosen item" do
8
- chosen = 100.times.map { list.sample }
9
- chosen.each { |item| list.include?(item).should == true }
10
- list.each { |item| chosen.include?(item).should == true }
11
- end
12
- end
13
- end
@@ -1,70 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- let(:list) { L[*values] }
5
- let(:selected_list) { L[*selected_values] }
6
-
7
- describe "#select" do
8
- it "is lazy" do
9
- expect { Immutable.stream { fail }.select { |item| false } }.to_not raise_error
10
- end
11
-
12
- shared_examples "checking values" do
13
- context "with a block" do
14
- let(:select) { list.select { |item| item == item.upcase } }
15
-
16
- it "preserves the original" do
17
- expect(list).to eq(L[*values])
18
- end
19
-
20
- it "returns the selected list" do
21
- expect(select).to eq(selected_list)
22
- end
23
- end
24
-
25
- context "without a block" do
26
- let(:select) { list.select }
27
-
28
- it "returns an Enumerator" do
29
- expect(select.class).to be(Enumerator)
30
- expect(select.each { |item| item == item.upcase }).to eq(selected_list)
31
- end
32
- end
33
- end
34
-
35
- context "with an empty array" do
36
- let(:values) { [] }
37
- let(:selected_values) { [] }
38
-
39
- include_examples "checking values"
40
- end
41
-
42
- context "with a single item array" do
43
- let(:values) { ["A"] }
44
- let(:selected_values) { ["A"] }
45
-
46
- include_examples "checking values"
47
- end
48
-
49
- context "with a multi-item array" do
50
- let(:values) { %w[A B] }
51
- let(:selected_values) { %w[A B] }
52
-
53
- include_examples "checking values"
54
- end
55
-
56
- context "with a multi-item single selectable array" do
57
- let(:values) { %w[A b] }
58
- let(:selected_values) { ["A"] }
59
-
60
- include_examples "checking values"
61
- end
62
-
63
- context "with a multi-item multi-selectable array" do
64
- let(:values) { %w[a b] }
65
- let(:selected_values) { [] }
66
-
67
- include_examples "checking values"
68
- end
69
- end
70
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:size, :length].each do |method|
5
- describe "##{method}" do
6
- context "on a really big list" do
7
- it "doesn't run out of stack" do
8
- -> { BigList.size }.should_not raise_error
9
- end
10
- end
11
-
12
- [
13
- [[], 0],
14
- [["A"], 1],
15
- [%w[A B C], 3],
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- it "returns #{expected.inspect}" do
19
- L[*values].send(method).should == expected
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end