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,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#split_at" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.split_at(1) }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], [], []],
11
- [[1], [1], []],
12
- [[1, 2], [1, 2], []],
13
- [[1, 2, 3], [1, 2], [3]],
14
- [[1, 2, 3, 4], [1, 2], [3, 4]],
15
- ].each do |values, expected_prefix, expected_remainder|
16
- context "on #{values.inspect}" do
17
- let(:list) { L[*values] }
18
- let(:result) { list.split_at(2) }
19
- let(:prefix) { result.first }
20
- let(:remainder) { result.last }
21
-
22
- it "preserves the original" do
23
- result
24
- list.should eql(L[*values])
25
- end
26
-
27
- it "returns a frozen array with two items" do
28
- result.class.should be(Array)
29
- result.should be_frozen
30
- result.size.should be(2)
31
- end
32
-
33
- it "correctly identifies the matches" do
34
- prefix.should eql(L[*expected_prefix])
35
- end
36
-
37
- it "correctly identifies the remainder" do
38
- remainder.should eql(L[*expected_remainder])
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#subsequences" do
5
- let(:list) { L[1,2,3,4,5] }
6
-
7
- it "yields all sublists with 1 or more consecutive items" do
8
- result = []
9
- list.subsequences { |l| result << l }
10
- result.size.should == (5 + 4 + 3 + 2 + 1)
11
- result.sort.should == [[1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5],
12
- [2], [2,3], [2,3,4], [2,3,4,5], [3], [3,4], [3,4,5], [4], [4,5], [5]]
13
- end
14
-
15
- context "with no block" do
16
- it "returns an Enumerator" do
17
- list.subsequences.class.should be(Enumerator)
18
- list.subsequences.to_a.sort.should == [[1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5],
19
- [2], [2,3], [2,3,4], [2,3,4,5], [3], [3,4], [3,4,5], [4], [4,5], [5]]
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#sum" 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).sum }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], 0],
13
- [[2], 2],
14
- [[1, 3, 5, 7, 11], 27],
15
- ].each do |values, expected|
16
- context "on #{values.inspect}" do
17
- it "returns #{expected.inspect}" do
18
- L[*values].sum.should == expected
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#tail" 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).select(&:nil?).tail }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], []],
13
- [["A"], []],
14
- [%w[A B C], %w[B C]],
15
- ].each do |values, expected|
16
- context "on #{values.inspect}" do
17
- let(:list) { L[*values] }
18
-
19
- it "preserves the original" do
20
- list.tail
21
- list.should eql(L[*values])
22
- end
23
-
24
- it "returns #{expected.inspect}" do
25
- list.tail.should eql(L[*expected])
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#tails" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.tails }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], [L["A"]]],
12
- [%w[A B C], [L["A", "B", "C"], L["B", "C"], L["C"]]],
13
- ].each do |values, expected|
14
- context "on #{values.inspect}" do
15
- let(:list) { L[*values] }
16
-
17
- it "preserves the original" do
18
- list.tails
19
- list.should eql(L[*values])
20
- end
21
-
22
- it "returns #{expected.inspect}" do
23
- list.tails.should eql(L[*expected])
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#take" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.take(1) }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], 10, []],
11
- [["A"], 10, ["A"]],
12
- [["A"], -1, []],
13
- [%w[A B C], 0, []],
14
- [%w[A B C], 2, %w[A B]],
15
- ].each do |values, number, expected|
16
- context "#{number} from #{values.inspect}" do
17
- let(:list) { L[*values] }
18
-
19
- it "preserves the original" do
20
- list.take(number)
21
- list.should eql(L[*values])
22
- end
23
-
24
- it "returns #{expected.inspect}" do
25
- list.take(number).should eql(L[*expected])
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,46 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#take_while" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.take_while { false } }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], ["A"]],
12
- [%w[A B C], %w[A B]],
13
- ].each do |values, expected|
14
- context "on #{values.inspect}" do
15
- let(:list) { L[*values] }
16
-
17
- context "with a block" do
18
- it "returns #{expected.inspect}" do
19
- list.take_while { |item| item < "C" }.should eql(L[*expected])
20
- end
21
-
22
- it "preserves the original" do
23
- list.take_while { |item| item < "C" }
24
- list.should eql(L[*values])
25
- end
26
-
27
- it "is lazy" do
28
- count = 0
29
- list.take_while do |item|
30
- count += 1
31
- true
32
- end
33
- count.should <= 1
34
- end
35
- end
36
-
37
- context "without a block" do
38
- it "returns an Enumerator" do
39
- list.take_while.class.should be(Enumerator)
40
- list.take_while.each { |item| item < "C" }.should eql(L[*expected])
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:to_a, :entries].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
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).to_a }.should_not raise_error
9
- end
10
- end
11
-
12
- [
13
- [],
14
- ["A"],
15
- %w[A B C],
16
- ].each do |values|
17
- context "on #{values.inspect}" do
18
- let(:list) { L[*values] }
19
-
20
- it "returns #{values.inspect}" do
21
- list.send(method).should == values
22
- end
23
-
24
- it "leaves the original unchanged" do
25
- list.send(method)
26
- list.should eql(L[*values])
27
- end
28
-
29
- it "returns a mutable array" do
30
- result = list.send(method)
31
- expect(result.last).to_not eq("The End")
32
- result << "The End"
33
- result.last.should == "The End"
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,41 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- let(:list) { L["A", "B", "C", "D"] }
5
-
6
- describe "#to_ary" do
7
- context "on a really big list" do
8
- it "doesn't run out of stack" do
9
- -> { Immutable.interval(0, STACK_OVERFLOW_DEPTH).to_ary }.should_not raise_error
10
- end
11
- end
12
-
13
- context "enables implicit conversion to" do
14
- it "block parameters" do
15
- def func(&block)
16
- yield(list)
17
- end
18
-
19
- func do |a, b, *c|
20
- expect(a).to eq("A")
21
- expect(b).to eq("B")
22
- expect(c).to eq(%w[C D])
23
- end
24
- end
25
-
26
- it "method arguments" do
27
- def func(a, b, *c)
28
- expect(a).to eq("A")
29
- expect(b).to eq("B")
30
- expect(c).to eq(%w[C D])
31
- end
32
- func(*list)
33
- end
34
-
35
- it "works with splat" do
36
- array = *list
37
- expect(array).to eq(%w[A B C D])
38
- end
39
- end
40
- end
41
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#to_list" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- context "on #{values.inspect}" do
11
- let(:list) { L[*values] }
12
-
13
- it "returns self" do
14
- list.to_list.should equal(list)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#to_set" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- context "on #{values.inspect}" do
11
- it "returns a set with the same values" do
12
- L[*values].to_set.should eql(S[*values])
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#transpose" do
5
- it "takes a list of lists and returns a list of all the first elements, all the 2nd elements, and so on" do
6
- L[L[1, 'a'], L[2, 'b'], L[3, 'c']].transpose.should eql(L[L[1, 2, 3], L["a", "b", "c"]])
7
- L[L[1, 2, 3], L["a", "b", "c"]].transpose.should eql(L[L[1, 'a'], L[2, 'b'], L[3, 'c']])
8
- L[].transpose.should eql(L[])
9
- L[L[]].transpose.should eql(L[])
10
- L[L[], L[]].transpose.should eql(L[])
11
- L[L[0]].transpose.should eql(L[L[0]])
12
- L[L[0], L[1]].transpose.should eql(L[L[0, 1]])
13
- end
14
-
15
- it "only goes as far as the shortest list" do
16
- L[L[1,2,3], L[2]].transpose.should eql(L[L[1,2]])
17
- end
18
- end
19
- end
@@ -1,31 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:union, :|].each do |method|
5
- describe "##{method}" do
6
- it "is lazy" do
7
- -> { Immutable.stream { fail }.union(Immutable.stream { fail }) }.should_not raise_error
8
- end
9
-
10
- [
11
- [[], [], []],
12
- [["A"], [], ["A"]],
13
- [%w[A B C], [], %w[A B C]],
14
- [%w[A A], ["A"], ["A"]],
15
- ].each do |a, b, expected|
16
- context "returns #{expected.inspect}" do
17
- let(:list_a) { L[*a] }
18
- let(:list_b) { L[*b] }
19
-
20
- it "for #{a.inspect} and #{b.inspect}" do
21
- list_a.send(method, list_b).should eql(L[*expected])
22
- end
23
-
24
- it "for #{b.inspect} and #{a.inspect}" do
25
- list_b.send(method, list_a).should eql(L[*expected])
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,35 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#uniq" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.uniq }.should_not raise_error
7
- end
8
-
9
- context "when passed a block" do
10
- it "uses the block to identify duplicates" do
11
- L["a", "A", "b"].uniq(&:upcase).should eql(Immutable::List["a", "b"])
12
- end
13
- end
14
-
15
- [
16
- [[], []],
17
- [["A"], ["A"]],
18
- [%w[A B C], %w[A B C]],
19
- [%w[A B A C C], %w[A B C]],
20
- ].each do |values, expected|
21
- context "on #{values.inspect}" do
22
- let(:list) { L[*values] }
23
-
24
- it "preserves the original" do
25
- list.uniq
26
- list.should eql(L[*values])
27
- end
28
-
29
- it "returns #{expected.inspect}" do
30
- list.uniq.should eql(L[*expected])
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#zip" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.zip(Immutable.stream { fail }) }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], [], []],
11
- [["A"], ["aye"], [L["A", "aye"]]],
12
- [["A"], [], [L["A", nil]]],
13
- [[], ["A"], [L[nil, "A"]]],
14
- [%w[A B C], %w[aye bee see], [L["A", "aye"], L["B", "bee"], L["C", "see"]]],
15
- ].each do |left, right, expected|
16
- context "on #{left.inspect} and #{right.inspect}" do
17
- it "returns #{expected.inspect}" do
18
- L[*left].zip(L[*right]).should eql(L[*expected])
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,95 +0,0 @@
1
- require "spec_helper"
2
- require "set"
3
-
4
- describe Immutable do
5
- expectations = [
6
- # [Ruby, Immutable]
7
- [ { "a" => 1,
8
- "b" => [2, {"c" => 3}, 4],
9
- "d" => ::Set.new([5, 6, 7]),
10
- "e" => {"f" => 8, "g" => 9},
11
- "h" => Regexp.new("ijk"),
12
- "l" => ::SortedSet.new([1, 2, 3]) },
13
- Immutable::Hash[
14
- "a" => 1,
15
- "b" => Immutable::Vector[2, Immutable::Hash["c" => 3], 4],
16
- "d" => Immutable::Set[5, 6, 7],
17
- "e" => Immutable::Hash["f" => 8, "g" => 9],
18
- "h" => Regexp.new("ijk"),
19
- "l" => Immutable::SortedSet.new([1, 2, 3])] ],
20
- [ {}, Immutable::Hash[] ],
21
- [ {"a" => 1, "b" => 2, "c" => 3}, Immutable::Hash["a" => 1, "b" => 2, "c" => 3] ],
22
- [ [], Immutable::Vector[] ],
23
- [ [1, 2, 3], Immutable::Vector[1, 2, 3] ],
24
- [ ::Set.new, Immutable::Set[] ],
25
- [ ::Set.new([1, 2, 3]), Immutable::Set[1, 2, 3] ],
26
- [ ::SortedSet.new, Immutable::SortedSet[] ],
27
- [ ::SortedSet.new([1, 2, 3]), Immutable::SortedSet[1, 2, 3] ],
28
- [ 42, 42 ],
29
- [ STDOUT, STDOUT ]
30
- ]
31
-
32
- describe ".from" do
33
- expectations.each do |input, expected_result|
34
- context "with #{input.inspect} as input" do
35
- it "should return #{expected_result.inspect}" do
36
- Immutable.from(input).should eql(expected_result)
37
- end
38
- end
39
- end
40
-
41
- context "with mixed object" do
42
- it "should return Immutable data" do
43
- input = {
44
- "a" => "b",
45
- "c" => {"d" => "e"},
46
- "f" => Immutable::Vector["g", "h", []],
47
- "i" => Immutable::Hash["j" => {}, "k" => Immutable::Set[[], {}]] }
48
- expected_result = Immutable::Hash[
49
- "a" => "b",
50
- "c" => Immutable::Hash["d" => "e"],
51
- "f" => Immutable::Vector["g", "h", Immutable::EmptyVector],
52
- "i" => Immutable::Hash["j" => Immutable::EmptyHash, "k" => Immutable::Set[Immutable::EmptyVector, Immutable::EmptyHash]] ]
53
- Immutable.from(input).should eql(expected_result)
54
- end
55
- end
56
- end
57
-
58
- describe ".to_ruby" do
59
- expectations.each do |expected_result, input|
60
- context "with #{input.inspect} as input" do
61
- it "should return #{expected_result.inspect}" do
62
- Immutable.to_ruby(input).should eql(expected_result)
63
- end
64
- end
65
- end
66
-
67
- context "with Immutable::Deque[] as input" do
68
- it "should return []" do
69
- Immutable.to_ruby(Immutable::Deque[]).should eql([])
70
- end
71
- end
72
-
73
- context "with Immutable::Deque[Immutable::Hash[\"a\" => 1]] as input" do
74
- it "should return [{\"a\" => 1}]" do
75
- Immutable.to_ruby(Immutable::Deque[Immutable::Hash["a" => 1]]).should eql([{"a" => 1}])
76
- end
77
- end
78
-
79
- context "with mixed object" do
80
- it "should return Ruby data structures" do
81
- input = Immutable::Hash[
82
- "a" => "b",
83
- "c" => {"d" => "e"},
84
- "f" => Immutable::Vector["g", "h"],
85
- "i" => {"j" => Immutable::EmptyHash, "k" => Set.new([Immutable::EmptyVector, Immutable::EmptyHash])}]
86
- expected_result = {
87
- "a" => "b",
88
- "c" => {"d" => "e"},
89
- "f" => ["g", "h"],
90
- "i" => {"j" => {}, "k" => Set.new([[], {}])} }
91
- Immutable.to_ruby(input).should eql(expected_result)
92
- end
93
- end
94
- end
95
- end
@@ -1,75 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- let(:original) { S["A", "B", "C"] }
5
-
6
- [:add, :<<].each do |method|
7
- describe "##{method}" do
8
- context "with a unique value" do
9
- let(:result) { original.send(method, "D") }
10
-
11
- it "preserves the original" do
12
- result
13
- original.should eql(S["A", "B", "C"])
14
- end
15
-
16
- it "returns a copy with the superset of values" do
17
- result.should eql(S["A", "B", "C", "D"])
18
- end
19
- end
20
-
21
- context "with a duplicate value" do
22
- let(:result) { original.send(method, "C") }
23
-
24
- it "preserves the original values" do
25
- result
26
- original.should eql(S["A", "B", "C"])
27
- end
28
-
29
- it "returns self" do
30
- result.should equal(original)
31
- end
32
- end
33
-
34
- it "can add nil to a set" do
35
- original.add(nil).should eql(S["A", "B", "C", nil])
36
- end
37
-
38
- it "works on large sets, with many combinations of input" do
39
- 50.times do
40
- array = (1..500).to_a.sample(100)
41
- set = S.new(array)
42
- to_add = 1000 + rand(1000)
43
- set.add(to_add).size.should == 101
44
- set.add(to_add).include?(to_add).should == true
45
- end
46
- end
47
- end
48
- end
49
-
50
- describe "#add?" do
51
- context "with a unique value" do
52
- let(:result) { original.add?("D") }
53
-
54
- it "preserves the original" do
55
- original.should eql(S["A", "B", "C"])
56
- end
57
-
58
- it "returns a copy with the superset of values" do
59
- result.should eql(S["A", "B", "C", "D"])
60
- end
61
- end
62
-
63
- context "with a duplicate value" do
64
- let(:result) { original.add?("C") }
65
-
66
- it "preserves the original values" do
67
- original.should eql(S["A", "B", "C"])
68
- end
69
-
70
- it "returns false" do
71
- result.should equal(false)
72
- end
73
- end
74
- end
75
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Set do
4
- describe "#all?" do
5
- context "when empty" do
6
- it "with a block returns true" do
7
- S.empty.all? {}.should == true
8
- end
9
-
10
- it "with no block returns true" do
11
- S.empty.all?.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"] }
18
-
19
- it "returns true if the block always returns true" do
20
- set.all? { |item| true }.should == true
21
- end
22
-
23
- it "returns false if the block ever returns false" do
24
- set.all? { |item| item == "D" }.should == false
25
- end
26
-
27
- it "propagates an exception from the block" do
28
- -> { set.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
29
- end
30
-
31
- it "stops iterating as soon as the block returns false" do
32
- yielded = []
33
- set.all? { |k,v| yielded << k; false }
34
- yielded.size.should == 1
35
- end
36
- end
37
-
38
- describe "with no block" do
39
- it "returns true if all values are truthy" do
40
- S[true, "A"].all?.should == true
41
- end
42
-
43
- [nil, false].each do |value|
44
- it "returns false if any value is #{value.inspect}" do
45
- S[value, true, "A"].all?.should == false
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end