hamster 1.0.1.pre.rc3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (358) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hamster.rb +2 -0
  3. data/lib/hamster/associable.rb +49 -0
  4. data/lib/hamster/core_ext/enumerable.rb +3 -13
  5. data/lib/hamster/core_ext/io.rb +1 -1
  6. data/lib/hamster/core_ext/struct.rb +9 -0
  7. data/lib/hamster/deque.rb +57 -38
  8. data/lib/hamster/enumerable.rb +14 -41
  9. data/lib/hamster/experimental/mutable_queue.rb +5 -8
  10. data/lib/hamster/experimental/mutable_set.rb +6 -7
  11. data/lib/hamster/hash.rb +301 -110
  12. data/lib/hamster/immutable.rb +1 -1
  13. data/lib/hamster/list.rb +479 -194
  14. data/lib/hamster/mutable_hash.rb +6 -7
  15. data/lib/hamster/nested.rb +78 -0
  16. data/lib/hamster/read_copy_update.rb +1 -1
  17. data/lib/hamster/set.rb +198 -88
  18. data/lib/hamster/sorted_set.rb +706 -261
  19. data/lib/hamster/trie.rb +134 -15
  20. data/lib/hamster/vector.rb +571 -140
  21. data/lib/hamster/version.rb +3 -1
  22. data/spec/lib/hamster/associable/associable_spec.rb +150 -0
  23. data/spec/lib/hamster/core_ext/array_spec.rb +1 -1
  24. data/spec/lib/hamster/core_ext/enumerable_spec.rb +2 -2
  25. data/spec/lib/hamster/core_ext/io_spec.rb +1 -1
  26. data/spec/lib/hamster/deque/clear_spec.rb +3 -3
  27. data/spec/lib/hamster/deque/construction_spec.rb +8 -8
  28. data/spec/lib/hamster/deque/copying_spec.rb +1 -1
  29. data/spec/lib/hamster/deque/dequeue_spec.rb +12 -4
  30. data/spec/lib/hamster/deque/empty_spec.rb +14 -16
  31. data/spec/lib/hamster/deque/enqueue_spec.rb +4 -4
  32. data/spec/lib/hamster/deque/first_spec.rb +18 -0
  33. data/spec/lib/hamster/deque/inspect_spec.rb +1 -1
  34. data/spec/lib/hamster/deque/last_spec.rb +9 -11
  35. data/spec/lib/hamster/deque/marshal_spec.rb +6 -6
  36. data/spec/lib/hamster/deque/new_spec.rb +5 -5
  37. data/spec/lib/hamster/deque/pop_spec.rb +15 -3
  38. data/spec/lib/hamster/deque/pretty_print_spec.rb +24 -0
  39. data/spec/lib/hamster/deque/push_spec.rb +37 -0
  40. data/spec/lib/hamster/deque/shift_spec.rb +30 -0
  41. data/spec/lib/hamster/deque/size_spec.rb +1 -1
  42. data/spec/lib/hamster/deque/to_a_spec.rb +2 -2
  43. data/spec/lib/hamster/deque/to_ary_spec.rb +1 -1
  44. data/spec/lib/hamster/deque/to_list_spec.rb +3 -3
  45. data/spec/lib/hamster/deque/unshift_spec.rb +8 -3
  46. data/spec/lib/hamster/experimental/mutable_set/add_qm_spec.rb +3 -3
  47. data/spec/lib/hamster/experimental/mutable_set/add_spec.rb +3 -3
  48. data/spec/lib/hamster/experimental/mutable_set/delete_qm_spec.rb +3 -3
  49. data/spec/lib/hamster/experimental/mutable_set/delete_spec.rb +3 -3
  50. data/spec/lib/hamster/hash/all_spec.rb +32 -34
  51. data/spec/lib/hamster/hash/any_spec.rb +34 -36
  52. data/spec/lib/hamster/hash/assoc_spec.rb +3 -3
  53. data/spec/lib/hamster/hash/clear_spec.rb +4 -4
  54. data/spec/lib/hamster/hash/construction_spec.rb +8 -8
  55. data/spec/lib/hamster/hash/copying_spec.rb +1 -1
  56. data/spec/lib/hamster/hash/default_proc_spec.rb +3 -3
  57. data/spec/lib/hamster/hash/delete_spec.rb +4 -4
  58. data/spec/lib/hamster/hash/each_spec.rb +3 -3
  59. data/spec/lib/hamster/hash/each_with_index_spec.rb +1 -1
  60. data/spec/lib/hamster/hash/empty_spec.rb +13 -15
  61. data/spec/lib/hamster/hash/eql_spec.rb +4 -4
  62. data/spec/lib/hamster/hash/except_spec.rb +7 -7
  63. data/spec/lib/hamster/hash/fetch_spec.rb +10 -10
  64. data/spec/lib/hamster/hash/find_spec.rb +2 -2
  65. data/spec/lib/hamster/hash/flat_map_spec.rb +4 -4
  66. data/spec/lib/hamster/hash/flatten_spec.rb +13 -13
  67. data/spec/lib/hamster/hash/get_spec.rb +7 -7
  68. data/spec/lib/hamster/hash/has_key_spec.rb +3 -3
  69. data/spec/lib/hamster/hash/has_value_spec.rb +4 -4
  70. data/spec/lib/hamster/hash/hash_spec.rb +5 -5
  71. data/spec/lib/hamster/hash/inspect_spec.rb +2 -2
  72. data/spec/lib/hamster/hash/invert_spec.rb +6 -6
  73. data/spec/lib/hamster/hash/key_spec.rb +2 -2
  74. data/spec/lib/hamster/hash/keys_spec.rb +2 -2
  75. data/spec/lib/hamster/hash/map_spec.rb +4 -4
  76. data/spec/lib/hamster/hash/marshal_spec.rb +2 -2
  77. data/spec/lib/hamster/hash/merge_spec.rb +62 -56
  78. data/spec/lib/hamster/hash/min_max_spec.rb +9 -13
  79. data/spec/lib/hamster/hash/new_spec.rb +6 -6
  80. data/spec/lib/hamster/hash/none_spec.rb +3 -3
  81. data/spec/lib/hamster/hash/partition_spec.rb +2 -2
  82. data/spec/lib/hamster/hash/put_spec.rb +29 -7
  83. data/spec/lib/hamster/hash/reduce_spec.rb +4 -4
  84. data/spec/lib/hamster/hash/{remove_spec.rb → reject_spec.rb} +7 -7
  85. data/spec/lib/hamster/hash/reverse_each_spec.rb +1 -1
  86. data/spec/lib/hamster/hash/{filter_spec.rb → select_spec.rb} +6 -6
  87. data/spec/lib/hamster/hash/size_spec.rb +3 -3
  88. data/spec/lib/hamster/hash/slice_spec.rb +4 -4
  89. data/spec/lib/hamster/hash/sort_spec.rb +2 -2
  90. data/spec/lib/hamster/hash/store_spec.rb +29 -7
  91. data/spec/lib/hamster/hash/take_spec.rb +2 -2
  92. data/spec/lib/hamster/hash/to_a_spec.rb +1 -1
  93. data/spec/lib/hamster/hash/to_hash_spec.rb +4 -4
  94. data/spec/lib/hamster/hash/values_at_spec.rb +3 -3
  95. data/spec/lib/hamster/hash/values_spec.rb +2 -2
  96. data/spec/lib/hamster/immutable/new_spec.rb +14 -0
  97. data/spec/lib/hamster/list/add_spec.rb +16 -10
  98. data/spec/lib/hamster/list/all_spec.rb +33 -35
  99. data/spec/lib/hamster/list/any_spec.rb +29 -31
  100. data/spec/lib/hamster/list/append_spec.rb +6 -6
  101. data/spec/lib/hamster/list/at_spec.rb +1 -1
  102. data/spec/lib/hamster/list/break_spec.rb +4 -4
  103. data/spec/lib/hamster/list/cadr_spec.rb +9 -9
  104. data/spec/lib/hamster/list/chunk_spec.rb +5 -5
  105. data/spec/lib/hamster/list/clear_spec.rb +3 -3
  106. data/spec/lib/hamster/list/combination_spec.rb +3 -3
  107. data/spec/lib/hamster/list/compact_spec.rb +3 -3
  108. data/spec/lib/hamster/list/compare_spec.rb +3 -3
  109. data/spec/lib/hamster/list/cons_spec.rb +15 -17
  110. data/spec/lib/hamster/list/construction_spec.rb +20 -27
  111. data/spec/lib/hamster/list/copying_spec.rb +1 -1
  112. data/spec/lib/hamster/list/count_spec.rb +1 -1
  113. data/spec/lib/hamster/list/cycle_spec.rb +4 -4
  114. data/spec/lib/hamster/list/delete_at_spec.rb +4 -4
  115. data/spec/lib/hamster/list/drop_spec.rb +3 -3
  116. data/spec/lib/hamster/list/drop_while_spec.rb +3 -3
  117. data/spec/lib/hamster/list/each_slice_spec.rb +5 -5
  118. data/spec/lib/hamster/list/each_spec.rb +26 -28
  119. data/spec/lib/hamster/list/each_with_index_spec.rb +1 -1
  120. data/spec/lib/hamster/list/empty_spec.rb +13 -15
  121. data/spec/lib/hamster/list/eql_spec.rb +21 -21
  122. data/spec/lib/hamster/list/fill_spec.rb +8 -8
  123. data/spec/lib/hamster/list/find_all_spec.rb +3 -3
  124. data/spec/lib/hamster/list/find_index_spec.rb +1 -1
  125. data/spec/lib/hamster/list/find_spec.rb +1 -1
  126. data/spec/lib/hamster/list/flat_map_spec.rb +2 -2
  127. data/spec/lib/hamster/list/flatten_spec.rb +5 -5
  128. data/spec/lib/hamster/list/grep_spec.rb +4 -4
  129. data/spec/lib/hamster/list/group_by_spec.rb +6 -6
  130. data/spec/lib/hamster/list/hash_spec.rb +2 -2
  131. data/spec/lib/hamster/list/head_spec.rb +1 -1
  132. data/spec/lib/hamster/list/include_spec.rb +2 -2
  133. data/spec/lib/hamster/list/index_spec.rb +38 -0
  134. data/spec/lib/hamster/list/indices_spec.rb +62 -0
  135. data/spec/lib/hamster/list/init_spec.rb +3 -3
  136. data/spec/lib/hamster/list/inits_spec.rb +3 -3
  137. data/spec/lib/hamster/list/insert_spec.rb +1 -1
  138. data/spec/lib/hamster/list/inspect_spec.rb +1 -1
  139. data/spec/lib/hamster/list/intersperse_spec.rb +3 -3
  140. data/spec/lib/hamster/list/join_spec.rb +5 -5
  141. data/spec/lib/hamster/list/last_spec.rb +1 -1
  142. data/spec/lib/hamster/list/ltlt_spec.rb +20 -0
  143. data/spec/lib/hamster/list/map_spec.rb +4 -4
  144. data/spec/lib/hamster/list/maximum_spec.rb +24 -26
  145. data/spec/lib/hamster/list/merge_by_spec.rb +10 -10
  146. data/spec/lib/hamster/list/merge_spec.rb +10 -10
  147. data/spec/lib/hamster/list/minimum_spec.rb +24 -26
  148. data/spec/lib/hamster/list/multithreading_spec.rb +6 -6
  149. data/spec/lib/hamster/list/none_spec.rb +5 -5
  150. data/spec/lib/hamster/list/one_spec.rb +5 -5
  151. data/spec/lib/hamster/list/partition_spec.rb +8 -8
  152. data/spec/lib/hamster/list/permutation_spec.rb +8 -8
  153. data/spec/lib/hamster/list/pop_spec.rb +3 -3
  154. data/spec/lib/hamster/list/product_spec.rb +1 -1
  155. data/spec/lib/hamster/list/reduce_spec.rb +5 -48
  156. data/spec/lib/hamster/list/{remove_spec.rb → reject_spec.rb} +4 -4
  157. data/spec/lib/hamster/list/reverse_spec.rb +3 -3
  158. data/spec/lib/hamster/list/rotate_spec.rb +7 -7
  159. data/spec/lib/hamster/list/sample_spec.rb +1 -1
  160. data/spec/lib/hamster/list/select_spec.rb +3 -3
  161. data/spec/lib/hamster/list/size_spec.rb +1 -1
  162. data/spec/lib/hamster/list/slice_spec.rb +123 -123
  163. data/spec/lib/hamster/list/sorting_spec.rb +5 -5
  164. data/spec/lib/hamster/list/span_spec.rb +5 -5
  165. data/spec/lib/hamster/list/split_at_spec.rb +4 -4
  166. data/spec/lib/hamster/list/subsequences_spec.rb +1 -1
  167. data/spec/lib/hamster/list/sum_spec.rb +1 -1
  168. data/spec/lib/hamster/list/tail_spec.rb +4 -4
  169. data/spec/lib/hamster/list/tails_spec.rb +3 -3
  170. data/spec/lib/hamster/list/take_spec.rb +3 -3
  171. data/spec/lib/hamster/list/take_while_spec.rb +4 -4
  172. data/spec/lib/hamster/list/to_a_spec.rb +2 -2
  173. data/spec/lib/hamster/list/to_ary_spec.rb +1 -1
  174. data/spec/lib/hamster/list/to_list_spec.rb +1 -1
  175. data/spec/lib/hamster/list/to_set_spec.rb +1 -1
  176. data/spec/lib/hamster/list/union_spec.rb +4 -4
  177. data/spec/lib/hamster/list/uniq_spec.rb +23 -19
  178. data/spec/lib/hamster/list/zip_spec.rb +5 -5
  179. data/spec/lib/hamster/nested/construction_spec.rb +103 -0
  180. data/spec/lib/hamster/set/add_spec.rb +13 -11
  181. data/spec/lib/hamster/set/all_spec.rb +32 -34
  182. data/spec/lib/hamster/set/any_spec.rb +32 -34
  183. data/spec/lib/hamster/set/clear_spec.rb +3 -3
  184. data/spec/lib/hamster/set/compact_spec.rb +3 -3
  185. data/spec/lib/hamster/set/construction_spec.rb +3 -3
  186. data/spec/lib/hamster/set/copying_spec.rb +1 -1
  187. data/spec/lib/hamster/set/count_spec.rb +1 -1
  188. data/spec/lib/hamster/set/delete_spec.rb +8 -8
  189. data/spec/lib/hamster/set/difference_spec.rb +8 -8
  190. data/spec/lib/hamster/set/disjoint_spec.rb +1 -1
  191. data/spec/lib/hamster/set/each_spec.rb +2 -2
  192. data/spec/lib/hamster/set/empty_spec.rb +15 -17
  193. data/spec/lib/hamster/set/eqeq_spec.rb +3 -3
  194. data/spec/lib/hamster/set/eql_spec.rb +3 -3
  195. data/spec/lib/hamster/set/exclusion_spec.rb +7 -7
  196. data/spec/lib/hamster/set/find_spec.rb +2 -2
  197. data/spec/lib/hamster/set/first_spec.rb +29 -0
  198. data/spec/lib/hamster/set/flatten_spec.rb +9 -9
  199. data/spec/lib/hamster/set/grep_spec.rb +1 -1
  200. data/spec/lib/hamster/set/group_by_spec.rb +12 -12
  201. data/spec/lib/hamster/set/hash_spec.rb +3 -3
  202. data/spec/lib/hamster/set/include_spec.rb +8 -8
  203. data/spec/lib/hamster/set/inspect_spec.rb +2 -2
  204. data/spec/lib/hamster/set/intersect_spec.rb +1 -1
  205. data/spec/lib/hamster/set/intersection_spec.rb +13 -13
  206. data/spec/lib/hamster/set/join_spec.rb +6 -6
  207. data/spec/lib/hamster/set/map_spec.rb +7 -7
  208. data/spec/lib/hamster/set/marshal_spec.rb +2 -2
  209. data/spec/lib/hamster/set/maximum_spec.rb +22 -24
  210. data/spec/lib/hamster/set/minimum_spec.rb +22 -24
  211. data/spec/lib/hamster/set/new_spec.rb +5 -5
  212. data/spec/lib/hamster/set/none_spec.rb +5 -5
  213. data/spec/lib/hamster/set/one_spec.rb +6 -6
  214. data/spec/lib/hamster/set/partition_spec.rb +5 -5
  215. data/spec/lib/hamster/set/product_spec.rb +2 -2
  216. data/spec/lib/hamster/set/reduce_spec.rb +5 -5
  217. data/spec/lib/hamster/set/{remove_spec.rb → reject_spec.rb} +6 -6
  218. data/spec/lib/hamster/set/reverse_each_spec.rb +1 -1
  219. data/spec/lib/hamster/set/sample_spec.rb +1 -1
  220. data/spec/lib/hamster/set/{filter_spec.rb → select_spec.rb} +11 -11
  221. data/spec/lib/hamster/set/size_spec.rb +1 -1
  222. data/spec/lib/hamster/set/sorting_spec.rb +16 -5
  223. data/spec/lib/hamster/set/subset_spec.rb +2 -2
  224. data/spec/lib/hamster/set/sum_spec.rb +2 -2
  225. data/spec/lib/hamster/set/superset_spec.rb +2 -2
  226. data/spec/lib/hamster/set/to_a_spec.rb +2 -2
  227. data/spec/lib/hamster/set/to_list_spec.rb +2 -2
  228. data/spec/lib/hamster/set/to_set_spec.rb +1 -1
  229. data/spec/lib/hamster/set/union_spec.rb +23 -14
  230. data/spec/lib/hamster/sorted_set/above_spec.rb +11 -11
  231. data/spec/lib/hamster/sorted_set/add_spec.rb +8 -8
  232. data/spec/lib/hamster/sorted_set/at_spec.rb +1 -1
  233. data/spec/lib/hamster/sorted_set/below_spec.rb +11 -11
  234. data/spec/lib/hamster/sorted_set/between_spec.rb +11 -11
  235. data/spec/lib/hamster/sorted_set/clear_spec.rb +11 -2
  236. data/spec/lib/hamster/sorted_set/copying_spec.rb +21 -0
  237. data/spec/lib/hamster/sorted_set/delete_at_spec.rb +4 -4
  238. data/spec/lib/hamster/sorted_set/delete_spec.rb +21 -12
  239. data/spec/lib/hamster/sorted_set/difference_spec.rb +2 -2
  240. data/spec/lib/hamster/sorted_set/disjoint_spec.rb +1 -1
  241. data/spec/lib/hamster/sorted_set/drop_spec.rb +30 -3
  242. data/spec/lib/hamster/sorted_set/drop_while_spec.rb +4 -4
  243. data/spec/lib/hamster/sorted_set/each_spec.rb +16 -18
  244. data/spec/lib/hamster/sorted_set/empty_spec.rb +12 -14
  245. data/spec/lib/hamster/sorted_set/eql_spec.rb +5 -5
  246. data/spec/lib/hamster/sorted_set/exclusion_spec.rb +1 -1
  247. data/spec/lib/hamster/sorted_set/fetch_spec.rb +1 -1
  248. data/spec/lib/hamster/sorted_set/find_index_spec.rb +10 -2
  249. data/spec/lib/hamster/sorted_set/first_spec.rb +10 -12
  250. data/spec/lib/hamster/sorted_set/from_spec.rb +11 -11
  251. data/spec/lib/hamster/sorted_set/group_by_spec.rb +10 -10
  252. data/spec/lib/hamster/sorted_set/include_spec.rb +2 -2
  253. data/spec/lib/hamster/sorted_set/inspect_spec.rb +1 -1
  254. data/spec/lib/hamster/sorted_set/intersect_spec.rb +1 -1
  255. data/spec/lib/hamster/sorted_set/intersection_spec.rb +3 -3
  256. data/spec/lib/hamster/sorted_set/last_spec.rb +1 -1
  257. data/spec/lib/hamster/sorted_set/map_spec.rb +13 -5
  258. data/spec/lib/hamster/sorted_set/marshal_spec.rb +3 -3
  259. data/spec/lib/hamster/sorted_set/maximum_spec.rb +37 -0
  260. data/spec/lib/hamster/sorted_set/minimum_spec.rb +11 -13
  261. data/spec/lib/hamster/sorted_set/new_spec.rb +23 -3
  262. data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +2 -2
  263. data/spec/lib/hamster/sorted_set/{filter_spec.rb → select_spec.rb} +10 -10
  264. data/spec/lib/hamster/sorted_set/size_spec.rb +1 -1
  265. data/spec/lib/hamster/sorted_set/slice_spec.rb +158 -142
  266. data/spec/lib/hamster/sorted_set/sorting_spec.rb +3 -3
  267. data/spec/lib/hamster/sorted_set/subset_spec.rb +2 -2
  268. data/spec/lib/hamster/sorted_set/superset_spec.rb +2 -2
  269. data/spec/lib/hamster/sorted_set/take_spec.rb +32 -3
  270. data/spec/lib/hamster/sorted_set/take_while_spec.rb +4 -4
  271. data/spec/lib/hamster/sorted_set/to_set_spec.rb +1 -1
  272. data/spec/lib/hamster/sorted_set/union_spec.rb +2 -2
  273. data/spec/lib/hamster/sorted_set/up_to_spec.rb +12 -11
  274. data/spec/lib/hamster/sorted_set/values_at_spec.rb +6 -6
  275. data/spec/lib/hamster/vector/add_spec.rb +3 -3
  276. data/spec/lib/hamster/vector/any_spec.rb +1 -1
  277. data/spec/lib/hamster/vector/assoc_spec.rb +11 -1
  278. data/spec/lib/hamster/vector/bsearch_spec.rb +10 -2
  279. data/spec/lib/hamster/vector/clear_spec.rb +3 -3
  280. data/spec/lib/hamster/vector/combination_spec.rb +4 -4
  281. data/spec/lib/hamster/vector/compact_spec.rb +2 -2
  282. data/spec/lib/hamster/vector/compare_spec.rb +3 -3
  283. data/spec/lib/hamster/vector/concat_spec.rb +2 -2
  284. data/spec/lib/hamster/vector/copying_spec.rb +1 -1
  285. data/spec/lib/hamster/vector/delete_at_spec.rb +8 -8
  286. data/spec/lib/hamster/vector/delete_spec.rb +2 -2
  287. data/spec/lib/hamster/vector/drop_spec.rb +10 -3
  288. data/spec/lib/hamster/vector/drop_while_spec.rb +5 -5
  289. data/spec/lib/hamster/vector/each_index_spec.rb +2 -2
  290. data/spec/lib/hamster/vector/each_spec.rb +27 -29
  291. data/spec/lib/hamster/vector/each_with_index_spec.rb +2 -2
  292. data/spec/lib/hamster/vector/empty_spec.rb +11 -13
  293. data/spec/lib/hamster/vector/eql_spec.rb +6 -6
  294. data/spec/lib/hamster/vector/fetch_spec.rb +1 -1
  295. data/spec/lib/hamster/vector/fill_spec.rb +9 -9
  296. data/spec/lib/hamster/vector/first_spec.rb +10 -12
  297. data/spec/lib/hamster/vector/flat_map_spec.rb +51 -0
  298. data/spec/lib/hamster/vector/flatten_spec.rb +15 -0
  299. data/spec/lib/hamster/vector/get_spec.rb +4 -4
  300. data/spec/lib/hamster/vector/group_by_spec.rb +12 -12
  301. data/spec/lib/hamster/vector/include_spec.rb +2 -2
  302. data/spec/lib/hamster/vector/insert_spec.rb +2 -2
  303. data/spec/lib/hamster/vector/inspect_spec.rb +1 -1
  304. data/spec/lib/hamster/vector/join_spec.rb +5 -5
  305. data/spec/lib/hamster/vector/last_spec.rb +1 -1
  306. data/spec/lib/hamster/vector/length_spec.rb +1 -1
  307. data/spec/lib/hamster/vector/ltlt_spec.rb +2 -2
  308. data/spec/lib/hamster/vector/map_spec.rb +5 -5
  309. data/spec/lib/hamster/vector/marshal_spec.rb +2 -2
  310. data/spec/lib/hamster/vector/maximum_spec.rb +20 -22
  311. data/spec/lib/hamster/vector/minimum_spec.rb +20 -22
  312. data/spec/lib/hamster/vector/multiply_spec.rb +4 -4
  313. data/spec/lib/hamster/vector/partition_spec.rb +5 -5
  314. data/spec/lib/hamster/vector/permutation_spec.rb +4 -4
  315. data/spec/lib/hamster/vector/pop_spec.rb +3 -3
  316. data/spec/lib/hamster/vector/product_spec.rb +10 -10
  317. data/spec/lib/hamster/vector/put_spec.rb +175 -0
  318. data/spec/lib/hamster/vector/reduce_spec.rb +5 -57
  319. data/spec/lib/hamster/vector/{remove_spec.rb → reject_spec.rb} +4 -4
  320. data/spec/lib/hamster/vector/repeated_combination_spec.rb +4 -4
  321. data/spec/lib/hamster/vector/repeated_permutation_spec.rb +6 -6
  322. data/spec/lib/hamster/vector/reverse_each_spec.rb +1 -1
  323. data/spec/lib/hamster/vector/reverse_spec.rb +1 -1
  324. data/spec/lib/hamster/vector/rindex_spec.rb +1 -1
  325. data/spec/lib/hamster/vector/rotate_spec.rb +9 -9
  326. data/spec/lib/hamster/vector/sample_spec.rb +1 -1
  327. data/spec/lib/hamster/vector/{filter_spec.rb → select_spec.rb} +8 -8
  328. data/spec/lib/hamster/vector/set_spec.rb +12 -141
  329. data/spec/lib/hamster/vector/shift_spec.rb +3 -3
  330. data/spec/lib/hamster/vector/shuffle_spec.rb +2 -2
  331. data/spec/lib/hamster/vector/slice_spec.rb +137 -137
  332. data/spec/lib/hamster/vector/sorting_spec.rb +5 -5
  333. data/spec/lib/hamster/vector/sum_spec.rb +1 -1
  334. data/spec/lib/hamster/vector/take_spec.rb +17 -3
  335. data/spec/lib/hamster/vector/take_while_spec.rb +4 -4
  336. data/spec/lib/hamster/vector/to_a_spec.rb +1 -1
  337. data/spec/lib/hamster/vector/to_ary_spec.rb +1 -1
  338. data/spec/lib/hamster/vector/to_list_spec.rb +2 -1
  339. data/spec/lib/hamster/vector/to_set_spec.rb +1 -1
  340. data/spec/lib/hamster/vector/uniq_spec.rb +27 -6
  341. data/spec/lib/hamster/vector/unshift_spec.rb +3 -3
  342. data/spec/lib/hamster/vector/values_at_spec.rb +6 -6
  343. data/spec/lib/hamster/vector/zip_spec.rb +2 -2
  344. data/spec/lib/load_spec.rb +42 -0
  345. data/spec/spec_helper.rb +25 -0
  346. metadata +85 -48
  347. data/spec/lib/hamster/deque/head_spec.rb +0 -20
  348. data/spec/lib/hamster/hash/uniq_spec.rb +0 -14
  349. data/spec/lib/hamster/list/elem_index_spec.rb +0 -36
  350. data/spec/lib/hamster/list/elem_indices_spec.rb +0 -31
  351. data/spec/lib/hamster/list/filter_spec.rb +0 -71
  352. data/spec/lib/hamster/list/find_indices_spec.rb +0 -37
  353. data/spec/lib/hamster/set/foreach_spec.rb +0 -40
  354. data/spec/lib/hamster/set/head_spec.rb +0 -31
  355. data/spec/lib/hamster/set/uniq_spec.rb +0 -14
  356. data/spec/lib/hamster/sorted_set/construction_spec.rb +0 -29
  357. data/spec/lib/hamster/vector/exist_spec.rb +0 -70
  358. data/spec/lib/hamster/vector/exists_spec.rb +0 -70
