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,63 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#join" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).join }.should_not raise_error
8
- end
9
- end
10
-
11
- context "with a separator" do
12
- [
13
- [[], ""],
14
- [["A"], "A"],
15
- [%w[A B C], "A|B|C"]
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- let(:list) { L[*values] }
19
-
20
- it "preserves the original" do
21
- list.join("|")
22
- list.should eql(L[*values])
23
- end
24
-
25
- it "returns #{expected.inspect}" do
26
- list.join("|").should == expected
27
- end
28
- end
29
- end
30
- end
31
-
32
- context "without a separator" do
33
- [
34
- [[], ""],
35
- [["A"], "A"],
36
- [%w[A B C], "ABC"]
37
- ].each do |values, expected|
38
- context "on #{values.inspect}" do
39
- let(:list) { L[*values] }
40
-
41
- it "preserves the original" do
42
- list.join
43
- list.should eql(L[*values])
44
- end
45
-
46
- it "returns #{expected.inspect}" do
47
- list.join.should == expected
48
- end
49
- end
50
- end
51
- end
52
-
53
- context "without a separator (with global default separator set)" do
54
- before { $, = '**' }
55
- let(:list) { L["A", "B", "C"] }
56
- after { $, = nil }
57
-
58
- it "uses the default global separator" do
59
- list.join.should == "A**B**C"
60
- end
61
- end
62
- end
63
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#last" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).last }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], nil],
13
- [["A"], "A"],
14
- [%w[A B C], "C"],
15
- ].each do |values, expected|
16
- context "on #{values.inspect}" do
17
- it "returns #{expected.inspect}" do
18
- L[*values].last.should == expected
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#<<" do
5
- it "adds an item onto the end of a list" do
6
- list = L["a", "b"]
7
- (list << "c").should eql(L["a", "b", "c"])
8
- list.should eql(L["a", "b"])
9
- end
10
-
11
- context "on an empty list" do
12
- it "returns a list with one item" do
13
- list = L.empty
14
- (list << "c").should eql(L["c"])
15
- list.should eql(L.empty)
16
- end
17
- end
18
- end
19
- end
@@ -1,45 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:map, :collect].each do |method|
5
- describe "##{method}" do
6
- it "is lazy" do
7
- -> { Immutable.stream { fail }.map { |item| item } }.should_not raise_error
8
- end
9
-
10
- [
11
- [[], []],
12
- [["A"], ["a"]],
13
- [%w[A B C], %w[a b c]],
14
- ].each do |values, expected|
15
- context "on #{values.inspect}" do
16
- let(:list) { L[*values] }
17
-
18
- context "with a block" do
19
- it "preserves the original" do
20
- list.send(method, &:downcase)
21
- list.should eql(L[*values])
22
- end
23
-
24
- it "returns #{expected.inspect}" do
25
- list.send(method, &:downcase).should eql(L[*expected])
26
- end
27
-
28
- it "is lazy" do
29
- count = 0
30
- list.send(method) { |item| count += 1 }
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(&:downcase).should eql(L[*expected])
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#max" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).max }.should_not raise_error
8
- end
9
- end
10
-
11
- context "with a block" do
12
- [
13
- [[], nil],
14
- [["A"], "A"],
15
- [%w[Ichi Ni San], "Ichi"],
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- it "returns #{expected.inspect}" do
19
- L[*values].max { |maximum, item| maximum.length <=> item.length }.should == expected
20
- end
21
- end
22
- end
23
- end
24
-
25
- context "without a block" do
26
- [
27
- [[], nil],
28
- [["A"], "A"],
29
- [%w[Ichi Ni San], "San"],
30
- ].each do |values, expected|
31
- context "on #{values.inspect}" do
32
- it "returns #{expected.inspect}" do
33
- L[*values].max.should == expected
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- context "without a comparator" do
5
- context "on an empty list" do
6
- it "returns an empty list" do
7
- L.empty.merge_by.should be_empty
8
- end
9
- end
10
-
11
- context "on a single list" do
12
- let(:list) { L[1, 2, 3] }
13
-
14
- it "returns the list" do
15
- L[list].merge_by.should eql(list)
16
- end
17
- end
18
-
19
- context "with multiple lists" do
20
- subject { L[L[3, 6, 7, 8], L[1, 2, 4, 5, 9]] }
21
-
22
- it "merges the lists based on natural sort order" do
23
- subject.merge_by.should == L[1, 2, 3, 4, 5, 6, 7, 8, 9]
24
- end
25
- end
26
- end
27
-
28
- context "with a comparator" do
29
- context "on an empty list" do
30
- it "returns an empty list" do
31
- L.empty.merge_by { |item| fail("should never be called") }.should be_empty
32
- end
33
- end
34
-
35
- context "on a single list" do
36
- let(:list) { L[1, 2, 3] }
37
-
38
- it "returns the list" do
39
- L[list].merge_by { |item| -item }.should == L[1, 2, 3]
40
- end
41
- end
42
-
43
- context "with multiple lists" do
44
- subject { L[L[8, 7, 6, 3], L[9, 5, 4, 2, 1]] }
45
-
46
- it "merges the lists based on the specified transformer" do
47
- subject.merge_by { |item| -item }.should == L[9, 8, 7, 6, 5, 4, 3, 2, 1]
48
- end
49
- end
50
- end
51
- end
@@ -1,59 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- context "without a comparator" do
5
- context "on an empty list" do
6
- subject { L.empty }
7
-
8
- it "returns an empty list" do
9
- subject.merge.should be_empty
10
- end
11
- end
12
-
13
- context "on a single list" do
14
- let(:list) { L[1, 2, 3] }
15
-
16
- subject { L[list] }
17
-
18
- it "returns the list" do
19
- subject.merge.should == list
20
- end
21
- end
22
-
23
- context "with multiple lists" do
24
- subject { L[L[3, 6, 7, 8], L[1, 2, 4, 5, 9]] }
25
-
26
- it "merges the lists based on natural sort order" do
27
- subject.merge.should == L[1, 2, 3, 4, 5, 6, 7, 8, 9]
28
- end
29
- end
30
- end
31
-
32
- context "with a comparator" do
33
- context "on an empty list" do
34
- subject { L.empty }
35
-
36
- it "returns an empty list" do
37
- subject.merge { |a, b| fail("should never be called") }.should be_empty
38
- end
39
- end
40
-
41
- context "on a single list" do
42
- let(:list) { L[1, 2, 3] }
43
-
44
- subject { L[list] }
45
-
46
- it "returns the list" do
47
- subject.merge { |a, b| fail("should never be called") }.should == list
48
- end
49
- end
50
-
51
- context "with multiple lists" do
52
- subject { L[L[8, 7, 6, 3], L[9, 5, 4, 2, 1]] }
53
-
54
- it "merges the lists based on the specified comparator" do
55
- subject.merge { |a, b| b <=> a }.should == L[9, 8, 7, 6, 5, 4, 3, 2, 1]
56
- end
57
- end
58
- end
59
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#min" do
5
- context "on a really big list" do
6
- it "doesn't run out of stack" do
7
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).min }.should_not raise_error
8
- end
9
- end
10
-
11
- context "with a block" do
12
- [
13
- [[], nil],
14
- [["A"], "A"],
15
- [%w[Ichi Ni San], "Ni"],
16
- ].each do |values, expected|
17
- context "on #{values.inspect}" do
18
- it "returns #{expected.inspect}" do
19
- L[*values].min { |minimum, item| minimum.length <=> item.length }.should == expected
20
- end
21
- end
22
- end
23
- end
24
-
25
- context "without a block" do
26
- [
27
- [[], nil],
28
- [["A"], "A"],
29
- [%w[Ichi Ni San], "Ichi"],
30
- ].each do |values, expected|
31
- context "on #{values.inspect}" do
32
- it "returns #{expected.inspect}" do
33
- L[*values].min.should == expected
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
- require "concurrent/atomics"
3
-
4
- describe Immutable::List do
5
- it "ensures each node of a lazy list will only be realized on ONE thread, even when accessed by multiple threads" do
6
- counter = Concurrent::Atomic.new(0)
7
- list = (1..10000).to_list.map { |x| counter.update { |count| count + 1 }; x * 2 }
8
-
9
- threads = 10.times.collect do
10
- Thread.new do
11
- node = list
12
- node = node.tail until node.empty?
13
- end
14
- end
15
- threads.each(&:join)
16
-
17
- counter.get.should == 10000
18
- list.sum.should == 100010000
19
- end
20
-
21
- it "doesn't go into an infinite loop if lazy list block raises an exception" do
22
- list = (1..10).to_list.map { raise "Oops!" }
23
-
24
- threads = 10.times.collect do
25
- Thread.new do
26
- -> { list.head }.should raise_error(RuntimeError)
27
- end
28
- end
29
- threads.each(&:join)
30
- end
31
-
32
- it "doesn't give horrendously bad performance if thread realizing the list sleeps" do
33
- start = Time.now
34
- list = (1..100).to_list.map { |x| sleep(0.001); x * 2 }
35
-
36
- threads = 10.times.collect do
37
- Thread.new do
38
- node = list
39
- node = node.tail until node.empty?
40
- end
41
- end
42
- threads.each(&:join)
43
-
44
- elapsed = Time.now - start
45
- elapsed.should_not > 0.3
46
- end
47
- end
@@ -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
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).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
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).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