immutable-ruby 0.0.4 → 0.1.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/immutable/core_ext/enumerable.rb +1 -1
- data/lib/immutable/core_ext/io.rb +1 -1
- data/lib/immutable/core_ext.rb +2 -2
- data/lib/immutable/deque.rb +17 -17
- data/lib/immutable/enumerable.rb +10 -10
- data/lib/immutable/hash.rb +24 -24
- data/lib/immutable/list.rb +36 -36
- data/lib/immutable/nested.rb +8 -8
- data/lib/immutable/set.rb +30 -30
- data/lib/immutable/sorted_set.rb +30 -26
- data/lib/immutable/trie.rb +2 -2
- data/lib/immutable/vector.rb +40 -35
- data/lib/immutable/version.rb +1 -1
- data/lib/immutable.rb +9 -9
- metadata +36 -699
- data/lib/immutable/core_ext/struct.rb +0 -9
- data/spec/fixtures/io_spec.txt +0 -3
- data/spec/lib/immutable/core_ext/array_spec.rb +0 -13
- data/spec/lib/immutable/core_ext/enumerable_spec.rb +0 -29
- data/spec/lib/immutable/core_ext/io_spec.rb +0 -28
- data/spec/lib/immutable/deque/clear_spec.rb +0 -33
- data/spec/lib/immutable/deque/construction_spec.rb +0 -29
- data/spec/lib/immutable/deque/copying_spec.rb +0 -19
- data/spec/lib/immutable/deque/dequeue_spec.rb +0 -34
- data/spec/lib/immutable/deque/empty_spec.rb +0 -39
- data/spec/lib/immutable/deque/enqueue_spec.rb +0 -27
- data/spec/lib/immutable/deque/first_spec.rb +0 -17
- data/spec/lib/immutable/deque/inspect_spec.rb +0 -23
- data/spec/lib/immutable/deque/last_spec.rb +0 -17
- data/spec/lib/immutable/deque/marshal_spec.rb +0 -33
- data/spec/lib/immutable/deque/new_spec.rb +0 -43
- data/spec/lib/immutable/deque/pop_spec.rb +0 -36
- data/spec/lib/immutable/deque/pretty_print_spec.rb +0 -23
- data/spec/lib/immutable/deque/push_spec.rb +0 -36
- data/spec/lib/immutable/deque/random_modification_spec.rb +0 -33
- data/spec/lib/immutable/deque/rotate_spec.rb +0 -68
- data/spec/lib/immutable/deque/shift_spec.rb +0 -29
- data/spec/lib/immutable/deque/size_spec.rb +0 -19
- data/spec/lib/immutable/deque/to_a_spec.rb +0 -26
- data/spec/lib/immutable/deque/to_ary_spec.rb +0 -35
- data/spec/lib/immutable/deque/to_list_spec.rb +0 -24
- data/spec/lib/immutable/deque/unshift_spec.rb +0 -30
- data/spec/lib/immutable/hash/all_spec.rb +0 -53
- data/spec/lib/immutable/hash/any_spec.rb +0 -53
- data/spec/lib/immutable/hash/assoc_spec.rb +0 -51
- data/spec/lib/immutable/hash/clear_spec.rb +0 -42
- data/spec/lib/immutable/hash/construction_spec.rb +0 -38
- data/spec/lib/immutable/hash/copying_spec.rb +0 -13
- data/spec/lib/immutable/hash/default_proc_spec.rb +0 -72
- data/spec/lib/immutable/hash/delete_spec.rb +0 -39
- data/spec/lib/immutable/hash/dig_spec.rb +0 -34
- data/spec/lib/immutable/hash/each_spec.rb +0 -77
- data/spec/lib/immutable/hash/each_with_index_spec.rb +0 -29
- data/spec/lib/immutable/hash/empty_spec.rb +0 -43
- data/spec/lib/immutable/hash/eql_spec.rb +0 -75
- data/spec/lib/immutable/hash/except_spec.rb +0 -42
- data/spec/lib/immutable/hash/fetch_spec.rb +0 -57
- data/spec/lib/immutable/hash/fetch_values_spec.rb +0 -22
- data/spec/lib/immutable/hash/find_spec.rb +0 -43
- data/spec/lib/immutable/hash/flat_map_spec.rb +0 -35
- data/spec/lib/immutable/hash/flatten_spec.rb +0 -98
- data/spec/lib/immutable/hash/get_spec.rb +0 -79
- data/spec/lib/immutable/hash/has_key_spec.rb +0 -31
- data/spec/lib/immutable/hash/has_value_spec.rb +0 -27
- data/spec/lib/immutable/hash/hash_spec.rb +0 -29
- data/spec/lib/immutable/hash/inspect_spec.rb +0 -30
- data/spec/lib/immutable/hash/invert_spec.rb +0 -30
- data/spec/lib/immutable/hash/key_spec.rb +0 -27
- data/spec/lib/immutable/hash/keys_spec.rb +0 -15
- data/spec/lib/immutable/hash/map_spec.rb +0 -45
- data/spec/lib/immutable/hash/marshal_spec.rb +0 -28
- data/spec/lib/immutable/hash/merge_spec.rb +0 -82
- data/spec/lib/immutable/hash/min_max_spec.rb +0 -45
- data/spec/lib/immutable/hash/new_spec.rb +0 -70
- data/spec/lib/immutable/hash/none_spec.rb +0 -48
- data/spec/lib/immutable/hash/partition_spec.rb +0 -35
- data/spec/lib/immutable/hash/pretty_print_spec.rb +0 -34
- data/spec/lib/immutable/hash/put_spec.rb +0 -111
- data/spec/lib/immutable/hash/reduce_spec.rb +0 -35
- data/spec/lib/immutable/hash/reject_spec.rb +0 -61
- data/spec/lib/immutable/hash/reverse_each_spec.rb +0 -27
- data/spec/lib/immutable/hash/sample_spec.rb +0 -13
- data/spec/lib/immutable/hash/select_spec.rb +0 -57
- data/spec/lib/immutable/hash/size_spec.rb +0 -51
- data/spec/lib/immutable/hash/slice_spec.rb +0 -44
- data/spec/lib/immutable/hash/sort_spec.rb +0 -26
- data/spec/lib/immutable/hash/store_spec.rb +0 -75
- data/spec/lib/immutable/hash/subset_spec.rb +0 -42
- data/spec/lib/immutable/hash/superset_spec.rb +0 -42
- data/spec/lib/immutable/hash/take_spec.rb +0 -35
- data/spec/lib/immutable/hash/to_a_spec.rb +0 -13
- data/spec/lib/immutable/hash/to_hash_spec.rb +0 -21
- data/spec/lib/immutable/hash/to_proc_spec.rb +0 -39
- data/spec/lib/immutable/hash/update_in_spec.rb +0 -79
- data/spec/lib/immutable/hash/values_at_spec.rb +0 -33
- data/spec/lib/immutable/hash/values_spec.rb +0 -23
- data/spec/lib/immutable/list/add_spec.rb +0 -25
- data/spec/lib/immutable/list/all_spec.rb +0 -57
- data/spec/lib/immutable/list/any_spec.rb +0 -49
- data/spec/lib/immutable/list/append_spec.rb +0 -38
- data/spec/lib/immutable/list/at_spec.rb +0 -29
- data/spec/lib/immutable/list/break_spec.rb +0 -69
- data/spec/lib/immutable/list/cadr_spec.rb +0 -38
- data/spec/lib/immutable/list/chunk_spec.rb +0 -28
- data/spec/lib/immutable/list/clear_spec.rb +0 -24
- data/spec/lib/immutable/list/combination_spec.rb +0 -33
- data/spec/lib/immutable/list/compact_spec.rb +0 -34
- data/spec/lib/immutable/list/compare_spec.rb +0 -30
- data/spec/lib/immutable/list/cons_spec.rb +0 -25
- data/spec/lib/immutable/list/construction_spec.rb +0 -110
- data/spec/lib/immutable/list/copying_spec.rb +0 -19
- data/spec/lib/immutable/list/count_spec.rb +0 -36
- data/spec/lib/immutable/list/cycle_spec.rb +0 -28
- data/spec/lib/immutable/list/delete_at_spec.rb +0 -18
- data/spec/lib/immutable/list/delete_spec.rb +0 -16
- data/spec/lib/immutable/list/drop_spec.rb +0 -30
- data/spec/lib/immutable/list/drop_while_spec.rb +0 -38
- data/spec/lib/immutable/list/each_slice_spec.rb +0 -51
- data/spec/lib/immutable/list/each_spec.rb +0 -40
- data/spec/lib/immutable/list/each_with_index_spec.rb +0 -28
- data/spec/lib/immutable/list/empty_spec.rb +0 -23
- data/spec/lib/immutable/list/eql_spec.rb +0 -61
- data/spec/lib/immutable/list/fill_spec.rb +0 -49
- data/spec/lib/immutable/list/find_all_spec.rb +0 -70
- data/spec/lib/immutable/list/find_index_spec.rb +0 -35
- data/spec/lib/immutable/list/find_spec.rb +0 -42
- data/spec/lib/immutable/list/flat_map_spec.rb +0 -51
- data/spec/lib/immutable/list/flatten_spec.rb +0 -30
- data/spec/lib/immutable/list/grep_spec.rb +0 -46
- data/spec/lib/immutable/list/group_by_spec.rb +0 -41
- data/spec/lib/immutable/list/hash_spec.rb +0 -21
- data/spec/lib/immutable/list/head_spec.rb +0 -19
- data/spec/lib/immutable/list/include_spec.rb +0 -35
- data/spec/lib/immutable/list/index_spec.rb +0 -37
- data/spec/lib/immutable/list/indices_spec.rb +0 -61
- data/spec/lib/immutable/list/init_spec.rb +0 -28
- data/spec/lib/immutable/list/inits_spec.rb +0 -28
- data/spec/lib/immutable/list/insert_spec.rb +0 -46
- data/spec/lib/immutable/list/inspect_spec.rb +0 -29
- data/spec/lib/immutable/list/intersperse_spec.rb +0 -28
- data/spec/lib/immutable/list/join_spec.rb +0 -63
- data/spec/lib/immutable/list/last_spec.rb +0 -23
- data/spec/lib/immutable/list/ltlt_spec.rb +0 -19
- data/spec/lib/immutable/list/map_spec.rb +0 -45
- data/spec/lib/immutable/list/maximum_spec.rb +0 -39
- data/spec/lib/immutable/list/merge_by_spec.rb +0 -51
- data/spec/lib/immutable/list/merge_spec.rb +0 -59
- data/spec/lib/immutable/list/minimum_spec.rb +0 -39
- data/spec/lib/immutable/list/multithreading_spec.rb +0 -47
- data/spec/lib/immutable/list/none_spec.rb +0 -47
- data/spec/lib/immutable/list/one_spec.rb +0 -49
- data/spec/lib/immutable/list/partition_spec.rb +0 -115
- data/spec/lib/immutable/list/permutation_spec.rb +0 -55
- data/spec/lib/immutable/list/pop_spec.rb +0 -25
- data/spec/lib/immutable/list/product_spec.rb +0 -23
- data/spec/lib/immutable/list/reduce_spec.rb +0 -53
- data/spec/lib/immutable/list/reject_spec.rb +0 -45
- data/spec/lib/immutable/list/reverse_spec.rb +0 -34
- data/spec/lib/immutable/list/rotate_spec.rb +0 -36
- data/spec/lib/immutable/list/sample_spec.rb +0 -13
- data/spec/lib/immutable/list/select_spec.rb +0 -70
- data/spec/lib/immutable/list/size_spec.rb +0 -25
- data/spec/lib/immutable/list/slice_spec.rb +0 -229
- data/spec/lib/immutable/list/sorting_spec.rb +0 -46
- data/spec/lib/immutable/list/span_spec.rb +0 -76
- data/spec/lib/immutable/list/split_at_spec.rb +0 -43
- data/spec/lib/immutable/list/subsequences_spec.rb +0 -23
- data/spec/lib/immutable/list/sum_spec.rb +0 -23
- data/spec/lib/immutable/list/tail_spec.rb +0 -30
- data/spec/lib/immutable/list/tails_spec.rb +0 -28
- data/spec/lib/immutable/list/take_spec.rb +0 -30
- data/spec/lib/immutable/list/take_while_spec.rb +0 -46
- data/spec/lib/immutable/list/to_a_spec.rb +0 -39
- data/spec/lib/immutable/list/to_ary_spec.rb +0 -41
- data/spec/lib/immutable/list/to_list_spec.rb +0 -19
- data/spec/lib/immutable/list/to_set_spec.rb +0 -17
- data/spec/lib/immutable/list/transpose_spec.rb +0 -19
- data/spec/lib/immutable/list/union_spec.rb +0 -31
- data/spec/lib/immutable/list/uniq_spec.rb +0 -35
- data/spec/lib/immutable/list/zip_spec.rb +0 -23
- data/spec/lib/immutable/nested/construction_spec.rb +0 -101
- data/spec/lib/immutable/set/add_spec.rb +0 -77
- data/spec/lib/immutable/set/all_spec.rb +0 -51
- data/spec/lib/immutable/set/any_spec.rb +0 -51
- data/spec/lib/immutable/set/clear_spec.rb +0 -33
- data/spec/lib/immutable/set/compact_spec.rb +0 -30
- data/spec/lib/immutable/set/construction_spec.rb +0 -18
- data/spec/lib/immutable/set/copying_spec.rb +0 -13
- data/spec/lib/immutable/set/count_spec.rb +0 -36
- data/spec/lib/immutable/set/delete_spec.rb +0 -71
- data/spec/lib/immutable/set/difference_spec.rb +0 -49
- data/spec/lib/immutable/set/disjoint_spec.rb +0 -25
- data/spec/lib/immutable/set/each_spec.rb +0 -45
- data/spec/lib/immutable/set/empty_spec.rb +0 -44
- data/spec/lib/immutable/set/eqeq_spec.rb +0 -103
- data/spec/lib/immutable/set/eql_spec.rb +0 -109
- data/spec/lib/immutable/set/exclusion_spec.rb +0 -47
- data/spec/lib/immutable/set/find_spec.rb +0 -35
- data/spec/lib/immutable/set/first_spec.rb +0 -28
- data/spec/lib/immutable/set/flatten_spec.rb +0 -46
- data/spec/lib/immutable/set/grep_spec.rb +0 -57
- data/spec/lib/immutable/set/grep_v_spec.rb +0 -59
- data/spec/lib/immutable/set/group_by_spec.rb +0 -59
- data/spec/lib/immutable/set/hash_spec.rb +0 -22
- data/spec/lib/immutable/set/include_spec.rb +0 -60
- data/spec/lib/immutable/set/inspect_spec.rb +0 -47
- data/spec/lib/immutable/set/intersect_spec.rb +0 -25
- data/spec/lib/immutable/set/intersection_spec.rb +0 -52
- data/spec/lib/immutable/set/join_spec.rb +0 -64
- data/spec/lib/immutable/set/map_spec.rb +0 -59
- data/spec/lib/immutable/set/marshal_spec.rb +0 -28
- data/spec/lib/immutable/set/maximum_spec.rb +0 -36
- data/spec/lib/immutable/set/minimum_spec.rb +0 -36
- data/spec/lib/immutable/set/new_spec.rb +0 -53
- data/spec/lib/immutable/set/none_spec.rb +0 -47
- data/spec/lib/immutable/set/one_spec.rb +0 -47
- data/spec/lib/immutable/set/partition_spec.rb +0 -52
- data/spec/lib/immutable/set/product_spec.rb +0 -23
- data/spec/lib/immutable/set/reduce_spec.rb +0 -55
- data/spec/lib/immutable/set/reject_spec.rb +0 -50
- data/spec/lib/immutable/set/reverse_each_spec.rb +0 -38
- data/spec/lib/immutable/set/sample_spec.rb +0 -13
- data/spec/lib/immutable/set/select_spec.rb +0 -73
- data/spec/lib/immutable/set/size_spec.rb +0 -17
- data/spec/lib/immutable/set/sorting_spec.rb +0 -65
- data/spec/lib/immutable/set/subset_spec.rb +0 -51
- data/spec/lib/immutable/set/sum_spec.rb +0 -23
- data/spec/lib/immutable/set/superset_spec.rb +0 -51
- data/spec/lib/immutable/set/to_a_spec.rb +0 -30
- data/spec/lib/immutable/set/to_list_spec.rb +0 -35
- data/spec/lib/immutable/set/to_set_spec.rb +0 -19
- data/spec/lib/immutable/set/union_spec.rb +0 -63
- data/spec/lib/immutable/sorted_set/above_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/add_spec.rb +0 -62
- data/spec/lib/immutable/sorted_set/at_spec.rb +0 -24
- data/spec/lib/immutable/sorted_set/below_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/between_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/clear_spec.rb +0 -43
- data/spec/lib/immutable/sorted_set/copying_spec.rb +0 -20
- data/spec/lib/immutable/sorted_set/delete_at_spec.rb +0 -18
- data/spec/lib/immutable/sorted_set/delete_spec.rb +0 -89
- data/spec/lib/immutable/sorted_set/difference_spec.rb +0 -22
- data/spec/lib/immutable/sorted_set/disjoint_spec.rb +0 -25
- data/spec/lib/immutable/sorted_set/drop_spec.rb +0 -55
- data/spec/lib/immutable/sorted_set/drop_while_spec.rb +0 -34
- data/spec/lib/immutable/sorted_set/each_spec.rb +0 -28
- data/spec/lib/immutable/sorted_set/empty_spec.rb +0 -34
- data/spec/lib/immutable/sorted_set/eql_spec.rb +0 -120
- data/spec/lib/immutable/sorted_set/exclusion_spec.rb +0 -22
- data/spec/lib/immutable/sorted_set/fetch_spec.rb +0 -64
- data/spec/lib/immutable/sorted_set/find_index_spec.rb +0 -40
- data/spec/lib/immutable/sorted_set/first_spec.rb +0 -18
- data/spec/lib/immutable/sorted_set/from_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/group_by_spec.rb +0 -57
- data/spec/lib/immutable/sorted_set/include_spec.rb +0 -23
- data/spec/lib/immutable/sorted_set/inspect_spec.rb +0 -37
- data/spec/lib/immutable/sorted_set/intersect_spec.rb +0 -25
- data/spec/lib/immutable/sorted_set/intersection_spec.rb +0 -28
- data/spec/lib/immutable/sorted_set/last_spec.rb +0 -36
- data/spec/lib/immutable/sorted_set/map_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/marshal_spec.rb +0 -36
- data/spec/lib/immutable/sorted_set/maximum_spec.rb +0 -36
- data/spec/lib/immutable/sorted_set/minimum_spec.rb +0 -19
- data/spec/lib/immutable/sorted_set/new_spec.rb +0 -137
- data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +0 -28
- data/spec/lib/immutable/sorted_set/sample_spec.rb +0 -13
- data/spec/lib/immutable/sorted_set/select_spec.rb +0 -61
- data/spec/lib/immutable/sorted_set/size_spec.rb +0 -17
- data/spec/lib/immutable/sorted_set/slice_spec.rb +0 -256
- data/spec/lib/immutable/sorted_set/sorting_spec.rb +0 -56
- data/spec/lib/immutable/sorted_set/subset_spec.rb +0 -47
- data/spec/lib/immutable/sorted_set/superset_spec.rb +0 -47
- data/spec/lib/immutable/sorted_set/take_spec.rb +0 -54
- data/spec/lib/immutable/sorted_set/take_while_spec.rb +0 -33
- data/spec/lib/immutable/sorted_set/to_set_spec.rb +0 -17
- data/spec/lib/immutable/sorted_set/union_spec.rb +0 -58
- data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
- data/spec/lib/immutable/sorted_set/util_spec.rb +0 -48
- data/spec/lib/immutable/sorted_set/values_at_spec.rb +0 -33
- data/spec/lib/immutable/vector/add_spec.rb +0 -67
- data/spec/lib/immutable/vector/any_spec.rb +0 -69
- data/spec/lib/immutable/vector/assoc_spec.rb +0 -45
- data/spec/lib/immutable/vector/bsearch_spec.rb +0 -65
- data/spec/lib/immutable/vector/clear_spec.rb +0 -33
- data/spec/lib/immutable/vector/combination_spec.rb +0 -81
- data/spec/lib/immutable/vector/compact_spec.rb +0 -29
- data/spec/lib/immutable/vector/compare_spec.rb +0 -31
- data/spec/lib/immutable/vector/concat_spec.rb +0 -34
- data/spec/lib/immutable/vector/copying_spec.rb +0 -20
- data/spec/lib/immutable/vector/count_spec.rb +0 -17
- data/spec/lib/immutable/vector/delete_at_spec.rb +0 -53
- data/spec/lib/immutable/vector/delete_spec.rb +0 -30
- data/spec/lib/immutable/vector/dig_spec.rb +0 -30
- data/spec/lib/immutable/vector/drop_spec.rb +0 -41
- data/spec/lib/immutable/vector/drop_while_spec.rb +0 -54
- data/spec/lib/immutable/vector/each_index_spec.rb +0 -40
- data/spec/lib/immutable/vector/each_spec.rb +0 -44
- data/spec/lib/immutable/vector/each_with_index_spec.rb +0 -39
- data/spec/lib/immutable/vector/empty_spec.rb +0 -41
- data/spec/lib/immutable/vector/eql_spec.rb +0 -76
- data/spec/lib/immutable/vector/fetch_spec.rb +0 -64
- data/spec/lib/immutable/vector/fill_spec.rb +0 -88
- data/spec/lib/immutable/vector/first_spec.rb +0 -18
- data/spec/lib/immutable/vector/flat_map_spec.rb +0 -50
- data/spec/lib/immutable/vector/flatten_spec.rb +0 -58
- data/spec/lib/immutable/vector/get_spec.rb +0 -74
- data/spec/lib/immutable/vector/group_by_spec.rb +0 -57
- data/spec/lib/immutable/vector/include_spec.rb +0 -30
- data/spec/lib/immutable/vector/insert_spec.rb +0 -68
- data/spec/lib/immutable/vector/inspect_spec.rb +0 -49
- data/spec/lib/immutable/vector/join_spec.rb +0 -58
- data/spec/lib/immutable/vector/last_spec.rb +0 -45
- data/spec/lib/immutable/vector/length_spec.rb +0 -45
- data/spec/lib/immutable/vector/ltlt_spec.rb +0 -65
- data/spec/lib/immutable/vector/map_spec.rb +0 -51
- data/spec/lib/immutable/vector/marshal_spec.rb +0 -31
- data/spec/lib/immutable/vector/maximum_spec.rb +0 -33
- data/spec/lib/immutable/vector/minimum_spec.rb +0 -33
- data/spec/lib/immutable/vector/multiply_spec.rb +0 -47
- data/spec/lib/immutable/vector/new_spec.rb +0 -50
- data/spec/lib/immutable/vector/partition_spec.rb +0 -52
- data/spec/lib/immutable/vector/permutation_spec.rb +0 -91
- data/spec/lib/immutable/vector/pop_spec.rb +0 -26
- data/spec/lib/immutable/vector/product_spec.rb +0 -70
- data/spec/lib/immutable/vector/reduce_spec.rb +0 -55
- data/spec/lib/immutable/vector/reject_spec.rb +0 -43
- data/spec/lib/immutable/vector/repeated_combination_spec.rb +0 -77
- data/spec/lib/immutable/vector/repeated_permutation_spec.rb +0 -93
- data/spec/lib/immutable/vector/reverse_each_spec.rb +0 -31
- data/spec/lib/immutable/vector/reverse_spec.rb +0 -21
- data/spec/lib/immutable/vector/rindex_spec.rb +0 -36
- data/spec/lib/immutable/vector/rotate_spec.rb +0 -73
- data/spec/lib/immutable/vector/sample_spec.rb +0 -13
- data/spec/lib/immutable/vector/select_spec.rb +0 -63
- data/spec/lib/immutable/vector/set_spec.rb +0 -174
- data/spec/lib/immutable/vector/shift_spec.rb +0 -27
- data/spec/lib/immutable/vector/shuffle_spec.rb +0 -43
- data/spec/lib/immutable/vector/slice_spec.rb +0 -240
- data/spec/lib/immutable/vector/sorting_spec.rb +0 -56
- data/spec/lib/immutable/vector/sum_spec.rb +0 -17
- data/spec/lib/immutable/vector/take_spec.rb +0 -42
- data/spec/lib/immutable/vector/take_while_spec.rb +0 -34
- data/spec/lib/immutable/vector/to_a_spec.rb +0 -41
- data/spec/lib/immutable/vector/to_ary_spec.rb +0 -34
- data/spec/lib/immutable/vector/to_list_spec.rb +0 -30
- data/spec/lib/immutable/vector/to_set_spec.rb +0 -21
- data/spec/lib/immutable/vector/transpose_spec.rb +0 -48
- data/spec/lib/immutable/vector/uniq_spec.rb +0 -76
- data/spec/lib/immutable/vector/unshift_spec.rb +0 -28
- data/spec/lib/immutable/vector/update_in_spec.rb +0 -82
- data/spec/lib/immutable/vector/values_at_spec.rb +0 -33
- data/spec/lib/immutable/vector/zip_spec.rb +0 -57
- data/spec/lib/load_spec.rb +0 -42
- data/spec/spec_helper.rb +0 -96
@@ -1,75 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "bigdecimal"
|
3
|
-
|
4
|
-
describe Immutable::Hash do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
|
7
|
-
describe "#eql?" do
|
8
|
-
it "returns false when comparing with a standard hash" do
|
9
|
-
hash.eql?("A" => "aye", "B" => "bee", "C" => "see").should == false
|
10
|
-
end
|
11
|
-
|
12
|
-
it "returns false when comparing with an arbitrary object" do
|
13
|
-
hash.eql?(Object.new).should == false
|
14
|
-
end
|
15
|
-
|
16
|
-
it "returns false when comparing with a subclass of Immutable::Hash" do
|
17
|
-
subclass = Class.new(Immutable::Hash)
|
18
|
-
instance = subclass.new("A" => "aye", "B" => "bee", "C" => "see")
|
19
|
-
hash.eql?(instance).should == false
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#==" do
|
24
|
-
it "returns true when comparing with a standard hash" do
|
25
|
-
(hash == {"A" => "aye", "B" => "bee", "C" => "see"}).should == true
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns false when comparing with an arbitrary object" do
|
29
|
-
(hash == Object.new).should == false
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns true when comparing with a subclass of Immutable::Hash" do
|
33
|
-
subclass = Class.new(Immutable::Hash)
|
34
|
-
instance = subclass.new("A" => "aye", "B" => "bee", "C" => "see")
|
35
|
-
(hash == instance).should == true
|
36
|
-
end
|
37
|
-
|
38
|
-
it "performs numeric conversions between floats and BigDecimals" do
|
39
|
-
expect(H[a: 0.0] == H[a: BigDecimal('0.0')]).to be true
|
40
|
-
expect(H[a: BigDecimal('0.0')] == H[a: 0.0]).to be true
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
[:eql?, :==].each do |method|
|
45
|
-
describe "##{method}" do
|
46
|
-
[
|
47
|
-
[{}, {}, true],
|
48
|
-
[{ "A" => "aye" }, {}, false],
|
49
|
-
[{}, { "A" => "aye" }, false],
|
50
|
-
[{ "A" => "aye" }, { "A" => "aye" }, true],
|
51
|
-
[{ "A" => "aye" }, { "B" => "bee" }, false],
|
52
|
-
[{ "A" => "aye", "B" => "bee" }, { "A" => "aye" }, false],
|
53
|
-
[{ "A" => "aye" }, { "A" => "aye", "B" => "bee" }, false],
|
54
|
-
[{ "A" => "aye", "B" => "bee", "C" => "see" }, { "A" => "aye", "B" => "bee", "C" => "see" }, true],
|
55
|
-
[{ "C" => "see", "A" => "aye", "B" => "bee" }, { "A" => "aye", "B" => "bee", "C" => "see" }, true],
|
56
|
-
].each do |a, b, expected|
|
57
|
-
describe "returns #{expected.inspect}" do
|
58
|
-
it "for #{a.inspect} and #{b.inspect}" do
|
59
|
-
H[a].send(method, H[b]).should == expected
|
60
|
-
end
|
61
|
-
|
62
|
-
it "for #{b.inspect} and #{a.inspect}" do
|
63
|
-
H[b].send(method, H[a]).should == expected
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
it "returns true on a large hash which is modified and then modified back again" do
|
71
|
-
hash = H.new((1..1000).zip(2..1001))
|
72
|
-
hash.put('a', 1).delete('a').should == hash
|
73
|
-
hash.put('b', 2).delete('b').should eql(hash)
|
74
|
-
end
|
75
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#except" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
|
6
|
-
|
7
|
-
context "with only keys that the Hash has" do
|
8
|
-
it "returns a Hash without those values" do
|
9
|
-
hash.except("B", nil).should eql(H["A" => "aye", "C" => "see"])
|
10
|
-
end
|
11
|
-
|
12
|
-
it "doesn't change the original Hash" do
|
13
|
-
hash.except("B", nil)
|
14
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context "with keys that the Hash doesn't have" do
|
19
|
-
it "returns a Hash without the values that it had keys for" do
|
20
|
-
hash.except("B", "A", 3).should eql(H["C" => "see", nil => "NIL"])
|
21
|
-
end
|
22
|
-
|
23
|
-
it "doesn't change the original Hash" do
|
24
|
-
hash.except("B", "A", 3)
|
25
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it "works on a large Hash, with many combinations of input" do
|
30
|
-
keys = (1..1000).to_a
|
31
|
-
original = H.new(keys.zip(2..1001))
|
32
|
-
100.times do
|
33
|
-
to_remove = rand(100).times.collect { keys.sample }
|
34
|
-
result = original.except(*to_remove)
|
35
|
-
result.size.should == original.size - to_remove.uniq.size
|
36
|
-
to_remove.each { |key| result.key?(key).should == false }
|
37
|
-
(keys.sample(100) - to_remove).each { |key| result.key?(key).should == true }
|
38
|
-
end
|
39
|
-
original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#fetch" do
|
5
|
-
context "with no default provided" do
|
6
|
-
context "when the key exists" do
|
7
|
-
it "returns the value associated with the key" do
|
8
|
-
H["A" => "aye"].fetch("A").should == "aye"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "when the key does not exist" do
|
13
|
-
it "raises a KeyError" do
|
14
|
-
-> { H["A" => "aye"].fetch("B") }.should raise_error(KeyError)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "with a default value" do
|
20
|
-
context "when the key exists" do
|
21
|
-
it "returns the value associated with the key" do
|
22
|
-
H["A" => "aye"].fetch("A", "default").should == "aye"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when the key does not exist" do
|
27
|
-
it "returns the default value" do
|
28
|
-
H["A" => "aye"].fetch("B", "default").should == "default"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "with a default block" do
|
34
|
-
context "when the key exists" do
|
35
|
-
it "returns the value associated with the key" do
|
36
|
-
H["A" => "aye"].fetch("A") { "default".upcase }.should == "aye"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "when the key does not exist" do
|
41
|
-
it "invokes the default block with the missing key as paramter" do
|
42
|
-
H["A" => "aye"].fetch("B") { |key| key.should == "B" }
|
43
|
-
H["A" => "aye"].fetch("B") { "default".upcase }.should == "DEFAULT"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it "gives precedence to default block over default argument if passed both" do
|
49
|
-
H["A" => "aye"].fetch("B", 'one') { 'two' }.should == 'two'
|
50
|
-
end
|
51
|
-
|
52
|
-
it "raises an ArgumentError when not passed one or 2 arguments" do
|
53
|
-
-> { H.empty.fetch }.should raise_error(ArgumentError)
|
54
|
-
-> { H.empty.fetch(1, 2, 3) }.should raise_error(ArgumentError)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "immutable/hash"
|
3
|
-
|
4
|
-
describe Immutable::Hash do
|
5
|
-
describe "#fetch_values" do
|
6
|
-
context "when the all the requested keys exist" do
|
7
|
-
it "returns a vector of values for the given keys" do
|
8
|
-
h = H[:a => 9, :b => 'a', :c => -10, :d => nil]
|
9
|
-
h.fetch_values.should be_kind_of(Immutable::Vector)
|
10
|
-
h.fetch_values.should eql(V.empty)
|
11
|
-
h.fetch_values(:a, :d, :b).should be_kind_of(Immutable::Vector)
|
12
|
-
h.fetch_values(:a, :d, :b).should eql(V[9, nil, 'a'])
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "when the key does not exist" do
|
17
|
-
it "raises a KeyError" do
|
18
|
-
-> { H["A" => "aye", "C" => "Cee"].fetch_values("A", "B") }.should raise_error(KeyError)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:find, :detect].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
[
|
7
|
-
[[], "A", nil],
|
8
|
-
[[], nil, nil],
|
9
|
-
[["A" => "aye"], "A", ["A", "aye"]],
|
10
|
-
[["A" => "aye"], "B", nil],
|
11
|
-
[["A" => "aye"], nil, nil],
|
12
|
-
[["A" => "aye", "B" => "bee", nil => "NIL"], "A", ["A", "aye"]],
|
13
|
-
[["A" => "aye", "B" => "bee", nil => "NIL"], "B", ["B", "bee"]],
|
14
|
-
[["A" => "aye", "B" => "bee", nil => "NIL"], nil, [nil, "NIL"]],
|
15
|
-
[["A" => "aye", "B" => "bee", nil => "NIL"], "C", nil],
|
16
|
-
].each do |values, key, expected|
|
17
|
-
describe "on #{values.inspect}" do
|
18
|
-
let(:hash) { H[*values] }
|
19
|
-
|
20
|
-
describe "with a block" do
|
21
|
-
it "returns #{expected.inspect}" do
|
22
|
-
hash.send(method) { |k, v| k == key }.should == expected
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "without a block" do
|
27
|
-
it "returns an Enumerator" do
|
28
|
-
result = hash.send(method)
|
29
|
-
result.class.should be(Enumerator)
|
30
|
-
result.each { |k,v| k == key }.should == expected
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it "stops iterating when the block returns true" do
|
37
|
-
yielded = []
|
38
|
-
H[a: 1, b: 2].find { |k,v| yielded << k; true }
|
39
|
-
yielded.size.should == 1
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
5
|
-
|
6
|
-
describe "#flat_map" do
|
7
|
-
it "yields each key/val pair" do
|
8
|
-
passed = []
|
9
|
-
hash.flat_map { |pair| passed << pair }
|
10
|
-
passed.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns the concatenation of block return values" do
|
14
|
-
hash.flat_map { |k,v| [k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
|
15
|
-
hash.flat_map { |k,v| L[k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
|
16
|
-
hash.flat_map { |k,v| V[k,v] }.sort.should == ['A', 'B', 'C', 'aye', 'bee', 'see']
|
17
|
-
end
|
18
|
-
|
19
|
-
it "doesn't change the receiver" do
|
20
|
-
hash.flat_map { |k,v| [k,v] }
|
21
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with no block" do
|
25
|
-
it "returns an Enumerator" do
|
26
|
-
hash.flat_map.class.should be(Enumerator)
|
27
|
-
hash.flat_map.each { |k,v| [k] }.sort.should == ['A', 'B', 'C']
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns an empty array if only empty arrays are returned by block" do
|
32
|
-
hash.flat_map { [] }.should eql([])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#flatten" do
|
5
|
-
context "with flatten depth of zero" do
|
6
|
-
it "returns a vector of keys/value" do
|
7
|
-
hash = H[a: 1, b: 2]
|
8
|
-
hash.flatten(0).sort.should eql(V[[:a, 1], [:b, 2]])
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "without array keys or values" do
|
13
|
-
it "returns a vector of keys and values" do
|
14
|
-
hash = H[a: 1, b: 2, c: 3]
|
15
|
-
possibilities = [[:a, 1, :b, 2, :c, 3],
|
16
|
-
[:a, 1, :c, 3, :b, 2],
|
17
|
-
[:b, 2, :a, 1, :c, 3],
|
18
|
-
[:b, 2, :c, 3, :a, 1],
|
19
|
-
[:c, 3, :a, 1, :b, 2],
|
20
|
-
[:c, 3, :b, 2, :a, 1]]
|
21
|
-
possibilities.include?(hash.flatten).should == true
|
22
|
-
possibilities.include?(hash.flatten(1)).should == true
|
23
|
-
possibilities.include?(hash.flatten(2)).should == true
|
24
|
-
hash.flatten(2).class.should be(Immutable::Vector)
|
25
|
-
possibilities.include?(hash.flatten(10)).should == true
|
26
|
-
end
|
27
|
-
|
28
|
-
it "doesn't modify the receiver" do
|
29
|
-
hash = H[a: 1, b: 2, c: 3]
|
30
|
-
hash.flatten(1)
|
31
|
-
hash.flatten(2)
|
32
|
-
hash.should eql(H[a: 1, b: 2, c: 3])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "on an empty Hash" do
|
37
|
-
it "returns an empty Vector" do
|
38
|
-
H.empty.flatten.should eql(V.empty)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context "with array keys" do
|
43
|
-
it "flattens array keys into returned vector if flatten depth is sufficient" do
|
44
|
-
hash = H[[1, 2] => 3, [4, 5] => 6]
|
45
|
-
[[[1, 2], 3, [4, 5], 6], [[4, 5], 6, [1, 2], 3]].include?(hash.flatten(1)).should == true
|
46
|
-
[[[1, 2], 3, [4, 5], 6], [[4, 5], 6, [1, 2], 3]].include?(hash.flatten).should == true
|
47
|
-
hash.flatten(1).class.should be(Immutable::Vector)
|
48
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|
49
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(3)).should == true
|
50
|
-
end
|
51
|
-
|
52
|
-
it "doesn't modify the receiver (or its contents)" do
|
53
|
-
hash = H[[1, 2] => 3, [4, 5] => 6]
|
54
|
-
hash.flatten(1)
|
55
|
-
hash.flatten(2)
|
56
|
-
hash.should eql(H[[1, 2] => 3, [4, 5] => 6])
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "with array values" do
|
61
|
-
it "flattens array values into returned vector if flatten depth is sufficient" do
|
62
|
-
hash = H[1 => [2, 3], 4 => [5, 6]]
|
63
|
-
[[1, [2, 3], 4, [5, 6]], [4, [5, 6], 1, [2, 3]]].include?(hash.flatten(1)).should == true
|
64
|
-
[[1, [2, 3], 4, [5, 6]], [4, [5, 6], 1, [2, 3]]].include?(hash.flatten).should == true
|
65
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|
66
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(3)).should == true
|
67
|
-
hash.flatten(3).class.should be(Immutable::Vector)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "doesn't modify the receiver (or its contents)" do
|
71
|
-
hash = H[1 => [2, 3], 4 => [5, 6]]
|
72
|
-
hash.flatten(1)
|
73
|
-
hash.flatten(2)
|
74
|
-
hash.should eql(H[1 => [2, 3], 4 => [5, 6]])
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "with vector keys" do
|
79
|
-
it "flattens vector keys into returned vector if flatten depth is sufficient" do
|
80
|
-
hash = H[V[1, 2] => 3, V[4, 5] => 6]
|
81
|
-
[[V[1, 2], 3, V[4, 5], 6], [V[4, 5], 6, V[1, 2], 3]].include?(hash.flatten).should == true
|
82
|
-
[[V[1, 2], 3, V[4, 5], 6], [V[4, 5], 6, V[1, 2], 3]].include?(hash.flatten(1)).should == true
|
83
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|
84
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(3)).should == true
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context "with vector values" do
|
89
|
-
it "flattens vector values into returned vector if flatten depth is sufficient" do
|
90
|
-
hash = H[1 => V[2, 3], 4 => V[5, 6]]
|
91
|
-
[[1, V[2, 3], 4, V[5, 6]], [4, V[5, 6], 1, V[2, 3]]].include?(hash.flatten(1)).should == true
|
92
|
-
[[1, V[2, 3], 4, V[5, 6]], [4, V[5, 6], 1, V[2, 3]]].include?(hash.flatten).should == true
|
93
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(2)).should == true
|
94
|
-
[[1, 2, 3, 4, 5, 6], [4, 5, 6, 1, 2, 3]].include?(hash.flatten(3)).should == true
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:get, :[]].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
context "with a default block" do
|
7
|
-
let(:hash) { H.new("A" => "aye") { |key| fail }}
|
8
|
-
|
9
|
-
context "when the key exists" do
|
10
|
-
it "returns the value associated with the key" do
|
11
|
-
hash.send(method, "A").should == "aye"
|
12
|
-
end
|
13
|
-
|
14
|
-
it "does not call the default block even if the key is 'nil'" do
|
15
|
-
H.new(nil => 'something') { fail }.send(method, nil)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when the key does not exist" do
|
20
|
-
let(:hash) do
|
21
|
-
H.new("A" => "aye") do |key|
|
22
|
-
expect(key).to eq("B")
|
23
|
-
"bee"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
it "returns the value from the default block" do
|
28
|
-
hash.send(method, "B").should == "bee"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "with no default block" do
|
34
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
|
35
|
-
|
36
|
-
[
|
37
|
-
%w[A aye],
|
38
|
-
%w[B bee],
|
39
|
-
%w[C see],
|
40
|
-
[nil, "NIL"]
|
41
|
-
].each do |key, value|
|
42
|
-
it "returns the value (#{value.inspect}) for an existing key (#{key.inspect})" do
|
43
|
-
hash.send(method, key).should == value
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
it "returns nil for a non-existing key" do
|
48
|
-
hash.send(method, "D").should be_nil
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it "uses #hash to look up keys" do
|
53
|
-
x = double('0')
|
54
|
-
x.should_receive(:hash).and_return(0)
|
55
|
-
H[foo: :bar].send(method, x).should be_nil
|
56
|
-
end
|
57
|
-
|
58
|
-
it "uses #eql? to compare keys with the same hash code" do
|
59
|
-
x = double('x', hash: 42)
|
60
|
-
x.should_not_receive(:eql?)
|
61
|
-
|
62
|
-
y = double('y', hash: 42)
|
63
|
-
y.should_receive(:eql?).and_return(true)
|
64
|
-
|
65
|
-
H[y => 1][x].should == 1
|
66
|
-
end
|
67
|
-
|
68
|
-
it "does not use #eql? to compare keys with different hash codes" do
|
69
|
-
x = double('x', hash: 0)
|
70
|
-
x.should_not_receive(:eql?)
|
71
|
-
|
72
|
-
y = double('y', hash: 1)
|
73
|
-
y.should_not_receive(:eql?)
|
74
|
-
|
75
|
-
H[y => 1][x].should be_nil
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:key?, :has_key?, :include?, :member?].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL", 2.0 => "two"] }
|
7
|
-
|
8
|
-
["A", "B", "C", nil, 2.0].each do |key|
|
9
|
-
it "returns true for an existing key (#{key.inspect})" do
|
10
|
-
hash.send(method, key).should == true
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
it "returns false for a non-existing key" do
|
15
|
-
hash.send(method, "D").should == false
|
16
|
-
end
|
17
|
-
|
18
|
-
it "uses #eql? for equality" do
|
19
|
-
hash.send(method, 2).should == false
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns true if the key is found and maps to nil" do
|
23
|
-
H["A" => nil].send(method, "A").should == true
|
24
|
-
end
|
25
|
-
|
26
|
-
it "returns true if the key is found and maps to false" do
|
27
|
-
H["A" => false].send(method, "A").should == true
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H[toast: 'buttered', jam: 'strawberry'] }
|
5
|
-
|
6
|
-
[:value?, :has_value?].each do |method|
|
7
|
-
describe "##{method}" do
|
8
|
-
it "returns true if any key/val pair in Hash has the same value" do
|
9
|
-
hash.send(method, 'strawberry').should == true
|
10
|
-
end
|
11
|
-
|
12
|
-
it "returns false if no key/val pair in Hash has the same value" do
|
13
|
-
hash.send(method, 'marmalade').should == false
|
14
|
-
end
|
15
|
-
|
16
|
-
it "uses #== to check equality" do
|
17
|
-
H[a: EqualNotEql.new].send(method, EqualNotEql.new).should == true
|
18
|
-
H[a: EqlNotEqual.new].send(method, EqlNotEqual.new).should == false
|
19
|
-
end
|
20
|
-
|
21
|
-
it "works on a large hash" do
|
22
|
-
large = H.new((1..1000).zip(2..1001))
|
23
|
-
[2, 100, 200, 500, 900, 1000, 1001].each { |n| large.value?(n).should == true }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#hash" do
|
5
|
-
it "values are sufficiently distributed" do
|
6
|
-
(1..4000).each_slice(4).map { |ka, va, kb, vb| H[ka => va, kb => vb].hash }.uniq.size.should == 1000
|
7
|
-
end
|
8
|
-
|
9
|
-
it "differs given the same keys and different values" do
|
10
|
-
H["ka" => "va"].hash.should_not == H["ka" => "vb"].hash
|
11
|
-
end
|
12
|
-
|
13
|
-
it "differs given the same values and different keys" do
|
14
|
-
H["ka" => "va"].hash.should_not == H["kb" => "va"].hash
|
15
|
-
end
|
16
|
-
|
17
|
-
it "generates the same hash value for a hash regardless of the order things were added to it" do
|
18
|
-
key1 = DeterministicHash.new('abc', 1)
|
19
|
-
key2 = DeterministicHash.new('xyz', 1)
|
20
|
-
H.empty.put(key1, nil).put(key2, nil).hash.should == H.empty.put(key2, nil).put(key1, nil).hash
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "on an empty hash" do
|
24
|
-
it "returns 0" do
|
25
|
-
H.empty.hash.should == 0
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#inspect" do
|
5
|
-
[
|
6
|
-
[[], 'Immutable::Hash[]'],
|
7
|
-
[["A" => "aye"], 'Immutable::Hash["A" => "aye"]'],
|
8
|
-
[[DeterministicHash.new("A", 1) => "aye", DeterministicHash.new("B", 2) => "bee", DeterministicHash.new("C", 3) => "see"], 'Immutable::Hash["A" => "aye", "B" => "bee", "C" => "see"]']
|
9
|
-
].each do |values, expected|
|
10
|
-
describe "on #{values.inspect}" do
|
11
|
-
it "returns #{expected.inspect}" do
|
12
|
-
H[*values].inspect.should == expected
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
[
|
18
|
-
{},
|
19
|
-
{"A" => "aye"},
|
20
|
-
{a: "aye", b: "bee", c: "see"}
|
21
|
-
].each do |values|
|
22
|
-
describe "on #{values.inspect}" do
|
23
|
-
it "returns a string which can be eval'd to get an equivalent object" do
|
24
|
-
original = H.new(values)
|
25
|
-
eval(original.inspect).should eql(original)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#invert" do
|
5
|
-
let(:hash) { H[a: 3, b: 2, c: 1] }
|
6
|
-
|
7
|
-
it "uses the existing keys as values and values as keys" do
|
8
|
-
hash.invert.should eql(H[3 => :a, 2 => :b, 1 => :c])
|
9
|
-
end
|
10
|
-
|
11
|
-
it "will select one key/value pair among multiple which have same value" do
|
12
|
-
[H[1 => :a],
|
13
|
-
H[1 => :b],
|
14
|
-
H[1 => :c]].include?(H[a: 1, b: 1, c: 1].invert).should == true
|
15
|
-
end
|
16
|
-
|
17
|
-
it "doesn't change the original Hash" do
|
18
|
-
hash.invert
|
19
|
-
hash.should eql(H[a: 3, b: 2, c: 1])
|
20
|
-
end
|
21
|
-
|
22
|
-
context "from a subclass of Hash" do
|
23
|
-
it "returns an instance of the subclass" do
|
24
|
-
subclass = Class.new(Immutable::Hash)
|
25
|
-
instance = subclass.new(a: 1, b: 2)
|
26
|
-
instance.invert.class.should be(subclass)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#key" do
|
5
|
-
let(:hash) { H[a: 1, b: 1, c: 2, d: 3] }
|
6
|
-
|
7
|
-
it "returns a key associated with the given value, if there is one" do
|
8
|
-
[:a, :b].include?(hash.key(1)).should == true
|
9
|
-
hash.key(2).should be(:c)
|
10
|
-
hash.key(3).should be(:d)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns nil if there is no key associated with the given value" do
|
14
|
-
hash.key(5).should be_nil
|
15
|
-
hash.key(0).should be_nil
|
16
|
-
end
|
17
|
-
|
18
|
-
it "uses #== to compare values for equality" do
|
19
|
-
hash.key(EqualNotEql.new).should_not be_nil
|
20
|
-
hash.key(EqlNotEqual.new).should be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it "doesn't use default block if value is not found" do
|
24
|
-
H.new(a: 1) { fail }.key(2).should be_nil
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#keys" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
|
7
|
-
it "returns the keys as a set" do
|
8
|
-
hash.keys.should eql(S["A", "B", "C"])
|
9
|
-
end
|
10
|
-
|
11
|
-
it "returns frozen String keys" do
|
12
|
-
hash.keys.each { |s| s.should be_frozen }
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|