@@ -22,9 +22,17 @@ describe Hamster::SortedSet do
22
22
  [[2.0], 2.0, 0],
23
23
  [[2.0], 2, 0],
24
24
  ].each do |values, item, expected|
25
- context "looking for #{item.inspect} in #{values.inspect}" do
25
+ unless item.nil? # test breaks otherwise
26
+ context "looking for #{item.inspect} in #{values.inspect} without block" do
27
+ it "returns #{expected.inspect}" do
28
+ SS[*values].send(method, item).should == expected
29
+ end
30
+ end
31
+ end
32
+
33
+ context "looking for #{item.inspect} in #{values.inspect} with block" do
26
34
  it "returns #{expected.inspect}" do
27
- Hamster.sorted_set(*values).send(method) { |x| x == item }.should == expected
35
+ SS[*values].send(method) { |x| x == item }.should == expected
28
36
  end
29
37
  end
30
38
  end
@@ -2,18 +2,16 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:first, :head].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], nil],
9
- [["A"], "A"],
10
- [%w[A B C], "A"],
11
- [%w[Z Y X], "X"]
12
- ].each do |values, expected|
13
- context "on #{values.inspect}" do
14
- it "returns #{expected.inspect}" do
15
- Hamster.sorted_set(*values).send(method).should eql(expected)
16
- end
5
+ describe "#first" do
6
+ [
7
+ [[], nil],
8
+ [["A"], "A"],
9
+ [%w[A B C], "A"],
10
+ [%w[Z Y X], "X"]
11
+ ].each do |values, expected|
12
+ context "on #{values.inspect}" do
13
+ it "returns #{expected.inspect}" do
14
+ SS[*values].first.should eql(expected)
17
15
  end
