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
@@ -0,0 +1,175 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
let(:vector) { V[*values] }
|
6
|
+
|
7
|
+
describe "#put" do
|
8
|
+
context "when empty" do
|
9
|
+
let(:vector) { V.empty }
|
10
|
+
|
11
|
+
it "raises an error for index -1" do
|
12
|
+
expect { vector.put(-1, :a) }.to raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it "allows indexes 0 and 1 to be put" do
|
16
|
+
vector.put(0, :a).should eql(V[:a])
|
17
|
+
vector.put(1, :a).should eql(V[nil, :a])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when not empty" do
|
22
|
+
let(:vector) { V["A", "B", "C"] }
|
23
|
+
|
24
|
+
context "with a block" do
|
25
|
+
context "and a positive index" do
|
26
|
+
context "within the absolute bounds of the vector" do
|
27
|
+
it "passes the current value to the block" do
|
28
|
+
vector.put(1) { |value| value.should == "B" }
|
29
|
+
end
|
30
|
+
|
31
|
+
it "replaces the value with the result of the block" do
|
32
|
+
result = vector.put(1) { |value| "FLIBBLE" }
|
33
|
+
result.should eql(V["A", "FLIBBLE", "C"])
|
34
|
+
end
|
35
|
+
|
36
|
+
it "supports to_proc methods" do
|
37
|
+
result = vector.put(1, &:downcase)
|
38
|
+
result.should eql(V["A", "b", "C"])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "just past the end of the vector" do
|
43
|
+
it "passes nil to the block and adds a new value" do
|
44
|
+
result = vector.put(3) { |value| value.should be_nil; "D" }
|
45
|
+
result.should eql(V["A", "B", "C", "D"])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "further outside the bounds of the vector" do
|
50
|
+
it "passes nil to the block, fills up missing nils, and adds a new value" do
|
51
|
+
result = vector.put(5) { |value| value.should be_nil; "D" }
|
52
|
+
result.should eql(V["A", "B", "C", nil, nil, "D"])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "and a negative index" do
|
58
|
+
context "within the absolute bounds of the vector" do
|
59
|
+
it "passes the current value to the block" do
|
60
|
+
vector.put(-2) { |value| value.should == "B" }
|
61
|
+
end
|
62
|
+
|
63
|
+
it "replaces the value with the result of the block" do
|
64
|
+
result = vector.put(-2) { |value| "FLIBBLE" }
|
65
|
+
result.should eql(V["A", "FLIBBLE", "C"])
|
66
|
+
end
|
67
|
+
|
68
|
+
it "supports to_proc methods" do
|
69
|
+
result = vector.put(-2, &:downcase)
|
70
|
+
result.should eql(V["A", "b", "C"])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "outside the absolute bounds of the vector" do
|
75
|
+
it "raises an error" do
|
76
|
+
expect { vector.put(-vector.size.next) {} }.to raise_error
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with a value" do
|
83
|
+
context "and a positive index" do
|
84
|
+
context "within the absolute bounds of the vector" do
|
85
|
+
let(:put) { vector.put(1, "FLIBBLE") }
|
86
|
+
|
87
|
+
it "preserves the original" do
|
88
|
+
vector.should eql(V["A", "B", "C"])
|
89
|
+
end
|
90
|
+
|
91
|
+
it "puts the new value at the specified index" do
|
92
|
+
put.should eql(V["A", "FLIBBLE", "C"])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "just past the end of the vector" do
|
97
|
+
it "adds a new value" do
|
98
|
+
result = vector.put(3, "FLIBBLE")
|
99
|
+
result.should eql(V["A", "B", "C", "FLIBBLE"])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "outside the absolute bounds of the vector" do
|
104
|
+
it "fills up with nils" do
|
105
|
+
result = vector.put(5, "FLIBBLE")
|
106
|
+
result.should eql(V["A", "B", "C", nil, nil, "FLIBBLE"])
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "with a negative index" do
|
112
|
+
let(:put) { vector.put(-2, "FLIBBLE") }
|
113
|
+
|
114
|
+
it "preserves the original" do
|
115
|
+
put
|
116
|
+
vector.should eql(V["A", "B", "C"])
|
117
|
+
end
|
118
|
+
|
119
|
+
it "puts the new value at the specified index" do
|
120
|
+
put.should eql(V["A", "FLIBBLE", "C"])
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context "outside the absolute bounds of the vector" do
|
125
|
+
it "raises an error" do
|
126
|
+
expect { vector.put(-vector.size.next, "FLIBBLE") }.to raise_error
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "from a subclass" do
|
133
|
+
it "returns an instance of the subclass" do
|
134
|
+
subclass = Class.new(Hamster::Vector)
|
135
|
+
instance = subclass[1,2,3]
|
136
|
+
instance.put(1, 2.5).class.should be(subclass)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
[10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
|
141
|
+
context "on a #{size}-item vector" do
|
142
|
+
it "works correctly" do
|
143
|
+
array = (1..size).to_a
|
144
|
+
vector = V.new(array)
|
145
|
+
|
146
|
+
[0, 1, 10, 31, 32, 33, 100, 500, 1000, 1023, 1024, 1025, 1998, 1999].select { |n| n < size }.each do |i|
|
147
|
+
value = rand(10000)
|
148
|
+
array[i] = value
|
149
|
+
vector = vector.put(i, value)
|
150
|
+
vector[i].should be(value)
|
151
|
+
end
|
152
|
+
|
153
|
+
0.upto(size-1) do |i|
|
154
|
+
vector.get(i).should == array[i]
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context "with an identical value to an existing item" do
|
161
|
+
[1, 2, 5, 31,32, 33, 100, 200].each do |size|
|
162
|
+
context "on a #{size}-item vector" do
|
163
|
+
let(:array) { (0...size).map { |x| x * x} }
|
164
|
+
let(:vector) { V.new(array) }
|
165
|
+
|
166
|
+
it "returns self" do
|
167
|
+
(0...size).each do |index|
|
168
|
+
vector.put(index, index * index).should equal(vector)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/vector"
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
|
-
[:reduce, :inject
|
5
|
+
[:reduce, :inject].each do |method|
|
6
6
|
describe "##{method}" do
|
7
7
|
[
|
8
8
|
[[], 10, 10],
|
@@ -10,7 +10,7 @@ describe Hamster::Vector do
|
|
10
10
|
[[1, 2, 3], 10, 4],
|
11
11
|
].each do |values, initial, expected|
|
12
12
|
describe "on #{values.inspect}" do
|
13
|
-
let(:vector) {
|
13
|
+
let(:vector) { V[*values] }
|
14
14
|
|
15
15
|
describe "with an initial value of #{initial}" do
|
16
16
|
describe "and a block" do
|
@@ -28,7 +28,7 @@ describe Hamster::Vector do
|
|
28
28
|
[[1, 2, 3], -4],
|
29
29
|
].each do |values, expected|
|
30
30
|
describe "on #{values.inspect}" do
|
31
|
-
let(:vector) {
|
31
|
+
let(:vector) { V[*values] }
|
32
32
|
|
33
33
|
describe "with no initial value" do
|
34
34
|
describe "and a block" do
|
@@ -42,67 +42,15 @@ describe Hamster::Vector do
|
|
42
42
|
|
43
43
|
describe "with no block and a symbol argument" do
|
44
44
|
it "uses the symbol as the name of a method to reduce with" do
|
45
|
-
|
45
|
+
V[1, 2, 3].send(method, :+).should == 6
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "with no block and a string argument" do
|
50
50
|
it "uses the string as the name of a method to reduce with" do
|
51
|
-
|
51
|
+
V[1, 2, 3].send(method, '+').should == 6
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
57
|
-
describe "#foldr" do
|
58
|
-
[
|
59
|
-
[[], 10, 10],
|
60
|
-
[[1], 10, 9],
|
61
|
-
[[1, 2, 3], 10, 4],
|
62
|
-
].each do |values, initial, expected|
|
63
|
-
|
64
|
-
describe "on #{values.inspect}" do
|
65
|
-
let(:vector) { Hamster.vector(*values) }
|
66
|
-
|
67
|
-
describe "with an initial value of #{initial}" do
|
68
|
-
describe "and a block" do
|
69
|
-
it "returns #{expected.inspect}" do
|
70
|
-
vector.foldr(initial) { |memo, item| memo - item }.should == expected
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
[
|
78
|
-
[[], nil],
|
79
|
-
[[1], 1],
|
80
|
-
[[1, 2, 3], 0],
|
81
|
-
[[1, 2, 3, 4], -2]
|
82
|
-
].each do |values, expected|
|
83
|
-
describe "on #{values.inspect}" do
|
84
|
-
let(:vector) { Hamster.vector(*values) }
|
85
|
-
|
86
|
-
describe "with no initial value" do
|
87
|
-
describe "and a block" do
|
88
|
-
it "returns #{expected.inspect}" do
|
89
|
-
vector.foldr { |memo, item| memo - item }.should == expected
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "with no block and a symbol argument" do
|
97
|
-
it "uses the symbol as the name of a method to reduce with" do
|
98
|
-
Hamster.vector(1, 2, 3).foldr(:+).should == 6
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
describe "with no block and a string argument" do
|
103
|
-
it "uses the string as the name of a method to reduce with" do
|
104
|
-
Hamster.vector(1, 2, 3).foldr('+').should == 6
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
56
|
end
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/vector"
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
|
-
[:
|
5
|
+
[:reject, :delete_if].each do |method|
|
6
6
|
describe "##{method}" do
|
7
7
|
[
|
8
8
|
[[], []],
|
@@ -12,18 +12,18 @@ describe Hamster::Vector do
|
|
12
12
|
[%w[a b c], []],
|
13
13
|
].each do |values, expected|
|
14
14
|
describe "on #{values.inspect}" do
|
15
|
-
let(:vector) {
|
15
|
+
let(:vector) { V[*values] }
|
16
16
|
|
17
17
|
context "with a block" do
|
18
18
|
it "returns #{expected.inspect}" do
|
19
|
-
vector.send(method) { |item| item == item.downcase }.should eql(
|
19
|
+
vector.send(method) { |item| item == item.downcase }.should eql(V[*expected])
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
context "without a block" do
|
24
24
|
it "returns an Enumerator" do
|
25
25
|
vector.send(method).class.should be(Enumerator)
|
26
|
-
vector.send(method).each { |item| item == item.downcase }.should eql(
|
26
|
+
vector.send(method).each { |item| item == item.downcase }.should eql(V[*expected])
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -3,7 +3,7 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#repeated_combination" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[1,2,3,4] }
|
7
7
|
|
8
8
|
context "with no block" do
|
9
9
|
it "returns an Enumerator" do
|
@@ -44,7 +44,7 @@ describe Hamster::Vector do
|
|
44
44
|
context "on an empty vector, with an argument greater than zero" do
|
45
45
|
it "yields nothing" do
|
46
46
|
result = []
|
47
|
-
|
47
|
+
V.empty.repeated_combination(1) { |obj| result << obj }
|
48
48
|
result.should eql([])
|
49
49
|
end
|
50
50
|
end
|
@@ -55,14 +55,14 @@ describe Hamster::Vector do
|
|
55
55
|
vector.repeated_combination(3).to_a.should == [[1,1,1], [1,1,2], [1,1,3], [1,1,4],
|
56
56
|
[1,2,2], [1,2,3], [1,2,4], [1,3,3], [1,3,4], [1,4,4], [2,2,2], [2,2,3],
|
57
57
|
[2,2,4], [2,3,3], [2,3,4], [2,4,4], [3,3,3], [3,3,4], [3,4,4], [4,4,4]]
|
58
|
-
|
58
|
+
V[1,2,3].repeated_combination(3).to_a.should == [[1,1,1], [1,1,2],
|
59
59
|
[1,1,3], [1,2,2], [1,2,3], [1,3,3], [2,2,2], [2,2,3], [2,3,3], [3,3,3]]
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
it "leaves the original unmodified" do
|
64
64
|
vector.repeated_combination(2) {}
|
65
|
-
vector.should eql(
|
65
|
+
vector.should eql(V[1,2,3,4])
|
66
66
|
end
|
67
67
|
|
68
68
|
it "behaves like Array#repeated_combination" do
|
@@ -3,7 +3,7 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#repeated_permutation" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[1,2,3,4] }
|
7
7
|
|
8
8
|
context "without a block" do
|
9
9
|
context "and without argument" do
|
@@ -31,7 +31,7 @@ describe Hamster::Vector do
|
|
31
31
|
context "on an empty vector" do
|
32
32
|
it "yields the empty permutation" do
|
33
33
|
yielded = []
|
34
|
-
|
34
|
+
V.empty.repeated_permutation { |obj| yielded << obj }
|
35
35
|
yielded.should eql([[]])
|
36
36
|
end
|
37
37
|
end
|
@@ -47,7 +47,7 @@ describe Hamster::Vector do
|
|
47
47
|
context "with no argument" do
|
48
48
|
it "yields all repeated permutations" do
|
49
49
|
yielded = []
|
50
|
-
|
50
|
+
V[1,2,3].repeated_permutation { |obj| yielded << obj }
|
51
51
|
yielded.sort.should eql([[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2],
|
52
52
|
[1,2,3], [1,3,1], [1,3,2], [1,3,3], [2,1,1], [2,1,2], [2,1,3], [2,2,1],
|
53
53
|
[2,2,2], [2,2,3], [2,3,1], [2,3,2], [2,3,3], [3,1,1], [3,1,2], [3,1,3],
|
@@ -66,12 +66,12 @@ describe Hamster::Vector do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it "handles duplicate elements correctly" do
|
69
|
-
|
69
|
+
V[10,11,10].repeated_permutation(2).sort.should eql([[10, 10], [10, 10],
|
70
70
|
[10, 10], [10, 10], [10, 11], [10, 11], [11, 10], [11, 10], [11, 11]])
|
71
71
|
end
|
72
72
|
|
73
73
|
it "allows permutations larger than the number of elements" do
|
74
|
-
|
74
|
+
V[1,2].repeated_permutation(3).sort.should eql(
|
75
75
|
[[1, 1, 1], [1, 1, 2], [1, 2, 1],
|
76
76
|
[1, 2, 2], [2, 1, 1], [2, 1, 2],
|
77
77
|
[2, 2, 1], [2, 2, 2]])
|
@@ -79,7 +79,7 @@ describe Hamster::Vector do
|
|
79
79
|
|
80
80
|
it "leaves the original unmodified" do
|
81
81
|
vector.repeated_permutation(2) {}
|
82
|
-
vector.should eql(
|
82
|
+
vector.should eql(V[1,2,3,4])
|
83
83
|
end
|
84
84
|
|
85
85
|
it "behaves like Array#repeated_permutation" do
|
@@ -5,7 +5,7 @@ describe Hamster::Vector do
|
|
5
5
|
describe "#reverse_each" do
|
6
6
|
[2, 31, 32, 33, 1000, 1024, 1025, 2000].each do |size|
|
7
7
|
context "on a #{size}-item vector" do
|
8
|
-
let(:vector) {
|
8
|
+
let(:vector) { V[1..size] }
|
9
9
|
|
10
10
|
context "with a block (internal iteration)" do
|
11
11
|
it "returns self" do
|
@@ -14,7 +14,7 @@ describe Hamster::Vector do
|
|
14
14
|
].each do |initial, expected|
|
15
15
|
describe "on #{initial}" do
|
16
16
|
it "returns #{expected}" do
|
17
|
-
|
17
|
+
V.new(initial).reverse.should eql(V.new(expected))
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -3,7 +3,7 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#rindex" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[1,2,3,3,2,1] }
|
7
7
|
|
8
8
|
context "when passed an object present in the vector" do
|
9
9
|
it "returns the last index where the object is present" do
|
@@ -3,27 +3,27 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#rotate" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[1,2,3,4,5] }
|
7
7
|
|
8
8
|
context "when passed no argument" do
|
9
9
|
it "returns a new vector with the first element moved to the end" do
|
10
|
-
vector.rotate.should eql(
|
10
|
+
vector.rotate.should eql(V[2,3,4,5,1])
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
context "with an integral argument n" do
|
15
15
|
it "returns a new vector with the first (n % size) elements moved to the end" do
|
16
|
-
vector.rotate(2).should eql(
|
17
|
-
vector.rotate(3).should eql(
|
18
|
-
vector.rotate(4).should eql(
|
19
|
-
vector.rotate(5).should eql(
|
20
|
-
vector.rotate(-1).should eql(
|
16
|
+
vector.rotate(2).should eql(V[3,4,5,1,2])
|
17
|
+
vector.rotate(3).should eql(V[4,5,1,2,3])
|
18
|
+
vector.rotate(4).should eql(V[5,1,2,3,4])
|
19
|
+
vector.rotate(5).should eql(V[1,2,3,4,5])
|
20
|
+
vector.rotate(-1).should eql(V[5,1,2,3,4])
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context "with a floating-point argument n" do
|
25
25
|
it "coerces the argument to integer using to_int" do
|
26
|
-
vector.rotate(2.1).should eql(
|
26
|
+
vector.rotate(2.1).should eql(V[3,4,5,1,2])
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -68,7 +68,7 @@ describe Hamster::Vector do
|
|
68
68
|
|
69
69
|
it "leaves the original unmodified" do
|
70
70
|
vector.rotate(3)
|
71
|
-
vector.should eql(
|
71
|
+
vector.should eql(V[1,2,3,4,5])
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|