hamster 1.0.1.pre.rc3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/hamster.rb +2 -0
- data/lib/hamster/associable.rb +49 -0
- data/lib/hamster/core_ext/enumerable.rb +3 -13
- data/lib/hamster/core_ext/io.rb +1 -1
- data/lib/hamster/core_ext/struct.rb +9 -0
- data/lib/hamster/deque.rb +57 -38
- data/lib/hamster/enumerable.rb +14 -41
- data/lib/hamster/experimental/mutable_queue.rb +5 -8
- data/lib/hamster/experimental/mutable_set.rb +6 -7
- data/lib/hamster/hash.rb +301 -110
- data/lib/hamster/immutable.rb +1 -1
- data/lib/hamster/list.rb +479 -194
- data/lib/hamster/mutable_hash.rb +6 -7
- data/lib/hamster/nested.rb +78 -0
- data/lib/hamster/read_copy_update.rb +1 -1
- data/lib/hamster/set.rb +198 -88
- data/lib/hamster/sorted_set.rb +706 -261
- data/lib/hamster/trie.rb +134 -15
- data/lib/hamster/vector.rb +571 -140
- data/lib/hamster/version.rb +3 -1
- data/spec/lib/hamster/associable/associable_spec.rb +150 -0
- data/spec/lib/hamster/core_ext/array_spec.rb +1 -1
- data/spec/lib/hamster/core_ext/enumerable_spec.rb +2 -2
- data/spec/lib/hamster/core_ext/io_spec.rb +1 -1
- data/spec/lib/hamster/deque/clear_spec.rb +3 -3
- data/spec/lib/hamster/deque/construction_spec.rb +8 -8
- data/spec/lib/hamster/deque/copying_spec.rb +1 -1
- data/spec/lib/hamster/deque/dequeue_spec.rb +12 -4
- data/spec/lib/hamster/deque/empty_spec.rb +14 -16
- data/spec/lib/hamster/deque/enqueue_spec.rb +4 -4
- data/spec/lib/hamster/deque/first_spec.rb +18 -0
- data/spec/lib/hamster/deque/inspect_spec.rb +1 -1
- data/spec/lib/hamster/deque/last_spec.rb +9 -11
- data/spec/lib/hamster/deque/marshal_spec.rb +6 -6
- data/spec/lib/hamster/deque/new_spec.rb +5 -5
- data/spec/lib/hamster/deque/pop_spec.rb +15 -3
- data/spec/lib/hamster/deque/pretty_print_spec.rb +24 -0
- data/spec/lib/hamster/deque/push_spec.rb +37 -0
- data/spec/lib/hamster/deque/shift_spec.rb +30 -0
- data/spec/lib/hamster/deque/size_spec.rb +1 -1
- data/spec/lib/hamster/deque/to_a_spec.rb +2 -2
- data/spec/lib/hamster/deque/to_ary_spec.rb +1 -1
- data/spec/lib/hamster/deque/to_list_spec.rb +3 -3
- data/spec/lib/hamster/deque/unshift_spec.rb +8 -3
- data/spec/lib/hamster/experimental/mutable_set/add_qm_spec.rb +3 -3
- data/spec/lib/hamster/experimental/mutable_set/add_spec.rb +3 -3
- data/spec/lib/hamster/experimental/mutable_set/delete_qm_spec.rb +3 -3
- data/spec/lib/hamster/experimental/mutable_set/delete_spec.rb +3 -3
- data/spec/lib/hamster/hash/all_spec.rb +32 -34
- data/spec/lib/hamster/hash/any_spec.rb +34 -36
- data/spec/lib/hamster/hash/assoc_spec.rb +3 -3
- data/spec/lib/hamster/hash/clear_spec.rb +4 -4
- data/spec/lib/hamster/hash/construction_spec.rb +8 -8
- data/spec/lib/hamster/hash/copying_spec.rb +1 -1
- data/spec/lib/hamster/hash/default_proc_spec.rb +3 -3
- data/spec/lib/hamster/hash/delete_spec.rb +4 -4
- data/spec/lib/hamster/hash/each_spec.rb +3 -3
- data/spec/lib/hamster/hash/each_with_index_spec.rb +1 -1
- data/spec/lib/hamster/hash/empty_spec.rb +13 -15
- data/spec/lib/hamster/hash/eql_spec.rb +4 -4
- data/spec/lib/hamster/hash/except_spec.rb +7 -7
- data/spec/lib/hamster/hash/fetch_spec.rb +10 -10
- data/spec/lib/hamster/hash/find_spec.rb +2 -2
- data/spec/lib/hamster/hash/flat_map_spec.rb +4 -4
- data/spec/lib/hamster/hash/flatten_spec.rb +13 -13
- data/spec/lib/hamster/hash/get_spec.rb +7 -7
- data/spec/lib/hamster/hash/has_key_spec.rb +3 -3
- data/spec/lib/hamster/hash/has_value_spec.rb +4 -4
- data/spec/lib/hamster/hash/hash_spec.rb +5 -5
- data/spec/lib/hamster/hash/inspect_spec.rb +2 -2
- data/spec/lib/hamster/hash/invert_spec.rb +6 -6
- data/spec/lib/hamster/hash/key_spec.rb +2 -2
- data/spec/lib/hamster/hash/keys_spec.rb +2 -2
- data/spec/lib/hamster/hash/map_spec.rb +4 -4
- data/spec/lib/hamster/hash/marshal_spec.rb +2 -2
- data/spec/lib/hamster/hash/merge_spec.rb +62 -56
- data/spec/lib/hamster/hash/min_max_spec.rb +9 -13
- data/spec/lib/hamster/hash/new_spec.rb +6 -6
- data/spec/lib/hamster/hash/none_spec.rb +3 -3
- data/spec/lib/hamster/hash/partition_spec.rb +2 -2
- data/spec/lib/hamster/hash/put_spec.rb +29 -7
- data/spec/lib/hamster/hash/reduce_spec.rb +4 -4
- data/spec/lib/hamster/hash/{remove_spec.rb → reject_spec.rb} +7 -7
- data/spec/lib/hamster/hash/reverse_each_spec.rb +1 -1
- data/spec/lib/hamster/hash/{filter_spec.rb → select_spec.rb} +6 -6
- data/spec/lib/hamster/hash/size_spec.rb +3 -3
- data/spec/lib/hamster/hash/slice_spec.rb +4 -4
- data/spec/lib/hamster/hash/sort_spec.rb +2 -2
- data/spec/lib/hamster/hash/store_spec.rb +29 -7
- data/spec/lib/hamster/hash/take_spec.rb +2 -2
- data/spec/lib/hamster/hash/to_a_spec.rb +1 -1
- data/spec/lib/hamster/hash/to_hash_spec.rb +4 -4
- data/spec/lib/hamster/hash/values_at_spec.rb +3 -3
- data/spec/lib/hamster/hash/values_spec.rb +2 -2
- data/spec/lib/hamster/immutable/new_spec.rb +14 -0
- data/spec/lib/hamster/list/add_spec.rb +16 -10
- data/spec/lib/hamster/list/all_spec.rb +33 -35
- data/spec/lib/hamster/list/any_spec.rb +29 -31
- data/spec/lib/hamster/list/append_spec.rb +6 -6
- data/spec/lib/hamster/list/at_spec.rb +1 -1
- data/spec/lib/hamster/list/break_spec.rb +4 -4
- data/spec/lib/hamster/list/cadr_spec.rb +9 -9
- data/spec/lib/hamster/list/chunk_spec.rb +5 -5
- data/spec/lib/hamster/list/clear_spec.rb +3 -3
- data/spec/lib/hamster/list/combination_spec.rb +3 -3
- data/spec/lib/hamster/list/compact_spec.rb +3 -3
- data/spec/lib/hamster/list/compare_spec.rb +3 -3
- data/spec/lib/hamster/list/cons_spec.rb +15 -17
- data/spec/lib/hamster/list/construction_spec.rb +20 -27
- data/spec/lib/hamster/list/copying_spec.rb +1 -1
- data/spec/lib/hamster/list/count_spec.rb +1 -1
- data/spec/lib/hamster/list/cycle_spec.rb +4 -4
- data/spec/lib/hamster/list/delete_at_spec.rb +4 -4
- data/spec/lib/hamster/list/drop_spec.rb +3 -3
- data/spec/lib/hamster/list/drop_while_spec.rb +3 -3
- data/spec/lib/hamster/list/each_slice_spec.rb +5 -5
- data/spec/lib/hamster/list/each_spec.rb +26 -28
- data/spec/lib/hamster/list/each_with_index_spec.rb +1 -1
- data/spec/lib/hamster/list/empty_spec.rb +13 -15
- data/spec/lib/hamster/list/eql_spec.rb +21 -21
- data/spec/lib/hamster/list/fill_spec.rb +8 -8
- data/spec/lib/hamster/list/find_all_spec.rb +3 -3
- data/spec/lib/hamster/list/find_index_spec.rb +1 -1
- data/spec/lib/hamster/list/find_spec.rb +1 -1
- data/spec/lib/hamster/list/flat_map_spec.rb +2 -2
- data/spec/lib/hamster/list/flatten_spec.rb +5 -5
- data/spec/lib/hamster/list/grep_spec.rb +4 -4
- data/spec/lib/hamster/list/group_by_spec.rb +6 -6
- data/spec/lib/hamster/list/hash_spec.rb +2 -2
- data/spec/lib/hamster/list/head_spec.rb +1 -1
- data/spec/lib/hamster/list/include_spec.rb +2 -2
- data/spec/lib/hamster/list/index_spec.rb +38 -0
- data/spec/lib/hamster/list/indices_spec.rb +62 -0
- data/spec/lib/hamster/list/init_spec.rb +3 -3
- data/spec/lib/hamster/list/inits_spec.rb +3 -3
- data/spec/lib/hamster/list/insert_spec.rb +1 -1
- data/spec/lib/hamster/list/inspect_spec.rb +1 -1
- data/spec/lib/hamster/list/intersperse_spec.rb +3 -3
- data/spec/lib/hamster/list/join_spec.rb +5 -5
- data/spec/lib/hamster/list/last_spec.rb +1 -1
- data/spec/lib/hamster/list/ltlt_spec.rb +20 -0
- data/spec/lib/hamster/list/map_spec.rb +4 -4
- data/spec/lib/hamster/list/maximum_spec.rb +24 -26
- data/spec/lib/hamster/list/merge_by_spec.rb +10 -10
- data/spec/lib/hamster/list/merge_spec.rb +10 -10
- data/spec/lib/hamster/list/minimum_spec.rb +24 -26
- data/spec/lib/hamster/list/multithreading_spec.rb +6 -6
- data/spec/lib/hamster/list/none_spec.rb +5 -5
- data/spec/lib/hamster/list/one_spec.rb +5 -5
- data/spec/lib/hamster/list/partition_spec.rb +8 -8
- data/spec/lib/hamster/list/permutation_spec.rb +8 -8
- data/spec/lib/hamster/list/pop_spec.rb +3 -3
- data/spec/lib/hamster/list/product_spec.rb +1 -1
- data/spec/lib/hamster/list/reduce_spec.rb +5 -48
- data/spec/lib/hamster/list/{remove_spec.rb → reject_spec.rb} +4 -4
- data/spec/lib/hamster/list/reverse_spec.rb +3 -3
- data/spec/lib/hamster/list/rotate_spec.rb +7 -7
- data/spec/lib/hamster/list/sample_spec.rb +1 -1
- data/spec/lib/hamster/list/select_spec.rb +3 -3
- data/spec/lib/hamster/list/size_spec.rb +1 -1
- data/spec/lib/hamster/list/slice_spec.rb +123 -123
- data/spec/lib/hamster/list/sorting_spec.rb +5 -5
- data/spec/lib/hamster/list/span_spec.rb +5 -5
- data/spec/lib/hamster/list/split_at_spec.rb +4 -4
- data/spec/lib/hamster/list/subsequences_spec.rb +1 -1
- data/spec/lib/hamster/list/sum_spec.rb +1 -1
- data/spec/lib/hamster/list/tail_spec.rb +4 -4
- data/spec/lib/hamster/list/tails_spec.rb +3 -3
- data/spec/lib/hamster/list/take_spec.rb +3 -3
- data/spec/lib/hamster/list/take_while_spec.rb +4 -4
- data/spec/lib/hamster/list/to_a_spec.rb +2 -2
- data/spec/lib/hamster/list/to_ary_spec.rb +1 -1
- data/spec/lib/hamster/list/to_list_spec.rb +1 -1
- data/spec/lib/hamster/list/to_set_spec.rb +1 -1
- data/spec/lib/hamster/list/union_spec.rb +4 -4
- data/spec/lib/hamster/list/uniq_spec.rb +23 -19
- data/spec/lib/hamster/list/zip_spec.rb +5 -5
- data/spec/lib/hamster/nested/construction_spec.rb +103 -0
- data/spec/lib/hamster/set/add_spec.rb +13 -11
- data/spec/lib/hamster/set/all_spec.rb +32 -34
- data/spec/lib/hamster/set/any_spec.rb +32 -34
- data/spec/lib/hamster/set/clear_spec.rb +3 -3
- data/spec/lib/hamster/set/compact_spec.rb +3 -3
- data/spec/lib/hamster/set/construction_spec.rb +3 -3
- data/spec/lib/hamster/set/copying_spec.rb +1 -1
- data/spec/lib/hamster/set/count_spec.rb +1 -1
- data/spec/lib/hamster/set/delete_spec.rb +8 -8
- data/spec/lib/hamster/set/difference_spec.rb +8 -8
- data/spec/lib/hamster/set/disjoint_spec.rb +1 -1
- data/spec/lib/hamster/set/each_spec.rb +2 -2
- data/spec/lib/hamster/set/empty_spec.rb +15 -17
- data/spec/lib/hamster/set/eqeq_spec.rb +3 -3
- data/spec/lib/hamster/set/eql_spec.rb +3 -3
- data/spec/lib/hamster/set/exclusion_spec.rb +7 -7
- data/spec/lib/hamster/set/find_spec.rb +2 -2
- data/spec/lib/hamster/set/first_spec.rb +29 -0
- data/spec/lib/hamster/set/flatten_spec.rb +9 -9
- data/spec/lib/hamster/set/grep_spec.rb +1 -1
- data/spec/lib/hamster/set/group_by_spec.rb +12 -12
- data/spec/lib/hamster/set/hash_spec.rb +3 -3
- data/spec/lib/hamster/set/include_spec.rb +8 -8
- data/spec/lib/hamster/set/inspect_spec.rb +2 -2
- data/spec/lib/hamster/set/intersect_spec.rb +1 -1
- data/spec/lib/hamster/set/intersection_spec.rb +13 -13
- data/spec/lib/hamster/set/join_spec.rb +6 -6
- data/spec/lib/hamster/set/map_spec.rb +7 -7
- data/spec/lib/hamster/set/marshal_spec.rb +2 -2
- data/spec/lib/hamster/set/maximum_spec.rb +22 -24
- data/spec/lib/hamster/set/minimum_spec.rb +22 -24
- data/spec/lib/hamster/set/new_spec.rb +5 -5
- data/spec/lib/hamster/set/none_spec.rb +5 -5
- data/spec/lib/hamster/set/one_spec.rb +6 -6
- data/spec/lib/hamster/set/partition_spec.rb +5 -5
- data/spec/lib/hamster/set/product_spec.rb +2 -2
- data/spec/lib/hamster/set/reduce_spec.rb +5 -5
- data/spec/lib/hamster/set/{remove_spec.rb → reject_spec.rb} +6 -6
- data/spec/lib/hamster/set/reverse_each_spec.rb +1 -1
- data/spec/lib/hamster/set/sample_spec.rb +1 -1
- data/spec/lib/hamster/set/{filter_spec.rb → select_spec.rb} +11 -11
- data/spec/lib/hamster/set/size_spec.rb +1 -1
- data/spec/lib/hamster/set/sorting_spec.rb +16 -5
- data/spec/lib/hamster/set/subset_spec.rb +2 -2
- data/spec/lib/hamster/set/sum_spec.rb +2 -2
- data/spec/lib/hamster/set/superset_spec.rb +2 -2
- data/spec/lib/hamster/set/to_a_spec.rb +2 -2
- data/spec/lib/hamster/set/to_list_spec.rb +2 -2
- data/spec/lib/hamster/set/to_set_spec.rb +1 -1
- data/spec/lib/hamster/set/union_spec.rb +23 -14
- data/spec/lib/hamster/sorted_set/above_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/add_spec.rb +8 -8
- data/spec/lib/hamster/sorted_set/at_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/below_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/between_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/clear_spec.rb +11 -2
- data/spec/lib/hamster/sorted_set/copying_spec.rb +21 -0
- data/spec/lib/hamster/sorted_set/delete_at_spec.rb +4 -4
- data/spec/lib/hamster/sorted_set/delete_spec.rb +21 -12
- data/spec/lib/hamster/sorted_set/difference_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/disjoint_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/drop_spec.rb +30 -3
- data/spec/lib/hamster/sorted_set/drop_while_spec.rb +4 -4
- data/spec/lib/hamster/sorted_set/each_spec.rb +16 -18
- data/spec/lib/hamster/sorted_set/empty_spec.rb +12 -14
- data/spec/lib/hamster/sorted_set/eql_spec.rb +5 -5
- data/spec/lib/hamster/sorted_set/exclusion_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/fetch_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/find_index_spec.rb +10 -2
- data/spec/lib/hamster/sorted_set/first_spec.rb +10 -12
- data/spec/lib/hamster/sorted_set/from_spec.rb +11 -11
- data/spec/lib/hamster/sorted_set/group_by_spec.rb +10 -10
- data/spec/lib/hamster/sorted_set/include_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/inspect_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/intersect_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/intersection_spec.rb +3 -3
- data/spec/lib/hamster/sorted_set/last_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/map_spec.rb +13 -5
- data/spec/lib/hamster/sorted_set/marshal_spec.rb +3 -3
- data/spec/lib/hamster/sorted_set/maximum_spec.rb +37 -0
- data/spec/lib/hamster/sorted_set/minimum_spec.rb +11 -13
- data/spec/lib/hamster/sorted_set/new_spec.rb +23 -3
- data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/{filter_spec.rb → select_spec.rb} +10 -10
- data/spec/lib/hamster/sorted_set/size_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/slice_spec.rb +158 -142
- data/spec/lib/hamster/sorted_set/sorting_spec.rb +3 -3
- data/spec/lib/hamster/sorted_set/subset_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/superset_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/take_spec.rb +32 -3
- data/spec/lib/hamster/sorted_set/take_while_spec.rb +4 -4
- data/spec/lib/hamster/sorted_set/to_set_spec.rb +1 -1
- data/spec/lib/hamster/sorted_set/union_spec.rb +2 -2
- data/spec/lib/hamster/sorted_set/up_to_spec.rb +12 -11
- data/spec/lib/hamster/sorted_set/values_at_spec.rb +6 -6
- data/spec/lib/hamster/vector/add_spec.rb +3 -3
- data/spec/lib/hamster/vector/any_spec.rb +1 -1
- data/spec/lib/hamster/vector/assoc_spec.rb +11 -1
- data/spec/lib/hamster/vector/bsearch_spec.rb +10 -2
- data/spec/lib/hamster/vector/clear_spec.rb +3 -3
- data/spec/lib/hamster/vector/combination_spec.rb +4 -4
- data/spec/lib/hamster/vector/compact_spec.rb +2 -2
- data/spec/lib/hamster/vector/compare_spec.rb +3 -3
- data/spec/lib/hamster/vector/concat_spec.rb +2 -2
- data/spec/lib/hamster/vector/copying_spec.rb +1 -1
- data/spec/lib/hamster/vector/delete_at_spec.rb +8 -8
- data/spec/lib/hamster/vector/delete_spec.rb +2 -2
- data/spec/lib/hamster/vector/drop_spec.rb +10 -3
- data/spec/lib/hamster/vector/drop_while_spec.rb +5 -5
- data/spec/lib/hamster/vector/each_index_spec.rb +2 -2
- data/spec/lib/hamster/vector/each_spec.rb +27 -29
- data/spec/lib/hamster/vector/each_with_index_spec.rb +2 -2
- data/spec/lib/hamster/vector/empty_spec.rb +11 -13
- data/spec/lib/hamster/vector/eql_spec.rb +6 -6
- data/spec/lib/hamster/vector/fetch_spec.rb +1 -1
- data/spec/lib/hamster/vector/fill_spec.rb +9 -9
- data/spec/lib/hamster/vector/first_spec.rb +10 -12
- data/spec/lib/hamster/vector/flat_map_spec.rb +51 -0
- data/spec/lib/hamster/vector/flatten_spec.rb +15 -0
- data/spec/lib/hamster/vector/get_spec.rb +4 -4
- data/spec/lib/hamster/vector/group_by_spec.rb +12 -12
- data/spec/lib/hamster/vector/include_spec.rb +2 -2
- data/spec/lib/hamster/vector/insert_spec.rb +2 -2
- data/spec/lib/hamster/vector/inspect_spec.rb +1 -1
- data/spec/lib/hamster/vector/join_spec.rb +5 -5
- data/spec/lib/hamster/vector/last_spec.rb +1 -1
- data/spec/lib/hamster/vector/length_spec.rb +1 -1
- data/spec/lib/hamster/vector/ltlt_spec.rb +2 -2
- data/spec/lib/hamster/vector/map_spec.rb +5 -5
- data/spec/lib/hamster/vector/marshal_spec.rb +2 -2
- data/spec/lib/hamster/vector/maximum_spec.rb +20 -22
- data/spec/lib/hamster/vector/minimum_spec.rb +20 -22
- data/spec/lib/hamster/vector/multiply_spec.rb +4 -4
- data/spec/lib/hamster/vector/partition_spec.rb +5 -5
- data/spec/lib/hamster/vector/permutation_spec.rb +4 -4
- data/spec/lib/hamster/vector/pop_spec.rb +3 -3
- data/spec/lib/hamster/vector/product_spec.rb +10 -10
- data/spec/lib/hamster/vector/put_spec.rb +175 -0
- data/spec/lib/hamster/vector/reduce_spec.rb +5 -57
- data/spec/lib/hamster/vector/{remove_spec.rb → reject_spec.rb} +4 -4
- data/spec/lib/hamster/vector/repeated_combination_spec.rb +4 -4
- data/spec/lib/hamster/vector/repeated_permutation_spec.rb +6 -6
- data/spec/lib/hamster/vector/reverse_each_spec.rb +1 -1
- data/spec/lib/hamster/vector/reverse_spec.rb +1 -1
- data/spec/lib/hamster/vector/rindex_spec.rb +1 -1
- data/spec/lib/hamster/vector/rotate_spec.rb +9 -9
- data/spec/lib/hamster/vector/sample_spec.rb +1 -1
- data/spec/lib/hamster/vector/{filter_spec.rb → select_spec.rb} +8 -8
- data/spec/lib/hamster/vector/set_spec.rb +12 -141
- data/spec/lib/hamster/vector/shift_spec.rb +3 -3
- data/spec/lib/hamster/vector/shuffle_spec.rb +2 -2
- data/spec/lib/hamster/vector/slice_spec.rb +137 -137
- data/spec/lib/hamster/vector/sorting_spec.rb +5 -5
- data/spec/lib/hamster/vector/sum_spec.rb +1 -1
- data/spec/lib/hamster/vector/take_spec.rb +17 -3
- data/spec/lib/hamster/vector/take_while_spec.rb +4 -4
- data/spec/lib/hamster/vector/to_a_spec.rb +1 -1
- data/spec/lib/hamster/vector/to_ary_spec.rb +1 -1
- data/spec/lib/hamster/vector/to_list_spec.rb +2 -1
- data/spec/lib/hamster/vector/to_set_spec.rb +1 -1
- data/spec/lib/hamster/vector/uniq_spec.rb +27 -6
- data/spec/lib/hamster/vector/unshift_spec.rb +3 -3
- data/spec/lib/hamster/vector/values_at_spec.rb +6 -6
- data/spec/lib/hamster/vector/zip_spec.rb +2 -2
- data/spec/lib/load_spec.rb +42 -0
- data/spec/spec_helper.rb +25 -0
- metadata +85 -48
- data/spec/lib/hamster/deque/head_spec.rb +0 -20
- data/spec/lib/hamster/hash/uniq_spec.rb +0 -14
- data/spec/lib/hamster/list/elem_index_spec.rb +0 -36
- data/spec/lib/hamster/list/elem_indices_spec.rb +0 -31
- data/spec/lib/hamster/list/filter_spec.rb +0 -71
- data/spec/lib/hamster/list/find_indices_spec.rb +0 -37
- data/spec/lib/hamster/set/foreach_spec.rb +0 -40
- data/spec/lib/hamster/set/head_spec.rb +0 -31
- data/spec/lib/hamster/set/uniq_spec.rb +0 -14
- data/spec/lib/hamster/sorted_set/construction_spec.rb +0 -29
- data/spec/lib/hamster/vector/exist_spec.rb +0 -70
- data/spec/lib/hamster/vector/exists_spec.rb +0 -70
@@ -2,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 "#assoc" do
|
8
8
|
it "searches for a key/val pair with a given key" do
|
@@ -18,7 +18,7 @@ describe Hamster::Hash do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "returns nil even if there is a default" do
|
21
|
-
|
21
|
+
H.new(a: 1, b: 2) { fail }.assoc(:c).should be_nil
|
22
22
|
end
|
23
23
|
|
24
24
|
it "uses #== to compare keys with provided object" do
|
@@ -41,7 +41,7 @@ describe Hamster::Hash do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "returns nil even if there is a default" do
|
44
|
-
|
44
|
+
H.new(a: 1, b: 2) { fail }.rassoc(3).should be_nil
|
45
45
|
end
|
46
46
|
|
47
47
|
it "uses #== to compare values with provided object" do
|
@@ -9,23 +9,23 @@ describe Hamster::Hash do
|
|
9
9
|
["A" => "aye", "B" => "bee", "C" => "see"],
|
10
10
|
].each do |values|
|
11
11
|
context "on #{values}" do
|
12
|
-
let(:original) {
|
12
|
+
let(:original) { H[*values] }
|
13
13
|
let(:result) { original.clear }
|
14
14
|
|
15
15
|
it "preserves the original" do
|
16
16
|
result
|
17
|
-
original.should eql(
|
17
|
+
original.should eql(H[*values])
|
18
18
|
end
|
19
19
|
|
20
20
|
it "returns an empty hash" do
|
21
|
-
result.should equal(
|
21
|
+
result.should equal(H.empty)
|
22
22
|
result.should be_empty
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
it "maintains the default Proc, if there is one" do
|
28
|
-
hash =
|
28
|
+
hash = H.new(a: 1) { 1 }
|
29
29
|
hash.clear[:b].should == 1
|
30
30
|
hash.clear[:c].should == 1
|
31
31
|
hash.clear.default_proc.should_not be_nil
|
@@ -5,31 +5,31 @@ describe Hamster::Hash do
|
|
5
5
|
describe ".hash" do
|
6
6
|
context "with nothing" do
|
7
7
|
it "returns the canonical empty hash" do
|
8
|
-
|
9
|
-
|
8
|
+
H.empty.should be_empty
|
9
|
+
H.empty.should equal(Hamster::EmptyHash)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
context "with an implicit hash" do
|
14
|
-
let(:hash) {
|
14
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
15
15
|
|
16
16
|
it "is equivalent to repeatedly using #put" do
|
17
|
-
hash.should eql(
|
17
|
+
hash.should eql(H.empty.put("A", "aye").put("B", "bee").put("C", "see"))
|
18
18
|
hash.size.should == 3
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
context "with an array of pairs" do
|
23
|
-
let(:hash) {
|
23
|
+
let(:hash) { H[[[:a, 1], [:b, 2]]] }
|
24
24
|
|
25
25
|
it "initializes a new Hash" do
|
26
|
-
hash.should eql(
|
26
|
+
hash.should eql(H[a: 1, b: 2])
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
context "with a Hamster::Hash" do
|
31
|
-
let(:hash) {
|
32
|
-
let(:other) {
|
31
|
+
let(:hash) { H[a: 1, b: 2] }
|
32
|
+
let(:other) { H[hash] }
|
33
33
|
|
34
34
|
it "initializes an equivalent Hash" do
|
35
35
|
hash.should eql(other)
|
@@ -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
|
[:dup, :clone].each do |method|
|
8
8
|
describe "##{method}" do
|
@@ -3,7 +3,7 @@ require "hamster/hash"
|
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
5
|
describe "#default_proc" do
|
6
|
-
let(:hash) {
|
6
|
+
let(:hash) { H.new(1 => 2, 2 => 4) { |k| k * 2 } }
|
7
7
|
|
8
8
|
it "returns the default block given when the Hash was created" do
|
9
9
|
hash.default_proc.class.should be(Proc)
|
@@ -11,7 +11,7 @@ describe Hamster::Hash do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "returns nil if no default block was given" do
|
14
|
-
|
14
|
+
H.empty.default_proc.should be_nil
|
15
15
|
end
|
16
16
|
|
17
17
|
context "after a key/val pair are inserted" do
|
@@ -24,7 +24,7 @@ describe Hamster::Hash do
|
|
24
24
|
|
25
25
|
context "after all key/val pairs are filtered out" do
|
26
26
|
it "doesn't change" do
|
27
|
-
other = hash.
|
27
|
+
other = hash.reject { true }
|
28
28
|
other.default_proc.should be(hash.default_proc)
|
29
29
|
other.default_proc.call(4).should == 8
|
30
30
|
end
|
@@ -3,17 +3,17 @@ require "hamster/hash"
|
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
5
|
describe "#delete" do
|
6
|
-
let(:hash) {
|
6
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
7
7
|
|
8
8
|
context "with an existing key" do
|
9
9
|
let(:result) { hash.delete("B") }
|
10
10
|
|
11
11
|
it "preserves the original" do
|
12
|
-
hash.should eql(
|
12
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
13
13
|
end
|
14
14
|
|
15
15
|
it "returns a copy with the remaining key/value pairs" do
|
16
|
-
result.should eql(
|
16
|
+
result.should eql(H["A" => "aye", "C" => "see"])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -21,7 +21,7 @@ describe Hamster::Hash do
|
|
21
21
|
let(:result) { hash.delete("D") }
|
22
22
|
|
23
23
|
it "preserves the original values" do
|
24
|
-
hash.should eql(
|
24
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
25
25
|
end
|
26
26
|
|
27
27
|
it "returns self" do
|
@@ -2,9 +2,9 @@ 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
|
-
[:each, :
|
7
|
+
[:each, :each_pair].each do |method|
|
8
8
|
describe "##{method}" do
|
9
9
|
context "with a block (internal iteration)" do
|
10
10
|
it "returns self" do
|
@@ -23,7 +23,7 @@ describe Hamster::Hash do
|
|
23
23
|
|
24
24
|
it "yields both of a pair of colliding keys" do
|
25
25
|
yielded = []
|
26
|
-
hash =
|
26
|
+
hash = H[DeterministicHash.new('a', 1) => 1, DeterministicHash.new('b', 1) => 1]
|
27
27
|
hash.each { |k,v| yielded << k }
|
28
28
|
yielded.size.should == 2
|
29
29
|
yielded.map { |x| x.value }.sort.should == ['a', 'b']
|
@@ -3,7 +3,7 @@ require "hamster/hash"
|
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
5
|
describe "#each_with_index" do
|
6
|
-
let(:hash) {
|
6
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
7
7
|
|
8
8
|
describe "with a block (internal iteration)" do
|
9
9
|
it "returns self" do
|
@@ -2,28 +2,26 @@ require "spec_helper"
|
|
2
2
|
require "hamster/hash"
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
|
-
|
6
|
-
|
7
|
-
[
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Hamster.hash(*pairs).send(method).should == result
|
14
|
-
end
|
5
|
+
describe "#empty?" do
|
6
|
+
[
|
7
|
+
[[], true],
|
8
|
+
[["A" => "aye"], false],
|
9
|
+
[["A" => "aye", "B" => "bee", "C" => "see"], false],
|
10
|
+
].each do |pairs, result|
|
11
|
+
it "returns #{result} for #{pairs.inspect}" do
|
12
|
+
H[*pairs].empty?.should == result
|
15
13
|
end
|
14
|
+
end
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
end
|
16
|
+
it "returns true for empty hashes which have a default block" do
|
17
|
+
H.new { 'default' }.empty?.should == true
|
20
18
|
end
|
21
19
|
end
|
22
20
|
|
23
21
|
describe ".empty" do
|
24
22
|
it "returns the canonical empty Hash" do
|
25
|
-
|
26
|
-
|
23
|
+
H.empty.should be_empty
|
24
|
+
H.empty.should be(Hamster::EmptyHash)
|
27
25
|
end
|
28
26
|
|
29
27
|
context "from a subclass" 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" => "aye", "B" => "bee", "C" => "see"] }
|
6
6
|
|
7
7
|
describe "#eql?" do
|
8
8
|
it "returns false when comparing with a standard hash" do
|
@@ -51,11 +51,11 @@ describe Hamster::Hash do
|
|
51
51
|
].each do |a, b, expected|
|
52
52
|
describe "returns #{expected.inspect}" do
|
53
53
|
it "for #{a.inspect} and #{b.inspect}" do
|
54
|
-
|
54
|
+
H[a].send(method, H[b]).should == expected
|
55
55
|
end
|
56
56
|
|
57
57
|
it "for #{b.inspect} and #{a.inspect}" do
|
58
|
-
|
58
|
+
H[b].send(method, H[a]).should == expected
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -63,7 +63,7 @@ describe Hamster::Hash do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it "returns true on a large hash which is modified and then modified back again" do
|
66
|
-
hash =
|
66
|
+
hash = H.new((1..1000).zip(2..1001))
|
67
67
|
hash.put('a', 1).delete('a').should == hash
|
68
68
|
hash.put('b', 2).delete('b').should eql(hash)
|
69
69
|
end
|
@@ -3,33 +3,33 @@ require "hamster/hash"
|
|
3
3
|
|
4
4
|
describe Hamster::Hash do
|
5
5
|
describe "#except" do
|
6
|
-
let(:hash) {
|
6
|
+
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
|
7
7
|
|
8
8
|
context "with only keys that the Hash has" do
|
9
9
|
it "returns a Hash without those values" do
|
10
|
-
hash.except("B", nil).should eql(
|
10
|
+
hash.except("B", nil).should eql(H["A" => "aye", "C" => "see"])
|
11
11
|
end
|
12
12
|
|
13
13
|
it "doesn't change the original Hash" do
|
14
14
|
hash.except("B", nil)
|
15
|
-
hash.should eql(
|
15
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
context "with keys that the Hash doesn't have" do
|
20
20
|
it "returns a Hash without the values that it had keys for" do
|
21
|
-
hash.except("B", "A", 3).should eql(
|
21
|
+
hash.except("B", "A", 3).should eql(H["C" => "see", nil => "NIL"])
|
22
22
|
end
|
23
23
|
|
24
24
|
it "doesn't change the original Hash" do
|
25
25
|
hash.except("B", "A", 3)
|
26
|
-
hash.should eql(
|
26
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
it "works on a large Hash, with many combinations of input" do
|
31
31
|
keys = (1..1000).to_a
|
32
|
-
original =
|
32
|
+
original = H.new(keys.zip(2..1001))
|
33
33
|
100.times do
|
34
34
|
to_remove = rand(100).times.collect { keys.sample }
|
35
35
|
result = original.except(*to_remove)
|
@@ -37,7 +37,7 @@ describe Hamster::Hash do
|
|
37
37
|
to_remove.each { |key| result.key?(key).should == false }
|
38
38
|
(keys.sample(100) - to_remove).each { |key| result.key?(key).should == true }
|
39
39
|
end
|
40
|
-
original.should eql(
|
40
|
+
original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -6,13 +6,13 @@ describe Hamster::Hash do
|
|
6
6
|
context "with no default provided" do
|
7
7
|
context "when the key exists" do
|
8
8
|
it "returns the value associated with the key" do
|
9
|
-
|
9
|
+
H["A" => "aye"].fetch("A").should == "aye"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
context "when the key does not exist" do
|
14
14
|
it "raises a KeyError" do
|
15
|
-
-> {
|
15
|
+
-> { H["A" => "aye"].fetch("B") }.should raise_error(KeyError)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -20,13 +20,13 @@ describe Hamster::Hash do
|
|
20
20
|
context "with a default value" do
|
21
21
|
context "when the key exists" do
|
22
22
|
it "returns the value associated with the key" do
|
23
|
-
|
23
|
+
H["A" => "aye"].fetch("A", "default").should == "aye"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
context "when the key does not exist" do
|
28
28
|
it "returns the default value" do
|
29
|
-
|
29
|
+
H["A" => "aye"].fetch("B", "default").should == "default"
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -34,25 +34,25 @@ describe Hamster::Hash do
|
|
34
34
|
context "with a default block" do
|
35
35
|
context "when the key exists" do
|
36
36
|
it "returns the value associated with the key" do
|
37
|
-
|
37
|
+
H["A" => "aye"].fetch("A") { "default".upcase }.should == "aye"
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
context "when the key does not exist" do
|
42
42
|
it "invokes the default block with the missing key as paramter" do
|
43
|
-
|
44
|
-
|
43
|
+
H["A" => "aye"].fetch("B") { |key| key.should == "B" }
|
44
|
+
H["A" => "aye"].fetch("B") { "default".upcase }.should == "DEFAULT"
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
it "gives precedence to default block over default argument if passed both" do
|
50
|
-
|
50
|
+
H["A" => "aye"].fetch("B", 'one') { 'two' }.should == 'two'
|
51
51
|
end
|
52
52
|
|
53
53
|
it "raises an ArgumentError when not passed one or 2 arguments" do
|
54
|
-
-> {
|
55
|
-
-> {
|
54
|
+
-> { H.empty.fetch }.should raise_error(ArgumentError)
|
55
|
+
-> { H.empty.fetch(1, 2, 3) }.should raise_error(ArgumentError)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -16,7 +16,7 @@ describe Hamster::Hash do
|
|
16
16
|
[["A" => "aye", "B" => "bee", nil => "NIL"], "C", nil],
|
17
17
|
].each do |values, key, expected|
|
18
18
|
describe "on #{values.inspect}" do
|
19
|
-
let(:hash) {
|
19
|
+
let(:hash) { H[*values] }
|
20
20
|
|
21
21
|
describe "with a block" do
|
22
22
|
it "returns #{expected.inspect}" do
|
@@ -36,7 +36,7 @@ describe Hamster::Hash do
|
|
36
36
|
|
37
37
|
it "stops iterating when the block returns true" do
|
38
38
|
yielded = []
|
39
|
-
|
39
|
+
H[a: 1, b: 2].find { |k,v| yielded << k; true }
|
40
40
|
yielded.size.should == 1
|
41
41
|
end
|
42
42
|
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 "#flat_map" do
|
8
8
|
it "yields each key/val pair" do
|
@@ -13,13 +13,13 @@ describe Hamster::Hash do
|
|
13
13
|
|
14
14
|
it "returns the concatenation of block return values" do
|
15
15
|
hash.flat_map { |k,v| [k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
|
16
|
-
hash.flat_map { |k,v|
|
17
|
-
hash.flat_map { |k,v|
|
16
|
+
hash.flat_map { |k,v| L[k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
|
17
|
+
hash.flat_map { |k,v| V[k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
|
18
18
|
end
|
19
19
|
|
20
20
|
it "doesn't change the receiver" do
|
21
21
|
hash.flat_map { |k,v| [k,v] }
|
22
|
-
hash.should eql(
|
22
|
+
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
23
23
|
end
|
24
24
|
|
25
25
|
context "with no block" do
|
@@ -5,14 +5,14 @@ describe Hamster::Hash do
|
|
5
5
|
describe "#flatten" do
|
6
6
|
context "with flatten depth of zero" do
|
7
7
|
it "returns a vector of keys/value" do
|
8
|
-
hash =
|
8
|
+
hash = H[a: 1, b: 2]
|
9
9
|
hash.flatten(0).sort.should eql(V[[:a, 1], [:b, 2]])
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
context "without array keys or values" do
|
14
14
|
it "returns a vector of keys and values" do
|
15
|
-
hash =
|
15
|
+
hash = H[a: 1, b: 2, c: 3]
|
16
16
|
possibilities = [[:a, 1, :b, 2, :c, 3],
|
17
17
|
[:a, 1, :c, 3, :b, 2],
|
18
18
|
[:b, 2, :a, 1, :c, 3],
|
@@ -27,22 +27,22 @@ describe Hamster::Hash do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
it "doesn't modify the receiver" do
|
30
|
-
hash =
|
30
|
+
hash = H[a: 1, b: 2, c: 3]
|
31
31
|
hash.flatten(1)
|
32
32
|
hash.flatten(2)
|
33
|
-
hash.should eql(
|
33
|
+
hash.should eql(H[a: 1, b: 2, c: 3])
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
context "on an empty Hash" do
|
38
38
|
it "returns an empty Vector" do
|
39
|
-
|
39
|
+
H.empty.flatten.should eql(V.empty)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
context "with array keys" do
|
44
44
|
it "flattens array keys into returned vector if flatten depth is sufficient" do
|
45
|
-
hash =
|
45
|
+
hash = H[[1, 2] => 3, [4, 5] => 6]
|
46
46
|
[[[1, 2], 3, [4, 5], 6], [[4, 5], 6, [1, 2], 3]].include?(hash.flatten(1)).should == true
|
47
47
|
[[[1, 2], 3, [4, 5], 6], [[4, 5], 6, [1, 2], 3]].include?(hash.flatten).should == true
|
48
48
|
hash.flatten(1).class.should be(Hamster::Vector)
|
@@ -51,16 +51,16 @@ describe Hamster::Hash do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
it "doesn't modify the receiver (or its contents)" do
|
54
|
-
hash =
|
54
|
+
hash = H[[1, 2] => 3, [4, 5] => 6]
|
55
55
|
hash.flatten(1)
|
56
56
|
hash.flatten(2)
|
57
|
-
hash.should eql(
|
57
|
+
hash.should eql(H[[1, 2] => 3, [4, 5] => 6])
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
context "with array values" do
|
62
62
|
it "flattens array values into returned vector if flatten depth is sufficient" do
|
63
|
-
hash =
|
63
|
+
hash = H[1 => [2, 3], 4 => [5, 6]]
|
64
64
|
[[1, [2, 3], 4, [5, 6]], [4, [5, 6], 1, [2, 3]]].include?(hash.flatten(1)).should == true
|
65
65
|
[[1, [2, 3], 4, [5, 6]], [4, [5, 6], 1, [2, 3]]].include?(hash.flatten).should == true
|
66
66
|
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|
@@ -69,16 +69,16 @@ describe Hamster::Hash do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "doesn't modify the receiver (or its contents)" do
|
72
|
-
hash =
|
72
|
+
hash = H[1 => [2, 3], 4 => [5, 6]]
|
73
73
|
hash.flatten(1)
|
74
74
|
hash.flatten(2)
|
75
|
-
hash.should eql(
|
75
|
+
hash.should eql(H[1 => [2, 3], 4 => [5, 6]])
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
79
|
context "with vector keys" do
|
80
80
|
it "flattens vector keys into returned vector if flatten depth is sufficient" do
|
81
|
-
hash =
|
81
|
+
hash = H[V[1, 2] => 3, V[4, 5] => 6]
|
82
82
|
[[V[1, 2], 3, V[4, 5], 6], [V[4, 5], 6, V[1, 2], 3]].include?(hash.flatten).should == true
|
83
83
|
[[V[1, 2], 3, V[4, 5], 6], [V[4, 5], 6, V[1, 2], 3]].include?(hash.flatten(1)).should == true
|
84
84
|
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|
@@ -88,7 +88,7 @@ describe Hamster::Hash do
|
|
88
88
|
|
89
89
|
context "with vector values" do
|
90
90
|
it "flattens vector values into returned vector if flatten depth is sufficient" do
|
91
|
-
hash =
|
91
|
+
hash = H[1 => V[2, 3], 4 => V[5, 6]]
|
92
92
|
[[1, V[2, 3], 4, V[5, 6]], [4, V[5, 6], 1, V[2, 3]]].include?(hash.flatten(1)).should == true
|
93
93
|
[[1, V[2, 3], 4, V[5, 6]], [4, V[5, 6], 1, V[2, 3]]].include?(hash.flatten).should == true
|
94
94
|
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|