18
16
  end
19
17
  end
@@ -6,11 +6,11 @@ describe Hamster::SortedSet do
6
6
  context "when called without a block" do
7
7
  it "returns a sorted set of all items equal to or greater than the argument" do
8
8
  100.times do
9
- items = rand(100).times.collect { rand(1000) }
10
- set = Hamster::SortedSet.new(items)
9
+ items = rand(100).times.collect { rand(1000) }
10
+ set = SS.new(items)
11
11
  threshold = rand(1000)
12
- result = set.from(threshold)
13
- array = items.select { |x| x >= threshold }.sort
12
+ result = set.from(threshold)
13
+ array = items.select { |x| x >= threshold }.sort
14
14
  result.class.should be(Hamster::SortedSet)
15
15
  result.size.should == array.size
16
16
  result.to_a.should == array
@@ -21,10 +21,10 @@ describe Hamster::SortedSet do
21
21
  context "when called with a block" do
22
22
  it "yields all the items equal to or greater than than the argument" do
23
23
  100.times do
24
- items = rand(100).times.collect { rand(1000) }
25
- set = Hamster::SortedSet.new(items)
24
+ items = rand(100).times.collect { rand(1000) }
25
+ set = SS.new(items)
26
26
  threshold = rand(1000)
27
- result = []
27
+ result = []
28
28
  set.from(threshold) { |x| result << x }
