hamster 1.0.1.pre.rc3 → 2.0.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.
- checksums.yaml +4 -4
- data/lib/hamster.rb +2 -0
- data/lib/hamster/associable.rb +49 -0
- data/lib/hamster/core_ext/enumerable.rb +3 -13
- data/lib/hamster/core_ext/io.rb +1 -1
- data/lib/hamster/core_ext/struct.rb +9 -0
- data/lib/hamster/deque.rb +57 -38
- data/lib/hamster/enumerable.rb +14 -41
- data/lib/hamster/experimental/mutable_queue.rb +5 -8
- data/lib/hamster/experimental/mutable_set.rb +6 -7
- data/lib/hamster/hash.rb +301 -110
- data/lib/hamster/immutable.rb +1 -1
- data/lib/hamster/list.rb +479 -194
- data/lib/hamster/mutable_hash.rb +6 -7
- data/lib/hamster/nested.rb +78 -0
- data/lib/hamster/read_copy_update.rb +1 -1
- data/lib/hamster/set.rb +198 -88
- data/lib/hamster/sorted_set.rb +706 -261
- data/lib/hamster/trie.rb +134 -15
- data/lib/hamster/vector.rb +571 -140
- data/lib/hamster/version.rb +3 -1
- data/spec/lib/hamster/associable/associable_spec.rb +150 -0
- data/spec/lib/hamster/core_ext/array_spec.rb +1 -1
- data/spec/lib/hamster/core_ext/enumerable_spec.rb +2 -2
- data/spec/lib/hamster/core_ext/io_spec.rb +1 -1
- data/spec/lib/hamster/deque/clear_spec.rb +3 -3
- data/spec/lib/hamster/deque/construction_spec.rb +8 -8
- data/spec/lib/hamster/deque/copying_spec.rb +1 -1
- data/spec/lib/hamster/deque/dequeue_spec.rb +12 -4
- data/spec/lib/hamster/deque/empty_spec.rb +14 -16
- data/spec/lib/hamster/deque/enqueue_spec.rb +4 -4
- data/spec/lib/hamster/deque/first_spec.rb +18 -0
- data/spec/lib/hamster/deque/inspect_spec.rb +1 -1
- data/spec/lib/hamster/deque/last_spec.rb +9 -11
- data/spec/lib/hamster/deque/marshal_spec.rb +6 -6
- data/spec/lib/hamster/deque/new_spec.rb +5 -5
- data/spec/lib/hamster/deque/pop_spec.rb +15 -3
- data/spec/lib/hamster/deque/pretty_print_spec.rb +24 -0
- data/spec/lib/hamster/deque/push_spec.rb +37 -0
- data/spec/lib/hamster/deque/shift_spec.rb +30 -0
- data/spec/lib/hamster/deque/size_spec.rb +1 -1
- data/spec/lib/hamster/deque/to_a_spec.rb +2 -2
- data/spec/lib/hamster/deque/to_ary_spec.rb +1 -1
- data/spec/lib/hamster/deque/to_list_spec.rb +3 -3
- data/spec/lib/hamster/deque/unshift_spec.rb +8 -3
- data/spec/lib/hamster/experimental/mutable_set/add_qm_spec.rb +3 -3
- data/spec/lib/hamster/experimental/mutable_set/add_spec.rb +3 -3
- data/spec/lib/hamster/experimental/mutable_set/delete_qm_spec.rb +3 -3
- data/spec/lib/hamster/experimental/mutable_set/delete_spec.rb +3 -3
- data/spec/lib/hamster/hash/all_spec.rb +32 -34
- data/spec/lib/hamster/hash/any_spec.rb +34 -36
- data/spec/lib/hamster/hash/assoc_spec.rb +3 -3
- data/spec/lib/hamster/hash/clear_spec.rb +4 -4
- data/spec/lib/hamster/hash/construction_spec.rb +8 -8
- data/spec/lib/hamster/hash/copying_spec.rb +1 -1
- data/spec/lib/hamster/hash/default_proc_spec.rb +3 -3
- data/spec/lib/hamster/hash/delete_spec.rb +4 -4
- data/spec/lib/hamster/hash/each_spec.rb +3 -3
- data/spec/lib/hamster/hash/each_with_index_spec.rb +1 -1
- data/spec/lib/hamster/hash/empty_spec.rb +13 -15
- data/spec/lib/hamster/hash/eql_spec.rb +4 -4
- data/spec/lib/hamster/hash/except_spec.rb +7 -7
- data/spec/lib/hamster/hash/fetch_spec.rb +10 -10
- data/spec/lib/hamster/hash/find_spec.rb +2 -2
- data/spec/lib/hamster/hash/flat_map_spec.rb +4 -4
- data/spec/lib/hamster/hash/flatten_spec.rb +13 -13
- data/spec/lib/hamster/hash/get_spec.rb +7 -7
- data/spec/lib/hamster/hash/has_key_spec.rb +3 -3
- data/spec/lib/hamster/hash/has_value_spec.rb +4 -4
- data/spec/lib/hamster/hash/hash_spec.rb +5 -5
- data/spec/lib/hamster/hash/inspect_spec.rb +2 -2
- data/spec/lib/hamster/hash/invert_spec.rb +6 -6
- data/spec/lib/hamster/hash/key_spec.rb +2 -2
- data/spec/lib/hamster/hash/keys_spec.rb +2 -2
- data/spec/lib/hamster/hash/map_spec.rb +4 -4
- data/spec/lib/hamster/hash/marshal_spec.rb +2 -2
- data/spec/lib/hamster/hash/merge_spec.rb +62 -56
- data/spec/lib/hamster/hash/min_max_spec.rb +9 -13
- data/spec/lib/hamster/hash/new_spec.rb +6 -6
- data/spec/lib/hamster/hash/none_spec.rb +3 -3
- data/spec/lib/hamster/hash/partition_spec.rb +2 -2
- data/spec/lib/hamster/hash/put_spec.rb +29 -7
- data/spec/lib/hamster/hash/reduce_spec.rb +4 -4
- data/spec/lib/hamster/hash/{remove_spec.rb → reject_spec.rb} +7 -7
- data/spec/lib/hamster/hash/reverse_each_spec.rb +1 -1
- data/spec/lib/hamster/hash/{filter_spec.rb → select_spec.rb} +6 -6
- data/spec/lib/hamster/hash/size_spec.rb +3 -3
- data/spec/lib/hamster/hash/slice_spec.rb +4 -4
- data/spec/lib/hamster/hash/sort_spec.rb +2 -2
- data/spec/lib/hamster/hash/store_spec.rb +29 -7
- data/spec/lib/hamster/hash/take_spec.rb +2 -2
- data/spec/lib/hamster/hash/to_a_spec.rb +1 -1
- data/spec/lib/hamster/hash/to_hash_spec.rb +4 -4
- data/spec/lib/hamster/hash/values_at_spec.rb +3 -3
- data/spec/lib/hamster/hash/values_spec.rb +2 -2
- data/spec/lib/hamster/immutable/new_spec.rb +14 -0
- data/spec/lib/hamster/list/add_spec.rb +16 -10
- data/spec/lib/hamster/list/all_spec.rb +33 -35
- data/spec/lib/hamster/list/any_spec.rb +29 -31
- data/spec/lib/hamster/list/append_spec.rb +6 -6
- data/spec/lib/hamster/list/at_spec.rb +1 -1
- data/spec/lib/hamster/list/break_spec.rb +4 -4
- data/spec/lib/hamster/list/cadr_spec.rb +9 -9
- data/spec/lib/hamster/list/chunk_spec.rb +5 -5
- data/spec/lib/hamster/list/clear_spec.rb +3 -3
- data/spec/lib/hamster/list/combination_spec.rb +3 -3
- data/spec/lib/hamster/list/compact_spec.rb +3 -3
- data/spec/lib/hamster/list/compare_spec.rb +3 -3
- data/spec/lib/hamster/list/cons_spec.rb +15 -17
- data/spec/lib/hamster/list/construction_spec.rb +20 -27
- data/spec/lib/hamster/list/copying_spec.rb +1 -1
- data/spec/lib/hamster/list/count_spec.rb +1 -1
- data/spec/lib/hamster/list/cycle_spec.rb +4 -4
- data/spec/lib/hamster/list/delete_at_spec.rb +4 -4
- data/spec/lib/hamster/list/drop_spec.rb +3 -3
- data/spec/lib/hamster/list/drop_while_spec.rb +3 -3
- data/spec/lib/hamster/list/each_slice_spec.rb +5 -5
- data/spec/lib/hamster/list/each_spec.rb +26 -28
- data/spec/lib/hamster/list/each_with_index_spec.rb +1 -1
- data/spec/lib/hamster/list/empty_spec.rb +13 -15
- data/spec/lib/hamster/list/eql_spec.rb +21 -21
- data/spec/lib/hamster/list/fill_spec.rb +8 -8
- data/spec/lib/hamster/list/find_all_spec.rb +3 -3
- data/spec/lib/hamster/list/find_index_spec.rb +1 -1
- data/spec/lib/hamster/list/find_spec.rb +1 -1
- data/spec/lib/hamster/list/flat_map_spec.rb +2 -2
- data/spec/lib/hamster/list/flatten_spec.rb +5 -5
- data/spec/lib/hamster/list/grep_spec.rb +4 -4
- data/spec/lib/hamster/list/group_by_spec.rb +6 -6
- data/spec/lib/hamster/list/hash_spec.rb +2 -2
- data/spec/lib/hamster/list/head_spec.rb +1 -1
- data/spec/lib/hamster/list/include_spec.rb +2 -2
- data/spec/lib/hamster/list/index_spec.rb +38 -0
- data/spec/lib/hamster/list/indices_spec.rb +62 -0
- data/spec/lib/hamster/list/init_spec.rb +3 -3
- data/spec/lib/hamster/list/inits_spec.rb +3 -3
- data/spec/lib/hamster/list/insert_spec.rb +1 -1
- data/spec/lib/hamster/list/inspect_spec.rb +1 -1
- data/spec/lib/hamster/list/intersperse_spec.rb +3 -3
- data/spec/lib/hamster/list/join_spec.rb +5 -5
- data/spec/lib/hamster/list/last_spec.rb +1 -1
- data/spec/lib/hamster/list/ltlt_spec.rb +20 -0
- data/spec/lib/hamster/list/map_spec.rb +4 -4
- data/spec/lib/hamster/list/maximum_spec.rb +24 -26
- data/spec/lib/hamster/list/merge_by_spec.rb +10 -10
- data/spec/lib/hamster/list/merge_spec.rb +10 -10
- data/spec/lib/hamster/list/minimum_spec.rb +24 -26
- data/spec/lib/hamster/list/multithreading_spec.rb +6 -6
- data/spec/lib/hamster/list/none_spec.rb +5 -5
- data/spec/lib/hamster/list/one_spec.rb +5 -5
- data/spec/lib/hamster/list/partition_spec.rb +8 -8
- data/spec/lib/hamster/list/permutation_spec.rb +8 -8
- data/spec/lib/hamster/list/pop_spec.rb +3 -3
- data/spec/lib/hamster/list/product_spec.rb +1 -1
- data/spec/lib/hamster/list/reduce_spec.rb +5 -48
- data/spec/lib/hamster/list/{remove_spec.rb → reject_spec.rb} +4 -4
- data/spec/lib/hamster/list/reverse_spec.rb +3 -3
- data/spec/lib/hamster/list/rotate_spec.rb +7 -7
- data/spec/lib/hamster/list/sample_spec.rb +1 -1
- data/spec/lib/hamster/list/select_spec.rb +3 -3
- data/spec/lib/hamster/list/size_spec.rb +1 -1
- data/spec/lib/hamster/list/slice_spec.rb +123 -123
- data/spec/lib/hamster/list/sorting_spec.rb +5 -5
- data/spec/lib/hamster/list/span_spec.rb +5 -5
- data/spec/lib/hamster/list/split_at_spec.rb +4 -4
- data/spec/lib/hamster/list/subsequences_spec.rb +1 -1
- data/spec/lib/hamster/list/sum_spec.rb +1 -1
- data/spec/lib/hamster/list/tail_spec.rb +4 -4
- data/spec/lib/hamster/list/tails_spec.rb +3 -3
- data/spec/lib/hamster/list/take_spec.rb +3 -3
- data/spec/lib/hamster/list/take_while_spec.rb +4 -4
- data/spec/lib/hamster/list/to_a_spec.rb +2 -2
- data/spec/lib/hamster/list/to_ary_spec.rb +1 -1
- data/spec/lib/hamster/list/to_list_spec.rb +1 -1
- data/spec/lib/hamster/list/to_set_spec.rb +1 -1
- data/spec/lib/hamster/list/union_spec.rb +4 -4
- data/spec/lib/hamster/list/uniq_spec.rb +23 -19
- data/spec/lib/hamster/list/zip_spec.rb +5 -5
- data/spec/lib/hamster/nested/construction_spec.rb +103 -0
- data/spec/lib/hamster/set/add_spec.rb +13 -11
- data/spec/lib/hamster/set/all_spec.rb +32 -34
- data/spec/lib/hamster/set/any_spec.rb +32 -34
- data/spec/lib/hamster/set/clear_spec.rb +3 -3
- data/spec/lib/hamster/set/compact_spec.rb +3 -3
- data/spec/lib/hamster/set/construction_spec.rb +3 -3
- data/spec/lib/hamster/set/copying_spec.rb +1 -1
- data/spec/lib/hamster/set/count_spec.rb +1 -1
- data/spec/lib/hamster/set/delete_spec.rb +8 -8
- data/spec/lib/hamster/set/difference_spec.rb +8 -8
- data/spec/lib/hamster/set/disjoint_spec.rb +1 -1
- data/spec/lib/hamster/set/each_spec.rb +2 -2
- data/spec/lib/hamster/set/empty_spec.rb +15 -17
- data/spec/lib/hamster/set/eqeq_spec.rb +3 -3
- data/spec/lib/hamster/set/eql_spec.rb +3 -3
- data/spec/lib/hamster/set/exclusion_spec.rb +7 -7
- data/spec/lib/hamster/set/find_spec.rb +2 -2
- data/spec/lib/hamster/set/first_spec.rb +29 -0
- data/spec/lib/hamster/set/flatten_spec.rb +9 -9
- data/spec/lib/hamster/set/grep_spec.rb +1 -1
- data/spec/lib/hamster/set/group_by_spec.rb +12 -12
- data/spec/lib/hamster/set/hash_spec.rb +3 -3
- data/spec/lib/hamster/set/include_spec.rb +8 -8
- data/spec/lib/hamster/set/inspect_spec.rb +2 -2
- data/spec/lib/hamster/set/intersect_spec.rb +1 -1
- data/spec/lib/hamster/set/intersection_spec.rb +13 -13
- data/spec/lib/hamster/set/join_spec.rb +6 -6
- data/spec/lib/hamster/set/map_spec.rb +7 -7
- data/spec/lib/hamster/set/marshal_spec.rb +2 -2
- data/spec/lib/hamster/set/maximum_spec.rb +22 -24
- data/spec/lib/hamster/set/minimum_spec.rb +22 -24
- data/spec/lib/hamster/set/new_spec.rb +5 -5
- data/spec/lib/hamster/set/none_spec.rb +5 -5
- data/spec/lib/hamster/set/one_spec.rb +6 -6
- data/spec/lib/hamster/set/partition_spec.rb +5 -5
- data/spec/lib/hamster/set/product_spec.rb +2 -2
- data/spec/lib/hamster/set/reduce_spec.rb +5 -5
- data/spec/lib/hamster/set/{remove_spec.rb → reject_spec.rb} +6 -6
- data/spec/lib/hamster/set/reverse_each_spec.rb +1 -1
- data/spec/lib/hamster/set/sample_spec.rb +1 -1
- data/spec/lib/hamster/set/{filter_spec.rb → select_spec.rb} +11 -11
- data/spec/lib/hamster/set/size_spec.rb +1 -1
- data/spec/lib/hamster/set/sorting_spec.rb +16 -5
- data/spec/lib/hamster/set/subset_spec.rb +2 -2
- data/spec/lib/hamster/set/sum_spec.rb +2 -2
- data/spec/lib/hamster/set/superset_spec.rb +2 -2
- data/spec/lib/hamster/set/to_a_spec.rb +2 -2
- data/spec/lib/hamster/set/to_list_spec.rb +2 -2
- data/spec/lib/hamster/set/to_set_spec.rb +1 -1
- data/spec/lib/hamster/set/union_spec.rb +23 -14
- data/spec/lib/hamster/sorted_set/above_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/add_spec.rb +8 -8
- data/spec/lib/hamster/sorted_set/at_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/below_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/between_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/clear_spec.rb +11 -2
- data/spec/lib/hamster/sorted_set/copying_spec.rb +21 -0
- data/spec/lib/hamster/sorted_set/delete_at_spec.rb +4 -4
- data/spec/lib/hamster/sorted_set/delete_spec.rb +21 -12
- data/spec/lib/hamster/sorted_set/difference_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/disjoint_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/drop_spec.rb +30 -3
- data/spec/lib/hamster/sorted_set/drop_while_spec.rb +4 -4
- data/spec/lib/hamster/sorted_set/each_spec.rb +16 -18
- data/spec/lib/hamster/sorted_set/empty_spec.rb +12 -14
- data/spec/lib/hamster/sorted_set/eql_spec.rb +5 -5
- data/spec/lib/hamster/sorted_set/exclusion_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/fetch_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/find_index_spec.rb +10 -2
- data/spec/lib/hamster/sorted_set/first_spec.rb +10 -12
- data/spec/lib/hamster/sorted_set/from_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/group_by_spec.rb +10 -10
- data/spec/lib/hamster/sorted_set/include_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/inspect_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/intersect_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/intersection_spec.rb +3 -3
- data/spec/lib/hamster/sorted_set/last_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/map_spec.rb +13 -5
- data/spec/lib/hamster/sorted_set/marshal_spec.rb +3 -3
- data/spec/lib/hamster/sorted_set/maximum_spec.rb +37 -0
- data/spec/lib/hamster/sorted_set/minimum_spec.rb +11 -13
- data/spec/lib/hamster/sorted_set/new_spec.rb +23 -3
- data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/{filter_spec.rb → select_spec.rb} +10 -10
- data/spec/lib/hamster/sorted_set/size_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/slice_spec.rb +158 -142
- data/spec/lib/hamster/sorted_set/sorting_spec.rb +3 -3
- data/spec/lib/hamster/sorted_set/subset_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/superset_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/take_spec.rb +32 -3
- data/spec/lib/hamster/sorted_set/take_while_spec.rb +4 -4
- data/spec/lib/hamster/sorted_set/to_set_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/union_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/up_to_spec.rb +12 -11
- data/spec/lib/hamster/sorted_set/values_at_spec.rb +6 -6
- data/spec/lib/hamster/vector/add_spec.rb +3 -3
- data/spec/lib/hamster/vector/any_spec.rb +1 -1
- data/spec/lib/hamster/vector/assoc_spec.rb +11 -1
- data/spec/lib/hamster/vector/bsearch_spec.rb +10 -2
- data/spec/lib/hamster/vector/clear_spec.rb +3 -3
- data/spec/lib/hamster/vector/combination_spec.rb +4 -4
- data/spec/lib/hamster/vector/compact_spec.rb +2 -2
- data/spec/lib/hamster/vector/compare_spec.rb +3 -3
- data/spec/lib/hamster/vector/concat_spec.rb +2 -2
- data/spec/lib/hamster/vector/copying_spec.rb +1 -1
- data/spec/lib/hamster/vector/delete_at_spec.rb +8 -8
- data/spec/lib/hamster/vector/delete_spec.rb +2 -2
- data/spec/lib/hamster/vector/drop_spec.rb +10 -3
- data/spec/lib/hamster/vector/drop_while_spec.rb +5 -5
- data/spec/lib/hamster/vector/each_index_spec.rb +2 -2
- data/spec/lib/hamster/vector/each_spec.rb +27 -29
- data/spec/lib/hamster/vector/each_with_index_spec.rb +2 -2
- data/spec/lib/hamster/vector/empty_spec.rb +11 -13
- data/spec/lib/hamster/vector/eql_spec.rb +6 -6
- data/spec/lib/hamster/vector/fetch_spec.rb +1 -1
- data/spec/lib/hamster/vector/fill_spec.rb +9 -9
- data/spec/lib/hamster/vector/first_spec.rb +10 -12
- data/spec/lib/hamster/vector/flat_map_spec.rb +51 -0
- data/spec/lib/hamster/vector/flatten_spec.rb +15 -0
- data/spec/lib/hamster/vector/get_spec.rb +4 -4
- data/spec/lib/hamster/vector/group_by_spec.rb +12 -12
- data/spec/lib/hamster/vector/include_spec.rb +2 -2
- data/spec/lib/hamster/vector/insert_spec.rb +2 -2
- data/spec/lib/hamster/vector/inspect_spec.rb +1 -1
- data/spec/lib/hamster/vector/join_spec.rb +5 -5
- data/spec/lib/hamster/vector/last_spec.rb +1 -1
- data/spec/lib/hamster/vector/length_spec.rb +1 -1
- data/spec/lib/hamster/vector/ltlt_spec.rb +2 -2
- data/spec/lib/hamster/vector/map_spec.rb +5 -5
- data/spec/lib/hamster/vector/marshal_spec.rb +2 -2
- data/spec/lib/hamster/vector/maximum_spec.rb +20 -22
- data/spec/lib/hamster/vector/minimum_spec.rb +20 -22
- data/spec/lib/hamster/vector/multiply_spec.rb +4 -4
- data/spec/lib/hamster/vector/partition_spec.rb +5 -5
- data/spec/lib/hamster/vector/permutation_spec.rb +4 -4
- data/spec/lib/hamster/vector/pop_spec.rb +3 -3
- data/spec/lib/hamster/vector/product_spec.rb +10 -10
- data/spec/lib/hamster/vector/put_spec.rb +175 -0
- data/spec/lib/hamster/vector/reduce_spec.rb +5 -57
- data/spec/lib/hamster/vector/{remove_spec.rb → reject_spec.rb} +4 -4
- data/spec/lib/hamster/vector/repeated_combination_spec.rb +4 -4
- data/spec/lib/hamster/vector/repeated_permutation_spec.rb +6 -6
- data/spec/lib/hamster/vector/reverse_each_spec.rb +1 -1
- data/spec/lib/hamster/vector/reverse_spec.rb +1 -1
- data/spec/lib/hamster/vector/rindex_spec.rb +1 -1
- data/spec/lib/hamster/vector/rotate_spec.rb +9 -9
- data/spec/lib/hamster/vector/sample_spec.rb +1 -1
- data/spec/lib/hamster/vector/{filter_spec.rb → select_spec.rb} +8 -8
- data/spec/lib/hamster/vector/set_spec.rb +12 -141
- data/spec/lib/hamster/vector/shift_spec.rb +3 -3
- data/spec/lib/hamster/vector/shuffle_spec.rb +2 -2
- data/spec/lib/hamster/vector/slice_spec.rb +137 -137
- data/spec/lib/hamster/vector/sorting_spec.rb +5 -5
- data/spec/lib/hamster/vector/sum_spec.rb +1 -1
- data/spec/lib/hamster/vector/take_spec.rb +17 -3
- data/spec/lib/hamster/vector/take_while_spec.rb +4 -4
- data/spec/lib/hamster/vector/to_a_spec.rb +1 -1
- data/spec/lib/hamster/vector/to_ary_spec.rb +1 -1
- data/spec/lib/hamster/vector/to_list_spec.rb +2 -1
- data/spec/lib/hamster/vector/to_set_spec.rb +1 -1
- data/spec/lib/hamster/vector/uniq_spec.rb +27 -6
- data/spec/lib/hamster/vector/unshift_spec.rb +3 -3
- data/spec/lib/hamster/vector/values_at_spec.rb +6 -6
- data/spec/lib/hamster/vector/zip_spec.rb +2 -2
- data/spec/lib/load_spec.rb +42 -0
- data/spec/spec_helper.rb +25 -0
- metadata +85 -48
- data/spec/lib/hamster/deque/head_spec.rb +0 -20
- data/spec/lib/hamster/hash/uniq_spec.rb +0 -14
- data/spec/lib/hamster/list/elem_index_spec.rb +0 -36
- data/spec/lib/hamster/list/elem_indices_spec.rb +0 -31
- data/spec/lib/hamster/list/filter_spec.rb +0 -71
- data/spec/lib/hamster/list/find_indices_spec.rb +0 -37
- data/spec/lib/hamster/set/foreach_spec.rb +0 -40
- data/spec/lib/hamster/set/head_spec.rb +0 -31
- data/spec/lib/hamster/set/uniq_spec.rb +0 -14
- data/spec/lib/hamster/sorted_set/construction_spec.rb +0 -29
- data/spec/lib/hamster/vector/exist_spec.rb +0 -70
- data/spec/lib/hamster/vector/exists_spec.rb +0 -70
@@ -2,9 +2,9 @@ require "spec_helper"
|
|
2
2
|
require "hamster/set"
|
3
3
|
|
4
4
|
describe Hamster::Set do
|
5
|
-
[:
|
5
|
+
[:select, :find_all].each do |method|
|
6
6
|
describe "##{method}" do
|
7
|
-
let(:set) {
|
7
|
+
let(:set) { S["A", "B", "C"] }
|
8
8
|
|
9
9
|
context "when everything matches" do
|
10
10
|
it "returns self" do
|
@@ -18,18 +18,18 @@ describe Hamster::Set do
|
|
18
18
|
|
19
19
|
it "preserves the original" do
|
20
20
|
result
|
21
|
-
set.should eql(
|
21
|
+
set.should eql(S["A", "B", "C"])
|
22
22
|
end
|
23
23
|
|
24
24
|
it "returns a set with the matching values" do
|
25
|
-
result.should eql(
|
25
|
+
result.should eql(S["A"])
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
context "with no block" do
|
30
30
|
it "returns an Enumerator" do
|
31
31
|
set.send(method).class.should be(Enumerator)
|
32
|
-
set.send(method).each { |item| item == "A" }.should eql(
|
32
|
+
set.send(method).each { |item| item == "A" }.should eql(S["A"])
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -39,7 +39,7 @@ describe Hamster::Set do
|
|
39
39
|
|
40
40
|
it "preserves the original" do
|
41
41
|
result
|
42
|
-
set.should eql(
|
42
|
+
set.should eql(S["A", "B", "C"])
|
43
43
|
end
|
44
44
|
|
45
45
|
it "returns the canonical empty set" do
|
@@ -51,15 +51,15 @@ describe Hamster::Set do
|
|
51
51
|
it "returns an instance of the same class" do
|
52
52
|
subclass = Class.new(Hamster::Set)
|
53
53
|
instance = subclass.new(['A', 'B', 'C'])
|
54
|
-
instance.
|
55
|
-
instance.
|
56
|
-
instance.
|
54
|
+
instance.send(method) { true }.class.should be(subclass)
|
55
|
+
instance.send(method) { false }.class.should be(subclass)
|
56
|
+
instance.send(method) { rand(2) == 0 }.class.should be(subclass)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
it "works on a large set, with many combinations of input" do
|
61
61
|
items = (1..1000).to_a
|
62
|
-
original =
|
62
|
+
original = S.new(items)
|
63
63
|
30.times do
|
64
64
|
threshold = rand(1000)
|
65
65
|
result = original.send(method) { |item| item <= threshold }
|
@@ -67,7 +67,7 @@ describe Hamster::Set do
|
|
67
67
|
result.each { |item| item.should <= threshold }
|
68
68
|
(threshold+1).upto(1000) { |item| result.include?(item).should == false }
|
69
69
|
end
|
70
|
-
original.should eql(
|
70
|
+
original.should eql(S.new(items))
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -13,19 +13,19 @@ describe Hamster::Set do
|
|
13
13
|
[%w[Ichi Ni San], %w[Ni San Ichi]],
|
14
14
|
].each do |values, expected|
|
15
15
|
describe "on #{values.inspect}" do
|
16
|
-
let(:set) {
|
16
|
+
let(:set) { S[*values] }
|
17
17
|
|
18
18
|
describe "with a block" do
|
19
19
|
let(:result) { set.send(method, &comparator) }
|
20
20
|
|
21
21
|
it "returns #{expected.inspect}" do
|
22
|
-
result.should eql(
|
22
|
+
result.should eql(SS.new(expected, &comparator))
|
23
23
|
result.to_a.should == expected
|
24
24
|
end
|
25
25
|
|
26
26
|
it "doesn't change the original Set" do
|
27
27
|
result
|
28
|
-
set.should eql(
|
28
|
+
set.should eql(S.new(values))
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -33,17 +33,28 @@ describe Hamster::Set do
|
|
33
33
|
let(:result) { set.send(method) }
|
34
34
|
|
35
35
|
it "returns #{expected.sort.inspect}" do
|
36
|
-
result.should eql(
|
36
|
+
result.should eql(SS[*expected])
|
37
37
|
result.to_a.should == expected.sort
|
38
38
|
end
|
39
39
|
|
40
40
|
it "doesn't change the original Set" do
|
41
41
|
result
|
42
|
-
set.should eql(
|
42
|
+
set.should eql(S.new(values))
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
describe "#sort_by" do
|
51
|
+
it "only calls the passed block once for each item" do
|
52
|
+
count = 0
|
53
|
+
fn = lambda { |x| count += 1; -x }
|
54
|
+
items = 100.times.collect { rand(10000) }.uniq
|
55
|
+
|
56
|
+
S[*items].sort_by(&fn).to_a.should == items.sort.reverse
|
57
|
+
count.should == items.length
|
58
|
+
end
|
59
|
+
end
|
49
60
|
end
|
@@ -19,7 +19,7 @@ describe Hamster::Set do
|
|
19
19
|
].each do |a, b, expected|
|
20
20
|
describe "for #{a.inspect} and #{b.inspect}" do
|
21
21
|
it "returns #{expected}" do
|
22
|
-
|
22
|
+
S[*a].send(method, S[*b]).should == expected
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -43,7 +43,7 @@ describe Hamster::Set do
|
|
43
43
|
].each do |a, b, expected|
|
44
44
|
describe "for #{a.inspect} and #{b.inspect}" do
|
45
45
|
it "returns #{expected}" do
|
46
|
-
|
46
|
+
S[*a].send(method, S[*b]).should == expected
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -9,14 +9,14 @@ describe Hamster::Set do
|
|
9
9
|
[[1, 3, 5, 7, 11], 27],
|
10
10
|
].each do |values, expected|
|
11
11
|
context "on #{values.inspect}" do
|
12
|
-
let(:set) {
|
12
|
+
let(:set) { S[*values] }
|
13
13
|
|
14
14
|
it "returns #{expected.inspect}" do
|
15
15
|
set.sum.should == expected
|
16
16
|
end
|
17
17
|
|
18
18
|
it "doesn't change the original Set" do
|
19
|
-
set.should eql(
|
19
|
+
set.should eql(S.new(values))
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -19,7 +19,7 @@ describe Hamster::Set do
|
|
19
19
|
].each do |a, b, expected|
|
20
20
|
describe "for #{a.inspect} and #{b.inspect}" do
|
21
21
|
it "returns #{expected}" do
|
22
|
-
|
22
|
+
S[*a].send(method, S[*b]).should == expected
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -43,7 +43,7 @@ describe Hamster::Set do
|
|
43
43
|
].each do |a, b, expected|
|
44
44
|
describe "for #{a.inspect} and #{b.inspect}" do
|
45
45
|
it "returns #{expected}" do
|
46
|
-
|
46
|
+
S[*a].send(method, S[*b]).should == expected
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -6,7 +6,7 @@ describe Hamster::Set do
|
|
6
6
|
describe "##{method}" do
|
7
7
|
('a'..'z').each do |letter|
|
8
8
|
let(:values) { ('a'..letter).to_a }
|
9
|
-
let(:set) {
|
9
|
+
let(:set) { S.new(values) }
|
10
10
|
let(:result) { set.send(method) }
|
11
11
|
|
12
12
|
context "on 'a'..'#{letter}'" do
|
@@ -16,7 +16,7 @@ describe Hamster::Set do
|
|
16
16
|
|
17
17
|
it "doesn't change the original Set" do
|
18
18
|
result
|
19
|
-
set.should eql(
|
19
|
+
set.should eql(S[*values])
|
20
20
|
end
|
21
21
|
|
22
22
|
it "returns a mutable array" do
|
@@ -10,7 +10,7 @@ describe Hamster::Set do
|
|
10
10
|
%w[A B C],
|
11
11
|
].each do |values|
|
12
12
|
context "on #{values.inspect}" do
|
13
|
-
let(:set) {
|
13
|
+
let(:set) { S[*values] }
|
14
14
|
let(:list) { set.to_list }
|
15
15
|
|
16
16
|
it "returns a list" do
|
@@ -19,7 +19,7 @@ describe Hamster::Set do
|
|
19
19
|
|
20
20
|
it "doesn't change the original Set" do
|
21
21
|
list
|
22
|
-
set.should eql(
|
22
|
+
set.should eql(S.new(values))
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "the returned list" do
|
@@ -14,42 +14,51 @@ describe Hamster::Set do
|
|
14
14
|
[%w[A B C], %w[X Y Z], %w[A B C X Y Z]]
|
15
15
|
].each do |a, b, expected|
|
16
16
|
context "for #{a.inspect} and #{b.inspect}" do
|
17
|
-
let(:set_a) {
|
18
|
-
let(:set_b) {
|
17
|
+
let(:set_a) { S[*a] }
|
18
|
+
let(:set_b) { S[*b] }
|
19
19
|
|
20
20
|
it "returns #{expected.inspect}, without changing the original Sets" do
|
21
|
-
set_a.send(method, set_b).should eql(
|
22
|
-
set_a.should eql(
|
23
|
-
set_b.should eql(
|
21
|
+
set_a.send(method, set_b).should eql(S[*expected])
|
22
|
+
set_a.should eql(S.new(a))
|
23
|
+
set_b.should eql(S.new(b))
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
context "for #{b.inspect} and #{a.inspect}" do
|
28
|
-
let(:set_a) {
|
29
|
-
let(:set_b) {
|
28
|
+
let(:set_a) { S[*a] }
|
29
|
+
let(:set_b) { S[*b] }
|
30
30
|
|
31
31
|
it "returns #{expected.inspect}, without changing the original Sets" do
|
32
|
-
set_b.send(method, set_a).should eql(
|
33
|
-
set_a.should eql(
|
34
|
-
set_b.should eql(
|
32
|
+
set_b.send(method, set_a).should eql(S[*expected])
|
33
|
+
set_a.should eql(S.new(a))
|
34
|
+
set_b.should eql(S.new(b))
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
context "when passed a Ruby Array" do
|
39
39
|
it "returns the expected Set" do
|
40
|
-
|
41
|
-
|
40
|
+
S[*a].send(method, b.freeze).should eql(S[*expected])
|
41
|
+
S[*b].send(method, a.freeze).should eql(S[*expected])
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
context "from a subclass" do
|
46
46
|
it "returns an instance of the subclass" do
|
47
47
|
subclass = Class.new(Hamster::Set)
|
48
|
-
subclass.new(a).
|
49
|
-
subclass.new(b).
|
48
|
+
subclass.new(a).send(method, S.new(b)).class.should be(subclass)
|
49
|
+
subclass.new(b).send(method, S.new(a)).class.should be(subclass)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
54
|
+
context "when receiving a subset" do
|
55
|
+
let(:set_a) { S.new(1..300) }
|
56
|
+
let(:set_b) { S.new(1..200) }
|
57
|
+
|
58
|
+
it "returns self" do
|
59
|
+
set_a.send(method, set_b).should be(set_a)
|
60
|
+
end
|
61
|
+
end
|
53
62
|
end
|
54
63
|
end
|
55
64
|
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 higher than the argument" do
|
8
8
|
100.times do
|
9
|
-
items
|
10
|
-
set
|
9
|
+
items = rand(100).times.collect { rand(1000) }
|
10
|
+
set = SS.new(items)
|
11
11
|
threshold = rand(1000)
|
12
|
-
result
|
13
|
-
array
|
12
|
+
result = set.above(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 higher than the argument" do
|
23
23
|
100.times do
|
24
|
-
items
|
25
|
-
set
|
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.above(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
|
-
|
39
|
-
|
40
|
-
|
38
|
+
SS.empty.above(1).should be_empty
|
39
|
+
SS.empty.above('abc').should be_empty
|
40
|
+
SS.empty.above(: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 =
|
46
|
+
result = SS.new(1..100).above(100)
|
47
47
|
result.class.should be(Hamster::SortedSet)
|
48
48
|
result.should be_empty
|
49
49
|
end
|
@@ -2,25 +2,25 @@ require "spec_helper"
|
|
2
2
|
require "hamster/sorted_set"
|
3
3
|
|
4
4
|
describe Hamster::SortedSet do
|
5
|
-
let(:sorted_set) {
|
5
|
+
let(:sorted_set) { SS["B", "C", "D"] }
|
6
6
|
|
7
7
|
[:add, :<<].each do |method|
|
8
8
|
describe "##{method}" do
|
9
9
|
context "with a unique value" do
|
10
10
|
it "preserves the original" do
|
11
11
|
sorted_set.send(method, "A")
|
12
|
-
sorted_set.should eql(
|
12
|
+
sorted_set.should eql(SS["B", "C", "D"])
|
13
13
|
end
|
14
14
|
|
15
15
|
it "returns a copy with the superset of values (in order)" do
|
16
|
-
sorted_set.send(method, "A").should eql(
|
16
|
+
sorted_set.send(method, "A").should eql(SS["A", "B", "C", "D"])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context "with a duplicate value" do
|
21
21
|
it "preserves the original values" do
|
22
22
|
sorted_set.send(method, "C")
|
23
|
-
sorted_set.should eql(
|
23
|
+
sorted_set.should eql(SS["B", "C", "D"])
|
24
24
|
end
|
25
25
|
|
26
26
|
it "returns self" do
|
@@ -30,7 +30,7 @@ describe Hamster::SortedSet do
|
|
30
30
|
|
31
31
|
context "on a set ordered by a comparator" do
|
32
32
|
it "inserts the new item in the correct place" do
|
33
|
-
s =
|
33
|
+
s = SS.new(['tick', 'pig', 'hippopotamus']) { |str| str.length }
|
34
34
|
s.add('giraffe').to_a.should == ['pig', 'tick', 'giraffe', 'hippopotamus']
|
35
35
|
end
|
36
36
|
end
|
@@ -41,18 +41,18 @@ describe Hamster::SortedSet do
|
|
41
41
|
context "with a unique value" do
|
42
42
|
it "preserves the original" do
|
43
43
|
sorted_set.add?("A")
|
44
|
-
sorted_set.should eql(
|
44
|
+
sorted_set.should eql(SS["B", "C", "D"])
|
45
45
|
end
|
46
46
|
|
47
47
|
it "returns a copy with the superset of values" do
|
48
|
-
sorted_set.add?("A").should eql(
|
48
|
+
sorted_set.add?("A").should eql(SS["A", "B", "C", "D"])
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
context "with a duplicate value" do
|
53
53
|
it "preserves the original values" do
|
54
54
|
sorted_set.add?("C")
|
55
|
-
sorted_set.should eql(
|
55
|
+
sorted_set.should eql(SS["B", "C", "D"])
|
56
56
|
end
|
57
57
|
|
58
58
|
it "returns false" do
|
@@ -17,7 +17,7 @@ describe Hamster::SortedSet do
|
|
17
17
|
].each do |values, number, expected|
|
18
18
|
describe "#{values.inspect} with #{number}" do
|
19
19
|
it "returns #{expected.inspect}" do
|
20
|
-
|
20
|
+
SS[*values].at(number).should == expected
|
21
21
|
end
|
22
22
|
end
|
23
23
|
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 lower than the argument" do
|
8
8
|
100.times do
|
9
|
-
items
|
10
|
-
set
|
9
|
+
items = rand(100).times.collect { rand(1000) }
|
10
|
+
set = SS.new(items)
|
11
11
|
threshold = rand(1000)
|
12
|
-
result
|
13
|
-
array
|
12
|
+
result = set.below(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 lower than the argument" do
|
23
23
|
100.times do
|
24
|
-
items
|
25
|
-
set
|
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.below(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
|
-
|
39
|
-
|
40
|
-
|
38
|
+
SS.empty.below(1).should be_empty
|
39
|
+
SS.empty.below('abc').should be_empty
|
40
|
+
SS.empty.below(:symbol).should be_empty
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
context "with an argument lower than all the values in the set" do
|
45
45
|
it "returns an empty set" do
|
46
|
-
result =
|
46
|
+
result = SS.new(1..100).below(1)
|
47
47
|
result.class.should be(Hamster::SortedSet)
|
48
48
|
result.should be_empty
|
49
49
|
end
|