immutable-ruby 0.0.4 → 0.2.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.rb +3067 -0
- 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 +4 -941
- data/lib/immutable/list.rb +36 -36
- data/lib/immutable/nested.rb +8 -8
- data/lib/immutable/set.rb +3 -583
- data/lib/immutable/sorted_set.rb +29 -27
- data/lib/immutable/trie.rb +2 -2
- data/lib/immutable/vector.rb +3 -1549
- data/lib/immutable/version.rb +1 -1
- data/lib/immutable.rb +9 -9
- metadata +34 -696
- 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,45 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:map, :collect].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
context "when empty" do
|
7
|
-
it "returns self" do
|
8
|
-
H.empty.send(method) {}.should equal(H.empty)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "when not empty" do
|
13
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
14
|
-
|
15
|
-
context "with a block" do
|
16
|
-
let(:mapped) { hash.send(method) { |key, value| [key.downcase, value.upcase] }}
|
17
|
-
|
18
|
-
it "preserves the original values" do
|
19
|
-
mapped
|
20
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns a new hash with the mapped values" do
|
24
|
-
mapped.should eql(H["a" => "AYE", "b" => "BEE", "c" => "SEE"])
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "with no block" do
|
29
|
-
it "returns an Enumerator" do
|
30
|
-
hash.send(method).class.should be(Enumerator)
|
31
|
-
hash.send(method).each { |k,v| [k.downcase, v] }.should == hash.map { |k,v| [k.downcase, v] }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "from a subclass" do
|
37
|
-
it "returns an instance of the subclass" do
|
38
|
-
subclass = Class.new(Immutable::Hash)
|
39
|
-
instance = subclass.new('a' => 'aye', 'b' => 'bee')
|
40
|
-
instance.map { |k,v| [k, v.upcase] }.class.should be(subclass)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#marshal_dump/#marshal_load" do
|
5
|
-
let(:ruby) do
|
6
|
-
File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
|
7
|
-
end
|
8
|
-
let(:child_cmd) do
|
9
|
-
%Q|#{ruby} -I lib -r immutable -e 'dict = Immutable::Hash[existing_key: 42, other_thing: "data"]; $stdout.write(Marshal.dump(dict))'|
|
10
|
-
end
|
11
|
-
|
12
|
-
let(:reloaded_hash) do
|
13
|
-
IO.popen(child_cmd, "r+") do |child|
|
14
|
-
reloaded_hash = Marshal.load(child)
|
15
|
-
child.close
|
16
|
-
reloaded_hash
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it "can survive dumping and loading into a new process" do
|
21
|
-
expect(reloaded_hash).to eql(H[existing_key: 42, other_thing: "data"])
|
22
|
-
end
|
23
|
-
|
24
|
-
it "is still possible to find items by key after loading" do
|
25
|
-
expect(reloaded_hash[:existing_key]).to eq(42)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#merge" do
|
5
|
-
[
|
6
|
-
[{}, {}, {}],
|
7
|
-
[{"A" => "aye"}, {}, {"A" => "aye"}],
|
8
|
-
[{"A" => "aye"}, {"A" => "bee"}, {"A" => "bee"}],
|
9
|
-
[{"A" => "aye"}, {"B" => "bee"}, {"A" => "aye", "B" => "bee"}],
|
10
|
-
[(1..300).zip(1..300), (150..450).zip(150..450), (1..450).zip(1..450)]
|
11
|
-
].each do |a, b, expected|
|
12
|
-
context "for #{a.inspect} and #{b.inspect}" do
|
13
|
-
let(:hash_a) { H[a] }
|
14
|
-
let(:hash_b) { H[b] }
|
15
|
-
let(:result) { hash_a.merge(hash_b) }
|
16
|
-
|
17
|
-
it "returns #{expected.inspect} when passed an Immutable::Hash" do
|
18
|
-
result.should eql(H[expected])
|
19
|
-
end
|
20
|
-
|
21
|
-
it "returns #{expected.inspect} when passed a Ruby Hash" do
|
22
|
-
H[a].merge(::Hash[b]).should eql(H[expected])
|
23
|
-
end
|
24
|
-
|
25
|
-
it "doesn't change the original Hashes" do
|
26
|
-
result
|
27
|
-
hash_a.should eql(H[a])
|
28
|
-
hash_b.should eql(H[b])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "when merging with an empty Hash" do
|
34
|
-
it "returns self" do
|
35
|
-
hash = H[a: 1, b: 2]
|
36
|
-
hash.merge(H.empty).should be(hash)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "when merging with subset Hash" do
|
41
|
-
it "returns self" do
|
42
|
-
big_hash = H[(1..300).zip(1..300)]
|
43
|
-
small_hash = H[(1..200).zip(1..200)]
|
44
|
-
big_hash.merge(small_hash).should be(big_hash)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "when called on a subclass" do
|
49
|
-
it "returns an instance of the subclass" do
|
50
|
-
subclass = Class.new(Immutable::Hash)
|
51
|
-
instance = subclass.new(a: 1, b: 2)
|
52
|
-
instance.merge(c: 3, d: 4).class.should be(subclass)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
it "sets any duplicate key to the value of block if passed a block" do
|
57
|
-
h1 = H[a: 2, b: 1, d: 5]
|
58
|
-
h2 = H[a: -2, b: 4, c: -3]
|
59
|
-
r = h1.merge(h2) { |k,x,y| nil }
|
60
|
-
r.should eql(H[a: nil, b: nil, c: -3, d: 5])
|
61
|
-
|
62
|
-
r = h1.merge(h2) { |k,x,y| "#{k}:#{x+2*y}" }
|
63
|
-
r.should eql(H[a: "a:-2", b: "b:9", c: -3, d: 5])
|
64
|
-
|
65
|
-
lambda {
|
66
|
-
h1.merge(h2) { |k, x, y| raise(IndexError) }
|
67
|
-
}.should raise_error(IndexError)
|
68
|
-
|
69
|
-
r = h1.merge(h1) { |k,x,y| :x }
|
70
|
-
r.should eql(H[a: :x, b: :x, d: :x])
|
71
|
-
end
|
72
|
-
|
73
|
-
it "yields key/value pairs in the same order as #each" do
|
74
|
-
hash = H[a: 1, b: 2, c: 3]
|
75
|
-
each_pairs = []
|
76
|
-
merge_pairs = []
|
77
|
-
hash.each { |k, v| each_pairs << [k, v] }
|
78
|
-
hash.merge(hash) { |k, v1, v2| merge_pairs << [k, v1] }
|
79
|
-
each_pairs.should == merge_pairs
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H["a" => 3, "b" => 2, "c" => 1] }
|
5
|
-
|
6
|
-
describe "#min" do
|
7
|
-
it "returns the smallest key/val pair" do
|
8
|
-
hash.min.should == ["a", 3]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "#max" do
|
13
|
-
it "returns the largest key/val pair" do
|
14
|
-
hash.max.should == ["c", 1]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#min_by" do
|
19
|
-
it "returns the smallest key/val pair (after passing it through a key function)" do
|
20
|
-
hash.min_by { |k,v| v }.should == ["c", 1]
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns the first key/val pair yielded by #each in case of a tie" do
|
24
|
-
hash.min_by { 0 }.should == hash.each.first
|
25
|
-
end
|
26
|
-
|
27
|
-
it "returns nil if the hash is empty" do
|
28
|
-
H.empty.min_by { |k,v| v }.should be_nil
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "#max_by" do
|
33
|
-
it "returns the largest key/val pair (after passing it through a key function)" do
|
34
|
-
hash.max_by { |k,v| v }.should == ["a", 3]
|
35
|
-
end
|
36
|
-
|
37
|
-
it "returns the first key/val pair yielded by #each in case of a tie" do
|
38
|
-
hash.max_by { 0 }.should == hash.each.first
|
39
|
-
end
|
40
|
-
|
41
|
-
it "returns nil if the hash is empty" do
|
42
|
-
H.empty.max_by { |k,v| v }.should be_nil
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe ".new" do
|
5
|
-
it "is amenable to overriding of #initialize" do
|
6
|
-
class SnazzyHash < Immutable::Hash
|
7
|
-
def initialize
|
8
|
-
super({'snazzy?' => 'oh yeah'})
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
SnazzyHash.new['snazzy?'].should == 'oh yeah'
|
13
|
-
end
|
14
|
-
|
15
|
-
context "from a subclass" do
|
16
|
-
it "returns a frozen instance of the subclass" do
|
17
|
-
subclass = Class.new(Immutable::Hash)
|
18
|
-
instance = subclass.new("some" => "values")
|
19
|
-
instance.class.should be(subclass)
|
20
|
-
instance.frozen?.should be true
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
it "accepts an array as initializer" do
|
25
|
-
H.new([['a', 'b'], ['c', 'd']]).should eql(H['a' => 'b', 'c' => 'd'])
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns a Hash which doesn't change even if initializer is mutated" do
|
29
|
-
rbhash = {a: 1, b: 2}
|
30
|
-
hash = H.new(rbhash)
|
31
|
-
rbhash[:a] = 'BAD'
|
32
|
-
hash.should eql(H[a: 1, b: 2])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe ".[]" do
|
37
|
-
it "accepts a Ruby Hash as initializer" do
|
38
|
-
hash = H[a: 1, b: 2]
|
39
|
-
hash.class.should be(Immutable::Hash)
|
40
|
-
hash.size.should == 2
|
41
|
-
hash.key?(:a).should == true
|
42
|
-
hash.key?(:b).should == true
|
43
|
-
end
|
44
|
-
|
45
|
-
it "accepts a Immutable::Hash as initializer" do
|
46
|
-
hash = H[H.new(a: 1, b: 2)]
|
47
|
-
hash.class.should be(Immutable::Hash)
|
48
|
-
hash.size.should == 2
|
49
|
-
hash.key?(:a).should == true
|
50
|
-
hash.key?(:b).should == true
|
51
|
-
end
|
52
|
-
|
53
|
-
it "accepts an array as initializer" do
|
54
|
-
hash = H[[[:a, 1], [:b, 2]]]
|
55
|
-
hash.class.should be(Immutable::Hash)
|
56
|
-
hash.size.should == 2
|
57
|
-
hash.key?(:a).should == true
|
58
|
-
hash.key?(:b).should == true
|
59
|
-
end
|
60
|
-
|
61
|
-
it "can be used with a subclass of Immutable::Hash" do
|
62
|
-
subclass = Class.new(Immutable::Hash)
|
63
|
-
instance = subclass[a: 1, b: 2]
|
64
|
-
instance.class.should be(subclass)
|
65
|
-
instance.size.should == 2
|
66
|
-
instance.key?(:a).should == true
|
67
|
-
instance.key?(:b).should == true
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#none?" do
|
5
|
-
context "when empty" do
|
6
|
-
it "with a block returns true" do
|
7
|
-
H.empty.none? {}.should == true
|
8
|
-
end
|
9
|
-
|
10
|
-
it "with no block returns true" do
|
11
|
-
H.empty.none?.should == true
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "when not empty" do
|
16
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"] }
|
17
|
-
|
18
|
-
context "with a block" do
|
19
|
-
[
|
20
|
-
%w[A aye],
|
21
|
-
%w[B bee],
|
22
|
-
%w[C see],
|
23
|
-
[nil, "NIL"],
|
24
|
-
].each do |pair|
|
25
|
-
it "returns false if the block ever returns true (#{pair.inspect})" do
|
26
|
-
hash.none? { |key, value| key == pair.first && value == pair.last }.should == false
|
27
|
-
end
|
28
|
-
|
29
|
-
it "returns true if the block always returns false" do
|
30
|
-
hash.none? { |key, value| key == "D" && value == "dee" }.should == true
|
31
|
-
end
|
32
|
-
|
33
|
-
it "stops iterating as soon as the block returns true" do
|
34
|
-
yielded = []
|
35
|
-
hash.none? { |k,v| yielded << k; true }
|
36
|
-
yielded.size.should == 1
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with no block" do
|
42
|
-
it "returns false" do
|
43
|
-
hash.none?.should == false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H["a" => 1, "b" => 2, "c" => 3, "d" => 4] }
|
5
|
-
let(:partition) { hash.partition { |k,v| v % 2 == 0 }}
|
6
|
-
|
7
|
-
describe "#partition" do
|
8
|
-
it "returns a pair of Immutable::Hashes" do
|
9
|
-
partition.each { |h| h.class.should be(Immutable::Hash) }
|
10
|
-
partition.should be_frozen
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns key/val pairs for which predicate is true in first Hash" do
|
14
|
-
partition[0].should == {"b" => 2, "d" => 4}
|
15
|
-
end
|
16
|
-
|
17
|
-
it "returns key/val pairs for which predicate is false in second Hash" do
|
18
|
-
partition[1].should == {"a" => 1, "c" => 3}
|
19
|
-
end
|
20
|
-
|
21
|
-
it "doesn't modify the original Hash" do
|
22
|
-
partition
|
23
|
-
hash.should eql(H["a" => 1, "b" => 2, "c" => 3, "d" => 4])
|
24
|
-
end
|
25
|
-
|
26
|
-
context "from a subclass" do
|
27
|
-
it "should return instances of the subclass" do
|
28
|
-
subclass = Class.new(Immutable::Hash)
|
29
|
-
instance = subclass.new("a" => 1, "b" => 2, "c" => 3, "d" => 4)
|
30
|
-
partition = instance.partition { |k,v| v % 2 == 0 }
|
31
|
-
partition.each { |h| h.class.should be(subclass) }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "pp"
|
3
|
-
require "stringio"
|
4
|
-
|
5
|
-
describe Immutable::Hash do
|
6
|
-
describe "#pretty_print" do
|
7
|
-
let(:hash) { Immutable::Hash.new(DeterministicHash.new(1,1) => "tin", DeterministicHash.new(2,2) => "earwax", DeterministicHash.new(3,3) => "neanderthal") }
|
8
|
-
let(:stringio) { StringIO.new }
|
9
|
-
|
10
|
-
|
11
|
-
it "prints the whole Hash on one line if it fits" do
|
12
|
-
PP.pp(hash, stringio, 80)
|
13
|
-
stringio.string.chomp.should == 'Immutable::Hash[1 => "tin", 2 => "earwax", 3 => "neanderthal"]'
|
14
|
-
end
|
15
|
-
|
16
|
-
it "prints each key/val pair on its own line, if not" do
|
17
|
-
PP.pp(hash, stringio, 20)
|
18
|
-
stringio.string.chomp.should == 'Immutable::Hash[
|
19
|
-
1 => "tin",
|
20
|
-
2 => "earwax",
|
21
|
-
3 => "neanderthal"]'
|
22
|
-
end
|
23
|
-
|
24
|
-
it "prints keys and vals on separate lines, if space is very tight" do
|
25
|
-
PP.pp(hash, stringio, 15)
|
26
|
-
# the trailing space after "3 =>" below is needed, don't remove it
|
27
|
-
stringio.string.chomp.should == 'Immutable::Hash[
|
28
|
-
1 => "tin",
|
29
|
-
2 => "earwax",
|
30
|
-
3 =>
|
31
|
-
"neanderthal"]'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#[]=" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
|
7
|
-
it 'raises error pointing to #put' do
|
8
|
-
expect { hash[:A] = 'aye' }
|
9
|
-
.to raise_error(NoMethodError, /Immutable::Hash.*`put'/)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#put" do
|
14
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
15
|
-
|
16
|
-
context "with a block" do
|
17
|
-
it "passes the value to the block" do
|
18
|
-
hash.put("A") { |value| value.should == "aye" }
|
19
|
-
end
|
20
|
-
|
21
|
-
it "replaces the value with the result of the block" do
|
22
|
-
result = hash.put("A") { |value| "FLIBBLE" }
|
23
|
-
result.get("A").should == "FLIBBLE"
|
24
|
-
end
|
25
|
-
|
26
|
-
it "supports to_proc methods" do
|
27
|
-
result = hash.put("A", &:upcase)
|
28
|
-
result.get("A").should == "AYE"
|
29
|
-
end
|
30
|
-
|
31
|
-
context "if there is no existing association" do
|
32
|
-
it "passes nil to the block" do
|
33
|
-
hash.put("D") { |value| value.should be_nil }
|
34
|
-
end
|
35
|
-
|
36
|
-
it "stores the result of the block as the new value" do
|
37
|
-
result = hash.put("D") { |value| "FLIBBLE" }
|
38
|
-
result.get("D").should == "FLIBBLE"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context "with a unique key" do
|
44
|
-
let(:result) { hash.put("D", "dee") }
|
45
|
-
|
46
|
-
it "preserves the original" do
|
47
|
-
result
|
48
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
49
|
-
end
|
50
|
-
|
51
|
-
it "returns a copy with the superset of key/value pairs" do
|
52
|
-
result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context "with a duplicate key" do
|
57
|
-
let(:result) { hash.put("C", "sea") }
|
58
|
-
|
59
|
-
it "preserves the original" do
|
60
|
-
result
|
61
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
62
|
-
end
|
63
|
-
|
64
|
-
it "returns a copy with the superset of key/value pairs" do
|
65
|
-
result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context "with duplicate key and identical value" do
|
70
|
-
let(:hash) { H["X" => 1, "Y" => 2] }
|
71
|
-
let(:result) { hash.put("X", 1) }
|
72
|
-
|
73
|
-
it "returns the original hash unmodified" do
|
74
|
-
result.should be(hash)
|
75
|
-
end
|
76
|
-
|
77
|
-
context "with big hash (force nested tries)" do
|
78
|
-
let(:keys) { (0..99).map(&:to_s) }
|
79
|
-
let(:values) { (100..199).to_a }
|
80
|
-
let(:hash) { H[keys.zip(values)] }
|
81
|
-
|
82
|
-
it "returns the original hash unmodified for all changes" do
|
83
|
-
keys.each_with_index do |key, index|
|
84
|
-
result = hash.put(key, values[index])
|
85
|
-
result.should be(hash)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
context "with unequal keys which hash to the same value" do
|
92
|
-
let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
|
93
|
-
|
94
|
-
it "stores and can retrieve both" do
|
95
|
-
result = hash.put(DeterministicHash.new('b', 1), 'bee')
|
96
|
-
result.get(DeterministicHash.new('a', 1)).should eql('aye')
|
97
|
-
result.get(DeterministicHash.new('b', 1)).should eql('bee')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
context "when a String is inserted as key and then mutated" do
|
102
|
-
it "is not affected" do
|
103
|
-
string = "a string!"
|
104
|
-
hash = H.empty.put(string, 'a value!')
|
105
|
-
string.upcase!
|
106
|
-
hash['a string!'].should == 'a value!'
|
107
|
-
hash['A STRING!'].should be_nil
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:reduce, :inject].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
context "when empty" do
|
7
|
-
it "returns the memo" do
|
8
|
-
H.empty.send(method, "ABC") {}.should == "ABC"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "when not empty" do
|
13
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
14
|
-
|
15
|
-
context "with a block" do
|
16
|
-
it "returns the final memo" do
|
17
|
-
hash.send(method, 0) { |memo, key, value| memo + 1 }.should == 3
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "with no block" do
|
22
|
-
let(:hash) { H[a: 1, b: 2] }
|
23
|
-
|
24
|
-
it "uses a passed string as the name of a method to use instead" do
|
25
|
-
[[:a, 1, :b, 2], [:b, 2, :a, 1]].include?(hash.send(method, "+")).should == true
|
26
|
-
end
|
27
|
-
|
28
|
-
it "uses a passed symbol as the name of a method to use instead" do
|
29
|
-
[[:a, 1, :b, 2], [:b, 2, :a, 1]].include?(hash.send(method, :+)).should == true
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:reject, :delete_if].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
7
|
-
|
8
|
-
context "when nothing matches" do
|
9
|
-
it "returns self" do
|
10
|
-
hash.send(method) { |key, value| false }.should equal(hash)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "when only some things match" do
|
15
|
-
context "with a block" do
|
16
|
-
let(:result) { hash.send(method) { |key, value| key == "A" && value == "aye" }}
|
17
|
-
|
18
|
-
it "preserves the original" do
|
19
|
-
result
|
20
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns a set with the matching values" do
|
24
|
-
result.should eql(H["B" => "bee", "C" => "see"])
|
25
|
-
end
|
26
|
-
|
27
|
-
it "yields entries in the same order as #each" do
|
28
|
-
each_pairs = []
|
29
|
-
remove_pairs = []
|
30
|
-
hash.each_pair { |k,v| each_pairs << [k,v] }
|
31
|
-
hash.send(method) { |k,v| remove_pairs << [k,v] }
|
32
|
-
each_pairs.should == remove_pairs
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "with no block" do
|
37
|
-
it "returns an Enumerator" do
|
38
|
-
hash.send(method).class.should be(Enumerator)
|
39
|
-
hash.send(method).to_a.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
40
|
-
hash.send(method).each { true }.should eql(H.empty)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "on a large hash, with many combinations of input" do
|
45
|
-
it "still works" do
|
46
|
-
array = 1000.times.collect { |n| [n, n] }
|
47
|
-
hash = H.new(array)
|
48
|
-
[0, 10, 100, 200, 500, 800, 900, 999, 1000].each do |threshold|
|
49
|
-
result = hash.send(method) { |k,v| k >= threshold}
|
50
|
-
result.size.should == threshold
|
51
|
-
0.upto(threshold-1) { |n| result.key?(n).should == true }
|
52
|
-
threshold.upto(1000) { |n| result.key?(n).should == false }
|
53
|
-
end
|
54
|
-
# shouldn't have changed
|
55
|
-
hash.should eql(H.new(1000.times.collect { |n| [n, n] }))
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,27 +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 "#reverse_each" do
|
7
|
-
context "with a block" do
|
8
|
-
it "returns self" do
|
9
|
-
hash.reverse_each {}.should be(hash)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "yields all key/value pairs in the opposite order as #each" do
|
13
|
-
result = []
|
14
|
-
hash.reverse_each { |entry| result << entry }
|
15
|
-
result.should eql(hash.to_a.reverse)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "with no block" do
|
20
|
-
it "returns an Enumerator" do
|
21
|
-
result = hash.reverse_each
|
22
|
-
result.class.should be(Enumerator)
|
23
|
-
result.to_a.should eql(hash.to_a.reverse)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#sample" do
|
5
|
-
let(:hash) { Immutable::Hash.new((:a..:z).zip(1..26)) }
|
6
|
-
|
7
|
-
it "returns a randomly chosen item" do
|
8
|
-
chosen = 250.times.map { hash.sample }.sort.uniq
|
9
|
-
chosen.each { |item| hash.include?(item[0]).should == true }
|
10
|
-
hash.each { |item| chosen.include?(item).should == true }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|