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
@@ -23,20 +23,20 @@ describe Hamster::Hash do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it "accepts an array as initializer" do
|
26
|
-
|
26
|
+
H.new([['a', 'b'], ['c', 'd']]).should eql(H['a' => 'b', 'c' => 'd'])
|
27
27
|
end
|
28
28
|
|
29
29
|
it "returns a Hash which doesn't change even if initializer is mutated" do
|
30
30
|
rbhash = {a: 1, b: 2}
|
31
|
-
hash =
|
31
|
+
hash = H.new(rbhash)
|
32
32
|
rbhash[:a] = 'BAD'
|
33
|
-
hash.should eql(
|
33
|
+
hash.should eql(H[a: 1, b: 2])
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
describe ".[]" do
|
38
38
|
it "accepts a Ruby Hash as initializer" do
|
39
|
-
hash =
|
39
|
+
hash = H[a: 1, b: 2]
|
40
40
|
hash.class.should be(Hamster::Hash)
|
41
41
|
hash.size.should == 2
|
42
42
|
hash.key?(:a).should == true
|
@@ -44,7 +44,7 @@ describe Hamster::Hash do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "accepts a Hamster::Hash as initializer" do
|
47
|
-
hash =
|
47
|
+
hash = H[H.new(a: 1, b: 2)]
|
48
48
|
hash.class.should be(Hamster::Hash)
|
49
49
|
hash.size.should == 2
|
50
50
|
hash.key?(:a).should == true
|
@@ -52,7 +52,7 @@ describe Hamster::Hash do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
it "accepts an array as initializer" do
|
55
|
-
hash =
|
55
|
+
hash = H[[[:a, 1], [:b, 2]]]
|
56
56
|
hash.class.should be(Hamster::Hash)
|
57
57
|
hash.size.should == 2
|
58
58
|
hash.key?(:a).should == true
|
@@ -5,16 +5,16 @@ describe Hamster::Hash do
|
|
5
5
|
describe "#none?" do
|
6
6
|
context "when empty" do
|
7
7
|
it "with a block returns true" do
|
8
|
-
|
8
|
+
H.empty.none? {}.should == true
|
9
9
|
end
|
10
10
|
|
11
11
|
it "with no block returns true" do
|
12
|
-
|
12
|
+
H.empty.none?.should == true
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
context "when not empty" do
|
17
|
-
let(:hash) {
|
17
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
|
18
18
|
|
19
19
|
context "with a block" do
|
20
20
|
[
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
let(:hash) {
|
5
|
+
let(:hash) { H["a" => 1, "b" => 2, "c" => 3, "d" => 4] }
|
6
6
|
let(:partition) { hash.partition { |k,v| v % 2 == 0 }}
|
7
7
|
|
8
8
|
describe "#partition" do
|
@@ -21,7 +21,7 @@ describe Hamster::Hash do
|
|
21
21
|
|
22
22
|
it "doesn't modify the original Hash" do
|
23
23
|
partition
|
24
|
-
hash.should eql(
|
24
|
+
hash.should eql(H["a" => 1, "b" => 2, "c" => 3, "d" => 4])
|
25
25
|
end
|
26
26
|
|
27
27
|
context "from a subclass" do
|
@@ -3,7 +3,7 @@ require "hamster/hash"
|
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
5
|
describe "#put" do
|
6
|
-
let(:hash) {
|
6
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
7
7
|
|
8
8
|
context "with a block" do
|
9
9
|
it "passes the value to the block" do
|
@@ -37,11 +37,11 @@ describe Hamster::Hash do
|
|
37
37
|
|
38
38
|
it "preserves the original" do
|
39
39
|
result
|
40
|
-
hash.should eql(
|
40
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
41
41
|
end
|
42
42
|
|
43
43
|
it "returns a copy with the superset of key/value pairs" do
|
44
|
-
result.should eql(
|
44
|
+
result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -50,16 +50,38 @@ describe Hamster::Hash do
|
|
50
50
|
|
51
51
|
it "preserves the original" do
|
52
52
|
result
|
53
|
-
hash.should eql(
|
53
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
54
54
|
end
|
55
55
|
|
56
56
|
it "returns a copy with the superset of key/value pairs" do
|
57
|
-
result.should eql(
|
57
|
+
result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "with duplicate key and identical value" do
|
62
|
+
let(:hash) { H["X" => 1, "Y" => 2] }
|
63
|
+
let(:result) { hash.put("X", 1) }
|
64
|
+
|
65
|
+
it "returns the original hash unmodified" do
|
66
|
+
result.should be(hash)
|
67
|
+
end
|
68
|
+
|
69
|
+
context "with big hash (force nested tries)" do
|
70
|
+
let(:keys) { (0..99).map(&:to_s) }
|
71
|
+
let(:values) { (100..199).to_a }
|
72
|
+
let(:hash) { H[keys.zip(values)] }
|
73
|
+
|
74
|
+
it "returns the original hash unmodified for all changes" do
|
75
|
+
keys.each_with_index do |key, index|
|
76
|
+
result = hash.put(key, values[index])
|
77
|
+
result.should be(hash)
|
78
|
+
end
|
79
|
+
end
|
58
80
|
end
|
59
81
|
end
|
60
82
|
|
61
83
|
context "with unequal keys which hash to the same value" do
|
62
|
-
let(:hash) {
|
84
|
+
let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
|
63
85
|
|
64
86
|
it "stores and can retrieve both" do
|
65
87
|
result = hash.put(DeterministicHash.new('b', 1), 'bee')
|
@@ -71,7 +93,7 @@ describe Hamster::Hash do
|
|
71
93
|
context "when a String is inserted as key and then mutated" do
|
72
94
|
it "is not affected" do
|
73
95
|
string = "a string!"
|
74
|
-
hash =
|
96
|
+
hash = H.empty.put(string, 'a value!')
|
75
97
|
string.upcase!
|
76
98
|
hash['a string!'].should == 'a value!'
|
77
99
|
hash['A STRING!'].should be_nil
|
@@ -2,16 +2,16 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
[:reduce, :inject
|
5
|
+
[:reduce, :inject].each do |method|
|
6
6
|
describe "##{method}" do
|
7
7
|
context "when empty" do
|
8
8
|
it "returns the memo" do
|
9
|
-
|
9
|
+
H.empty.send(method, "ABC") {}.should == "ABC"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
context "when not empty" do
|
14
|
-
let(:hash) {
|
14
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
15
15
|
|
16
16
|
context "with a block" do
|
17
17
|
it "returns the final memo" do
|
@@ -20,7 +20,7 @@ describe Hamster::Hash do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
context "with no block" do
|
23
|
-
let(:hash) {
|
23
|
+
let(:hash) { H[a: 1, b: 2] }
|
24
24
|
|
25
25
|
it "uses a passed string as the name of a method to use instead" do
|
26
26
|
[[:a, 1, :b, 2], [:b, 2, :a, 1]].include?(hash.send(method, "+")).should == true
|
@@ -2,9 +2,9 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
[:
|
5
|
+
[:reject, :delete_if].each do |method|
|
6
6
|
describe "##{method}" do
|
7
|
-
let(:hash) {
|
7
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
8
8
|
|
9
9
|
context "when nothing matches" do
|
10
10
|
it "returns self" do
|
@@ -18,11 +18,11 @@ describe Hamster::Hash do
|
|
18
18
|
|
19
19
|
it "preserves the original" do
|
20
20
|
result
|
21
|
-
hash.should eql(
|
21
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
22
22
|
end
|
23
23
|
|
24
24
|
it "returns a set with the matching values" do
|
25
|
-
result.should eql(
|
25
|
+
result.should eql(H["B" => "bee", "C" => "see"])
|
26
26
|
end
|
27
27
|
|
28
28
|
it "yields entries in the same order as #each" do
|
@@ -38,14 +38,14 @@ describe Hamster::Hash do
|
|
38
38
|
it "returns an Enumerator" do
|
39
39
|
hash.send(method).class.should be(Enumerator)
|
40
40
|
hash.send(method).to_a.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
41
|
-
hash.send(method).each { true }.should eql(
|
41
|
+
hash.send(method).each { true }.should eql(H.empty)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
context "on a large hash, with many combinations of input" do
|
46
46
|
it "still works" do
|
47
47
|
array = 1000.times.collect { |n| [n, n] }
|
48
|
-
hash =
|
48
|
+
hash = H.new(array)
|
49
49
|
[0, 10, 100, 200, 500, 800, 900, 999, 1000].each do |threshold|
|
50
50
|
result = hash.send(method) { |k,v| k >= threshold}
|
51
51
|
result.size.should == threshold
|
@@ -53,7 +53,7 @@ describe Hamster::Hash do
|
|
53
53
|
threshold.upto(1000) { |n| result.key?(n).should == false }
|
54
54
|
end
|
55
55
|
# shouldn't have changed
|
56
|
-
hash.should eql(
|
56
|
+
hash.should eql(H.new(1000.times.collect { |n| [n, n] }))
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
let(:hash) {
|
5
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
6
|
|
7
7
|
describe "#reverse_each" do
|
8
8
|
context "with a block" do
|
@@ -2,9 +2,9 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
[:
|
5
|
+
[:select, :find_all, :keep_if].each do |method|
|
6
6
|
describe "##{method}" do
|
7
|
-
let(:original) {
|
7
|
+
let(:original) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
8
8
|
|
9
9
|
context "when everything matches" do
|
10
10
|
it "returns self" do
|
@@ -17,11 +17,11 @@ describe Hamster::Hash do
|
|
17
17
|
let(:result) { original.send(method) { |key, value| key == "A" && value == "aye" }}
|
18
18
|
|
19
19
|
it "preserves the original" do
|
20
|
-
original.should eql(
|
20
|
+
original.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
21
21
|
end
|
22
22
|
|
23
23
|
it "returns a set with the matching values" do
|
24
|
-
result.should eql(
|
24
|
+
result.should eql(H["A" => "aye"])
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -43,7 +43,7 @@ describe Hamster::Hash do
|
|
43
43
|
|
44
44
|
it "works on a large hash, with many combinations of input" do
|
45
45
|
keys = (1..1000).to_a
|
46
|
-
original =
|
46
|
+
original = H.new(keys.zip(2..1001))
|
47
47
|
25.times do
|
48
48
|
threshold = rand(1000)
|
49
49
|
result = original.send(method) { |k,v| k <= threshold }
|
@@ -51,7 +51,7 @@ describe Hamster::Hash do
|
|
51
51
|
result.each_key { |k| k.should <= threshold }
|
52
52
|
(threshold+1).upto(1000) { |k| result.key?(k).should == false }
|
53
53
|
end
|
54
|
-
original.should eql(
|
54
|
+
original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -11,7 +11,7 @@ describe Hamster::Hash do
|
|
11
11
|
].each do |values, result|
|
12
12
|
|
13
13
|
it "returns #{result} for #{values.inspect}" do
|
14
|
-
|
14
|
+
H[*values].send(method).should == result
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -20,7 +20,7 @@ describe Hamster::Hash do
|
|
20
20
|
random_things = (lots + lots).sort_by { |x|rand }
|
21
21
|
|
22
22
|
it "has the correct size after adding lots of things with colliding keys and such" do
|
23
|
-
h =
|
23
|
+
h = H.empty
|
24
24
|
random_things.each do |thing|
|
25
25
|
h = h.put(thing, thing * 2)
|
26
26
|
end
|
@@ -37,7 +37,7 @@ describe Hamster::Hash do
|
|
37
37
|
h
|
38
38
|
end.size
|
39
39
|
it "has the correct size after lots of addings and removings" do
|
40
|
-
h =
|
40
|
+
h = H.empty
|
41
41
|
random_actions.each do |(act, ob)|
|
42
42
|
if act == :add
|
43
43
|
h = h.put(ob, ob * 3)
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
let(:hash) {
|
5
|
+
let(:hash) { H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL") }
|
6
6
|
|
7
7
|
describe "#slice" do
|
8
8
|
let(:slice) { hash.slice(*values) }
|
@@ -16,7 +16,7 @@ describe Hamster::Hash do
|
|
16
16
|
|
17
17
|
it "doesn't modify the original Hash" do
|
18
18
|
slice
|
19
|
-
hash.should eql(
|
19
|
+
hash.should eql(H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -29,12 +29,12 @@ describe Hamster::Hash do
|
|
29
29
|
|
30
30
|
it "doesn't modify the original Hash" do
|
31
31
|
slice
|
32
|
-
hash.should eql(
|
32
|
+
hash.should eql(H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
context "on a Hash with a default block" do
|
37
|
-
let(:hash) {
|
37
|
+
let(:hash) { H.new('A' => 'aye', 'B' => 'bee') { 'nothing' }}
|
38
38
|
let(:values) { ["B", nil] }
|
39
39
|
|
40
40
|
it "maintains the default block" do
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
let(:hash) {
|
5
|
+
let(:hash) { H[a: 3, b: 2, c: 1] }
|
6
6
|
|
7
7
|
describe "#sort" do
|
8
8
|
it "returns a Vector of sorted key/val pairs" do
|
@@ -11,7 +11,7 @@ describe Hamster::Hash do
|
|
11
11
|
|
12
12
|
it "works on large hashes" do
|
13
13
|
array = (1..1000).map { |n| [n,n] }
|
14
|
-
|
14
|
+
H.new(array.shuffle).sort.should eql(V.new(array))
|
15
15
|
end
|
16
16
|
|
17
17
|
it "uses block as comparator to sort if passed a block" do
|
@@ -3,18 +3,18 @@ require "hamster/hash"
|
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
5
|
describe "#store" do
|
6
|
-
let(:hash) {
|
6
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
7
7
|
|
8
8
|
context "with a unique key" do
|
9
9
|
let(:result) { hash.store("D", "dee") }
|
10
10
|
|
11
11
|
it "preserves the original" do
|
12
12
|
result
|
13
|
-
hash.should eql(
|
13
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
14
14
|
end
|
15
15
|
|
16
16
|
it "returns a copy with the superset of key/value pairs" do
|
17
|
-
result.should eql(
|
17
|
+
result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -23,16 +23,38 @@ describe Hamster::Hash do
|
|
23
23
|
|
24
24
|
it "preserves the original" do
|
25
25
|
result
|
26
|
-
hash.should eql(
|
26
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
27
27
|
end
|
28
28
|
|
29
29
|
it "returns a copy with the superset of key/value pairs" do
|
30
|
-
result.should eql(
|
30
|
+
result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with duplicate key and identical value" do
|
35
|
+
let(:hash) { H["X" => 1, "Y" => 2] }
|
36
|
+
let(:result) { hash.store("X", 1) }
|
37
|
+
|
38
|
+
it "returns the original hash unmodified" do
|
39
|
+
result.should be(hash)
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with big hash (force nested tries)" do
|
43
|
+
let(:keys) { (0..99).map(&:to_s) }
|
44
|
+
let(:values) { (100..199).to_a }
|
45
|
+
let(:hash) { H[keys.zip(values)] }
|
46
|
+
|
47
|
+
it "returns the original hash unmodified for all changes" do
|
48
|
+
keys.each_with_index do |key, index|
|
49
|
+
result = hash.store(key, values[index])
|
50
|
+
result.should be(hash)
|
51
|
+
end
|
52
|
+
end
|
31
53
|
end
|
32
54
|
end
|
33
55
|
|
34
56
|
context "with unequal keys which hash to the same value" do
|
35
|
-
let(:hash) {
|
57
|
+
let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
|
36
58
|
|
37
59
|
it "stores and can retrieve both" do
|
38
60
|
result = hash.store(DeterministicHash.new('b', 1), 'bee')
|
@@ -44,7 +66,7 @@ describe Hamster::Hash do
|
|
44
66
|
context "when a String is inserted as key and then mutated" do
|
45
67
|
it "is not affected" do
|
46
68
|
string = "a string!"
|
47
|
-
hash =
|
69
|
+
hash = H.empty.store(string, 'a value!')
|
48
70
|
string.upcase!
|
49
71
|
hash['a string!'].should == 'a value!'
|
50
72
|
hash['A STRING!'].should be_nil
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
let(:hash) {
|
5
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
6
|
|
7
7
|
describe "#take" do
|
8
8
|
it "returns the first N key/val pairs from hash" do
|
@@ -29,7 +29,7 @@ describe Hamster::Hash do
|
|
29
29
|
|
30
30
|
it "passes all elements if the block never returns nil/false" do
|
31
31
|
passed = []
|
32
|
-
hash.take_while { |
|
32
|
+
hash.take_while { |k,v| passed << [k, v]; true }.should == hash.to_a
|
33
33
|
passed.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
34
34
|
end
|
35
35
|
end
|