immutable-ruby 0.0.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. checksums.yaml +4 -4
  2. data/lib/immutable/_core.rb +3067 -0
  3. data/lib/immutable/core_ext/enumerable.rb +1 -1
  4. data/lib/immutable/core_ext/io.rb +1 -1
  5. data/lib/immutable/core_ext.rb +2 -2
  6. data/lib/immutable/deque.rb +17 -17
  7. data/lib/immutable/enumerable.rb +10 -10
  8. data/lib/immutable/hash.rb +4 -941
  9. data/lib/immutable/list.rb +36 -36
  10. data/lib/immutable/nested.rb +8 -8
  11. data/lib/immutable/set.rb +3 -583
  12. data/lib/immutable/sorted_set.rb +29 -27
  13. data/lib/immutable/trie.rb +2 -2
  14. data/lib/immutable/vector.rb +3 -1549
  15. data/lib/immutable/version.rb +1 -1
  16. data/lib/immutable.rb +9 -9
  17. metadata +34 -696
  18. data/lib/immutable/core_ext/struct.rb +0 -9
  19. data/spec/fixtures/io_spec.txt +0 -3
  20. data/spec/lib/immutable/core_ext/array_spec.rb +0 -13
  21. data/spec/lib/immutable/core_ext/enumerable_spec.rb +0 -29
  22. data/spec/lib/immutable/core_ext/io_spec.rb +0 -28
  23. data/spec/lib/immutable/deque/clear_spec.rb +0 -33
  24. data/spec/lib/immutable/deque/construction_spec.rb +0 -29
  25. data/spec/lib/immutable/deque/copying_spec.rb +0 -19
  26. data/spec/lib/immutable/deque/dequeue_spec.rb +0 -34
  27. data/spec/lib/immutable/deque/empty_spec.rb +0 -39
  28. data/spec/lib/immutable/deque/enqueue_spec.rb +0 -27
  29. data/spec/lib/immutable/deque/first_spec.rb +0 -17
  30. data/spec/lib/immutable/deque/inspect_spec.rb +0 -23
  31. data/spec/lib/immutable/deque/last_spec.rb +0 -17
  32. data/spec/lib/immutable/deque/marshal_spec.rb +0 -33
  33. data/spec/lib/immutable/deque/new_spec.rb +0 -43
  34. data/spec/lib/immutable/deque/pop_spec.rb +0 -36
  35. data/spec/lib/immutable/deque/pretty_print_spec.rb +0 -23
  36. data/spec/lib/immutable/deque/push_spec.rb +0 -36
  37. data/spec/lib/immutable/deque/random_modification_spec.rb +0 -33
  38. data/spec/lib/immutable/deque/rotate_spec.rb +0 -68
  39. data/spec/lib/immutable/deque/shift_spec.rb +0 -29
  40. data/spec/lib/immutable/deque/size_spec.rb +0 -19
  41. data/spec/lib/immutable/deque/to_a_spec.rb +0 -26
  42. data/spec/lib/immutable/deque/to_ary_spec.rb +0 -35
  43. data/spec/lib/immutable/deque/to_list_spec.rb +0 -24
  44. data/spec/lib/immutable/deque/unshift_spec.rb +0 -30
  45. data/spec/lib/immutable/hash/all_spec.rb +0 -53
  46. data/spec/lib/immutable/hash/any_spec.rb +0 -53
  47. data/spec/lib/immutable/hash/assoc_spec.rb +0 -51
  48. data/spec/lib/immutable/hash/clear_spec.rb +0 -42
  49. data/spec/lib/immutable/hash/construction_spec.rb +0 -38
  50. data/spec/lib/immutable/hash/copying_spec.rb +0 -13
  51. data/spec/lib/immutable/hash/default_proc_spec.rb +0 -72
  52. data/spec/lib/immutable/hash/delete_spec.rb +0 -39
  53. data/spec/lib/immutable/hash/dig_spec.rb +0 -34
  54. data/spec/lib/immutable/hash/each_spec.rb +0 -77
  55. data/spec/lib/immutable/hash/each_with_index_spec.rb +0 -29
  56. data/spec/lib/immutable/hash/empty_spec.rb +0 -43
  57. data/spec/lib/immutable/hash/eql_spec.rb +0 -75
  58. data/spec/lib/immutable/hash/except_spec.rb +0 -42
  59. data/spec/lib/immutable/hash/fetch_spec.rb +0 -57
  60. data/spec/lib/immutable/hash/fetch_values_spec.rb +0 -22
  61. data/spec/lib/immutable/hash/find_spec.rb +0 -43
  62. data/spec/lib/immutable/hash/flat_map_spec.rb +0 -35
  63. data/spec/lib/immutable/hash/flatten_spec.rb +0 -98
  64. data/spec/lib/immutable/hash/get_spec.rb +0 -79
  65. data/spec/lib/immutable/hash/has_key_spec.rb +0 -31
  66. data/spec/lib/immutable/hash/has_value_spec.rb +0 -27
  67. data/spec/lib/immutable/hash/hash_spec.rb +0 -29
  68. data/spec/lib/immutable/hash/inspect_spec.rb +0 -30
  69. data/spec/lib/immutable/hash/invert_spec.rb +0 -30
  70. data/spec/lib/immutable/hash/key_spec.rb +0 -27
  71. data/spec/lib/immutable/hash/keys_spec.rb +0 -15
  72. data/spec/lib/immutable/hash/map_spec.rb +0 -45
  73. data/spec/lib/immutable/hash/marshal_spec.rb +0 -28
  74. data/spec/lib/immutable/hash/merge_spec.rb +0 -82
  75. data/spec/lib/immutable/hash/min_max_spec.rb +0 -45
  76. data/spec/lib/immutable/hash/new_spec.rb +0 -70
  77. data/spec/lib/immutable/hash/none_spec.rb +0 -48
  78. data/spec/lib/immutable/hash/partition_spec.rb +0 -35
  79. data/spec/lib/immutable/hash/pretty_print_spec.rb +0 -34
  80. data/spec/lib/immutable/hash/put_spec.rb +0 -111
  81. data/spec/lib/immutable/hash/reduce_spec.rb +0 -35
  82. data/spec/lib/immutable/hash/reject_spec.rb +0 -61
  83. data/spec/lib/immutable/hash/reverse_each_spec.rb +0 -27
  84. data/spec/lib/immutable/hash/sample_spec.rb +0 -13
  85. data/spec/lib/immutable/hash/select_spec.rb +0 -57
  86. data/spec/lib/immutable/hash/size_spec.rb +0 -51
  87. data/spec/lib/immutable/hash/slice_spec.rb +0 -44
  88. data/spec/lib/immutable/hash/sort_spec.rb +0 -26
  89. data/spec/lib/immutable/hash/store_spec.rb +0 -75
  90. data/spec/lib/immutable/hash/subset_spec.rb +0 -42
  91. data/spec/lib/immutable/hash/superset_spec.rb +0 -42
  92. data/spec/lib/immutable/hash/take_spec.rb +0 -35
  93. data/spec/lib/immutable/hash/to_a_spec.rb +0 -13
  94. data/spec/lib/immutable/hash/to_hash_spec.rb +0 -21
  95. data/spec/lib/immutable/hash/to_proc_spec.rb +0 -39
  96. data/spec/lib/immutable/hash/update_in_spec.rb +0 -79
  97. data/spec/lib/immutable/hash/values_at_spec.rb +0 -33
  98. data/spec/lib/immutable/hash/values_spec.rb +0 -23
  99. data/spec/lib/immutable/list/add_spec.rb +0 -25
  100. data/spec/lib/immutable/list/all_spec.rb +0 -57
  101. data/spec/lib/immutable/list/any_spec.rb +0 -49
  102. data/spec/lib/immutable/list/append_spec.rb +0 -38
  103. data/spec/lib/immutable/list/at_spec.rb +0 -29
  104. data/spec/lib/immutable/list/break_spec.rb +0 -69
  105. data/spec/lib/immutable/list/cadr_spec.rb +0 -38
  106. data/spec/lib/immutable/list/chunk_spec.rb +0 -28
  107. data/spec/lib/immutable/list/clear_spec.rb +0 -24
  108. data/spec/lib/immutable/list/combination_spec.rb +0 -33
  109. data/spec/lib/immutable/list/compact_spec.rb +0 -34
  110. data/spec/lib/immutable/list/compare_spec.rb +0 -30
  111. data/spec/lib/immutable/list/cons_spec.rb +0 -25
  112. data/spec/lib/immutable/list/construction_spec.rb +0 -110
  113. data/spec/lib/immutable/list/copying_spec.rb +0 -19
  114. data/spec/lib/immutable/list/count_spec.rb +0 -36
  115. data/spec/lib/immutable/list/cycle_spec.rb +0 -28
  116. data/spec/lib/immutable/list/delete_at_spec.rb +0 -18
  117. data/spec/lib/immutable/list/delete_spec.rb +0 -16
  118. data/spec/lib/immutable/list/drop_spec.rb +0 -30
  119. data/spec/lib/immutable/list/drop_while_spec.rb +0 -38
  120. data/spec/lib/immutable/list/each_slice_spec.rb +0 -51
  121. data/spec/lib/immutable/list/each_spec.rb +0 -40
  122. data/spec/lib/immutable/list/each_with_index_spec.rb +0 -28
  123. data/spec/lib/immutable/list/empty_spec.rb +0 -23
  124. data/spec/lib/immutable/list/eql_spec.rb +0 -61
  125. data/spec/lib/immutable/list/fill_spec.rb +0 -49
  126. data/spec/lib/immutable/list/find_all_spec.rb +0 -70
  127. data/spec/lib/immutable/list/find_index_spec.rb +0 -35
  128. data/spec/lib/immutable/list/find_spec.rb +0 -42
  129. data/spec/lib/immutable/list/flat_map_spec.rb +0 -51
  130. data/spec/lib/immutable/list/flatten_spec.rb +0 -30
  131. data/spec/lib/immutable/list/grep_spec.rb +0 -46
  132. data/spec/lib/immutable/list/group_by_spec.rb +0 -41
  133. data/spec/lib/immutable/list/hash_spec.rb +0 -21
  134. data/spec/lib/immutable/list/head_spec.rb +0 -19
  135. data/spec/lib/immutable/list/include_spec.rb +0 -35
  136. data/spec/lib/immutable/list/index_spec.rb +0 -37
  137. data/spec/lib/immutable/list/indices_spec.rb +0 -61
  138. data/spec/lib/immutable/list/init_spec.rb +0 -28
  139. data/spec/lib/immutable/list/inits_spec.rb +0 -28
  140. data/spec/lib/immutable/list/insert_spec.rb +0 -46
  141. data/spec/lib/immutable/list/inspect_spec.rb +0 -29
  142. data/spec/lib/immutable/list/intersperse_spec.rb +0 -28
  143. data/spec/lib/immutable/list/join_spec.rb +0 -63
  144. data/spec/lib/immutable/list/last_spec.rb +0 -23
  145. data/spec/lib/immutable/list/ltlt_spec.rb +0 -19
  146. data/spec/lib/immutable/list/map_spec.rb +0 -45
  147. data/spec/lib/immutable/list/maximum_spec.rb +0 -39
  148. data/spec/lib/immutable/list/merge_by_spec.rb +0 -51
  149. data/spec/lib/immutable/list/merge_spec.rb +0 -59
  150. data/spec/lib/immutable/list/minimum_spec.rb +0 -39
  151. data/spec/lib/immutable/list/multithreading_spec.rb +0 -47
  152. data/spec/lib/immutable/list/none_spec.rb +0 -47
  153. data/spec/lib/immutable/list/one_spec.rb +0 -49
  154. data/spec/lib/immutable/list/partition_spec.rb +0 -115
  155. data/spec/lib/immutable/list/permutation_spec.rb +0 -55
  156. data/spec/lib/immutable/list/pop_spec.rb +0 -25
  157. data/spec/lib/immutable/list/product_spec.rb +0 -23
  158. data/spec/lib/immutable/list/reduce_spec.rb +0 -53
  159. data/spec/lib/immutable/list/reject_spec.rb +0 -45
  160. data/spec/lib/immutable/list/reverse_spec.rb +0 -34
  161. data/spec/lib/immutable/list/rotate_spec.rb +0 -36
  162. data/spec/lib/immutable/list/sample_spec.rb +0 -13
  163. data/spec/lib/immutable/list/select_spec.rb +0 -70
  164. data/spec/lib/immutable/list/size_spec.rb +0 -25
  165. data/spec/lib/immutable/list/slice_spec.rb +0 -229
  166. data/spec/lib/immutable/list/sorting_spec.rb +0 -46
  167. data/spec/lib/immutable/list/span_spec.rb +0 -76
  168. data/spec/lib/immutable/list/split_at_spec.rb +0 -43
  169. data/spec/lib/immutable/list/subsequences_spec.rb +0 -23
  170. data/spec/lib/immutable/list/sum_spec.rb +0 -23
  171. data/spec/lib/immutable/list/tail_spec.rb +0 -30
  172. data/spec/lib/immutable/list/tails_spec.rb +0 -28
  173. data/spec/lib/immutable/list/take_spec.rb +0 -30
  174. data/spec/lib/immutable/list/take_while_spec.rb +0 -46
  175. data/spec/lib/immutable/list/to_a_spec.rb +0 -39
  176. data/spec/lib/immutable/list/to_ary_spec.rb +0 -41
  177. data/spec/lib/immutable/list/to_list_spec.rb +0 -19
  178. data/spec/lib/immutable/list/to_set_spec.rb +0 -17
  179. data/spec/lib/immutable/list/transpose_spec.rb +0 -19
  180. data/spec/lib/immutable/list/union_spec.rb +0 -31
  181. data/spec/lib/immutable/list/uniq_spec.rb +0 -35
  182. data/spec/lib/immutable/list/zip_spec.rb +0 -23
  183. data/spec/lib/immutable/nested/construction_spec.rb +0 -101
  184. data/spec/lib/immutable/set/add_spec.rb +0 -77
  185. data/spec/lib/immutable/set/all_spec.rb +0 -51
  186. data/spec/lib/immutable/set/any_spec.rb +0 -51
  187. data/spec/lib/immutable/set/clear_spec.rb +0 -33
  188. data/spec/lib/immutable/set/compact_spec.rb +0 -30
  189. data/spec/lib/immutable/set/construction_spec.rb +0 -18
  190. data/spec/lib/immutable/set/copying_spec.rb +0 -13
  191. data/spec/lib/immutable/set/count_spec.rb +0 -36
  192. data/spec/lib/immutable/set/delete_spec.rb +0 -71
  193. data/spec/lib/immutable/set/difference_spec.rb +0 -49
  194. data/spec/lib/immutable/set/disjoint_spec.rb +0 -25
  195. data/spec/lib/immutable/set/each_spec.rb +0 -45
  196. data/spec/lib/immutable/set/empty_spec.rb +0 -44
  197. data/spec/lib/immutable/set/eqeq_spec.rb +0 -103
  198. data/spec/lib/immutable/set/eql_spec.rb +0 -109
  199. data/spec/lib/immutable/set/exclusion_spec.rb +0 -47
  200. data/spec/lib/immutable/set/find_spec.rb +0 -35
  201. data/spec/lib/immutable/set/first_spec.rb +0 -28
  202. data/spec/lib/immutable/set/flatten_spec.rb +0 -46
  203. data/spec/lib/immutable/set/grep_spec.rb +0 -57
  204. data/spec/lib/immutable/set/grep_v_spec.rb +0 -59
  205. data/spec/lib/immutable/set/group_by_spec.rb +0 -59
  206. data/spec/lib/immutable/set/hash_spec.rb +0 -22
  207. data/spec/lib/immutable/set/include_spec.rb +0 -60
  208. data/spec/lib/immutable/set/inspect_spec.rb +0 -47
  209. data/spec/lib/immutable/set/intersect_spec.rb +0 -25
  210. data/spec/lib/immutable/set/intersection_spec.rb +0 -52
  211. data/spec/lib/immutable/set/join_spec.rb +0 -64
  212. data/spec/lib/immutable/set/map_spec.rb +0 -59
  213. data/spec/lib/immutable/set/marshal_spec.rb +0 -28
  214. data/spec/lib/immutable/set/maximum_spec.rb +0 -36
  215. data/spec/lib/immutable/set/minimum_spec.rb +0 -36
  216. data/spec/lib/immutable/set/new_spec.rb +0 -53
  217. data/spec/lib/immutable/set/none_spec.rb +0 -47
  218. data/spec/lib/immutable/set/one_spec.rb +0 -47
  219. data/spec/lib/immutable/set/partition_spec.rb +0 -52
  220. data/spec/lib/immutable/set/product_spec.rb +0 -23
  221. data/spec/lib/immutable/set/reduce_spec.rb +0 -55
  222. data/spec/lib/immutable/set/reject_spec.rb +0 -50
  223. data/spec/lib/immutable/set/reverse_each_spec.rb +0 -38
  224. data/spec/lib/immutable/set/sample_spec.rb +0 -13
  225. data/spec/lib/immutable/set/select_spec.rb +0 -73
  226. data/spec/lib/immutable/set/size_spec.rb +0 -17
  227. data/spec/lib/immutable/set/sorting_spec.rb +0 -65
  228. data/spec/lib/immutable/set/subset_spec.rb +0 -51
  229. data/spec/lib/immutable/set/sum_spec.rb +0 -23
  230. data/spec/lib/immutable/set/superset_spec.rb +0 -51
  231. data/spec/lib/immutable/set/to_a_spec.rb +0 -30
  232. data/spec/lib/immutable/set/to_list_spec.rb +0 -35
  233. data/spec/lib/immutable/set/to_set_spec.rb +0 -19
  234. data/spec/lib/immutable/set/union_spec.rb +0 -63
  235. data/spec/lib/immutable/sorted_set/above_spec.rb +0 -51
  236. data/spec/lib/immutable/sorted_set/add_spec.rb +0 -62
  237. data/spec/lib/immutable/sorted_set/at_spec.rb +0 -24
  238. data/spec/lib/immutable/sorted_set/below_spec.rb +0 -51
  239. data/spec/lib/immutable/sorted_set/between_spec.rb +0 -51
  240. data/spec/lib/immutable/sorted_set/clear_spec.rb +0 -43
  241. data/spec/lib/immutable/sorted_set/copying_spec.rb +0 -20
  242. data/spec/lib/immutable/sorted_set/delete_at_spec.rb +0 -18
  243. data/spec/lib/immutable/sorted_set/delete_spec.rb +0 -89
  244. data/spec/lib/immutable/sorted_set/difference_spec.rb +0 -22
  245. data/spec/lib/immutable/sorted_set/disjoint_spec.rb +0 -25
  246. data/spec/lib/immutable/sorted_set/drop_spec.rb +0 -55
  247. data/spec/lib/immutable/sorted_set/drop_while_spec.rb +0 -34
  248. data/spec/lib/immutable/sorted_set/each_spec.rb +0 -28
  249. data/spec/lib/immutable/sorted_set/empty_spec.rb +0 -34
  250. data/spec/lib/immutable/sorted_set/eql_spec.rb +0 -120
  251. data/spec/lib/immutable/sorted_set/exclusion_spec.rb +0 -22
  252. data/spec/lib/immutable/sorted_set/fetch_spec.rb +0 -64
  253. data/spec/lib/immutable/sorted_set/find_index_spec.rb +0 -40
  254. data/spec/lib/immutable/sorted_set/first_spec.rb +0 -18
  255. data/spec/lib/immutable/sorted_set/from_spec.rb +0 -51
  256. data/spec/lib/immutable/sorted_set/group_by_spec.rb +0 -57
  257. data/spec/lib/immutable/sorted_set/include_spec.rb +0 -23
  258. data/spec/lib/immutable/sorted_set/inspect_spec.rb +0 -37
  259. data/spec/lib/immutable/sorted_set/intersect_spec.rb +0 -25
  260. data/spec/lib/immutable/sorted_set/intersection_spec.rb +0 -28
  261. data/spec/lib/immutable/sorted_set/last_spec.rb +0 -36
  262. data/spec/lib/immutable/sorted_set/map_spec.rb +0 -51
  263. data/spec/lib/immutable/sorted_set/marshal_spec.rb +0 -36
  264. data/spec/lib/immutable/sorted_set/maximum_spec.rb +0 -36
  265. data/spec/lib/immutable/sorted_set/minimum_spec.rb +0 -19
  266. data/spec/lib/immutable/sorted_set/new_spec.rb +0 -137
  267. data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +0 -28
  268. data/spec/lib/immutable/sorted_set/sample_spec.rb +0 -13
  269. data/spec/lib/immutable/sorted_set/select_spec.rb +0 -61
  270. data/spec/lib/immutable/sorted_set/size_spec.rb +0 -17
  271. data/spec/lib/immutable/sorted_set/slice_spec.rb +0 -256
  272. data/spec/lib/immutable/sorted_set/sorting_spec.rb +0 -56
  273. data/spec/lib/immutable/sorted_set/subset_spec.rb +0 -47
  274. data/spec/lib/immutable/sorted_set/superset_spec.rb +0 -47
  275. data/spec/lib/immutable/sorted_set/take_spec.rb +0 -54
  276. data/spec/lib/immutable/sorted_set/take_while_spec.rb +0 -33
  277. data/spec/lib/immutable/sorted_set/to_set_spec.rb +0 -17
  278. data/spec/lib/immutable/sorted_set/union_spec.rb +0 -58
  279. data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
  280. data/spec/lib/immutable/sorted_set/util_spec.rb +0 -48
  281. data/spec/lib/immutable/sorted_set/values_at_spec.rb +0 -33
  282. data/spec/lib/immutable/vector/add_spec.rb +0 -67
  283. data/spec/lib/immutable/vector/any_spec.rb +0 -69
  284. data/spec/lib/immutable/vector/assoc_spec.rb +0 -45
  285. data/spec/lib/immutable/vector/bsearch_spec.rb +0 -65
  286. data/spec/lib/immutable/vector/clear_spec.rb +0 -33
  287. data/spec/lib/immutable/vector/combination_spec.rb +0 -81
  288. data/spec/lib/immutable/vector/compact_spec.rb +0 -29
  289. data/spec/lib/immutable/vector/compare_spec.rb +0 -31
  290. data/spec/lib/immutable/vector/concat_spec.rb +0 -34
  291. data/spec/lib/immutable/vector/copying_spec.rb +0 -20
  292. data/spec/lib/immutable/vector/count_spec.rb +0 -17
  293. data/spec/lib/immutable/vector/delete_at_spec.rb +0 -53
  294. data/spec/lib/immutable/vector/delete_spec.rb +0 -30
  295. data/spec/lib/immutable/vector/dig_spec.rb +0 -30
  296. data/spec/lib/immutable/vector/drop_spec.rb +0 -41
  297. data/spec/lib/immutable/vector/drop_while_spec.rb +0 -54
  298. data/spec/lib/immutable/vector/each_index_spec.rb +0 -40
  299. data/spec/lib/immutable/vector/each_spec.rb +0 -44
  300. data/spec/lib/immutable/vector/each_with_index_spec.rb +0 -39
  301. data/spec/lib/immutable/vector/empty_spec.rb +0 -41
  302. data/spec/lib/immutable/vector/eql_spec.rb +0 -76
  303. data/spec/lib/immutable/vector/fetch_spec.rb +0 -64
  304. data/spec/lib/immutable/vector/fill_spec.rb +0 -88
  305. data/spec/lib/immutable/vector/first_spec.rb +0 -18
  306. data/spec/lib/immutable/vector/flat_map_spec.rb +0 -50
  307. data/spec/lib/immutable/vector/flatten_spec.rb +0 -58
  308. data/spec/lib/immutable/vector/get_spec.rb +0 -74
  309. data/spec/lib/immutable/vector/group_by_spec.rb +0 -57
  310. data/spec/lib/immutable/vector/include_spec.rb +0 -30
  311. data/spec/lib/immutable/vector/insert_spec.rb +0 -68
  312. data/spec/lib/immutable/vector/inspect_spec.rb +0 -49
  313. data/spec/lib/immutable/vector/join_spec.rb +0 -58
  314. data/spec/lib/immutable/vector/last_spec.rb +0 -45
  315. data/spec/lib/immutable/vector/length_spec.rb +0 -45
  316. data/spec/lib/immutable/vector/ltlt_spec.rb +0 -65
  317. data/spec/lib/immutable/vector/map_spec.rb +0 -51
  318. data/spec/lib/immutable/vector/marshal_spec.rb +0 -31
  319. data/spec/lib/immutable/vector/maximum_spec.rb +0 -33
  320. data/spec/lib/immutable/vector/minimum_spec.rb +0 -33
  321. data/spec/lib/immutable/vector/multiply_spec.rb +0 -47
  322. data/spec/lib/immutable/vector/new_spec.rb +0 -50
  323. data/spec/lib/immutable/vector/partition_spec.rb +0 -52
  324. data/spec/lib/immutable/vector/permutation_spec.rb +0 -91
  325. data/spec/lib/immutable/vector/pop_spec.rb +0 -26
  326. data/spec/lib/immutable/vector/product_spec.rb +0 -70
  327. data/spec/lib/immutable/vector/reduce_spec.rb +0 -55
  328. data/spec/lib/immutable/vector/reject_spec.rb +0 -43
  329. data/spec/lib/immutable/vector/repeated_combination_spec.rb +0 -77
  330. data/spec/lib/immutable/vector/repeated_permutation_spec.rb +0 -93
  331. data/spec/lib/immutable/vector/reverse_each_spec.rb +0 -31
  332. data/spec/lib/immutable/vector/reverse_spec.rb +0 -21
  333. data/spec/lib/immutable/vector/rindex_spec.rb +0 -36
  334. data/spec/lib/immutable/vector/rotate_spec.rb +0 -73
  335. data/spec/lib/immutable/vector/sample_spec.rb +0 -13
  336. data/spec/lib/immutable/vector/select_spec.rb +0 -63
  337. data/spec/lib/immutable/vector/set_spec.rb +0 -174
  338. data/spec/lib/immutable/vector/shift_spec.rb +0 -27
  339. data/spec/lib/immutable/vector/shuffle_spec.rb +0 -43
  340. data/spec/lib/immutable/vector/slice_spec.rb +0 -240
  341. data/spec/lib/immutable/vector/sorting_spec.rb +0 -56
  342. data/spec/lib/immutable/vector/sum_spec.rb +0 -17
  343. data/spec/lib/immutable/vector/take_spec.rb +0 -42
  344. data/spec/lib/immutable/vector/take_while_spec.rb +0 -34
  345. data/spec/lib/immutable/vector/to_a_spec.rb +0 -41
  346. data/spec/lib/immutable/vector/to_ary_spec.rb +0 -34
  347. data/spec/lib/immutable/vector/to_list_spec.rb +0 -30
  348. data/spec/lib/immutable/vector/to_set_spec.rb +0 -21
  349. data/spec/lib/immutable/vector/transpose_spec.rb +0 -48
  350. data/spec/lib/immutable/vector/uniq_spec.rb +0 -76
  351. data/spec/lib/immutable/vector/unshift_spec.rb +0 -28
  352. data/spec/lib/immutable/vector/update_in_spec.rb +0 -82
  353. data/spec/lib/immutable/vector/values_at_spec.rb +0 -33
  354. data/spec/lib/immutable/vector/zip_spec.rb +0 -57
  355. data/spec/lib/load_spec.rb +0 -42
  356. data/spec/spec_helper.rb +0 -96