29
29
  array = items.select { |x| x >= threshold }.sort
30
30
  result.size.should == array.size
@@ -35,15 +35,15 @@ describe Hamster::SortedSet do
35
35
 
36
36
  context "on an empty set" do
37
37
  it "returns an empty set" do
38
- Hamster::SortedSet.empty.from(1).should be_empty
39
- Hamster::SortedSet.empty.from('abc').should be_empty
40
- Hamster::SortedSet.empty.from(:symbol).should be_empty
38
+ SS.empty.from(1).should be_empty
39
+ SS.empty.from('abc').should be_empty
40
+ SS.empty.from(:symbol).should be_empty
41
41
  end
42
42
  end
43
43
 
44
44
  context "with an argument higher than all the values in the set" do
45
45
  it "returns an empty set" do
46
- result = Hamster.sorted_set(*(1..100)).from(101)
46
+ result = SS.new(1..100).from(101)
47
47
  result.class.should be(Hamster::SortedSet)
48
48
  result.should be_empty
49
49
  end
@@ -7,19 +7,19 @@ describe Hamster::SortedSet do
7
7
  context "with a block" do
8
8
  [
9
9
  [[], []],
10
- [[1], [true => Hamster.sorted_set(1)]],
11
- [[1, 2, 3, 4], [true => Hamster.sorted_set(3, 1), false => Hamster.sorted_set(4, 2)]],
10
+ [[1], [true => SS[1]]],
11
+ [[1, 2, 3, 4], [true => SS[3, 1], false => SS[4, 2]]],
12
12
  ].each do |values, expected|
