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,9 +0,0 @@
1
- class Struct
2
- # Implement Struct#to_h for Ruby interpreters which don't have it
3
- # (such as MRI 1.9.3 and lower)
4
- unless method_defined?(:to_h)
5
- def to_h
6
- Hash[each_pair.to_a]
7
- end
8
- end
9
- end
@@ -1,3 +0,0 @@
1
- A
2
- B
3
- C
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Array do
4
- let(:array) { %w[A B C] }
5
-
6
- describe "#to_list" do
7
- let(:to_list) { array.to_list }
8
-
9
- it "returns an equivalent Immutable list" do
10
- expect(to_list).to eq(L["A", "B", "C"])
11
- end
12
- end
13
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Enumerable do
4
- class TestEnumerable
5
- include Enumerable
6
-
7
- def initialize(*values)
8
- @values = values
9
- end
10
-
11
- def each(&block)
12
- @values.each(&block)
13
- end
14
- end
15
-
16
- let(:enumerable) { TestEnumerable.new("A", "B", "C") }
17
-
18
- describe "#to_list" do
19
- let(:to_list) { enumerable.to_list }
20
-
21
- it "returns an equivalent list" do
22
- expect(to_list).to eq(L["A", "B", "C"])
23
- end
24
-
25
- it "works on Ranges" do
26
- expect((1..3).to_list).to eq(L[1, 2, 3])
27
- end
28
- end
29
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe IO do
4
- describe "#to_list" do
5
- let(:list) { L["A\n", "B\n", "C\n"] }
6
- let(:to_list) { io.to_list }
7
-
8
- after(:each) do
9
- io.close
10
- end
11
-
12
- context "with a File" do
13
- let(:io) { File.new(fixture_path("io_spec.txt")) }
14
-
15
- it "returns an equivalent list" do
16
- expect(to_list).to eq(list)
17
- end
18
- end
19
-
20
- context "with a StringIO" do
21
- let(:io) { StringIO.new(fixture("io_spec.txt")) }
22
-
23
- it "returns an equivalent list" do
24
- expect(to_list).to eq(list)
25
- end
26
- end
27
- end
28
- end
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#clear" do
5
- [
6
- [],
7
- ["A"],
8
- %w[A B C],
9
- ].each do |values|
10
- context "on #{values}" do
11
- let(:deque) { D[*values] }
12
-
13
- it "preserves the original" do
14
- deque.clear
15
- deque.should eql(D[*values])
16
- end
17
-
18
- it "returns an empty deque" do
19
- deque.clear.should equal(D.empty)
20
- end
21
- end
22
- end
23
- end
24
-
25
- context "from a subclass" do
26
- it "returns an instance of the subclass" do
27
- subclass = Class.new(Immutable::Deque)
28
- instance = subclass.new([1,2])
29
- instance.clear.should be_empty
30
- instance.clear.class.should be(subclass)
31
- end
32
- end
33
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe ".[]" do
5
- context "with no arguments" do
6
- it "always returns the same instance" do
7
- D[].class.should be(Immutable::Deque)
8
- D[].should equal(D[])
9
- end
10
-
11
- it "returns an empty, frozen deque" do
12
- D[].should be_empty
13
- D[].should be_frozen
14
- end
15
- end
16
-
17
- context "with a number of items" do
18
- let(:deque) { D["A", "B", "C"] }
19
-
20
- it "always returns a different instance" do
21
- deque.should_not equal(D["A", "B", "C"])
22
- end
23
-
24
- it "is the same as repeatedly using #endeque" do
25
- deque.should eql(D.empty.enqueue("A").enqueue("B").enqueue("C"))
26
- end
27
- end
28
- end
29
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque 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(:deque) { D[*values] }
12
-
13
- it "returns self" do
14
- deque.send(method).should equal(deque)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,34 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- [:dequeue, :shift].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], []],
8
- [["A"], []],
9
- [%w[A B C], %w[B C]],
10
- ].each do |values, expected|
11
- context "on #{values.inspect}" do
12
- let(:deque) { D[*values] }
13
-
14
- it "preserves the original" do
15
- deque.send(method)
16
- deque.should eql(D[*values])
17
- end
18
-
19
- it "returns #{expected.inspect}" do
20
- deque.send(method).should eql(D[*expected])
21
- end
22
- end
23
- end
24
- end
25
-
26
- context "on empty subclass" do
27
- let(:subclass) { Class.new(Immutable::Deque) }
28
- let(:empty_instance) { subclass.new }
29
- it "returns empty object of same class" do
30
- empty_instance.send(method).class.should be subclass
31
- end
32
- end
33
- end
34
- end
@@ -1,39 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#empty?" do
5
- [
6
- [[], true],
7
- [["A"], false],
8
- [%w[A B C], false],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- it "returns #{expected.inspect}" do
12
- D[*values].empty?.should == expected
13
- end
14
- end
15
- end
16
-
17
- context "after dedequeing an item from #{%w[A B C].inspect}" do
18
- it "returns false" do
19
- D["A", "B", "C"].dequeue.should_not be_empty
20
- end
21
- end
22
- end
23
-
24
- describe ".empty" do
25
- it "returns the canonical empty deque" do
26
- D.empty.size.should be(0)
27
- D.empty.class.should be(Immutable::Deque)
28
- D.empty.object_id.should be(Immutable::EmptyDeque.object_id)
29
- end
30
-
31
- context "from a subclass" do
32
- it "returns an empty instance of the subclass" do
33
- subclass = Class.new(Immutable::Deque)
34
- subclass.empty.class.should be(subclass)
35
- subclass.empty.should be_empty
36
- end
37
- end
38
- end
39
- end
@@ -1,27 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- [:enqueue, :push].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], "A", ["A"]],
8
- [["A"], "B", %w[A B]],
9
- [["A"], "A", %w[A A]],
10
- [%w[A B C], "D", %w[A B C D]],
11
- ].each do |values, new_value, expected|
12
- describe "on #{values.inspect} with #{new_value.inspect}" do
13
- let(:deque) { D[*values] }
14
-
15
- it "preserves the original" do
16
- deque.send(method, new_value)
17
- deque.should eql(D[*values])
18
- end
19
-
20
- it "returns #{expected.inspect}" do
21
- deque.send(method, new_value).should eql(D[*expected])
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#first" do
5
- [
6
- [[], nil],
7
- [["A"], "A"],
8
- [%w[A B C], "A"],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- it "returns #{expected.inspect}" do
12
- D[*values].first.should == expected
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#inspect" do
5
- [
6
- [[], 'Immutable::Deque[]'],
7
- [["A"], 'Immutable::Deque["A"]'],
8
- [%w[A B C], 'Immutable::Deque["A", "B", "C"]']
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- let(:deque) { D[*values] }
12
-
13
- it "returns #{expected.inspect}" do
14
- deque.inspect.should == expected
15
- end
16
-
17
- it "returns a string which can be eval'd to get an equivalent object" do
18
- eval(deque.inspect).should eql(deque)
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,17 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#last" do
5
- [
6
- [[], nil],
7
- [["A"], "A"],
8
- [%w[A B C], "C"],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- it "returns #{expected.inspect}" do
12
- D[*values].last.should eql(expected)
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#marshal_dump/#marshal_load" do
5
- let(:ruby) do
6
- File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
7
- end
8
- let(:child_cmd) do
9
- %Q|#{ruby} -I lib -r immutable -e 'deque = Immutable::Deque[5, 10, 15]; $stdout.write(Marshal.dump(deque))'|
10
- end
11
-
12
- let(:reloaded_deque) do
13
- IO.popen(child_cmd, "r+") do |child|
14
- reloaded_deque = Marshal.load(child)
15
- child.close
16
- reloaded_deque
17
- end
18
- end
19
-
20
- it "can survive dumping and loading into a new process" do
21
- expect(reloaded_deque).to eql(D[5, 10, 15])
22
- end
23
-
24
- it "is still possible to push and pop items after loading" do
25
- expect(reloaded_deque.first).to eq(5)
26
- expect(reloaded_deque.last).to eq(15)
27
- expect(reloaded_deque.push(20)).to eql(D[5, 10, 15, 20])
28
- expect(reloaded_deque.pop).to eql(D[5, 10])
29
- expect(reloaded_deque.unshift(1)).to eql(D[1, 5, 10, 15])
30
- expect(reloaded_deque.shift).to eql(D[10, 15])
31
- end
32
- end
33
- end
@@ -1,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe ".new" do
5
- it "accepts a single enumerable argument and creates a new deque" do
6
- deque = Immutable::Deque.new([1,2,3])
7
- deque.size.should be(3)
8
- deque.first.should be(1)
9
- deque.dequeue.first.should be(2)
10
- deque.dequeue.dequeue.first.should be(3)
11
- end
12
-
13
- it "is amenable to overriding of #initialize" do
14
- class SnazzyDeque < Immutable::Deque
15
- def initialize
16
- super(['SNAZZY!!!'])
17
- end
18
- end
19
-
20
- deque = SnazzyDeque.new
21
- deque.size.should be(1)
22
- deque.to_a.should == ['SNAZZY!!!']
23
- end
24
-
25
- context "from a subclass" do
26
- it "returns a frozen instance of the subclass" do
27
- subclass = Class.new(Immutable::Deque)
28
- instance = subclass.new(["some", "values"])
29
- instance.class.should be subclass
30
- instance.frozen?.should be true
31
- end
32
- end
33
- end
34
-
35
- describe ".[]" do
36
- it "accepts a variable number of items and creates a new deque" do
37
- deque = Immutable::Deque['a', 'b']
38
- deque.size.should be(2)
39
- deque.first.should == 'a'
40
- deque.dequeue.first.should == 'b'
41
- end
42
- end
43
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#pop" do
5
- [
6
- [[], []],
7
- [["A"], []],
8
- [%w[A B C], %w[A B]],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- let(:deque) { D[*values] }
12
-
13
- it "preserves the original" do
14
- deque.pop
15
- deque.should eql(D[*values])
16
- end
17
-
18
- it "returns #{expected.inspect}" do
19
- deque.pop.should eql(D[*expected])
20
- end
21
-
22
- it "returns a frozen instance" do
23
- deque.pop.should be_frozen
24
- end
25
- end
26
- end
27
-
28
- context "on empty subclass" do
29
- let(:subclass) { Class.new(Immutable::Deque) }
30
- let(:empty_instance) { subclass.new }
31
- it "returns an empty object of the same class" do
32
- empty_instance.pop.class.should be subclass
33
- end
34
- end
35
- end
36
- end
@@ -1,23 +0,0 @@
1
- require "spec_helper"
2
- require "pp"
3
- require "stringio"
4
-
5
- describe Immutable::Deque do
6
- describe "#pretty_print" do
7
- let(:deque) { Immutable::Deque["AAAA", "BBBB", "CCCC"] }
8
- let(:stringio) { StringIO.new }
9
-
10
- it "prints the whole Deque on one line if it fits" do
11
- PP.pp(deque, stringio, 80)
12
- stringio.string.chomp.should == 'Immutable::Deque["AAAA", "BBBB", "CCCC"]'
13
- end
14
-
15
- it "prints each item on its own line, if not" do
16
- PP.pp(deque, stringio, 10)
17
- stringio.string.chomp.should == 'Immutable::Deque[
18
- "AAAA",
19
- "BBBB",
20
- "CCCC"]'
21
- end
22
- end
23
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#push" do
5
- [
6
- [[], "A", ["A"]],
7
- [["A"], "B", %w[A B]],
8
- [%w[A B C], "D", %w[A B C D]],
9
- ].each do |original, item, expected|
10
- context "pushing #{item.inspect} into #{original.inspect}" do
11
- let(:deque) { D.new(original) }
12
-
13
- it "preserves the original" do
14
- deque.push(item)
15
- deque.should eql(D.new(original))
16
- end
17
-
18
- it "returns #{expected.inspect}" do
19
- deque.push(item).should eql(D.new(expected))
20
- end
21
-
22
- it "returns a frozen instance" do
23
- deque.push(item).should be_frozen
24
- end
25
- end
26
- end
27
-
28
- context "on a subclass" do
29
- let(:subclass) { Class.new(Immutable::Deque) }
30
- let(:empty_instance) { subclass.new }
31
- it "returns an object of same class" do
32
- empty_instance.push(1).class.should be subclass
33
- end
34
- end
35
- end
36
- end
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "modification (using #push, #pop, #shift, and #unshift)" do
5
- it "works when applied in many random combinations" do
6
- array = [1,2,3]
7
- deque = Immutable::Deque.new(array)
8
- 1000.times do
9
- case [:push, :pop, :shift, :unshift].sample
10
- when :push
11
- value = rand(10000)
12
- array.push(value)
13
- deque = deque.push(value)
14
- when :pop
15
- array.pop
16
- deque = deque.pop
17
- when :shift
18
- array.shift
19
- deque = deque.shift
20
- when :unshift
21
- value = rand(10000)
22
- array.unshift(value)
23
- deque = deque.unshift(value)
24
- end
25
-
26
- deque.to_a.should eql(array)
27
- deque.size.should == array.size
28
- deque.first.should == array.first
29
- deque.last.should == array.last
30
- end
31
- end
32
- end
33
- end
@@ -1,68 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
-
5
- # Deques can have items distributed differently between the 'front' and 'rear' lists
6
- # and still be equivalent
7
- # Since the implementation of #rotate depends on how items are distributed between the
8
- # two lists, we need to test both the case where most items are on the 'front' and
9
- # where most are on the 'rear'
10
- big_front = D.alloc(L.from_enum([1, 2, 3]), L.from_enum([5, 4]))
11
- big_rear = D.alloc(L.from_enum([1, 2]), L.from_enum([5, 4, 3]))
12
-
13
- describe "#rotate" do
14
- [
15
- [[], 9999, []],
16
- [['A'], -1, ['A']],
17
- [['A', 'B', 'C'], -1, ['B', 'C', 'A']],
18
- [['A', 'B', 'C', 'D'], 0, ['A', 'B', 'C', 'D']],
19
- [%w[A B C D], 2, %w[C D A B]],
20
- ].each do |values, rotation, expected|
21
- context "on #{values.inspect}" do
22
- let(:deque) { D[*values] }
23
-
24
- it "preserves the original" do
25
- deque.rotate(rotation)
26
- deque.should eql(D[*values])
27
- end
28
-
29
- it "returns #{expected.inspect}" do
30
- deque.rotate(rotation).should eql(D[*expected])
31
- end
32
-
33
- it "returns a frozen instance" do
34
- deque.rotate(rotation).should be_frozen
35
- end
36
- end
37
- end
38
-
39
- context "on a Deque with most items on 'front' list" do
40
- it "works with a small rotation" do
41
- big_front.rotate(2).should eql(D[4, 5, 1, 2, 3])
42
- end
43
-
44
- it "works with a larger rotation" do
45
- big_front.rotate(4).should eql(D[2, 3, 4, 5, 1])
46
- end
47
- end
48
-
49
- context "on a Deque with most items on 'rear' list" do
50
- it "works with a small rotation" do
51
- big_rear.rotate(2).should eql(D[4, 5, 1, 2, 3])
52
- end
53
-
54
- it "works with a larger rotation" do
55
- big_rear.rotate(4).should eql(D[2, 3, 4, 5, 1])
56
- end
57
- end
58
-
59
- context "on empty subclass" do
60
- let(:subclass) { Class.new(Immutable::Deque) }
61
- let(:empty_instance) { subclass.new }
62
- it "returns an empty object of the same class" do
63
- empty_instance.rotate(1).class.should be subclass
64
- empty_instance.rotate(-1).class.should be subclass
65
- end
66
- end
67
- end
68
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- describe "#shift" do
5
- [
6
- [[], []],
7
- [["A"], []],
8
- [%w[A B C], %w[B C]],
9
- ].each do |values, expected|
10
- context "on #{values.inspect}" do
11
- let(:deque) { D.new(values) }
12
-
13
- it "preserves the original" do
14
- deque.shift
15
- deque.should eql(D.new(values))
16
- end
17
-
18
- it "returns #{expected.inspect}" do
19
- deque.shift.should eql(D.new(expected))
20
- end
21
-
22
-
23
- it "returns a frozen instance" do
24
- deque.shift.should be_frozen
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Immutable::Deque do
4
- [:size, :length].each do |method|
5
- describe "##{method}" do
6
- [
7
- [[], 0],
8
- [["A"], 1],
9
- [%w[A B C], 3],
10
- ].each do |values, expected|
11
- context "on #{values.inspect}" do
12
- it "returns #{expected.inspect}" do
13
- D[*values].send(method).should == expected
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end