@@ -1,229 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- let(:list) { L[1,2,3,4] }
5
- let(:big) { (1..10000).to_list }
6
-
7
- [:slice, :[]].each do |method|
8
- describe "##{method}" do
9
- context "when passed a positive integral index" do
10
- it "returns the element at that index" do
11
- list.send(method, 0).should be(1)
12
- list.send(method, 1).should be(2)
13
- list.send(method, 2).should be(3)
14
- list.send(method, 3).should be(4)
15
- list.send(method, 4).should be(nil)
16
- list.send(method, 10).should be(nil)
17
-
18
- big.send(method, 0).should be(1)
19
- big.send(method, 9999).should be(10000)
20
- end
21
-
22
- it "leaves the original unchanged" do
23
- list.should eql(L[1,2,3,4])
24
- end
25
- end
26
-
27
- context "when passed a negative integral index" do
28
- it "returns the element which is number (index.abs) counting from the end of the list" do
29
- list.send(method, -1).should be(4)
30
- list.send(method, -2).should be(3)
31
- list.send(method, -3).should be(2)
32
- list.send(method, -4).should be(1)
33
- list.send(method, -5).should be(nil)
34
- list.send(method, -10).should be(nil)
35
-
36
- big.send(method, -1).should be(10000)
37
- big.send(method, -10000).should be(1)
38
- end
39
- end
40
-
41
- context "when passed a positive integral index and count" do
42
- it "returns 'count' elements starting from 'index'" do
43
- list.send(method, 0, 0).should eql(L.empty)
44
- list.send(method, 0, 1).should eql(L[1])
45
- list.send(method, 0, 2).should eql(L[1,2])
46
- list.send(method, 0, 4).should eql(L[1,2,3,4])
47
- list.send(method, 0, 6).should eql(L[1,2,3,4])
48
- list.send(method, 0, -1).should be_nil
49
- list.send(method, 0, -2).should be_nil
50
- list.send(method, 0, -4).should be_nil
51
- list.send(method, 2, 0).should eql(L.empty)
52
- list.send(method, 2, 1).should eql(L[3])
53
- list.send(method, 2, 2).should eql(L[3,4])
54
- list.send(method, 2, 4).should eql(L[3,4])
55
- list.send(method, 2, -1).should be_nil
56
- list.send(method, 4, 0).should eql(L.empty)
57
- list.send(method, 4, 2).should eql(L.empty)
58
- list.send(method, 4, -1).should be_nil
59
- list.send(method, 5, 0).should be_nil
60
- list.send(method, 5, 2).should be_nil
61
- list.send(method, 5, -1).should be_nil
62
- list.send(method, 6, 0).should be_nil
63
- list.send(method, 6, 2).should be_nil
64
- list.send(method, 6, -1).should be_nil
65
-
66
- big.send(method, 0, 3).should eql(L[1,2,3])
67
- big.send(method, 1023, 4).should eql(L[1024,1025,1026,1027])
68
- big.send(method, 1024, 4).should eql(L[1025,1026,1027,1028])
69
- end
70
-
71
- it "leaves the original unchanged" do
72
- list.should eql(L[1,2,3,4])
73
- end
74
- end
75
-
76
- context "when passed a negative integral index and count" do
77
- it "returns 'count' elements, starting from index which is number 'index.abs' counting from the end of the array" do
78
- list.send(method, -1, 0).should eql(L.empty)
79
- list.send(method, -1, 1).should eql(L[4])
80
- list.send(method, -1, 2).should eql(L[4])
81
- list.send(method, -1, -1).should be_nil
82
- list.send(method, -2, 0).should eql(L.empty)
83
- list.send(method, -2, 1).should eql(L[3])
84
- list.send(method, -2, 2).should eql(L[3,4])
85
- list.send(method, -2, 4).should eql(L[3,4])
86
- list.send(method, -2, -1).should be_nil
87
- list.send(method, -4, 0).should eql(L.empty)
88
- list.send(method, -4, 1).should eql(L[1])
89
- list.send(method, -4, 2).should eql(L[1,2])
90
- list.send(method, -4, 4).should eql(L[1,2,3,4])
91
- list.send(method, -4, 6).should eql(L[1,2,3,4])
92
- list.send(method, -4, -1).should be_nil
93
- list.send(method, -5, 0).should be_nil
94
- list.send(method, -5, 1).should be_nil
95
- list.send(method, -5, 10).should be_nil
96
- list.send(method, -5, -1).should be_nil
97
-
98
- big.send(method, -1, 1).should eql(L[10000])
99
- big.send(method, -1, 2).should eql(L[10000])
100
- big.send(method, -6, 2).should eql(L[9995,9996])
101
- end
102
- end
103
-
104
- context "when passed a Range" do
105
- it "returns the elements whose indexes are within the given Range" do
106
- list.send(method, 0..-1).should eql(L[1,2,3,4])
107
- list.send(method, 0..-10).should eql(L.empty)
108
- list.send(method, 0..0).should eql(L[1])
109
- list.send(method, 0..1).should eql(L[1,2])
110
- list.send(method, 0..2).should eql(L[1,2,3])
111
- list.send(method, 0..3).should eql(L[1,2,3,4])
112
- list.send(method, 0..4).should eql(L[1,2,3,4])
113
- list.send(method, 0..10).should eql(L[1,2,3,4])
114
- list.send(method, 2..-10).should eql(L.empty)
115
- list.send(method, 2..0).should eql(L.empty)
116
- list.send(method, 2..2).should eql(L[3])
117
- list.send(method, 2..3).should eql(L[3,4])
118
- list.send(method, 2..4).should eql(L[3,4])
119
- list.send(method, 3..0).should eql(L.empty)
120
- list.send(method, 3..3).should eql(L[4])
121
- list.send(method, 3..4).should eql(L[4])
122
- list.send(method, 4..0).should eql(L.empty)
123
- list.send(method, 4..4).should eql(L.empty)
124
- list.send(method, 4..5).should eql(L.empty)
125
- list.send(method, 5..0).should be_nil
126
- list.send(method, 5..5).should be_nil
127
- list.send(method, 5..6).should be_nil
128
-
129
- big.send(method, 159..162).should eql(L[160,161,162,163])
130
- big.send(method, 160..162).should eql(L[161,162,163])
131
- big.send(method, 161..162).should eql(L[162,163])
132
- big.send(method, 9999..10100).should eql(L[10000])
133
- big.send(method, 10000..10100).should eql(L.empty)
134
- big.send(method, 10001..10100).should be_nil
135
-
136
- list.send(method, 0...-1).should eql(L[1,2,3])
137
- list.send(method, 0...-10).should eql(L.empty)
138
- list.send(method, 0...0).should eql(L.empty)
139
- list.send(method, 0...1).should eql(L[1])
140
- list.send(method, 0...2).should eql(L[1,2])
141
- list.send(method, 0...3).should eql(L[1,2,3])
142
- list.send(method, 0...4).should eql(L[1,2,3,4])
143
- list.send(method, 0...10).should eql(L[1,2,3,4])
144
- list.send(method, 2...-10).should eql(L.empty)
145
- list.send(method, 2...0).should eql(L.empty)
146
- list.send(method, 2...2).should eql(L.empty)
147
- list.send(method, 2...3).should eql(L[3])
148
- list.send(method, 2...4).should eql(L[3,4])
149
- list.send(method, 3...0).should eql(L.empty)
150
- list.send(method, 3...3).should eql(L.empty)
151
- list.send(method, 3...4).should eql(L[4])
152
- list.send(method, 4...0).should eql(L.empty)
153
- list.send(method, 4...4).should eql(L.empty)
154
- list.send(method, 4...5).should eql(L.empty)
155
- list.send(method, 5...0).should be_nil
156
- list.send(method, 5...5).should be_nil
157
- list.send(method, 5...6).should be_nil
158
-
159
- big.send(method, 159...162).should eql(L[160,161,162])
160
- big.send(method, 160...162).should eql(L[161,162])
161
- big.send(method, 161...162).should eql(L[162])
162
- big.send(method, 9999...10100).should eql(L[10000])
163
- big.send(method, 10000...10100).should eql(L.empty)
164
- big.send(method, 10001...10100).should be_nil
165
-
166
- list.send(method, -1..-1).should eql(L[4])
167
- list.send(method, -1...-1).should eql(L.empty)
168
- list.send(method, -1..3).should eql(L[4])
169
- list.send(method, -1...3).should eql(L.empty)
170
- list.send(method, -1..4).should eql(L[4])
171
- list.send(method, -1...4).should eql(L[4])
172
- list.send(method, -1..10).should eql(L[4])
173
- list.send(method, -1...10).should eql(L[4])
174
- list.send(method, -1..0).should eql(L.empty)
175
- list.send(method, -1..-4).should eql(L.empty)
176
- list.send(method, -1...-4).should eql(L.empty)
177
- list.send(method, -1..-6).should eql(L.empty)
178
- list.send(method, -1...-6).should eql(L.empty)
179
- list.send(method, -2..-2).should eql(L[3])
180
- list.send(method, -2...-2).should eql(L.empty)
181
- list.send(method, -2..-1).should eql(L[3,4])
182
- list.send(method, -2...-1).should eql(L[3])
183
- list.send(method, -2..10).should eql(L[3,4])
184
- list.send(method, -2...10).should eql(L[3,4])
185
-
186
- big.send(method, -1..-1).should eql(L[10000])
187
- big.send(method, -1..9999).should eql(L[10000])
188
- big.send(method, -1...9999).should eql(L.empty)
189
- big.send(method, -2...9999).should eql(L[9999])
190
- big.send(method, -2..-1).should eql(L[9999,10000])
191
-
192
- list.send(method, -4..-4).should eql(L[1])
193
- list.send(method, -4..-2).should eql(L[1,2,3])
194
- list.send(method, -4...-2).should eql(L[1,2])
195
- list.send(method, -4..-1).should eql(L[1,2,3,4])
196
- list.send(method, -4...-1).should eql(L[1,2,3])
197
- list.send(method, -4..3).should eql(L[1,2,3,4])
198
- list.send(method, -4...3).should eql(L[1,2,3])
199
- list.send(method, -4..4).should eql(L[1,2,3,4])
200
- list.send(method, -4...4).should eql(L[1,2,3,4])
201
- list.send(method, -4..0).should eql(L[1])
202
- list.send(method, -4...0).should eql(L.empty)
203
- list.send(method, -4..1).should eql(L[1,2])
204
- list.send(method, -4...1).should eql(L[1])
205
-
206
- list.send(method, -5..-5).should be_nil
207
- list.send(method, -5...-5).should be_nil
208
- list.send(method, -5..-4).should be_nil
209
- list.send(method, -5..-1).should be_nil
210
- list.send(method, -5..10).should be_nil
211
-
212
- big.send(method, -10001..-1).should be_nil
213
- end
214
-
215
- it "leaves the original unchanged" do
216
- list.should eql(L[1,2,3,4])
217
- end
218
- end
219
- end
220
-
221
- context "when passed a subclass of Range" do
222
- it "works the same as with a Range" do
223
- subclass = Class.new(Range)
224
- list.send(method, subclass.new(1,2)).should eql(L[2,3])
225
- list.send(method, subclass.new(-3,-1,true)).should eql(L[2,3])
226
- end
227
- end
228
- end
229
- end
@@ -1,46 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::List do
4
- [
5
- [:sort, ->(left, right) { left.length <=> right.length }],
6
- [:sort_by, ->(item) { item.length }],
7
- ].each do |method, comparator|
8
- describe "##{method}" do
9
- it "is lazy" do
10
- -> { Immutable.stream { fail }.send(method, &comparator) }.should_not raise_error
11
- end
12
-
13
- [
14
- [[], []],
15
- [["A"], ["A"]],
16
- [%w[Ichi Ni San], %w[Ni San Ichi]],
17
- ].each do |values, expected|
18
- context "on #{values.inspect}" do
19
- let(:list) { L[*values] }
20
-
21
- context "with a block" do
22
- it "preserves the original" do
23
- list.send(method, &comparator)
24
- list.should == L[*values]
25
- end
26
-
27
- it "returns #{expected.inspect}" do
28
- list.send(method, &comparator).should == L[*expected]
29
- end
30
- end
31
-
32
- context "without a block" do
33
- it "preserves the original" do
34
- list.send(method)
35
- list.should eql(L[*values])
36
- end
37
-
38
- it "returns #{expected.sort.inspect}" do
39
- list.send(method).should == L[*expected.sort]
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,76 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "List#span" do
4
- it "is lazy" do
5
- -> { Immutable.stream { |item| fail }.span { true } }.should_not raise_error
6
- end
7
-
8
- describe <<-DESC do
9
- given a predicate (in the form of a block), splits the list into two lists
10
- (returned as an array) such that elements in the first list (the prefix) are
11
- taken from the head of the list while the predicate is satisfied, and elements
12
- in the second list (the remainder) are the remaining elements from the list
13
- once the predicate is not satisfied. For example:
14
- DESC
15
-
16
- [
17
- [[], [], []],
18
- [[1], [1], []],
19
- [[1, 2], [1, 2], []],
20
- [[1, 2, 3], [1, 2], [3]],
21
- [[1, 2, 3, 4], [1, 2], [3, 4]],
22
- [[2, 3, 4], [2], [3, 4]],
23
- [[3, 4], [], [3, 4]],
24
- [[4], [], [4]],
25
- ].each do |values, expected_prefix, expected_remainder|
26
- context "given the list #{values.inspect}" do
27
- let(:list) { L[*values] }
28
-
29
- context "and a predicate that returns true for values <= 2" do
30
- let(:result) { list.span { |item| item <= 2 }}
31
- let(:prefix) { result.first }
32
- let(:remainder) { result.last }
33
-
34
- it "preserves the original" do
35
- result
36
- list.should eql(L[*values])
37
- end
38
-
39
- it "returns the prefix as #{expected_prefix.inspect}" do
40
- prefix.should eql(L[*expected_prefix])
41
- end
42
-
43
- it "returns the remainder as #{expected_remainder.inspect}" do
44
- remainder.should eql(L[*expected_remainder])
45
- end
46
-
47
- it "calls the block only once for each element" do
48
- count = 0
49
- result = list.span { |item| count += 1; item <= 2 }
50
- # force realization of lazy lists
51
- result.first.size.should == expected_prefix.size
52
- result.last.size.should == expected_remainder.size
53
- # it may not need to call the block on every element, just up to the
54
- # point where the block first returns a false value
55
- count.should <= values.size
56
- end
57
- end
58
-
59
- context "without a predicate" do
60
- it "returns a frozen array" do
61
- list.span.class.should be(Array)
62
- list.span.should be_frozen
63
- end
64
-
65
- it "returns self as the prefix" do
66
- list.span.first.should equal(list)
67
- end
68
-
69
- it "returns an empty list as the remainder" do
70
- list.span.last.should be_empty
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -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
- -> { BigList.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
- -> { BigList.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
- -> { BigList.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
- -> { BigList.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