13
13
  context "on #{values.inspect}" do
14
- let(:sorted_set) { Hamster.sorted_set(*values) }
14
+ let(:sorted_set) { SS[*values] }
15
15
 
16
16
  it "preserves the original" do
17
17
  sorted_set.send(method, &:odd?)
18
- sorted_set.should eql(Hamster.sorted_set(*values))
18
+ sorted_set.should eql(SS[*values])
19
19
  end
20
20
 
21
21
  it "returns #{expected.inspect}" do
22
- sorted_set.send(method, &:odd?).should eql(Hamster.hash(*expected))
22
+ sorted_set.send(method, &:odd?).should eql(H[*expected])
23
23
  end
24
24
  end
25
25
  end
@@ -28,19 +28,19 @@ describe Hamster::SortedSet do
28
28
  context "without a block" do
29
29
  [
30
30
  [[], []],
31
- [[1], [1 => Hamster.sorted_set(1)]],
32
- [[1, 2, 3, 4], [1 => Hamster.sorted_set(1), 2 => Hamster.sorted_set(2), 3 => Hamster.sorted_set(3), 4 => Hamster.sorted_set(4)]],
31
+ [[1], [1 => SS[1]]],
32
+ [[1, 2, 3, 4], [1 => SS[1], 2 => SS[2], 3 => SS[3], 4 => SS[4]]],
33
33
  ].each do |values, expected|
