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,57 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:select, :find_all, :keep_if].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
let(:original) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
7
|
-
|
8
|
-
context "when everything matches" do
|
9
|
-
it "returns self" do
|
10
|
-
original.send(method) { |key, value| true }.should equal(original)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "when only some things match" do
|
15
|
-
context "with a block" do
|
16
|
-
let(:result) { original.send(method) { |key, value| key == "A" && value == "aye" }}
|
17
|
-
|
18
|
-
it "preserves the original" do
|
19
|
-
original.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns a set with the matching values" do
|
23
|
-
result.should eql(H["A" => "aye"])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
it "yields entries as [key, value] pairs" do
|
28
|
-
original.send(method) do |e|
|
29
|
-
e.should be_kind_of(Array)
|
30
|
-
["A", "B", "C"].include?(e[0]).should == true
|
31
|
-
["aye", "bee", "see"].include?(e[1]).should == true
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "with no block" do
|
36
|
-
it "returns an Enumerator" do
|
37
|
-
original.send(method).class.should be(Enumerator)
|
38
|
-
original.send(method).to_a.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
it "works on a large hash, with many combinations of input" do
|
44
|
-
keys = (1..1000).to_a
|
45
|
-
original = H.new(keys.zip(2..1001))
|
46
|
-
25.times do
|
47
|
-
threshold = rand(1000)
|
48
|
-
result = original.send(method) { |k,v| k <= threshold }
|
49
|
-
result.size.should == threshold
|
50
|
-
result.each_key { |k| k.should <= threshold }
|
51
|
-
(threshold+1).upto(1000) { |k| result.key?(k).should == false }
|
52
|
-
end
|
53
|
-
original.should eql(H.new(keys.zip(2..1001))) # shouldn't have changed
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:size, :length].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
[
|
7
|
-
[[], 0],
|
8
|
-
[["A" => "aye"], 1],
|
9
|
-
[["A" => "bee", "B" => "bee", "C" => "see"], 3],
|
10
|
-
].each do |values, result|
|
11
|
-
|
12
|
-
it "returns #{result} for #{values.inspect}" do
|
13
|
-
H[*values].send(method).should == result
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
lots = (1..10_842).to_a
|
18
|
-
srand 89_533_474
|
19
|
-
random_things = (lots + lots).sort_by { |x|rand }
|
20
|
-
|
21
|
-
it "has the correct size after adding lots of things with colliding keys and such" do
|
22
|
-
h = H.empty
|
23
|
-
random_things.each do |thing|
|
24
|
-
h = h.put(thing, thing * 2)
|
25
|
-
end
|
26
|
-
h.size.should == 10_842
|
27
|
-
end
|
28
|
-
|
29
|
-
random_actions = (lots.map { |x|[:add, x] } + lots.map { |x|[:add, x] } + lots.map { |x|[:remove, x] }).sort_by { |x|rand }
|
30
|
-
ending_size = random_actions.reduce({}) do |h, (act, ob)|
|
31
|
-
if act == :add
|
32
|
-
h[ob] = 1
|
33
|
-
else
|
34
|
-
h.delete(ob)
|
35
|
-
end
|
36
|
-
h
|
37
|
-
end.size
|
38
|
-
it "has the correct size after lots of addings and removings" do
|
39
|
-
h = H.empty
|
40
|
-
random_actions.each do |(act, ob)|
|
41
|
-
if act == :add
|
42
|
-
h = h.put(ob, ob * 3)
|
43
|
-
else
|
44
|
-
h = h.delete(ob)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
h.size.should == ending_size
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
let(:hash) { H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL") }
|
5
|
-
|
6
|
-
describe "#slice" do
|
7
|
-
let(:slice) { hash.slice(*values) }
|
8
|
-
|
9
|
-
context "with all keys present in the Hash" do
|
10
|
-
let(:values) { ["B", nil] }
|
11
|
-
|
12
|
-
it "returns the sliced values" do
|
13
|
-
expect(slice).to eq(described_class.new("B" => "bee", nil => "NIL"))
|
14
|
-
end
|
15
|
-
|
16
|
-
it "doesn't modify the original Hash" do
|
17
|
-
slice
|
18
|
-
hash.should eql(H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "with keys aren't present in the Hash" do
|
23
|
-
let(:values) { ["B", "A", 3] }
|
24
|
-
|
25
|
-
it "returns the sliced values of the matching keys" do
|
26
|
-
expect(slice).to eq(described_class.new("A" => "aye", "B" => "bee"))
|
27
|
-
end
|
28
|
-
|
29
|
-
it "doesn't modify the original Hash" do
|
30
|
-
slice
|
31
|
-
hash.should eql(H.new("A" => "aye", "B" => "bee", "C" => "see", nil => "NIL"))
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "on a Hash with a default block" do
|
36
|
-
let(:hash) { H.new('A' => 'aye', 'B' => 'bee') { 'nothing' }}
|
37
|
-
let(:values) { ["B", nil] }
|
38
|
-
|
39
|
-
it "maintains the default block" do
|
40
|
-
expect(slice['C']).to eq('nothing')
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,26 +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 "#sort" do
|
7
|
-
it "returns a Vector of sorted key/val pairs" do
|
8
|
-
hash.sort.should eql(V[[:a, 3], [:b, 2], [:c, 1]])
|
9
|
-
end
|
10
|
-
|
11
|
-
it "works on large hashes" do
|
12
|
-
array = (1..1000).map { |n| [n,n] }
|
13
|
-
H.new(array.shuffle).sort.should eql(V.new(array))
|
14
|
-
end
|
15
|
-
|
16
|
-
it "uses block as comparator to sort if passed a block" do
|
17
|
-
hash.sort { |a,b| b <=> a }.should eql(V[[:c, 1], [:b, 2], [:a, 3]])
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "#sort_by" do
|
22
|
-
it "returns a Vector of key/val pairs, sorted using the block as a key function" do
|
23
|
-
hash.sort_by { |k,v| v }.should eql(V[[:c, 1], [:b, 2], [:a, 3]])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#store" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
|
7
|
-
context "with a unique key" do
|
8
|
-
let(:result) { hash.store("D", "dee") }
|
9
|
-
|
10
|
-
it "preserves the original" do
|
11
|
-
result
|
12
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns a copy with the superset of key/value pairs" do
|
16
|
-
result.should eql(H["A" => "aye", "B" => "bee", "C" => "see", "D" => "dee"])
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "with a duplicate key" do
|
21
|
-
let(:result) { hash.store("C", "sea") }
|
22
|
-
|
23
|
-
it "preserves the original" do
|
24
|
-
result
|
25
|
-
hash.should eql(H["A" => "aye", "B" => "bee", "C" => "see"])
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns a copy with the superset of key/value pairs" do
|
29
|
-
result.should eql(H["A" => "aye", "B" => "bee", "C" => "sea"])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "with duplicate key and identical value" do
|
34
|
-
let(:hash) { H["X" => 1, "Y" => 2] }
|
35
|
-
let(:result) { hash.store("X", 1) }
|
36
|
-
|
37
|
-
it "returns the original hash unmodified" do
|
38
|
-
result.should be(hash)
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with big hash (force nested tries)" do
|
42
|
-
let(:keys) { (0..99).map(&:to_s) }
|
43
|
-
let(:values) { (100..199).to_a }
|
44
|
-
let(:hash) { H[keys.zip(values)] }
|
45
|
-
|
46
|
-
it "returns the original hash unmodified for all changes" do
|
47
|
-
keys.each_with_index do |key, index|
|
48
|
-
result = hash.store(key, values[index])
|
49
|
-
result.should be(hash)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context "with unequal keys which hash to the same value" do
|
56
|
-
let(:hash) { H[DeterministicHash.new('a', 1) => 'aye'] }
|
57
|
-
|
58
|
-
it "stores and can retrieve both" do
|
59
|
-
result = hash.store(DeterministicHash.new('b', 1), 'bee')
|
60
|
-
result.get(DeterministicHash.new('a', 1)).should eql('aye')
|
61
|
-
result.get(DeterministicHash.new('b', 1)).should eql('bee')
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context "when a String is inserted as key and then mutated" do
|
66
|
-
it "is not affected" do
|
67
|
-
string = "a string!"
|
68
|
-
hash = H.empty.store(string, 'a value!')
|
69
|
-
string.upcase!
|
70
|
-
hash['a string!'].should == 'a value!'
|
71
|
-
hash['A STRING!'].should be_nil
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "immutable/hash"
|
3
|
-
|
4
|
-
describe Immutable::Hash do
|
5
|
-
describe "#<=" do
|
6
|
-
[
|
7
|
-
[{}, {}, true],
|
8
|
-
[{"A" => 1}, {}, false],
|
9
|
-
[{}, {"A" => 1}, true],
|
10
|
-
[{"A" => 1}, {"A" => 1}, true],
|
11
|
-
[{"A" => 1}, {"A" => 2}, false],
|
12
|
-
[{"B" => 2}, {"A" => 1, "B" => 2, "C" => 3}, true],
|
13
|
-
[{"A" => 1, "B" => 2, "C" => 3}, {"B" => 2}, false],
|
14
|
-
[{"B" => 0}, {"A" => 1, "B" => 2, "C" => 3}, false],
|
15
|
-
].each do |a, b, expected|
|
16
|
-
describe "for #{a.inspect} and #{b.inspect}" do
|
17
|
-
it "returns #{expected}" do
|
18
|
-
expect(H[a] <= H[b]).to eq(expected)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "#<" do
|
25
|
-
[
|
26
|
-
[{}, {}, false],
|
27
|
-
[{"A" => 1}, {}, false],
|
28
|
-
[{}, {"A" => 1}, true],
|
29
|
-
[{"A" => 1}, {"A" => 1}, false],
|
30
|
-
[{"A" => 1}, {"A" => 2}, false],
|
31
|
-
[{"B" => 2}, {"A" => 1, "B" => 2, "C" => 3}, true],
|
32
|
-
[{"A" => 1, "B" => 2, "C" => 3}, {"B" => 2}, false],
|
33
|
-
[{"B" => 0}, {"A" => 1, "B" => 2, "C" => 3}, false],
|
34
|
-
].each do |a, b, expected|
|
35
|
-
describe "for #{a.inspect} and #{b.inspect}" do
|
36
|
-
it "returns #{expected}" do
|
37
|
-
expect(H[a] < H[b]).to eq(expected)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "immutable/hash"
|
3
|
-
|
4
|
-
describe Immutable::Hash do
|
5
|
-
describe "#>=" do
|
6
|
-
[
|
7
|
-
[{}, {}, true],
|
8
|
-
[{"A" => 1}, {}, true],
|
9
|
-
[{}, {"A" => 1}, false],
|
10
|
-
[{"A" => 1}, {"A" => 1}, true],
|
11
|
-
[{"A" => 1}, {"A" => 2}, false],
|
12
|
-
[{"A" => 1, "B" => 2, "C" => 3}, {"B" => 2}, true],
|
13
|
-
[{"B" => 2}, {"A" => 1, "B" => 2, "C" => 3}, false],
|
14
|
-
[{"A" => 1, "B" => 2, "C" => 3}, {"B" => 0}, false],
|
15
|
-
].each do |a, b, expected|
|
16
|
-
describe "for #{a.inspect} and #{b.inspect}" do
|
17
|
-
it "returns #{expected}" do
|
18
|
-
expect(H[a] >= H[b]).to eq(expected)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "#>" do
|
25
|
-
[
|
26
|
-
[{}, {}, false],
|
27
|
-
[{"A" => 1}, {}, true],
|
28
|
-
[{}, {"A" => 1}, false],
|
29
|
-
[{"A" => 1}, {"A" => 1}, false],
|
30
|
-
[{"A" => 1}, {"A" => 2}, false],
|
31
|
-
[{"A" => 1, "B" => 2, "C" => 3}, {"B" => 2}, true],
|
32
|
-
[{"B" => 2}, {"A" => 1, "B" => 2, "C" => 3}, false],
|
33
|
-
[{"A" => 1, "B" => 2, "C" => 3}, {"B" => 0}, false],
|
34
|
-
].each do |a, b, expected|
|
35
|
-
describe "for #{a.inspect} and #{b.inspect}" do
|
36
|
-
it "returns #{expected}" do
|
37
|
-
expect(H[a] > H[b]).to eq(expected)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
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 "#take" do
|
7
|
-
it "returns the first N key/val pairs from hash" do
|
8
|
-
hash.take(0).should == []
|
9
|
-
[[['A', 'aye']], [['B', 'bee']], [['C', 'see']]].include?(hash.take(1)).should == true
|
10
|
-
[['A', 'aye'], ['B', 'bee'], ['C', 'see']].combination(2).include?(hash.take(2).sort).should == true
|
11
|
-
hash.take(3).sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
12
|
-
hash.take(4).sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "#take_while" do
|
17
|
-
it "passes elements to the block until the block returns nil/false" do
|
18
|
-
passed = nil
|
19
|
-
hash.take_while { |k,v| passed = k; false }
|
20
|
-
['A', 'B', 'C'].include?(passed).should == true
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns an array of all elements before the one which returned nil/false" do
|
24
|
-
count = 0
|
25
|
-
result = hash.take_while { count += 1; count < 3 }
|
26
|
-
[['A', 'aye'], ['B', 'bee'], ['C', 'see']].combination(2).include?(result.sort).should == true
|
27
|
-
end
|
28
|
-
|
29
|
-
it "passes all elements if the block never returns nil/false" do
|
30
|
-
passed = []
|
31
|
-
hash.take_while { |k,v| passed << [k, v]; true }.should == hash.to_a
|
32
|
-
passed.sort.should == [['A', 'aye'], ['B', 'bee'], ['C', 'see']]
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#to_a" do
|
5
|
-
it "returns an Array of [key, value] pairs in same order as #each" do
|
6
|
-
hash = H[:a => 1, 1 => :a, 3 => :b, :b => 5]
|
7
|
-
pairs = []
|
8
|
-
hash.each_pair { |k,v| pairs << [k,v] }
|
9
|
-
hash.to_a.should be_kind_of(Array)
|
10
|
-
hash.to_a.should == pairs
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
[:to_hash, :to_h].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
it "converts an empty Immutable::Hash to an empty Ruby Hash" do
|
7
|
-
H.empty.send(method).should eql({})
|
8
|
-
end
|
9
|
-
|
10
|
-
it "converts a non-empty Immutable::Hash to a Hash with the same keys and values" do
|
11
|
-
H[a: 1, b: 2].send(method).should eql({a: 1, b: 2})
|
12
|
-
end
|
13
|
-
|
14
|
-
it "doesn't modify the receiver" do
|
15
|
-
hash = H[a: 1, b: 2]
|
16
|
-
hash.send(method)
|
17
|
-
hash.should eql(H[a: 1, b: 2])
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "immutable/hash"
|
3
|
-
|
4
|
-
describe Immutable::Hash do
|
5
|
-
describe "#to_proc" do
|
6
|
-
context "on Hash without default proc" do
|
7
|
-
let(:hash) { H.new("A" => "aye") }
|
8
|
-
|
9
|
-
it "returns a Proc instance" do
|
10
|
-
hash.to_proc.should be_kind_of(Proc)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns a Proc that returns the value of an existing key" do
|
14
|
-
hash.to_proc.call("A").should == "aye"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "returns a Proc that returns nil for a missing key" do
|
18
|
-
hash.to_proc.call("B").should be_nil
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "on Hash with a default proc" do
|
23
|
-
let(:hash) { H.new("A" => "aye") { |key| "#{key}-VAL" } }
|
24
|
-
|
25
|
-
it "returns a Proc instance" do
|
26
|
-
hash.to_proc.should be_kind_of(Proc)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "returns a Proc that returns the value of an existing key" do
|
30
|
-
hash.to_proc.call("A").should == "aye"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "returns a Proc that returns the result of the hash's default proc for a missing key" do
|
34
|
-
hash.to_proc.call("B").should == "B-VAL"
|
35
|
-
hash.should == H.new("A" => "aye")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#update_in" do
|
5
|
-
let(:hash) {
|
6
|
-
Immutable::Hash[
|
7
|
-
"A" => "aye",
|
8
|
-
"B" => Immutable::Hash["C" => "see", "D" => Immutable::Hash["E" => "eee"]],
|
9
|
-
"F" => Immutable::Vector["G", Immutable::Hash["H" => "eitch"], "I"]
|
10
|
-
]
|
11
|
-
}
|
12
|
-
|
13
|
-
context "with one level on existing key" do
|
14
|
-
it "passes the value to the block" do
|
15
|
-
hash.update_in("A") { |value| value.should == "aye" }
|
16
|
-
end
|
17
|
-
|
18
|
-
it "replaces the value with the result of the block" do
|
19
|
-
result = hash.update_in("A") { |value| "FLIBBLE" }
|
20
|
-
result.get("A").should == "FLIBBLE"
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should preserve the original" do
|
24
|
-
result = hash.update_in("A") { |value| "FLIBBLE" }
|
25
|
-
hash.get("A").should == "aye"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "with multi-level on existing keys" do
|
30
|
-
it "passes the value to the block" do
|
31
|
-
hash.update_in("B", "D", "E") { |value| value.should == "eee" }
|
32
|
-
end
|
33
|
-
|
34
|
-
it "replaces the value with the result of the block" do
|
35
|
-
result = hash.update_in("B", "D", "E") { |value| "FLIBBLE" }
|
36
|
-
result["B"]["D"]["E"].should == "FLIBBLE"
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should preserve the original" do
|
40
|
-
result = hash.update_in("B", "D", "E") { |value| "FLIBBLE" }
|
41
|
-
hash["B"]["D"]["E"].should == "eee"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context "with multi-level creating sub-hashes when keys don't exist" do
|
46
|
-
it "passes nil to the block" do
|
47
|
-
hash.update_in("B", "X", "Y") { |value| value.should be_nil }
|
48
|
-
end
|
49
|
-
|
50
|
-
it "creates subhashes on the way to set the value" do
|
51
|
-
result = hash.update_in("B", "X", "Y") { |value| "NEWVALUE" }
|
52
|
-
result["B"]["X"]["Y"].should == "NEWVALUE"
|
53
|
-
result["B"]["D"]["E"].should == "eee"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "with multi-level including vector with existing keys" do
|
58
|
-
it "passes the value to the block" do
|
59
|
-
hash.update_in("F", 1, "H") { |value| value.should == "eitch" }
|
60
|
-
end
|
61
|
-
|
62
|
-
it "replaces the value with the result of the block" do
|
63
|
-
result = hash.update_in("F", 1, "H") { |value| "FLIBBLE" }
|
64
|
-
result["F"][1]["H"].should == "FLIBBLE"
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should preserve the original" do
|
68
|
-
result = hash.update_in("F", 1, "H") { |value| "FLIBBLE" }
|
69
|
-
hash["F"][1]["H"].should == "eitch"
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
context "with empty key_path" do
|
74
|
-
it "raises ArguemntError" do
|
75
|
-
expect { hash.update_in() { |v| 42 } }.to raise_error(ArgumentError)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#values_at" do
|
5
|
-
context "on Hash without default proc" do
|
6
|
-
let(:hash) { H[:a => 9, :b => 'a', :c => -10, :d => nil] }
|
7
|
-
|
8
|
-
it "returns an empty vector when no keys are given" do
|
9
|
-
hash.values_at.should be_kind_of(Immutable::Vector)
|
10
|
-
hash.values_at.should eql(V.empty)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns a vector of values for the given keys" do
|
14
|
-
hash.values_at(:a, :d, :b).should be_kind_of(Immutable::Vector)
|
15
|
-
hash.values_at(:a, :d, :b).should eql(V[9, nil, 'a'])
|
16
|
-
end
|
17
|
-
|
18
|
-
it "fills nil when keys are missing" do
|
19
|
-
hash.values_at(:x, :a, :y, :b).should be_kind_of(Immutable::Vector)
|
20
|
-
hash.values_at(:x, :a, :y, :b).should eql(V[nil, 9, nil, 'a'])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "on Hash with default proc" do
|
25
|
-
let(:hash) { Immutable::Hash.new(:a => 9) { |key| "#{key}-VAL" } }
|
26
|
-
|
27
|
-
it "fills the result of the default proc when keys are missing" do
|
28
|
-
hash.values_at(:x, :a, :y).should be_kind_of(Immutable::Vector)
|
29
|
-
hash.values_at(:x, :a, :y).should eql(V['x-VAL', 9, 'y-VAL'])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Hash do
|
4
|
-
describe "#values" do
|
5
|
-
let(:hash) { H["A" => "aye", "B" => "bee", "C" => "see"] }
|
6
|
-
let(:result) { hash.values }
|
7
|
-
|
8
|
-
it "returns the keys as a Vector" do
|
9
|
-
result.should be_a Immutable::Vector
|
10
|
-
result.to_a.sort.should == %w(aye bee see)
|
11
|
-
end
|
12
|
-
|
13
|
-
context "with duplicates" do
|
14
|
-
let(:hash) { H[:A => 15, :B => 19, :C => 15] }
|
15
|
-
let(:result) { hash.values }
|
16
|
-
|
17
|
-
it "returns the keys as a Vector" do
|
18
|
-
result.class.should be(Immutable::Vector)
|
19
|
-
result.to_a.sort.should == [15, 15, 19]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::List do
|
4
|
-
describe "#add" 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(:list) { L[*values] }
|
13
|
-
|
14
|
-
it "preserves the original" do
|
15
|
-
list.add(new_value)
|
16
|
-
list.should eql(L[*values])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns #{expected.inspect}" do
|
20
|
-
list.add(new_value).should eql(L[*expected])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::List do
|
4
|
-
describe "#all?" do
|
5
|
-
context "on a really big list" do
|
6
|
-
let(:list) { BigList }
|
7
|
-
|
8
|
-
it "doesn't run out of stack" do
|
9
|
-
-> { list.all? }.should_not raise_error
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context "when empty" do
|
14
|
-
it "with a block returns true" do
|
15
|
-
L.empty.all? {}.should == true
|
16
|
-
end
|
17
|
-
|
18
|
-
it "with no block returns true" do
|
19
|
-
L.empty.all?.should == true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when not empty" do
|
24
|
-
context "with a block" do
|
25
|
-
let(:list) { L["A", "B", "C"] }
|
26
|
-
|
27
|
-
context "if the block always returns true" do
|
28
|
-
it "returns true" do
|
29
|
-
list.all? { |item| true }.should == true
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "if the block ever returns false" do
|
34
|
-
it "returns false" do
|
35
|
-
list.all? { |item| item == "D" }.should == false
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "with no block" do
|
41
|
-
context "if all values are truthy" do
|
42
|
-
it "returns true" do
|
43
|
-
L[true, "A"].all?.should == true
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
[nil, false].each do |value|
|
48
|
-
context "if any value is #{value.inspect}" do
|
49
|
-
it "returns false" do
|
50
|
-
L[value, true, "A"].all?.should == false
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|