immutable-ruby 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#compact" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.compact }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], ["A"]],
12
- [%w[A B C], %w[A B C]],
13
- [[nil], []],
14
- [[nil, "B"], ["B"]],
15
- [["A", nil], ["A"]],
16
- [[nil, nil], []],
17
- [["A", nil, "C"], %w[A C]],
18
- [[nil, "B", nil], ["B"]],
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.compact
25
- list.should eql(L[*values])
26
- end
27
-
28
- it "returns #{expected.inspect}" do
29
- list.compact.should eql(L[*expected])
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#<=>" do
5
- [
6
- [[], [1]],
7
- [[1], [2]],
8
- [[1], [1, 2]],
9
- [[2, 3, 4], [3, 4, 5]]
10
- ].each do |items1, items2|
11
- context "with #{items1} and #{items2}" do
12
- it "returns -1" do
13
- (L[*items1] <=> L[*items2]).should be(-1)
14
- end
15
- end
16
-
17
- context "with #{items2} and #{items1}" do
18
- it "returns 1" do
19
- (L[*items2] <=> L[*items1]).should be(1)
20
- end
21
- end
22
-
23
- context "with #{items1} and #{items1}" do
24
- it "returns 0" do
25
- (L[*items1] <=> L[*items1]).should be(0)
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#cons" do
5
- [
6
- [[], "A", ["A"]],
7
- [["A"], "B", %w[B A]],
8
- [["A"], "A", %w[A A]],
9
- [%w[A B C], "D", %w[D A B C]],
10
- ].each do |values, new_value, expected|
11
- context "on #{values.inspect} with #{new_value.inspect}" do
12
- let(:list) { L[*values] }
13
-
14
- it "preserves the original" do
15
- list.cons(new_value)
16
- list.should eql(L[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- list.cons(new_value).should eql(L[*expected])
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,110 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable do
4
- describe ".list" do
5
- context "with no arguments" do
6
- it "always returns the same instance" do
7
- L.empty.should equal(L.empty)
8
- end
9
-
10
- it "returns an empty list" do
11
- L.empty.should be_empty
12
- end
13
- end
14
-
15
- context "with a number of items" do
16
- it "always returns a different instance" do
17
- L["A", "B", "C"].should_not equal(L["A", "B", "C"])
18
- end
19
-
20
- it "is the same as repeatedly using #cons" do
21
- L["A", "B", "C"].should eql(L.empty.cons("C").cons("B").cons("A"))
22
- end
23
- end
24
- end
25
-
26
- describe ".stream" do
27
- context "with no block" do
28
- it "returns an empty list" do
29
- Immutable.stream.should eql(L.empty)
30
- end
31
- end
32
-
33
- context "with a block" do
34
- let(:list) { count = 0; Immutable.stream { count += 1 }}
35
-
36
- it "repeatedly calls the block" do
37
- list.take(5).should eql(L[1, 2, 3, 4, 5])
38
- end
39
- end
40
- end
41
-
42
- describe ".interval" do
43
- context "for numbers" do
44
- it "is equivalent to a list with explicit values" do
45
- Immutable.interval(98, 102).should eql(L[98, 99, 100, 101, 102])
46
- end
47
- end
48
-
49
- context "for strings" do
50
- it "is equivalent to a list with explicit values" do
51
- Immutable.interval("A", "AA").should eql(L["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA"])
52
- end
53
- end
54
- end
55
-
56
- describe ".repeat" do
57
- it "returns an infinite list with specified value for each element" do
58
- Immutable.repeat("A").take(5).should eql(L["A", "A", "A", "A", "A"])
59
- end
60
- end
61
-
62
- describe ".replicate" do
63
- it "returns a list with the specified value repeated the specified number of times" do
64
- Immutable.replicate(5, "A").should eql(L["A", "A", "A", "A", "A"])
65
- end
66
- end
67
-
68
- describe ".iterate" do
69
- it "returns an infinite list where the first item is calculated by applying the block on the initial argument, the second item by applying the function on the previous result and so on" do
70
- Immutable.iterate(1) { |item| item * 2 }.take(10).should eql(L[1, 2, 4, 8, 16, 32, 64, 128, 256, 512])
71
- end
72
- end
73
-
74
- describe ".enumerate" do
75
- let(:enum) do
76
- Enumerator.new do |yielder|
77
- yielder << 1
78
- yielder << 2
79
- yielder << 3
80
- raise "list fully realized"
81
- end
82
- end
83
-
84
- let(:list) { Immutable.enumerate(enum) }
85
-
86
- it "returns a list based on the values yielded from the enumerator" do
87
- expect(list.take(2)).to eq L[1, 2]
88
- end
89
-
90
- it "realizes values as they are needed" do
91
- # this example shows that Lists are not as lazy as they could be
92
- # if Lists were fully lazy, you would have to take(4) to hit the exception
93
- expect { list.take(3).to_a }.to raise_exception
94
- end
95
- end
96
-
97
- describe "[]" do
98
- it "takes a variable number of items and returns a list" do
99
- list = Immutable::List[1,2,3]
100
- list.should be_kind_of(Immutable::List)
101
- list.size.should be(3)
102
- list.to_a.should == [1,2,3]
103
- end
104
-
105
- it "returns an empty list when called without arguments" do
106
- L[].should be_kind_of(Immutable::List)
107
- L[].should be_empty
108
- end
109
- end
110
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:dup, :clone].each do |method|
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.send(method).should equal(list)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#count" 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).count }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], 0],
13
- [[1], 1],
14
- [[1, 2], 1],
15
- [[1, 2, 3], 2],
16
- [[1, 2, 3, 4], 2],
17
- [[1, 2, 3, 4, 5], 3],
18
- ].each do |values, expected|
19
- context "on #{values.inspect}" do
20
- let(:list) { L[*values] }
21
-
22
- context "with a block" do
23
- it "returns #{expected.inspect}" do
24
- list.count(&:odd?).should == expected
25
- end
26
- end
27
-
28
- context "without a block" do
29
- it "returns length" do
30
- list.count.should == list.length
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable do
4
- describe "#cycle" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.cycle }.should_not raise_error
7
- end
8
-
9
- context "with an empty list" do
10
- it "returns an empty list" do
11
- L.empty.cycle.should be_empty
12
- end
13
- end
14
-
15
- context "with a non-empty list" do
16
- let(:list) { L["A", "B", "C"] }
17
-
18
- it "preserves the original" do
19
- list.cycle
20
- list.should == L["A", "B", "C"]
21
- end
22
-
23
- it "infinitely cycles through all values" do
24
- list.cycle.take(7).should == L["A", "B", "C", "A", "B", "C", "A"]
25
- end
26
- end
27
- end
28
- end
@@ -1,18 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#delete_at" do
5
- let(:list) { L[1,2,3,4,5] }
6
-
7
- it "removes the element at the specified index" do
8
- list.delete_at(0).should eql(L[2,3,4,5])
9
- list.delete_at(2).should eql(L[1,2,4,5])
10
- list.delete_at(-1).should eql(L[1,2,3,4])
11
- end
12
-
13
- it "makes no modification if the index is out of range" do
14
- list.delete_at(5).should eql(list)
15
- list.delete_at(-6).should eql(list)
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#delete" do
5
- it "removes elements that are #== to the argument" do
6
- L[1,2,3].delete(1).should eql(L[2,3])
7
- L[1,2,3].delete(2).should eql(L[1,3])
8
- L[1,2,3].delete(3).should eql(L[1,2])
9
- L[1,2,3].delete(0).should eql(L[1,2,3])
10
- L['a','b','a','c','a','a','d'].delete('a').should eql(L['b','c','d'])
11
-
12
- L[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(L[])
13
- L[EqlNotEqual.new, EqlNotEqual.new].delete(:something).should_not be_empty
14
- end
15
- end
16
- end
@@ -1,30 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#drop" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.drop(1) }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], 10, []],
11
- [["A"], 10, []],
12
- [["A"], -1, ["A"]],
13
- [%w[A B C], 0, %w[A B C]],
14
- [%w[A B C], 2, ["C"]],
15
- ].each do |values, number, expected|
16
- context "with #{number} from #{values.inspect}" do
17
- let(:list) { L[*values] }
18
-
19
- it "preserves the original" do
20
- list.drop(number)
21
- list.should eql(L[*values])
22
- end
23
-
24
- it "returns #{expected.inspect}" do
25
- list.drop(number).should == L[*expected]
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#drop_while" do
5
- it "is lazy" do
6
- -> { Immutable.stream { fail }.drop_while { false } }.should_not raise_error
7
- end
8
-
9
- [
10
- [[], []],
11
- [["A"], []],
12
- [%w[A B C], ["C"]],
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 "preserves the original" do
19
- list.drop_while { |item| item < "C" }
20
- list.should eql(L[*values])
21
- end
22
-
23
- it "returns #{expected.inspect}" do
24
- list.drop_while { |item| item < "C" }.should eql(L[*expected])
25
- end
26
- end
27
-
28
- context "without a block" do
29
- it "returns an Enumerator" do
30
- list.drop_while.class.should be(Enumerator)
31
- list.drop_while.each { false }.should eql(list)
32
- list.drop_while.each { true }.should be_empty
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [:each_chunk, :each_slice].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).send(method, 1) { |item| } }.should_not raise_error
9
- end
10
- end
11
-
12
- [
13
- [[], []],
14
- [["A"], [L["A"]]],
15
- [%w[A B C], [L["A", "B"], L["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 "preserves the original" do
22
- list.should eql(L[*values])
23
- end
24
-
25
- it "iterates over the items in order" do
26
- yielded = []
27
- list.send(method, 2) { |item| yielded << item }
28
- yielded.should eql(expected)
29
- end
30
-
31
- it "returns self" do
32
- list.send(method, 2) { |item| item }.should be(list)
33
- end
34
- end
35
-
36
- context "without a block" do
37
- it "preserves the original" do
38
- list.send(method, 2)
39
- list.should eql(L[*values])
40
- end
41
-
42
- it "returns an Enumerator" do
43
- list.send(method, 2).class.should be(Enumerator)
44
- list.send(method, 2).to_a.should eql(expected)
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,40 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#each" 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).each { |item| } }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [],
13
- ["A"],
14
- %w[A B C],
15
- ].each do |values|
16
- context "on #{values.inspect}" do
17
- let(:list) { L[*values] }
18
-
19
- context "with a block" do
20
- it "iterates over the items in order" do
21
- yielded = []
22
- list.each { |item| yielded << item }
23
- yielded.should == values
24
- end
25
-
26
- it "returns nil" do
27
- list.each { |item| item }.should be_nil
28
- end
29
- end
30
-
31
- context "without a block" do
32
- it "returns an Enumerator" do
33
- list.each.class.should be(Enumerator)
34
- Immutable::List[*list.each].should eql(list)
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#each_with_index" do
5
- context "with no block" do
6
- let(:list) { L["A", "B", "C"] }
7
-
8
- it "returns an Enumerator" do
9
- list.each_with_index.class.should be(Enumerator)
10
- list.each_with_index.to_a.should == [['A', 0], ['B', 1], ['C', 2]]
11
- end
12
- end
13
-
14
- context "with a block" do
15
- let(:list) { Immutable.interval(1, 1025) }
16
-
17
- it "returns self" do
18
- list.each_with_index { |item, index| item }.should be(list)
19
- end
20
-
21
- it "iterates over the items in order, yielding item and index" do
22
- yielded = []
23
- list.each_with_index { |item, index| yielded << [item, index] }
24
- yielded.should == (1..list.size).zip(0..list.size.pred)
25
- end
26
- end
27
- end
28
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#empty?" 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?).empty? }.should_not raise_error
8
- end
9
- end
10
-
11
- [
12
- [[], true],
13
- [["A"], false],
14
- [%w[A B C], false],
15
- ].each do |values, expected|
16
- context "on #{values.inspect}" do
17
- it "returns #{expected.inspect}" do
18
- L[*values].empty?.should == expected
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,61 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#eql?" 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).eql?(Immutable.interval(0, STACK_OVERFLOW_DEPTH)) }.should_not raise_error
8
- end
9
- end
10
- end
11
-
12
- shared_examples 'equal using eql?' do |a, b|
13
- specify "#{a.inspect} should eql? #{b.inspect}" do
14
- expect(a).to eql b
15
- end
16
-
17
- specify "#{a.inspect} should == #{b.inspect}" do
18
- expect(a).to eq b
19
- end
20
- end
21
-
22
- shared_examples 'not equal using eql?' do |a, b|
23
- specify "#{a.inspect} should not eql? #{b.inspect}" do
24
- expect(a).to_not eql b
25
- end
26
- end
27
-
28
- shared_examples 'equal using ==' do |a, b|
29
- specify "#{a.inspect} should == #{b.inspect}" do
30
- expect(a).to eq b
31
- end
32
- end
33
-
34
- shared_examples 'not equal using ==' do |a, b|
35
- specify "#{a.inspect} should not == #{b.inspect}" do
36
- expect(a).to_not eq b
37
- end
38
- end
39
-
40
- include_examples 'equal using ==' , L["A", "B", "C"], %w[A B C]
41
- include_examples 'not equal using eql?' , L["A", "B", "C"], %w[A B C]
42
- include_examples 'not equal using ==' , L["A", "B", "C"], Object.new
43
- include_examples 'not equal using eql?' , L["A", "B", "C"], Object.new
44
- include_examples 'equal using ==' , L.empty, []
45
- include_examples 'not equal using eql?' , L.empty, []
46
-
47
- include_examples 'equal using eql?' , L.empty, L.empty
48
- include_examples 'not equal using eql?' , L.empty, L[nil]
49
- include_examples 'not equal using eql?' , L["A"], L.empty
50
- include_examples 'equal using eql?' , L["A"], L["A"]
51
- include_examples 'not equal using eql?' , L["A"], L["B"]
52
- include_examples 'not equal using eql?' , L["A", "B"], L["A"]
53
- include_examples 'equal using eql?' , L["A", "B", "C"], L["A", "B", "C"]
54
- include_examples 'not equal using eql?' , L["C", "A", "B"], L["A", "B", "C"]
55
-
56
- include_examples 'equal using ==' , L['A'], ['A']
57
- include_examples 'equal using ==' , ['A'], L['A']
58
-
59
- include_examples 'not equal using eql?' , L['A'], ['A']
60
- include_examples 'not equal using eql?' , ['A'], L['A']
61
- end
@@ -1,49 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- describe "#fill" do
5
- let(:list) { L[1, 2, 3, 4, 5, 6] }
6
-
7
- it "can replace a range of items at the beginning of a list" do
8
- list.fill(:a, 0, 3).should eql(L[:a, :a, :a, 4, 5, 6])
9
- end
10
-
11
- it "can replace a range of items in the middle of a list" do
12
- list.fill(:a, 3, 2).should eql(L[1, 2, 3, :a, :a, 6])
13
- end
14
-
15
- it "can replace a range of items at the end of a list" do
16
- list.fill(:a, 4, 2).should eql(L[1, 2, 3, 4, :a, :a])
17
- end
18
-
19
- it "can replace all the items in a list" do
20
- list.fill(:a, 0, 6).should eql(L[:a, :a, :a, :a, :a, :a])
21
- end
22
-
23
- it "can fill past the end of the list" do
24
- list.fill(:a, 3, 6).should eql(L[1, 2, 3, :a, :a, :a, :a, :a, :a])
25
- end
26
-
27
- context "with 1 argument" do
28
- it "replaces all the items in the list by default" do
29
- list.fill(:a).should eql(L[:a, :a, :a, :a, :a, :a])
30
- end
31
- end
32
-
33
- context "with 2 arguments" do
34
- it "replaces up to the end of the list by default" do
35
- list.fill(:a, 4).should eql(L[1, 2, 3, 4, :a, :a])
36
- end
37
- end
38
-
39
- context "when index and length are 0" do
40
- it "leaves the list unmodified" do
41
- list.fill(:a, 0, 0).should eql(list)
42
- end
43
- end
44
-
45
- it "is lazy" do
46
- -> { Immutable.stream { fail }.fill(:a, 0, 1) }.should_not raise_error
47
- end
48
- end
49
- end