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
@@ -9,23 +9,23 @@ describe Hamster::SortedSet do
|
|
9
9
|
[%w[A B C], %w[A B]],
|
10
10
|
].each do |values, expected|
|
11
11
|
context "on #{values.inspect}" do
|
12
|
-
let(:sorted_set) {
|
12
|
+
let(:sorted_set) { SS[*values] }
|
13
13
|
|
14
14
|
context "with a block" do
|
15
15
|
it "returns #{expected.inspect}" do
|
16
|
-
sorted_set.take_while { |item| item < "C" }.should eql(
|
16
|
+
sorted_set.take_while { |item| item < "C" }.should eql(SS[*expected])
|
17
17
|
end
|
18
18
|
|
19
19
|
it "preserves the original" do
|
20
20
|
sorted_set.take_while { |item| item < "C" }
|
21
|
-
sorted_set.should eql(
|
21
|
+
sorted_set.should eql(SS[*values])
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
context "without a block" do
|
26
26
|
it "returns an Enumerator" do
|
27
27
|
sorted_set.take_while.class.should be(Enumerator)
|
28
|
-
sorted_set.take_while.each { |item| item < "C" }.should eql(
|
28
|
+
sorted_set.take_while.each { |item| item < "C" }.should eql(SS[*expected])
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -11,7 +11,7 @@ describe Hamster::SortedSet do
|
|
11
11
|
].each do |values|
|
12
12
|
context "on #{values.inspect}" do
|
13
13
|
it "returns a set with the same values" do
|
14
|
-
|
14
|
+
SS[*values].to_set.should eql(S[*values])
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -13,13 +13,13 @@ describe Hamster::SortedSet do
|
|
13
13
|
].each do |a, b, expected|
|
14
14
|
context "for #{a.inspect} and #{b.inspect}" do
|
15
15
|
it "returns #{expected.inspect}" do
|
16
|
-
|
16
|
+
SS[*a].send(method, SS[*b]).should eql(SS[*expected])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context "for #{b.inspect} and #{a.inspect}" do
|
21
21
|
it "returns #{expected.inspect}" do
|
22
|
-
|
22
|
+
SS[*b].send(method, SS[*a]).should eql(SS[*expected])
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -6,11 +6,11 @@ describe Hamster::SortedSet do
|
|
6
6
|
context "when called without a block" do
|
7
7
|
it "returns a sorted set of all items equal to or less 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.up_to(threshold)
|
13
|
+
array = items.select { |x| x <= threshold }.sort
|
14
14
|
result.class.should be(Hamster::SortedSet)
|
15
15
|
result.size.should == array.size
|
16
16
|
result.to_a.should == array
|
@@ -21,10 +21,10 @@ describe Hamster::SortedSet do
|
|
21
21
|
context "when called with a block" do
|
22
22
|
it "yields all the items equal to or less than 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.up_to(threshold) { |x| result << x }
|
29
29
|
array = items.select { |x| x <= threshold }.sort
|
30
30
|
result.size.should == array.size
|
@@ -35,15 +35,16 @@ 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.up_to(1).should be_empty
|
39
|
+
SS.empty.up_to('abc').should be_empty
|
40
|
+
SS.empty.up_to(:symbol).should be_empty
|
41
|
+
SS.empty.up_to(nil).should be_empty
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
44
45
|
context "with an argument less than all the values in the set" do
|
45
46
|
it "returns an empty set" do
|
46
|
-
result =
|
47
|
+
result = SS.new(1..100).up_to(0)
|
47
48
|
result.class.should be(Hamster::SortedSet)
|
48
49
|
result.should be_empty
|
49
50
|
end
|
@@ -3,23 +3,23 @@ require "hamster/sorted_set"
|
|
3
3
|
|
4
4
|
describe Hamster::SortedSet do
|
5
5
|
describe "#values_at" do
|
6
|
-
let(:sorted_set) {
|
6
|
+
let(:sorted_set) { SS['a', 'b', 'c'] }
|
7
7
|
|
8
8
|
it "accepts any number of indices, and returns a sorted_set of items at those indices" do
|
9
|
-
sorted_set.values_at(0).should
|
10
|
-
sorted_set.values_at(1,2).should eql(
|
9
|
+
sorted_set.values_at(0).should eql(SS['a'])
|
10
|
+
sorted_set.values_at(1,2).should eql(SS['b', 'c'])
|
11
11
|
end
|
12
12
|
|
13
13
|
context "when passed invalid indices" do
|
14
14
|
it "filters them out" do
|
15
|
-
sorted_set.values_at(1,2,3).should
|
16
|
-
sorted_set.values_at(-10,10).should eql(
|
15
|
+
sorted_set.values_at(1,2,3).should eql(SS['b', 'c'])
|
16
|
+
sorted_set.values_at(-10,10).should eql(SS.empty)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context "when passed no arguments" do
|
21
21
|
it "returns an empty sorted_set" do
|
22
|
-
sorted_set.values_at.should eql(
|
22
|
+
sorted_set.values_at.should eql(SS.empty)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -2,12 +2,12 @@ require "spec_helper"
|
|
2
2
|
require "hamster/vector"
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
|
-
let(:vector) {
|
5
|
+
let(:vector) { V[*values] }
|
6
6
|
|
7
|
-
[:add, :<<, :
|
7
|
+
[:add, :<<, :push].each do |method|
|
8
8
|
describe "##{method}" do
|
9
9
|
shared_examples "checking adding values" do
|
10
|
-
let(:added_vector) {
|
10
|
+
let(:added_vector) { V[*added_values] }
|
11
11
|
|
12
12
|
it "preserves the original" do
|
13
13
|
original = vector
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
require "hamster/vector"
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
|
-
let(:vector) {
|
5
|
+
let(:vector) { V[[:a, 3], [:b, 2], [:c, 1]] }
|
6
6
|
|
7
7
|
describe "#assoc" do
|
8
8
|
it "searches for a 2-element array with a given 1st item" do
|
@@ -17,6 +17,11 @@ describe Hamster::Vector do
|
|
17
17
|
vector.assoc(EqualNotEql.new).should_not be_nil
|
18
18
|
vector.assoc(EqlNotEqual.new).should be_nil
|
19
19
|
end
|
20
|
+
|
21
|
+
it "skips elements which are not indexable" do
|
22
|
+
V[false, true, nil].assoc(:b).should be_nil
|
23
|
+
V[[1,2], nil].assoc(3).should be_nil
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
27
|
describe "#rassoc" do
|
@@ -32,5 +37,10 @@ describe Hamster::Vector do
|
|
32
37
|
vector.rassoc(EqualNotEql.new).should_not be_nil
|
33
38
|
vector.rassoc(EqlNotEqual.new).should be_nil
|
34
39
|
end
|
40
|
+
|
41
|
+
it "skips elements which are not indexable" do
|
42
|
+
V[false, true, nil].rassoc(:b).should be_nil
|
43
|
+
V[[1,2], nil].rassoc(3).should be_nil
|
44
|
+
end
|
35
45
|
end
|
36
46
|
end
|
@@ -3,7 +3,7 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#bsearch" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[5,10,20,30] }
|
7
7
|
|
8
8
|
context "with a block which returns false for elements below desired position, and true for those at/above" do
|
9
9
|
it "returns the first element for which the predicate is true" do
|
@@ -47,11 +47,19 @@ describe Hamster::Vector do
|
|
47
47
|
vector.bsearch { |x| x <=> 11 }.should be_nil
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
context "if not passed a block" do
|
52
|
+
it "returns an Enumerator" do
|
53
|
+
enum = vector.bsearch
|
54
|
+
enum.should be_a(Enumerator)
|
55
|
+
enum.each { |x| x <=> 10 }.should == 10
|
56
|
+
end
|
57
|
+
end
|
50
58
|
end
|
51
59
|
|
52
60
|
context "on an empty vector" do
|
53
61
|
it "returns nil" do
|
54
|
-
|
62
|
+
V.empty.bsearch { |x| x > 5 }.should be_nil
|
55
63
|
end
|
56
64
|
end
|
57
65
|
end
|
@@ -9,15 +9,15 @@ describe Hamster::Vector do
|
|
9
9
|
%w[A B C],
|
10
10
|
].each do |values|
|
11
11
|
describe "on #{values}" do
|
12
|
-
let(:vector) {
|
12
|
+
let(:vector) { V[*values] }
|
13
13
|
|
14
14
|
it "preserves the original" do
|
15
15
|
vector.clear
|
16
|
-
vector.should eql(
|
16
|
+
vector.should eql(V[*values])
|
17
17
|
end
|
18
18
|
|
19
19
|
it "returns an empty vector" do
|
20
|
-
vector.clear.should equal(
|
20
|
+
vector.clear.should equal(V.empty)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -3,7 +3,7 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#combination" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[1,2,3,4] }
|
7
7
|
|
8
8
|
context "with a block" do
|
9
9
|
it "returns self" do
|
@@ -59,8 +59,8 @@ describe Hamster::Vector do
|
|
59
59
|
|
60
60
|
context "on an empty vector" do
|
61
61
|
it "works the same" do
|
62
|
-
|
63
|
-
|
62
|
+
V.empty.combination(0).to_a.should == [[]]
|
63
|
+
V.empty.combination(1).to_a.should == []
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
@@ -76,7 +76,7 @@ describe Hamster::Vector do
|
|
76
76
|
|
77
77
|
it "leaves the original unmodified" do
|
78
78
|
vector.combination(2) {}
|
79
|
-
vector.should eql(
|
79
|
+
vector.should eql(V[1,2,3,4])
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
@@ -6,12 +6,12 @@ describe Hamster::Vector do
|
|
6
6
|
it "returns a new Vector with all nils removed" do
|
7
7
|
V[1, nil, 2, nil].compact.should eql(V[1, 2])
|
8
8
|
V[1, 2, 3].compact.should eql(V[1, 2, 3])
|
9
|
-
V[nil].compact.should eql(V
|
9
|
+
V[nil].compact.should eql(V.empty)
|
10
10
|
end
|
11
11
|
|
12
12
|
context "on an empty vector" do
|
13
13
|
it "returns self" do
|
14
|
-
|
14
|
+
V.empty.compact.should be(V.empty)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -12,19 +12,19 @@ describe Hamster::Vector do
|
|
12
12
|
].each do |items1, items2|
|
13
13
|
describe "with #{items1} and #{items2}" do
|
14
14
|
it "returns -1" do
|
15
|
-
(
|
15
|
+
(V.new(items1) <=> V.new(items2)).should be(-1)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "with #{items2} and #{items1}" do
|
20
20
|
it "returns 1" do
|
21
|
-
(
|
21
|
+
(V.new(items2) <=> V.new(items1)).should be(1)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "with #{items1} and #{items1}" do
|
26
26
|
it "returns 0" do
|
27
|
-
(
|
27
|
+
(V.new(items1) <=> V.new(items1)).should be(0)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -16,8 +16,8 @@ describe Hamster::Vector do
|
|
16
16
|
vector.concat(1..1000).should eql(V.new((1..100).to_a + (1..1000).to_a))
|
17
17
|
vector.concat(1..200).size.should == 300
|
18
18
|
vector.concat(vector).should eql(V.new((1..100).to_a * 2))
|
19
|
-
vector.concat(
|
20
|
-
|
19
|
+
vector.concat(V.empty).should eql(vector)
|
20
|
+
V.empty.concat(vector).should eql(vector)
|
21
21
|
end
|
22
22
|
|
23
23
|
[1, 31, 32, 33, 1023, 1024, 1025].each do |size|
|
@@ -3,12 +3,12 @@ require "hamster/vector"
|
|
3
3
|
|
4
4
|
describe Hamster::Vector do
|
5
5
|
describe "#delete_at" do
|
6
|
-
let(:vector) {
|
6
|
+
let(:vector) { V[1,2,3,4,5] }
|
7
7
|
|
8
8
|
it "removes the element at the specified index" do
|
9
|
-
vector.delete_at(0).should eql(
|
10
|
-
vector.delete_at(2).should eql(
|
11
|
-
vector.delete_at(-1).should eql(
|
9
|
+
vector.delete_at(0).should eql(V[2,3,4,5])
|
10
|
+
vector.delete_at(2).should eql(V[1,2,4,5])
|
11
|
+
vector.delete_at(-1).should eql(V[1,2,3,4])
|
12
12
|
end
|
13
13
|
|
14
14
|
it "makes no modification if the index is out of range" do
|
@@ -23,13 +23,13 @@ describe Hamster::Vector do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it "works on an empty vector" do
|
26
|
-
|
27
|
-
|
26
|
+
V.empty.delete_at(0).should be(V.empty)
|
27
|
+
V.empty.delete_at(1).should be(V.empty)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "works on a vector with 1 item" do
|
31
|
-
|
32
|
-
|
31
|
+
V[10].delete_at(0).should eql(V.empty)
|
32
|
+
V[10].delete_at(1).should eql(V[10])
|
33
33
|
end
|
34
34
|
|
35
35
|
it "works on a vector with 32 items" do
|
@@ -10,13 +10,13 @@ describe Hamster::Vector do
|
|
10
10
|
V[1,2,3].delete(0).should eql(V[1,2,3])
|
11
11
|
V['a','b','a','c','a','a','d'].delete('a').should eql(V['b','c','d'])
|
12
12
|
|
13
|
-
V[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(V
|
13
|
+
V[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(V.empty)
|
14
14
|
V[EqlNotEqual.new, EqlNotEqual.new].delete(:something).should_not be_empty
|
15
15
|
end
|
16
16
|
|
17
17
|
context "on an empty vector" do
|
18
18
|
it "returns self" do
|
19
|
-
|
19
|
+
V.empty.delete(1).should be(V.empty)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -14,15 +14,15 @@ describe Hamster::Vector do
|
|
14
14
|
[(1..33), 32, [33]]
|
15
15
|
].each do |values, number, expected|
|
16
16
|
describe "#{number} from #{values.inspect}" do
|
17
|
-
let(:vector) {
|
17
|
+
let(:vector) { V[*values] }
|
18
18
|
|
19
19
|
it "preserves the original" do
|
20
20
|
vector.drop(number)
|
21
|
-
vector.should eql(
|
21
|
+
vector.should eql(V[*values])
|
22
22
|
end
|
23
23
|
|
24
24
|
it "returns #{expected.inspect}" do
|
25
|
-
vector.drop(number).should eql(
|
25
|
+
vector.drop(number).should eql(V[*expected])
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -31,5 +31,12 @@ describe Hamster::Vector do
|
|
31
31
|
-> { V[1, 2, 3].drop(-1) }.should raise_error(ArgumentError)
|
32
32
|
-> { V[1, 2, 3].drop(-3) }.should raise_error(ArgumentError)
|
33
33
|
end
|
34
|
+
|
35
|
+
context "when number of elements specified is zero" do
|
36
|
+
let(:vector) { V[1, 2, 3, 4, 5, 6] }
|
37
|
+
it "returns self" do
|
38
|
+
vector.drop(0).should be(vector)
|
39
|
+
end
|
40
|
+
end
|
34
41
|
end
|
35
42
|
end
|
@@ -9,25 +9,25 @@ describe Hamster::Vector do
|
|
9
9
|
[%w[A B C], ["C"]],
|
10
10
|
].each do |values, expected|
|
11
11
|
describe "on #{values.inspect}" do
|
12
|
-
let(:vector) {
|
12
|
+
let(:vector) { V[*values] }
|
13
13
|
|
14
14
|
describe "with a block" do
|
15
15
|
let(:result) { vector.drop_while { |item| item < "C" } }
|
16
16
|
|
17
17
|
it "preserves the original" do
|
18
18
|
result
|
19
|
-
vector.should eql(
|
19
|
+
vector.should eql(V[*values])
|
20
20
|
end
|
21
21
|
|
22
22
|
it "returns #{expected.inspect}" do
|
23
|
-
result.should eql(
|
23
|
+
result.should eql(V[*expected])
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe "without a block" do
|
28
28
|
it "returns an Enumerator" do
|
29
29
|
vector.drop_while.class.should be(Enumerator)
|
30
|
-
vector.drop_while.each { |item| item < "C" }.should eql(
|
30
|
+
vector.drop_while.each { |item| item < "C" }.should eql(V[*expected])
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -35,7 +35,7 @@ describe Hamster::Vector do
|
|
35
35
|
|
36
36
|
context "on an empty vector" do
|
37
37
|
it "returns an empty vector" do
|
38
|
-
|
38
|
+
V.empty.drop_while { false }.should eql(V.empty)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|