immutable-ruby 0.0.1 → 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 +5 -5
- 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 +50 -15
- data/lib/immutable/enumerable.rb +19 -10
- data/lib/immutable/hash.rb +128 -28
- data/lib/immutable/list.rb +48 -48
- data/lib/immutable/nested.rb +10 -7
- data/lib/immutable/set.rb +30 -30
- data/lib/immutable/sorted_set.rb +77 -37
- data/lib/immutable/trie.rb +21 -29
- data/lib/immutable/vector.rb +61 -46
- data/lib/immutable/version.rb +1 -1
- data/lib/immutable.rb +9 -9
- metadata +44 -687
- 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/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/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 -69
- 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/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 -102
- 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/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/update_in_spec.rb +0 -79
- data/spec/lib/immutable/hash/values_at_spec.rb +0 -13
- 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 -33
- 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 -95
- data/spec/lib/immutable/set/add_spec.rb +0 -75
- 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/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 -59
- 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 -43
- 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 -71
- 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 -44
- 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 -27
- data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
- 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/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 -92
@@ -1,30 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Deque do
|
4
|
-
describe "#unshift" do
|
5
|
-
[
|
6
|
-
[[], "A", ["A"]],
|
7
|
-
[["A"], "B", %w[B A]],
|
8
|
-
[["A"], "A", %w[A A]],
|
9
|
-
[%w[A B C], "D", %w[D A B C]],
|
10
|
-
].each do |values, new_value, expected|
|
11
|
-
context "on #{values.inspect} with #{new_value.inspect}" do
|
12
|
-
let(:deque) { D[*values] }
|
13
|
-
|
14
|
-
it "preserves the original" do
|
15
|
-
deque.unshift(new_value)
|
16
|
-
deque.should eql(D[*values])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns #{expected.inspect}" do
|
20
|
-
deque.unshift(new_value).should eql(D[*expected])
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
it "returns a frozen instance" do
|
25
|
-
deque.unshift(new_value).should be_frozen
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H[values] }
|
5
|
-
|
6
|
-
describe "#all?" do
|
7
|
-
context "when empty" do
|
8
|
-
let(:values) { H.new }
|
9
|
-
|
10
|
-
context "without a block" do
|
11
|
-
it "returns true" do
|
12
|
-
hash.all?.should == true
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "with a block" do
|
17
|
-
it "returns true" do
|
18
|
-
hash.all? { false }.should == true
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when not empty" do
|
24
|
-
let(:values) { { "A" => 1, "B" => 2, "C" => 3 } }
|
25
|
-
|
26
|
-
context "without a block" do
|
27
|
-
it "returns true" do
|
28
|
-
hash.all?.should == true
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "with a block" do
|
33
|
-
it "returns true if the block always returns true" do
|
34
|
-
hash.all? { true }.should == true
|
35
|
-
end
|
36
|
-
|
37
|
-
it "returns false if the block ever returns false" do
|
38
|
-
hash.all? { |k,v| k != 'C' }.should == false
|
39
|
-
end
|
40
|
-
|
41
|
-
it "propagates an exception from the block" do
|
42
|
-
-> { hash.all? { |k,v| raise "help" } }.should raise_error(RuntimeError)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "stops iterating as soon as the block returns false" do
|
46
|
-
yielded = []
|
47
|
-
hash.all? { |k,v| yielded << k; false }
|
48
|
-
yielded.size.should == 1
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#any?" do
|
5
|
-
context "when empty" do
|
6
|
-
it "with a block returns false" do
|
7
|
-
H.empty.any? {}.should == false
|
8
|
-
end
|
9
|
-
|
10
|
-
it "with no block returns false" do
|
11
|
-
H.empty.any?.should == false
|
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
|
-
|
26
|
-
it "returns true if the block ever returns true (#{pair.inspect})" do
|
27
|
-
hash.any? { |key, value| key == pair.first && value == pair.last }.should == true
|
28
|
-
end
|
29
|
-
|
30
|
-
it "returns false if the block always returns false" do
|
31
|
-
hash.any? { |key, value| key == "D" && value == "dee" }.should == false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
it "propagates exceptions raised in the block" do
|
36
|
-
-> { hash.any? { |k,v| raise "help" } }.should raise_error(RuntimeError)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "stops iterating as soon as the block returns true" do
|
40
|
-
yielded = []
|
41
|
-
hash.any? { |k,v| yielded << k; true }
|
42
|
-
yielded.size.should == 1
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "with no block" do
|
47
|
-
it "returns true" do
|
48
|
-
hash.any?.should == true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,51 +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 "#assoc" do
|
7
|
-
it "searches for a key/val pair with a given key" do
|
8
|
-
hash.assoc(:a).should == [:a, 3]
|
9
|
-
hash.assoc(:b).should == [:b, 2]
|
10
|
-
hash.assoc(:c).should == [:c, 1]
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns nil if a matching key is not found" do
|
14
|
-
hash.assoc(:d).should be_nil
|
15
|
-
hash.assoc(nil).should be_nil
|
16
|
-
hash.assoc(0).should be_nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns nil even if there is a default" do
|
20
|
-
H.new(a: 1, b: 2) { fail }.assoc(:c).should be_nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it "uses #== to compare keys with provided object" do
|
24
|
-
hash.assoc(EqualNotEql.new).should_not be_nil
|
25
|
-
hash.assoc(EqlNotEqual.new).should be_nil
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#rassoc" do
|
30
|
-
it "searches for a key/val pair with a given value" do
|
31
|
-
hash.rassoc(1).should == [:c, 1]
|
32
|
-
hash.rassoc(2).should == [:b, 2]
|
33
|
-
hash.rassoc(3).should == [:a, 3]
|
34
|
-
end
|
35
|
-
|
36
|
-
it "returns nil if a matching value is not found" do
|
37
|
-
hash.rassoc(0).should be_nil
|
38
|
-
hash.rassoc(4).should be_nil
|
39
|
-
hash.rassoc(nil).should be_nil
|
40
|
-
end
|
41
|
-
|
42
|
-
it "returns nil even if there is a default" do
|
43
|
-
H.new(a: 1, b: 2) { fail }.rassoc(3).should be_nil
|
44
|
-
end
|
45
|
-
|
46
|
-
it "uses #== to compare values with provided object" do
|
47
|
-
hash.rassoc(EqualNotEql.new).should_not be_nil
|
48
|
-
hash.rassoc(EqlNotEqual.new).should be_nil
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#clear" do
|
5
|
-
[
|
6
|
-
[],
|
7
|
-
["A" => "aye"],
|
8
|
-
["A" => "aye", "B" => "bee", "C" => "see"],
|
9
|
-
].each do |values|
|
10
|
-
context "on #{values}" do
|
11
|
-
let(:original) { H[*values] }
|
12
|
-
let(:result) { original.clear }
|
13
|
-
|
14
|
-
it "preserves the original" do
|
15
|
-
result
|
16
|
-
original.should eql(H[*values])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns an empty hash" do
|
20
|
-
result.should equal(H.empty)
|
21
|
-
result.should be_empty
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
it "maintains the default Proc, if there is one" do
|
27
|
-
hash = H.new(a: 1) { 1 }
|
28
|
-
hash.clear[:b].should == 1
|
29
|
-
hash.clear[:c].should == 1
|
30
|
-
hash.clear.default_proc.should_not be_nil
|
31
|
-
end
|
32
|
-
|
33
|
-
context "on a subclass" do
|
34
|
-
it "returns an empty instance of the subclass" do
|
35
|
-
subclass = Class.new(Immutable::Hash)
|
36
|
-
instance = subclass.new(a: 1, b: 2)
|
37
|
-
instance.clear.class.should be(subclass)
|
38
|
-
instance.clear.should be_empty
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe ".hash" do
|
5
|
-
context "with nothing" do
|
6
|
-
it "returns the canonical empty hash" do
|
7
|
-
H.empty.should be_empty
|
8
|
-
H.empty.should equal(Immutable::EmptyHash)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
context "with an implicit hash" do
|
13
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
14
|
-
|
15
|
-
it "is equivalent to repeatedly using #put" do
|
16
|
-
hash.should eql(H.empty.put("A", "aye").put("B", "bee").put("C", "see"))
|
17
|
-
hash.size.should == 3
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "with an array of pairs" do
|
22
|
-
let(:hash) { H[[[:a, 1], [:b, 2]]] }
|
23
|
-
|
24
|
-
it "initializes a new Hash" do
|
25
|
-
hash.should eql(H[a: 1, b: 2])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "with an Immutable::Hash" do
|
30
|
-
let(:hash) { H[a: 1, b: 2] }
|
31
|
-
let(:other) { H[hash] }
|
32
|
-
|
33
|
-
it "initializes an equivalent Hash" do
|
34
|
-
hash.should eql(other)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
5
|
-
|
6
|
-
[:dup, :clone].each do |method|
|
7
|
-
describe "##{method}" do
|
8
|
-
it "returns self" do
|
9
|
-
hash.send(method).should equal(hash)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#default_proc" do
|
5
|
-
let(:hash) { H.new(1 => 2, 2 => 4) { |k| k * 2 } }
|
6
|
-
|
7
|
-
it "returns the default block given when the Hash was created" do
|
8
|
-
hash.default_proc.class.should be(Proc)
|
9
|
-
hash.default_proc.call(3).should == 6
|
10
|
-
end
|
11
|
-
|
12
|
-
it "returns nil if no default block was given" do
|
13
|
-
H.empty.default_proc.should be_nil
|
14
|
-
end
|
15
|
-
|
16
|
-
context "after a key/val pair are inserted" do
|
17
|
-
it "doesn't change" do
|
18
|
-
other = hash.put(3, 6)
|
19
|
-
other.default_proc.should be(hash.default_proc)
|
20
|
-
other.default_proc.call(4).should == 8
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "after all key/val pairs are filtered out" do
|
25
|
-
it "doesn't change" do
|
26
|
-
other = hash.reject { true }
|
27
|
-
other.default_proc.should be(hash.default_proc)
|
28
|
-
other.default_proc.call(4).should == 8
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "after Hash is inverted" do
|
33
|
-
it "doesn't change" do
|
34
|
-
other = hash.invert
|
35
|
-
other.default_proc.should be(hash.default_proc)
|
36
|
-
other.default_proc.call(4).should == 8
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "when a slice is taken" do
|
41
|
-
it "doesn't change" do
|
42
|
-
other = hash.slice(1)
|
43
|
-
other.default_proc.should be(hash.default_proc)
|
44
|
-
other.default_proc.call(5).should == 10
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "when keys are removed with #except" do
|
49
|
-
it "doesn't change" do
|
50
|
-
other = hash.except(1, 2)
|
51
|
-
other.default_proc.should be(hash.default_proc)
|
52
|
-
other.default_proc.call(5).should == 10
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context "when Hash is mapped" do
|
57
|
-
it "doesn't change" do
|
58
|
-
other = hash.map { |k,v| [k + 10, v] }
|
59
|
-
other.default_proc.should be(hash.default_proc)
|
60
|
-
other.default_proc.call(5).should == 10
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "when another Hash is merged in" do
|
65
|
-
it "doesn't change" do
|
66
|
-
other = hash.merge(3 => 6, 4 => 8)
|
67
|
-
other.default_proc.should be(hash.default_proc)
|
68
|
-
other.default_proc.call(5).should == 10
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#delete" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
|
7
|
-
context "with an existing key" do
|
8
|
-
let(:result) { hash.delete("B") }
|
9
|
-
|
10
|
-
it "preserves the original" do
|
11
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
12
|
-
end
|
13
|
-
|
14
|
-
it "returns a copy with the remaining key/value pairs" do
|
15
|
-
result.should eql(H["A" => "aye", "C" => "see"])
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "with a non-existing key" do
|
20
|
-
let(:result) { hash.delete("D") }
|
21
|
-
|
22
|
-
it "preserves the original values" do
|
23
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
24
|
-
end
|
25
|
-
|
26
|
-
it "returns self" do
|
27
|
-
result.should equal(hash)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "when removing the last key" do
|
32
|
-
context "from a Hash with no default block" do
|
33
|
-
it "returns the canonical empty Hash" do
|
34
|
-
hash.delete('A').delete('B').delete('C').should be(Immutable::EmptyHash)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
5
|
-
|
6
|
-
[:each, :each_pair].each do |method|
|
7
|
-
describe "##{method}" do
|
8
|
-
context "with a block (internal iteration)" do
|
9
|
-
it "returns self" do
|
10
|
-
hash.send(method) {}.should be(hash)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "yields all key/value pairs" do
|
14
|
-
actual_pairs = {}
|
15
|
-
hash.send(method) { |key, value| actual_pairs[key] = value }
|
16
|
-
actual_pairs.should == { "A" => "aye", "B" => "bee", "C" => "see" }
|
17
|
-
end
|
18
|
-
|
19
|
-
it "yields key/value pairs in the same order as #each_key and #each_value" do
|
20
|
-
hash.each.to_a.should eql(hash.each_key.zip(hash.each_value))
|
21
|
-
end
|
22
|
-
|
23
|
-
it "yields both of a pair of colliding keys" do
|
24
|
-
yielded = []
|
25
|
-
hash = H[DeterministicHash.new('a', 1) => 1, DeterministicHash.new('b', 1) => 1]
|
26
|
-
hash.each { |k,v| yielded << k }
|
27
|
-
yielded.size.should == 2
|
28
|
-
yielded.map { |x| x.value }.sort.should == ['a', 'b']
|
29
|
-
end
|
30
|
-
|
31
|
-
it "yields only the key to a block expecting |key,|" do
|
32
|
-
keys = []
|
33
|
-
hash.each { |key,| keys << key }
|
34
|
-
keys.sort.should == ["A", "B", "C"]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with no block" do
|
39
|
-
it "returns an Enumerator" do
|
40
|
-
@result = hash.send(method)
|
41
|
-
@result.class.should be(Enumerator)
|
42
|
-
@result.to_a.should == hash.to_a
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#each_key" do
|
49
|
-
it "yields all keys" do
|
50
|
-
keys = []
|
51
|
-
hash.each_key { |k| keys << k }
|
52
|
-
keys.sort.should == ['A', 'B', 'C']
|
53
|
-
end
|
54
|
-
|
55
|
-
context "with no block" do
|
56
|
-
it "returns an Enumerator" do
|
57
|
-
hash.each_key.class.should be(Enumerator)
|
58
|
-
hash.each_key.to_a.sort.should == ['A', 'B', 'C']
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "#each_value" do
|
64
|
-
it "yields all values" do
|
65
|
-
values = []
|
66
|
-
hash.each_value { |v| values << v }
|
67
|
-
values.sort.should == ['aye', 'bee', 'see']
|
68
|
-
end
|
69
|
-
|
70
|
-
context "with no block" do
|
71
|
-
it "returns an Enumerator" do
|
72
|
-
hash.each_value.class.should be(Enumerator)
|
73
|
-
hash.each_value.to_a.sort.should == ['aye', 'bee', 'see']
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#each_with_index" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
|
7
|
-
describe "with a block (internal iteration)" do
|
8
|
-
it "returns self" do
|
9
|
-
hash.each_with_index {}.should be(hash)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "yields all key/value pairs with numeric indexes" do
|
13
|
-
actual_pairs = {}
|
14
|
-
indexes = []
|
15
|
-
hash.each_with_index { |(key, value), index| actual_pairs[key] = value; indexes << index }
|
16
|
-
actual_pairs.should == { "A" => "aye", "B" => "bee", "C" => "see" }
|
17
|
-
indexes.sort.should == [0, 1, 2]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "with no block" do
|
22
|
-
it "returns an Enumerator" do
|
23
|
-
hash.each_with_index.should be_kind_of(Enumerator)
|
24
|
-
hash.each_with_index.to_a.map(&:first).sort.should eql([["A", "aye"], ["B", "bee"], ["C", "see"]])
|
25
|
-
hash.each_with_index.to_a.map(&:last).should eql([0,1,2])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#empty?" do
|
5
|
-
[
|
6
|
-
[[], true],
|
7
|
-
[["A" => "aye"], false],
|
8
|
-
[["A" => "aye", "B" => "bee", "C" => "see"], false],
|
9
|
-
].each do |pairs, result|
|
10
|
-
it "returns #{result} for #{pairs.inspect}" do
|
11
|
-
H[*pairs].empty?.should == result
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns true for empty hashes which have a default block" do
|
16
|
-
H.new { 'default' }.empty?.should == true
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe ".empty" do
|
21
|
-
it "returns the canonical empty Hash" do
|
22
|
-
H.empty.should be_empty
|
23
|
-
H.empty.should be(Immutable::EmptyHash)
|
24
|
-
end
|
25
|
-
|
26
|
-
context "from a subclass" do
|
27
|
-
it "returns an empty instance of the subclass" do
|
28
|
-
subclass = Class.new(Immutable::Hash)
|
29
|
-
subclass.empty.class.should be subclass
|
30
|
-
subclass.empty.should be_empty
|
31
|
-
end
|
32
|
-
|
33
|
-
it "calls overridden #initialize when creating empty Hash" do
|
34
|
-
subclass = Class.new(Immutable::Hash) do
|
35
|
-
def initialize
|
36
|
-
@variable = 'value'
|
37
|
-
end
|
38
|
-
end
|
39
|
-
subclass.empty.instance_variable_get(:@variable).should == 'value'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,69 +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 "#eql?" do
|
7
|
-
it "returns false when comparing with a standard hash" do
|
8
|
-
hash.eql?("A" => "aye", "B" => "bee", "C" => "see").should == false
|
9
|
-
end
|
10
|
-
|
11
|
-
it "returns false when comparing with an arbitrary object" do
|
12
|
-
hash.eql?(Object.new).should == false
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns false when comparing with a subclass of Immutable::Hash" do
|
16
|
-
subclass = Class.new(Immutable::Hash)
|
17
|
-
instance = subclass.new("A" => "aye", "B" => "bee", "C" => "see")
|
18
|
-
hash.eql?(instance).should == false
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#==" do
|
23
|
-
it "returns true when comparing with a standard hash" do
|
24
|
-
(hash == {"A" => "aye", "B" => "bee", "C" => "see"}).should == true
|
25
|
-
end
|
26
|
-
|
27
|
-
it "returns false when comparing with an arbitrary object" do
|
28
|
-
(hash == Object.new).should == false
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns true when comparing with a subclass of Immutable::Hash" do
|
32
|
-
subclass = Class.new(Immutable::Hash)
|
33
|
-
instance = subclass.new("A" => "aye", "B" => "bee", "C" => "see")
|
34
|
-
(hash == instance).should == true
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
[:eql?, :==].each do |method|
|
39
|
-
describe "##{method}" do
|
40
|
-
[
|
41
|
-
[{}, {}, true],
|
42
|
-
[{ "A" => "aye" }, {}, false],
|
43
|
-
[{}, { "A" => "aye" }, false],
|
44
|
-
[{ "A" => "aye" }, { "A" => "aye" }, true],
|
45
|
-
[{ "A" => "aye" }, { "B" => "bee" }, false],
|
46
|
-
[{ "A" => "aye", "B" => "bee" }, { "A" => "aye" }, false],
|
47
|
-
[{ "A" => "aye" }, { "A" => "aye", "B" => "bee" }, false],
|
48
|
-
[{ "A" => "aye", "B" => "bee", "C" => "see" }, { "A" => "aye", "B" => "bee", "C" => "see" }, true],
|
49
|
-
[{ "C" => "see", "A" => "aye", "B" => "bee" }, { "A" => "aye", "B" => "bee", "C" => "see" }, true],
|
50
|
-
].each do |a, b, expected|
|
51
|
-
describe "returns #{expected.inspect}" do
|
52
|
-
it "for #{a.inspect} and #{b.inspect}" do
|
53
|
-
H[a].send(method, H[b]).should == expected
|
54
|
-
end
|
55
|
-
|
56
|
-
it "for #{b.inspect} and #{a.inspect}" do
|
57
|
-
H[b].send(method, H[a]).should == expected
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
it "returns true on a large hash which is modified and then modified back again" do
|
65
|
-
hash = H.new((1..1000).zip(2..1001))
|
66
|
-
hash.put('a', 1).delete('a').should == hash
|
67
|
-
hash.put('b', 2).delete('b').should eql(hash)
|
68
|
-
end
|
69
|
-
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
|