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,20 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
[:dup, :clone].each do |method|
|
5
|
-
[
|
6
|
-
[],
|
7
|
-
["A"],
|
8
|
-
%w[A B C],
|
9
|
-
(1..32),
|
10
|
-
].each do |values|
|
11
|
-
describe "on #{values.inspect}" do
|
12
|
-
let(:vector) { V[*values] }
|
13
|
-
|
14
|
-
it "returns self" do
|
15
|
-
vector.send(method).should equal(vector)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#count" do
|
5
|
-
it "returns the number of elements" do
|
6
|
-
V[:a, :b, :c].count.should == 3
|
7
|
-
end
|
8
|
-
|
9
|
-
it "returns the number of elements that equal the argument" do
|
10
|
-
V[:a, :b, :b, :c].count(:b).should == 2
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns the number of element for which the block evaluates to true" do
|
14
|
-
V[:a, :b, :c].count { |s| s != :b }.should == 2
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#delete_at" do
|
5
|
-
let(:vector) { V[1,2,3,4,5] }
|
6
|
-
|
7
|
-
it "removes the element at the specified index" do
|
8
|
-
vector.delete_at(0).should eql(V[2,3,4,5])
|
9
|
-
vector.delete_at(2).should eql(V[1,2,4,5])
|
10
|
-
vector.delete_at(-1).should eql(V[1,2,3,4])
|
11
|
-
end
|
12
|
-
|
13
|
-
it "makes no modification if the index is out of range" do
|
14
|
-
vector.delete_at(5).should eql(vector)
|
15
|
-
vector.delete_at(-6).should eql(vector)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "works when deleting last item at boundary where vector trie needs to get shallower" do
|
19
|
-
vector = Immutable::Vector.new(1..33)
|
20
|
-
vector.delete_at(32).size.should == 32
|
21
|
-
vector.delete_at(32).to_a.should eql((1..32).to_a)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "works on an empty vector" do
|
25
|
-
V.empty.delete_at(0).should be(V.empty)
|
26
|
-
V.empty.delete_at(1).should be(V.empty)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "works on a vector with 1 item" do
|
30
|
-
V[10].delete_at(0).should eql(V.empty)
|
31
|
-
V[10].delete_at(1).should eql(V[10])
|
32
|
-
end
|
33
|
-
|
34
|
-
it "works on a vector with 32 items" do
|
35
|
-
V.new(1..32).delete_at(0).should eql(V.new(2..32))
|
36
|
-
V.new(1..32).delete_at(31).should eql(V.new(1..31))
|
37
|
-
end
|
38
|
-
|
39
|
-
it "has the right size and contents after many deletions" do
|
40
|
-
array = (1..2000).to_a # we use an Array as standard of correctness
|
41
|
-
vector = Immutable::Vector.new(array)
|
42
|
-
500.times do
|
43
|
-
index = rand(vector.size)
|
44
|
-
vector = vector.delete_at(index)
|
45
|
-
array.delete_at(index)
|
46
|
-
vector.size.should == array.size
|
47
|
-
ary = vector.to_a
|
48
|
-
ary.size.should == vector.size
|
49
|
-
ary.should eql(array)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#delete" do
|
5
|
-
it "removes elements that are #== to the argument" do
|
6
|
-
V[1,2,3].delete(1).should eql(V[2,3])
|
7
|
-
V[1,2,3].delete(2).should eql(V[1,3])
|
8
|
-
V[1,2,3].delete(3).should eql(V[1,2])
|
9
|
-
V[1,2,3].delete(0).should eql(V[1,2,3])
|
10
|
-
V['a','b','a','c','a','a','d'].delete('a').should eql(V['b','c','d'])
|
11
|
-
|
12
|
-
V[EqualNotEql.new, EqualNotEql.new].delete(:something).should eql(V.empty)
|
13
|
-
V[EqlNotEqual.new, EqlNotEqual.new].delete(:something).should_not be_empty
|
14
|
-
end
|
15
|
-
|
16
|
-
context "on an empty vector" do
|
17
|
-
it "returns self" do
|
18
|
-
V.empty.delete(1).should be(V.empty)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "on a subclass of Vector" do
|
23
|
-
it "returns an instance of the subclass" do
|
24
|
-
subclass = Class.new(Immutable::Vector)
|
25
|
-
instance = subclass.new([1,2,3])
|
26
|
-
instance.delete(1).class.should be(subclass)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#drop" do
|
5
|
-
[
|
6
|
-
[[], 10, []],
|
7
|
-
[["A"], 10, []],
|
8
|
-
[["A"], 1, []],
|
9
|
-
[["A"], 0, ["A"]],
|
10
|
-
[%w[A B C], 0, %w[A B C]],
|
11
|
-
[%w[A B C], 2, ["C"]],
|
12
|
-
[(1..32), 3, (4..32)],
|
13
|
-
[(1..33), 32, [33]]
|
14
|
-
].each do |values, number, expected|
|
15
|
-
describe "#{number} from #{values.inspect}" do
|
16
|
-
let(:vector) { V[*values] }
|
17
|
-
|
18
|
-
it "preserves the original" do
|
19
|
-
vector.drop(number)
|
20
|
-
vector.should eql(V[*values])
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns #{expected.inspect}" do
|
24
|
-
vector.drop(number).should eql(V[*expected])
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it "raises an ArgumentError if number of elements specified is negative" do
|
30
|
-
-> { V[1, 2, 3].drop(-1) }.should raise_error(ArgumentError)
|
31
|
-
-> { V[1, 2, 3].drop(-3) }.should raise_error(ArgumentError)
|
32
|
-
end
|
33
|
-
|
34
|
-
context "when number of elements specified is zero" do
|
35
|
-
let(:vector) { V[1, 2, 3, 4, 5, 6] }
|
36
|
-
it "returns self" do
|
37
|
-
vector.drop(0).should be(vector)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#drop_while" do
|
5
|
-
[
|
6
|
-
[[], []],
|
7
|
-
[["A"], []],
|
8
|
-
[%w[A B C], ["C"]],
|
9
|
-
].each do |values, expected|
|
10
|
-
describe "on #{values.inspect}" do
|
11
|
-
let(:vector) { V[*values] }
|
12
|
-
|
13
|
-
describe "with a block" do
|
14
|
-
let(:result) { vector.drop_while { |item| item < "C" } }
|
15
|
-
|
16
|
-
it "preserves the original" do
|
17
|
-
result
|
18
|
-
vector.should eql(V[*values])
|
19
|
-
end
|
20
|
-
|
21
|
-
it "returns #{expected.inspect}" do
|
22
|
-
result.should eql(V[*expected])
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "without a block" do
|
27
|
-
it "returns an Enumerator" do
|
28
|
-
vector.drop_while.class.should be(Enumerator)
|
29
|
-
vector.drop_while.each { |item| item < "C" }.should eql(V[*expected])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "on an empty vector" do
|
36
|
-
it "returns an empty vector" do
|
37
|
-
V.empty.drop_while { false }.should eql(V.empty)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
it "returns an empty vector if block is always true" do
|
42
|
-
V.new(1..32).drop_while { true }.should eql(V.empty)
|
43
|
-
V.new(1..100).drop_while { true }.should eql(V.empty)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "stops dropping items if block returns nil" do
|
47
|
-
V[1, 2, 3, nil, 4, 5].drop_while { |x| x }.should eql(V[nil, 4, 5])
|
48
|
-
end
|
49
|
-
|
50
|
-
it "stops dropping items if block returns false" do
|
51
|
-
V[1, 2, 3, false, 4, 5].drop_while { |x| x }.should eql(V[false, 4, 5])
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#each_index" do
|
5
|
-
let(:vector) { V[1,2,3,4] }
|
6
|
-
|
7
|
-
context "with a block" do
|
8
|
-
it "yields all the valid indices into the vector" do
|
9
|
-
result = []
|
10
|
-
vector.each_index { |i| result << i }
|
11
|
-
result.should eql([0,1,2,3])
|
12
|
-
end
|
13
|
-
|
14
|
-
it "returns self" do
|
15
|
-
vector.each_index {}.should be(vector)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "without a block" do
|
20
|
-
it "returns an Enumerator" do
|
21
|
-
vector.each_index.class.should be(Enumerator)
|
22
|
-
vector.each_index.to_a.should eql([0,1,2,3])
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "on an empty vector" do
|
27
|
-
it "doesn't yield anything" do
|
28
|
-
V.empty.each_index { fail }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
[1, 2, 10, 31, 32, 33, 1000, 1024, 1025].each do |size|
|
33
|
-
context "on a #{size}-item vector" do
|
34
|
-
it "yields all valid indices" do
|
35
|
-
V.new(1..size).each_index.to_a.should == (0..(size-1)).to_a
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#each" do
|
5
|
-
describe "with no block" do
|
6
|
-
let(:vector) { V["A", "B", "C"] }
|
7
|
-
|
8
|
-
it "returns an Enumerator" do
|
9
|
-
vector.each.class.should be(Enumerator)
|
10
|
-
vector.each.to_a.should == vector
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
[31, 32, 33, 1023, 1024, 1025].each do |size|
|
15
|
-
context "on a #{size}-item vector" do
|
16
|
-
describe "with a block" do
|
17
|
-
let(:vector) { V.new(1..size) }
|
18
|
-
|
19
|
-
it "returns self" do
|
20
|
-
items = []
|
21
|
-
vector.each { |item| items << item }.should be(vector)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "yields all the items" do
|
25
|
-
items = []
|
26
|
-
vector.each { |item| items << item }
|
27
|
-
items.should == (1..size).to_a
|
28
|
-
end
|
29
|
-
|
30
|
-
it "iterates over the items in order" do
|
31
|
-
vector.each.first.should == 1
|
32
|
-
vector.each.to_a.last.should == size
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "on an empty vector" do
|
39
|
-
it "doesn't yield anything" do
|
40
|
-
V.empty.each { fail }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#each_with_index" do
|
5
|
-
describe "with no block" do
|
6
|
-
let(:vector) { V["A", "B", "C"] }
|
7
|
-
|
8
|
-
it "returns an Enumerator" do
|
9
|
-
vector.each_with_index.class.should be(Enumerator)
|
10
|
-
vector.each_with_index.to_a.should == [['A', 0], ['B', 1], ['C', 2]]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
[1, 2, 31, 32, 33, 1023, 1024, 1025].each do |size|
|
15
|
-
context "on a #{size}-item vector" do
|
16
|
-
describe "with a block" do
|
17
|
-
let(:vector) { V.new(1..size) }
|
18
|
-
|
19
|
-
it "returns self" do
|
20
|
-
pairs = []
|
21
|
-
vector.each_with_index { |item, index| pairs << [item, index] }.should be(vector)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "iterates over the items in order" do
|
25
|
-
pairs = []
|
26
|
-
vector.each_with_index { |item, index| pairs << [item, index] }.should be(vector)
|
27
|
-
pairs.should == (1..size).zip(0..size.pred)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "on an empty vector" do
|
34
|
-
it "doesn't yield anything" do
|
35
|
-
V.empty.each_with_index { |item, index| fail }
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#empty?" do
|
5
|
-
[
|
6
|
-
[[], true],
|
7
|
-
[["A"], false],
|
8
|
-
[%w[A B C], false],
|
9
|
-
].each do |values, expected|
|
10
|
-
describe "on #{values.inspect}" do
|
11
|
-
it "returns #{expected.inspect}" do
|
12
|
-
V[*values].empty?.should == expected
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe ".empty" do
|
19
|
-
it "returns the canonical empty vector" do
|
20
|
-
V.empty.size.should be(0)
|
21
|
-
V.empty.object_id.should be(V.empty.object_id)
|
22
|
-
end
|
23
|
-
|
24
|
-
context "from a subclass" do
|
25
|
-
it "returns an empty instance of the subclass" do
|
26
|
-
subclass = Class.new(Immutable::Vector)
|
27
|
-
subclass.empty.class.should be(subclass)
|
28
|
-
subclass.empty.should be_empty
|
29
|
-
end
|
30
|
-
|
31
|
-
it "calls overridden #initialize when creating empty Hash" do
|
32
|
-
subclass = Class.new(Immutable::Vector) do
|
33
|
-
def initialize
|
34
|
-
@variable = 'value'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
subclass.empty.instance_variable_get(:@variable).should == 'value'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#eql" do
|
5
|
-
let(:vector) { V["A", "B", "C"] }
|
6
|
-
|
7
|
-
it "returns false when comparing with an array with the same contents" do
|
8
|
-
vector.eql?(%w[A B C]).should == false
|
9
|
-
end
|
10
|
-
|
11
|
-
it "returns false when comparing with an arbitrary object" do
|
12
|
-
vector.eql?(Object.new).should == false
|
13
|
-
end
|
14
|
-
|
15
|
-
it "returns false when comparing an empty vector with an empty array" do
|
16
|
-
V.empty.eql?([]).should == false
|
17
|
-
end
|
18
|
-
|
19
|
-
it "returns false when comparing with a subclass of Immutable::Vector" do
|
20
|
-
vector.eql?(Class.new(Immutable::Vector).new(%w[A B C])).should == false
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "#==" do
|
25
|
-
let(:vector) { V["A", "B", "C"] }
|
26
|
-
|
27
|
-
it "returns true when comparing with an array with the same contents" do
|
28
|
-
(vector == %w[A B C]).should == true
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns false when comparing with an arbitrary object" do
|
32
|
-
(vector == Object.new).should == false
|
33
|
-
end
|
34
|
-
|
35
|
-
it "returns true when comparing an empty vector with an empty array" do
|
36
|
-
(V.empty == []).should == true
|
37
|
-
end
|
38
|
-
|
39
|
-
it "returns true when comparing with a subclass of Immutable::Vector" do
|
40
|
-
(vector == Class.new(Immutable::Vector).new(%w[A B C])).should == true
|
41
|
-
end
|
42
|
-
|
43
|
-
it "works on larger vectors" do
|
44
|
-
array = 2000.times.map { rand(10000) }
|
45
|
-
(V.new(array.dup) == array).should == true
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
[:eql?, :==].each do |method|
|
50
|
-
describe "##{method}" do
|
51
|
-
[
|
52
|
-
[[], [], true],
|
53
|
-
[[], [nil], false],
|
54
|
-
[["A"], [], false],
|
55
|
-
[["A"], ["A"], true],
|
56
|
-
[["A"], ["B"], false],
|
57
|
-
[%w[A B], ["A"], false],
|
58
|
-
[%w[A B C], %w[A B C], true],
|
59
|
-
[%w[C A B], %w[A B C], false],
|
60
|
-
].each do |a, b, expected|
|
61
|
-
describe "returns #{expected.inspect}" do
|
62
|
-
let(:vector_a) { V[*a] }
|
63
|
-
let(:vector_b) { V[*b] }
|
64
|
-
|
65
|
-
it "for vectors #{a.inspect} and #{b.inspect}" do
|
66
|
-
vector_a.send(method, vector_b).should == expected
|
67
|
-
end
|
68
|
-
|
69
|
-
it "for vectors #{b.inspect} and #{a.inspect}" do
|
70
|
-
vector_b.send(method, vector_a).should == expected
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#fetch" do
|
5
|
-
let(:vector) { V['a', 'b', 'c'] }
|
6
|
-
|
7
|
-
context "with no default provided" do
|
8
|
-
context "when the index exists" do
|
9
|
-
it "returns the value at the index" do
|
10
|
-
vector.fetch(0).should == "a"
|
11
|
-
vector.fetch(1).should == "b"
|
12
|
-
vector.fetch(2).should == "c"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "when the key does not exist" do
|
17
|
-
it "raises an IndexError" do
|
18
|
-
-> { vector.fetch(3) }.should raise_error(IndexError)
|
19
|
-
-> { vector.fetch(-4) }.should raise_error(IndexError)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with a default value" do
|
25
|
-
context "when the index exists" do
|
26
|
-
it "returns the value at the index" do
|
27
|
-
vector.fetch(0, "default").should == "a"
|
28
|
-
vector.fetch(1, "default").should == "b"
|
29
|
-
vector.fetch(2, "default").should == "c"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "when the index does not exist" do
|
34
|
-
it "returns the default value" do
|
35
|
-
vector.fetch(3, "default").should == "default"
|
36
|
-
vector.fetch(-4, "default").should == "default"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with a default block" do
|
42
|
-
context "when the index exists" do
|
43
|
-
it "returns the value at the index" do
|
44
|
-
vector.fetch(0) { "default".upcase }.should == "a"
|
45
|
-
vector.fetch(1) { "default".upcase }.should == "b"
|
46
|
-
vector.fetch(2) { "default".upcase }.should == "c"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "when the index does not exist" do
|
51
|
-
it "invokes the block with the missing index as parameter" do
|
52
|
-
vector.fetch(3) { |index| index.should == 3}
|
53
|
-
vector.fetch(-4) { |index| index.should == -4 }
|
54
|
-
vector.fetch(3) { "default".upcase }.should == "DEFAULT"
|
55
|
-
vector.fetch(-4) { "default".upcase }.should == "DEFAULT"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
it "gives precedence to default block over default argument if passed both" do
|
61
|
-
vector.fetch(3, 'one') { 'two' }.should == 'two'
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#fill" do
|
5
|
-
let(:vector) { V[1, 2, 3, 4, 5, 6] }
|
6
|
-
|
7
|
-
it "can replace a range of items at the beginning of a vector" do
|
8
|
-
vector.fill(:a, 0, 3).should eql(V[:a, :a, :a, 4, 5, 6])
|
9
|
-
end
|
10
|
-
|
11
|
-
it "can replace a range of items in the middle of a vector" do
|
12
|
-
vector.fill(:a, 3, 2).should eql(V[1, 2, 3, :a, :a, 6])
|
13
|
-
end
|
14
|
-
|
15
|
-
it "can replace a range of items at the end of a vector" do
|
16
|
-
vector.fill(:a, 4, 2).should eql(V[1, 2, 3, 4, :a, :a])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "can replace all the items in a vector" do
|
20
|
-
vector.fill(:a, 0, 6).should eql(V[:a, :a, :a, :a, :a, :a])
|
21
|
-
end
|
22
|
-
|
23
|
-
it "can fill past the end of the vector" do
|
24
|
-
vector.fill(:a, 3, 6).should eql(V[1, 2, 3, :a, :a, :a, :a, :a, :a])
|
25
|
-
end
|
26
|
-
|
27
|
-
context "with 1 argument" do
|
28
|
-
it "replaces all the items in the vector by default" do
|
29
|
-
vector.fill(:a).should eql(V[:a, :a, :a, :a, :a, :a])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "with 2 arguments" do
|
34
|
-
it "replaces up to the end of the vector by default" do
|
35
|
-
vector.fill(:a, 4).should eql(V[1, 2, 3, 4, :a, :a])
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context "when index and length are 0" do
|
40
|
-
it "leaves the vector unmodified" do
|
41
|
-
vector.fill(:a, 0, 0).should eql(vector)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context "when expanding a vector past boundary where vector trie needs to deepen" do
|
46
|
-
it "works the same" do
|
47
|
-
vector.fill(:a, 32, 3).size.should == 35
|
48
|
-
vector.fill(:a, 32, 3).to_a.size.should == 35
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
[1000, 1023, 1024, 1025, 2000].each do |size|
|
53
|
-
context "on a #{size}-item vector" do
|
54
|
-
it "works the same" do
|
55
|
-
array = (0..size).to_a
|
56
|
-
vector = V.new(array)
|
57
|
-
[[:a, 0, 5], [:b, 31, 2], [:c, 32, 60], [:d, 1000, 20], [:e, 1024, 33], [:f, 1200, 35]].each do |obj, index, length|
|
58
|
-
next if index > size
|
59
|
-
vector = vector.fill(obj, index, length)
|
60
|
-
array.fill(obj, index, length)
|
61
|
-
vector.size.should == array.size
|
62
|
-
ary = vector.to_a
|
63
|
-
ary.size.should == vector.size
|
64
|
-
ary.should eql(array)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
it "behaves like Array#fill, on a variety of inputs" do
|
71
|
-
50.times do
|
72
|
-
array = rand(100).times.map { rand(1000) }
|
73
|
-
index = rand(array.size)
|
74
|
-
length = rand(50)
|
75
|
-
V.new(array).fill(:a, index, length).should == array.fill(:a, index, length)
|
76
|
-
end
|
77
|
-
10.times do
|
78
|
-
array = rand(100).times.map { rand(10000) }
|
79
|
-
length = rand(100)
|
80
|
-
V.new(array).fill(:a, array.size, length).should == array.fill(:a, array.size, length)
|
81
|
-
end
|
82
|
-
10.times do
|
83
|
-
array = rand(100).times.map { rand(10000) }
|
84
|
-
V.new(array).fill(:a).should == array.fill(:a)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#first" do
|
5
|
-
[
|
6
|
-
[[], nil],
|
7
|
-
[["A"], "A"],
|
8
|
-
[%w[A B C], "A"],
|
9
|
-
[(1..32), 1],
|
10
|
-
].each do |values, expected|
|
11
|
-
describe "on #{values.inspect}" do
|
12
|
-
it "returns #{expected.inspect}" do
|
13
|
-
V[*values].first.should == expected
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[*values] }
|
5
|
-
|
6
|
-
describe "#flat_map" do
|
7
|
-
let(:block) { ->(item) { [item, item + 1, item * item] } }
|
8
|
-
let(:flat_map) { vector.flat_map(&block) }
|
9
|
-
let(:flattened_vector) { V[*flattened_values] }
|
10
|
-
|
11
|
-
shared_examples "checking flattened result" do
|
12
|
-
it "returns the flattened values as an Immutable::Vector" do
|
13
|
-
expect(flat_map).to eq(flattened_vector)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "returns an Immutable::Vector" do
|
17
|
-
expect(flat_map).to be_a(Immutable::Vector)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "with an empty vector" do
|
22
|
-
let(:values) { [] }
|
23
|
-
let(:flattened_values) { [] }
|
24
|
-
|
25
|
-
include_examples "checking flattened result"
|
26
|
-
end
|
27
|
-
|
28
|
-
context "with a block that returns an empty vector" do
|
29
|
-
let(:block) { ->(item) { [] } }
|
30
|
-
let(:values) { [1, 2, 3] }
|
31
|
-
let(:flattened_values) { [] }
|
32
|
-
|
33
|
-
include_examples "checking flattened result"
|
34
|
-
end
|
35
|
-
|
36
|
-
context "with a vector of one item" do
|
37
|
-
let(:values) { [7] }
|
38
|
-
let(:flattened_values) { [7, 8, 49] }
|
39
|
-
|
40
|
-
include_examples "checking flattened result"
|
41
|
-
end
|
42
|
-
|
43
|
-
context "with a vector of multiple items" do
|
44
|
-
let(:values) { [1, 2, 3] }
|
45
|
-
let(:flattened_values) { [1, 2, 1, 2, 3, 4, 3, 4, 9] }
|
46
|
-
|
47
|
-
include_examples "checking flattened result"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|