34
34
  context "on #{values.inspect}" do
35
- let(:sorted_set) { Hamster.sorted_set(*values) }
35
+ let(:sorted_set) { SS[*values] }
36
36
 
37
37
  it "preserves the original" do
38
38
  sorted_set.group_by
39
- sorted_set.should eql(Hamster.sorted_set(*values))
39
+ sorted_set.should eql(SS[*values])
40
40
  end
41
41
 
42
42
  it "returns #{expected.inspect}" do
43
- sorted_set.group_by.should eql(Hamster.hash(*expected))
43
+ sorted_set.group_by.should eql(H[*expected])
44
44
  end
45
45
  end
46
46
  end
@@ -2,9 +2,9 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:include?, :member?, :contains?, :elem?].each do |method|
5
+ [:include?, :member?].each do |method|
6
6
  describe "##{method}" do
7
- let(:sorted_set) { Hamster.sorted_set(1, 2, 3, 4.0) }
7
+ let(:sorted_set) { SS[1, 2, 3, 4.0] }
8
8
 
9
9
  [1, 2, 3, 4.0].each do |value|
10
10
  it "returns true for an existing value (#{value.inspect})" do
@@ -9,7 +9,7 @@ describe Hamster::SortedSet do
9
9
  [["C", "B", "A"], 'Hamster::SortedSet["A", "B", "C"]']
10
10
  ].each do |values, expected|
11
11
  context "on #{values.inspect}" do
12
- let(:sorted_set) { Hamster.sorted_set(*values) }
12
+ let(:sorted_set) { SS[*values] }
13
13
 
14
14
  it "returns #{expected.inspect}" do
15
15
  sorted_set.inspect.should == expected
@@ -18,7 +18,7 @@ describe Hamster::SortedSet do
18
18
  ].each do |a, b, expected|
19
19
  context "for #{a.inspect} and #{b.inspect}" do
20
20
  it "returns #{expected}" do
21
- Hamster.sorted_set(*a).intersect?(Hamster.sorted_set(*b)).should be(expected)
21
+ SS[*a].intersect?(SS[*b]).should be(expected)
22
22
  end
23
23
  end
24
24
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:intersection, :intersect, :&].each do |method|
5
+ [:intersection, :&].each do |method|
6
6
  describe "##{method}" do
7
7
  [
8
8
  [[], [], []],
@@ -14,13 +14,13 @@ describe Hamster::SortedSet do
14
14
  ].each do |a, b, expected|
15
15
  context "for #{a.inspect} and #{b.inspect}" do
16
16
  it "returns #{expected.inspect}" do
17
- Hamster.sorted_set(*a).send(method, Hamster.sorted_set(*b)).should eql(Hamster.sorted_set(*expected))
17
+ SS[*a].send(method, SS[*b]).should eql(SS[*expected])
18
18
  end
19
19
  end
20
20
 
21
21
  context "for #{b.inspect} and #{a.inspect}" do
22
22
  it "returns #{expected.inspect}" do
23
- Hamster.sorted_set(*b).send(method, Hamster.sorted_set(*a)).should eql(Hamster.sorted_set(*expected))
23
+ SS[*b].send(method, SS[*a]).should eql(SS[*expected])
24
24
  end
25
25
  end
26
26
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- let(:sorted_set) { Hamster.sorted_set(*values) }
5
+ let(:sorted_set) { SS[*values] }
6
6
 
7
7
  describe "#last" do
8
8
  let(:last) { sorted_set.last }
@@ -6,31 +6,39 @@ describe Hamster::SortedSet do
6
6
  describe "##{method}" do
7
7
  context "when empty" do
8
8
  it "returns self" do
9
- Hamster.sorted_set.send(method) {}.should equal(Hamster.sorted_set)
9
+ SS.empty.send(method) {}.should equal(SS.empty)
10
10
  end
11
11
  end
12
12
 
13
13
  context "when not empty" do
14
- let(:sorted_set) { Hamster.sorted_set("A", "B", "C") }
14
+ let(:sorted_set) { SS["A", "B", "C"] }
15
15
 
16
16
  context "with a block" do
17
17
  it "preserves the original values" do
18
18
  sorted_set.send(method, &:downcase)
19
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
19
+ sorted_set.should eql(SS["A", "B", "C"])
20
20
  end
21
21
 
22
22
  it "returns a new set with the mapped values" do
23
- sorted_set.send(method, &:downcase).should eql(Hamster.sorted_set("a", "b", "c"))
23
+ sorted_set.send(method, &:downcase).should eql(SS["a", "b", "c"])
24
24
  end
25
25
  end
26
26
 
27
27
  context "with no block" do
28
28
  it "returns an Enumerator" do
29
29
  sorted_set.send(method).class.should be(Enumerator)
30
- sorted_set.send(method).each(&:downcase).should == Hamster.sorted_set('a', 'b', 'c')
30
+ sorted_set.send(method).each(&:downcase).should == SS['a', 'b', 'c']
31
31
  end
32
32
  end
33
33
  end
34
+
35
+ context "on a set ordered by a comparator" do
36
+ let(:sorted_set) { SS.new(["A", "B", "C"]) { |a,b| b <=> a }}
37
+
38
+ it "returns a new set with the mapped values" do
39
+ sorted_set.send(method, &:downcase).should == ['c', 'b', 'a']
40
+ end
41
+ end
34
42
  end
35
43
  end
36
44
  end
@@ -7,7 +7,7 @@ describe Hamster::SortedSet do
7
7
  File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
8
8
  end
9
9
  let(:child_cmd) do
10
- %Q|#{ruby} -I lib -r hamster -e 'set = Hamster.sorted_set(5, 10, 15); $stdout.write(Marshal.dump(set))'|
10
+ %Q|#{ruby} -I lib -r hamster -e 'set = Hamster::SortedSet[5, 10, 15]; $stdout.write(Marshal.dump(set))'|
11
11
  end
12
12
 
13
13
  let(:reloaded_set) do
@@ -19,7 +19,7 @@ describe Hamster::SortedSet do
19
19
  end
20
20
 
21
21
  it "can survive dumping and loading into a new process" do
22
- expect(reloaded_set).to eql(Hamster.sorted_set(5, 10, 15))
22
+ expect(reloaded_set).to eql(SS[5, 10, 15])
23
23
  end
24
24
 
25
25
  it "is still possible to find items by index after loading" do
@@ -31,7 +31,7 @@ describe Hamster::SortedSet do
31
31
 
32
32
  it "raises a TypeError if set has a custom sort order" do
33
33
  # this is because comparator block can't be serialized
34
- -> { Marshal.dump(Hamster.sorted_set(1, 2, 3) { |x| -x }) }.should raise_error(TypeError)
34
+ -> { Marshal.dump(SS.new([1, 2, 3]) { |x| -x }) }.should raise_error(TypeError)
35
35
  end
36
36
  end
37
37
  end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+ require "hamster/set"
3
+
4
+ describe Hamster::SortedSet do
5
+ describe "#max" do
6
+ context "with a block" do
7
+ [
8
+ [[], nil],
9
+ [["A"], "A"],
10
+ [%w[Ichi Ni San], "Ichi"],
11
+ ].each do |values, expected|
12
+ describe "on #{values.inspect}" do
13
+ let(:set) { SS[*values] }
14
+ let(:result) { set.max { |maximum, item| maximum.length <=> item.length }}
15
+
16
+ it "returns #{expected.inspect}" do
17
+ result.should == expected
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ context "without a block" do
24
+ [
25
+ [[], nil],
26
+ [["A"], "A"],
27
+ [%w[Ichi Ni San], "San"],
28
+ ].each do |values, expected|
29
+ describe "on #{values.inspect}" do
30
+ it "returns #{expected.inspect}" do
31
+ SS[*values].max.should == expected
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -2,19 +2,17 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:minimum, :min].each do |method|
6
- describe "##{method}" do
7
- [
8
- [[], nil],
9
- [["A"], "A"],
10
- [%w[Ichi Ni San], "Ichi"],
11
- [[1,2,3,4,5], 1],
12
- [[0, -0.0, 2.2, -4, -4.2], -4.2],
13
- ].each do |values, expected|
14
- context "on #{values.inspect}" do
15
- it "returns #{expected.inspect}" do
16
- Hamster.sorted_set(*values).send(method).should == expected
17
- end
5
+ describe "#min" do
6
+ [
7
+ [[], nil],
8
+ [["A"], "A"],
9
+ [%w[Ichi Ni San], "Ichi"],
10
+ [[1,2,3,4,5], 1],
11
+ [[0, -0.0, 2.2, -4, -4.2], -4.2],
12
+ ].each do |values, expected|
13
+ context "on #{values.inspect}" do
14
+ it "returns #{expected.inspect}" do
15
+ SS[*values].min.should == expected
18
16
  end
19
17
  end
20
18
  end
@@ -4,7 +4,7 @@ require "hamster/sorted_set"
4
4
  describe Hamster::SortedSet do
5
5
  describe ".new" do
6
6
  it "accepts a single enumerable argument and creates a new sorted set" do
7
- sorted_set = Hamster::SortedSet.new([1,2,3])
7
+ sorted_set = SS.new([1,2,3])
8
8
  sorted_set.size.should be(3)
9
9
  sorted_set[0].should be(1)
10
10
  sorted_set[1].should be(2)
@@ -12,7 +12,7 @@ describe Hamster::SortedSet do
12
12
  end
13
13
 
14
14
  it "also works with a Range" do
15
- sorted_set = Hamster::SortedSet.new(1..3)
15
+ sorted_set = SS.new(1..3)
16
16
  sorted_set.size.should be(3)
17
17
  sorted_set[0].should be(1)
18
18
  sorted_set[1].should be(2)
@@ -31,6 +31,26 @@ describe Hamster::SortedSet do
31
31
  sorted_set.to_a.should == ['SNAZZY!!!']
32
32
  end
33
33
 
34
+ it "accepts a block with arity 1" do
35
+ sorted_set = SS.new(1..3) { |a| -a }
36
+ sorted_set[0].should be(3)
37
+ sorted_set[1].should be(2)
38
+ sorted_set[2].should be(1)
39
+ end
40
+
41
+ it "accepts a block with arity 2" do
42
+ sorted_set = SS.new(1..3) { |a,b| b <=> a }
43
+ sorted_set[0].should be(3)
44
+ sorted_set[1].should be(2)
45
+ sorted_set[2].should be(1)
46
+ end
47
+
48
+ it "can use a block produced by Symbol#to_proc" do
49
+ sorted_set = SS.new([Object, BasicObject], &:name.to_proc)
50
+ sorted_set[0].should be(BasicObject)
51
+ sorted_set[1].should be(Object)
52
+ end
53
+
34
54
  context "from a subclass" do
35
55
  it "returns a frozen instance of the subclass" do
36
56
  subclass = Class.new(Hamster::SortedSet)
@@ -43,7 +63,7 @@ describe Hamster::SortedSet do
43
63
 
44
64
  describe ".[]" do
45
65
  it "accepts a variable number of items and creates a new sorted set" do
46
- sorted_set = Hamster::SortedSet['a', 'b']
66
+ sorted_set = SS['a', 'b']
47
67
  sorted_set.size.should be(2)
48
68
  sorted_set[0].should == 'a'
49
69
  sorted_set[1].should == 'b'
@@ -4,7 +4,7 @@ require "hamster/sorted_set"
4
4
  describe Hamster::SortedSet do
5
5
  describe "#reverse_each" do
6
6
  context "with no block" do
7
- let(:sorted_set) { Hamster.sorted_set("A", "B", "C") }
7
+ let(:sorted_set) { SS["A", "B", "C"] }
8
8
 
9
9
  it "returns an Enumerator" do
10
10
  sorted_set.reverse_each.class.should be(Enumerator)
@@ -13,7 +13,7 @@ describe Hamster::SortedSet do
13
13
  end
14
14
 
15
15
  context "with a block" do
16
- let(:sorted_set) { Hamster::SortedSet.new((1..1025).to_a) }
16
+ let(:sorted_set) { SS.new(1..1025) }
17
17
 
18
18
  it "returns self" do
19
19
  sorted_set.reverse_each {}.should be(sorted_set)
@@ -2,14 +2,14 @@ require "spec_helper"
2
2
  require "hamster/sorted_set"
3
3
 
4
4
  describe Hamster::SortedSet do
5
- [:filter, :select, :find_all].each do |method|
5
+ [:select, :find_all].each do |method|
6
6
  describe "##{method}" do
7
- let(:sorted_set) { Hamster.sorted_set("A", "B", "C") }
7
+ let(:sorted_set) { SS["A", "B", "C"] }
8
8
 
9
9
  context "when everything matches" do
10
10
  it "preserves the original" do
11
11
  sorted_set.send(method) { true }
12
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
12
+ sorted_set.should eql(SS["A", "B", "C"])
13
13
  end
14
14
 
15
15
  it "returns self" do
@@ -21,18 +21,18 @@ describe Hamster::SortedSet do
21
21
  context "with a block" do
22
22
  it "preserves the original" do
23
23
  sorted_set.send(method) { |item| item == "A" }
24
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
24
+ sorted_set.should eql(SS["A", "B", "C"])
25
25
  end
26
26
 
27
27
  it "returns a set with the matching values" do
28
- sorted_set.send(method) { |item| item == "A" }.should eql(Hamster.sorted_set("A"))
28
+ sorted_set.send(method) { |item| item == "A" }.should eql(SS["A"])
29
29
  end
30
30
  end
31
31
 
32
32
  context "with no block" do
33
33
  it "returns an Enumerator" do
34
34
  sorted_set.send(method).class.should be(Enumerator)
35
- sorted_set.send(method).each { |item| item == "A" }.should eql(Hamster.sorted_set("A"))
35
+ sorted_set.send(method).each { |item| item == "A" }.should eql(SS["A"])
36
36
  end
37
37
  end
38
38
  end
@@ -40,7 +40,7 @@ describe Hamster::SortedSet do
40
40
  context "when nothing matches" do
41
41
  it "preserves the original" do
42
42
  sorted_set.send(method) { |item| false }
43
- sorted_set.should eql(Hamster.sorted_set("A", "B", "C"))
43
+ sorted_set.should eql(SS["A", "B", "C"])
44
44
  end
45
45
 
46
46
  it "returns the canonical empty set" do
@@ -52,9 +52,9 @@ describe Hamster::SortedSet do
52
52
  it "returns an instance of the same class" do
53
53
  subclass = Class.new(Hamster::SortedSet)
54
54
  instance = subclass.new(['A', 'B', 'C'])
55
- instance.filter { true }.class.should be(subclass)
56
- instance.filter { false }.class.should be(subclass)
57
- instance.filter { rand(2) == 0 }.class.should be(subclass)
55
+ instance.send(method) { true }.class.should be(subclass)
56
+ instance.send(method) { false }.class.should be(subclass)
57
+ instance.send(method) { rand(2) == 0 }.class.should be(subclass)
58
58
  end
59
59
  end
60
60
  end