immutable-ruby 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/immutable/core_ext/enumerable.rb +1 -1
- data/lib/immutable/core_ext/io.rb +1 -1
- data/lib/immutable/core_ext.rb +2 -2
- data/lib/immutable/deque.rb +17 -17
- data/lib/immutable/enumerable.rb +10 -10
- data/lib/immutable/hash.rb +24 -24
- data/lib/immutable/list.rb +36 -36
- data/lib/immutable/nested.rb +8 -8
- data/lib/immutable/set.rb +30 -30
- data/lib/immutable/sorted_set.rb +30 -26
- data/lib/immutable/trie.rb +2 -2
- data/lib/immutable/vector.rb +40 -35
- data/lib/immutable/version.rb +1 -1
- data/lib/immutable.rb +9 -9
- metadata +36 -699
- data/lib/immutable/core_ext/struct.rb +0 -9
- data/spec/fixtures/io_spec.txt +0 -3
- data/spec/lib/immutable/core_ext/array_spec.rb +0 -13
- data/spec/lib/immutable/core_ext/enumerable_spec.rb +0 -29
- data/spec/lib/immutable/core_ext/io_spec.rb +0 -28
- data/spec/lib/immutable/deque/clear_spec.rb +0 -33
- data/spec/lib/immutable/deque/construction_spec.rb +0 -29
- data/spec/lib/immutable/deque/copying_spec.rb +0 -19
- data/spec/lib/immutable/deque/dequeue_spec.rb +0 -34
- data/spec/lib/immutable/deque/empty_spec.rb +0 -39
- data/spec/lib/immutable/deque/enqueue_spec.rb +0 -27
- data/spec/lib/immutable/deque/first_spec.rb +0 -17
- data/spec/lib/immutable/deque/inspect_spec.rb +0 -23
- data/spec/lib/immutable/deque/last_spec.rb +0 -17
- data/spec/lib/immutable/deque/marshal_spec.rb +0 -33
- data/spec/lib/immutable/deque/new_spec.rb +0 -43
- data/spec/lib/immutable/deque/pop_spec.rb +0 -36
- data/spec/lib/immutable/deque/pretty_print_spec.rb +0 -23
- data/spec/lib/immutable/deque/push_spec.rb +0 -36
- data/spec/lib/immutable/deque/random_modification_spec.rb +0 -33
- data/spec/lib/immutable/deque/rotate_spec.rb +0 -68
- data/spec/lib/immutable/deque/shift_spec.rb +0 -29
- data/spec/lib/immutable/deque/size_spec.rb +0 -19
- data/spec/lib/immutable/deque/to_a_spec.rb +0 -26
- data/spec/lib/immutable/deque/to_ary_spec.rb +0 -35
- data/spec/lib/immutable/deque/to_list_spec.rb +0 -24
- data/spec/lib/immutable/deque/unshift_spec.rb +0 -30
- data/spec/lib/immutable/hash/all_spec.rb +0 -53
- data/spec/lib/immutable/hash/any_spec.rb +0 -53
- data/spec/lib/immutable/hash/assoc_spec.rb +0 -51
- data/spec/lib/immutable/hash/clear_spec.rb +0 -42
- data/spec/lib/immutable/hash/construction_spec.rb +0 -38
- data/spec/lib/immutable/hash/copying_spec.rb +0 -13
- data/spec/lib/immutable/hash/default_proc_spec.rb +0 -72
- data/spec/lib/immutable/hash/delete_spec.rb +0 -39
- data/spec/lib/immutable/hash/dig_spec.rb +0 -34
- data/spec/lib/immutable/hash/each_spec.rb +0 -77
- data/spec/lib/immutable/hash/each_with_index_spec.rb +0 -29
- data/spec/lib/immutable/hash/empty_spec.rb +0 -43
- data/spec/lib/immutable/hash/eql_spec.rb +0 -75
- data/spec/lib/immutable/hash/except_spec.rb +0 -42
- data/spec/lib/immutable/hash/fetch_spec.rb +0 -57
- data/spec/lib/immutable/hash/fetch_values_spec.rb +0 -22
- data/spec/lib/immutable/hash/find_spec.rb +0 -43
- data/spec/lib/immutable/hash/flat_map_spec.rb +0 -35
- data/spec/lib/immutable/hash/flatten_spec.rb +0 -98
- data/spec/lib/immutable/hash/get_spec.rb +0 -79
- data/spec/lib/immutable/hash/has_key_spec.rb +0 -31
- data/spec/lib/immutable/hash/has_value_spec.rb +0 -27
- data/spec/lib/immutable/hash/hash_spec.rb +0 -29
- data/spec/lib/immutable/hash/inspect_spec.rb +0 -30
- data/spec/lib/immutable/hash/invert_spec.rb +0 -30
- data/spec/lib/immutable/hash/key_spec.rb +0 -27
- data/spec/lib/immutable/hash/keys_spec.rb +0 -15
- data/spec/lib/immutable/hash/map_spec.rb +0 -45
- data/spec/lib/immutable/hash/marshal_spec.rb +0 -28
- data/spec/lib/immutable/hash/merge_spec.rb +0 -82
- data/spec/lib/immutable/hash/min_max_spec.rb +0 -45
- data/spec/lib/immutable/hash/new_spec.rb +0 -70
- data/spec/lib/immutable/hash/none_spec.rb +0 -48
- data/spec/lib/immutable/hash/partition_spec.rb +0 -35
- data/spec/lib/immutable/hash/pretty_print_spec.rb +0 -34
- data/spec/lib/immutable/hash/put_spec.rb +0 -111
- data/spec/lib/immutable/hash/reduce_spec.rb +0 -35
- data/spec/lib/immutable/hash/reject_spec.rb +0 -61
- data/spec/lib/immutable/hash/reverse_each_spec.rb +0 -27
- data/spec/lib/immutable/hash/sample_spec.rb +0 -13
- data/spec/lib/immutable/hash/select_spec.rb +0 -57
- data/spec/lib/immutable/hash/size_spec.rb +0 -51
- data/spec/lib/immutable/hash/slice_spec.rb +0 -44
- data/spec/lib/immutable/hash/sort_spec.rb +0 -26
- data/spec/lib/immutable/hash/store_spec.rb +0 -75
- data/spec/lib/immutable/hash/subset_spec.rb +0 -42
- data/spec/lib/immutable/hash/superset_spec.rb +0 -42
- data/spec/lib/immutable/hash/take_spec.rb +0 -35
- data/spec/lib/immutable/hash/to_a_spec.rb +0 -13
- data/spec/lib/immutable/hash/to_hash_spec.rb +0 -21
- data/spec/lib/immutable/hash/to_proc_spec.rb +0 -39
- data/spec/lib/immutable/hash/update_in_spec.rb +0 -79
- data/spec/lib/immutable/hash/values_at_spec.rb +0 -33
- data/spec/lib/immutable/hash/values_spec.rb +0 -23
- data/spec/lib/immutable/list/add_spec.rb +0 -25
- data/spec/lib/immutable/list/all_spec.rb +0 -57
- data/spec/lib/immutable/list/any_spec.rb +0 -49
- data/spec/lib/immutable/list/append_spec.rb +0 -38
- data/spec/lib/immutable/list/at_spec.rb +0 -29
- data/spec/lib/immutable/list/break_spec.rb +0 -69
- data/spec/lib/immutable/list/cadr_spec.rb +0 -38
- data/spec/lib/immutable/list/chunk_spec.rb +0 -28
- data/spec/lib/immutable/list/clear_spec.rb +0 -24
- data/spec/lib/immutable/list/combination_spec.rb +0 -33
- data/spec/lib/immutable/list/compact_spec.rb +0 -34
- data/spec/lib/immutable/list/compare_spec.rb +0 -30
- data/spec/lib/immutable/list/cons_spec.rb +0 -25
- data/spec/lib/immutable/list/construction_spec.rb +0 -110
- data/spec/lib/immutable/list/copying_spec.rb +0 -19
- data/spec/lib/immutable/list/count_spec.rb +0 -36
- data/spec/lib/immutable/list/cycle_spec.rb +0 -28
- data/spec/lib/immutable/list/delete_at_spec.rb +0 -18
- data/spec/lib/immutable/list/delete_spec.rb +0 -16
- data/spec/lib/immutable/list/drop_spec.rb +0 -30
- data/spec/lib/immutable/list/drop_while_spec.rb +0 -38
- data/spec/lib/immutable/list/each_slice_spec.rb +0 -51
- data/spec/lib/immutable/list/each_spec.rb +0 -40
- data/spec/lib/immutable/list/each_with_index_spec.rb +0 -28
- data/spec/lib/immutable/list/empty_spec.rb +0 -23
- data/spec/lib/immutable/list/eql_spec.rb +0 -61
- data/spec/lib/immutable/list/fill_spec.rb +0 -49
- data/spec/lib/immutable/list/find_all_spec.rb +0 -70
- data/spec/lib/immutable/list/find_index_spec.rb +0 -35
- data/spec/lib/immutable/list/find_spec.rb +0 -42
- data/spec/lib/immutable/list/flat_map_spec.rb +0 -51
- data/spec/lib/immutable/list/flatten_spec.rb +0 -30
- data/spec/lib/immutable/list/grep_spec.rb +0 -46
- data/spec/lib/immutable/list/group_by_spec.rb +0 -41
- data/spec/lib/immutable/list/hash_spec.rb +0 -21
- data/spec/lib/immutable/list/head_spec.rb +0 -19
- data/spec/lib/immutable/list/include_spec.rb +0 -35
- data/spec/lib/immutable/list/index_spec.rb +0 -37
- data/spec/lib/immutable/list/indices_spec.rb +0 -61
- data/spec/lib/immutable/list/init_spec.rb +0 -28
- data/spec/lib/immutable/list/inits_spec.rb +0 -28
- data/spec/lib/immutable/list/insert_spec.rb +0 -46
- data/spec/lib/immutable/list/inspect_spec.rb +0 -29
- data/spec/lib/immutable/list/intersperse_spec.rb +0 -28
- data/spec/lib/immutable/list/join_spec.rb +0 -63
- data/spec/lib/immutable/list/last_spec.rb +0 -23
- data/spec/lib/immutable/list/ltlt_spec.rb +0 -19
- data/spec/lib/immutable/list/map_spec.rb +0 -45
- data/spec/lib/immutable/list/maximum_spec.rb +0 -39
- data/spec/lib/immutable/list/merge_by_spec.rb +0 -51
- data/spec/lib/immutable/list/merge_spec.rb +0 -59
- data/spec/lib/immutable/list/minimum_spec.rb +0 -39
- data/spec/lib/immutable/list/multithreading_spec.rb +0 -47
- data/spec/lib/immutable/list/none_spec.rb +0 -47
- data/spec/lib/immutable/list/one_spec.rb +0 -49
- data/spec/lib/immutable/list/partition_spec.rb +0 -115
- data/spec/lib/immutable/list/permutation_spec.rb +0 -55
- data/spec/lib/immutable/list/pop_spec.rb +0 -25
- data/spec/lib/immutable/list/product_spec.rb +0 -23
- data/spec/lib/immutable/list/reduce_spec.rb +0 -53
- data/spec/lib/immutable/list/reject_spec.rb +0 -45
- data/spec/lib/immutable/list/reverse_spec.rb +0 -34
- data/spec/lib/immutable/list/rotate_spec.rb +0 -36
- data/spec/lib/immutable/list/sample_spec.rb +0 -13
- data/spec/lib/immutable/list/select_spec.rb +0 -70
- data/spec/lib/immutable/list/size_spec.rb +0 -25
- data/spec/lib/immutable/list/slice_spec.rb +0 -229
- data/spec/lib/immutable/list/sorting_spec.rb +0 -46
- data/spec/lib/immutable/list/span_spec.rb +0 -76
- data/spec/lib/immutable/list/split_at_spec.rb +0 -43
- data/spec/lib/immutable/list/subsequences_spec.rb +0 -23
- data/spec/lib/immutable/list/sum_spec.rb +0 -23
- data/spec/lib/immutable/list/tail_spec.rb +0 -30
- data/spec/lib/immutable/list/tails_spec.rb +0 -28
- data/spec/lib/immutable/list/take_spec.rb +0 -30
- data/spec/lib/immutable/list/take_while_spec.rb +0 -46
- data/spec/lib/immutable/list/to_a_spec.rb +0 -39
- data/spec/lib/immutable/list/to_ary_spec.rb +0 -41
- data/spec/lib/immutable/list/to_list_spec.rb +0 -19
- data/spec/lib/immutable/list/to_set_spec.rb +0 -17
- data/spec/lib/immutable/list/transpose_spec.rb +0 -19
- data/spec/lib/immutable/list/union_spec.rb +0 -31
- data/spec/lib/immutable/list/uniq_spec.rb +0 -35
- data/spec/lib/immutable/list/zip_spec.rb +0 -23
- data/spec/lib/immutable/nested/construction_spec.rb +0 -101
- data/spec/lib/immutable/set/add_spec.rb +0 -77
- data/spec/lib/immutable/set/all_spec.rb +0 -51
- data/spec/lib/immutable/set/any_spec.rb +0 -51
- data/spec/lib/immutable/set/clear_spec.rb +0 -33
- data/spec/lib/immutable/set/compact_spec.rb +0 -30
- data/spec/lib/immutable/set/construction_spec.rb +0 -18
- data/spec/lib/immutable/set/copying_spec.rb +0 -13
- data/spec/lib/immutable/set/count_spec.rb +0 -36
- data/spec/lib/immutable/set/delete_spec.rb +0 -71
- data/spec/lib/immutable/set/difference_spec.rb +0 -49
- data/spec/lib/immutable/set/disjoint_spec.rb +0 -25
- data/spec/lib/immutable/set/each_spec.rb +0 -45
- data/spec/lib/immutable/set/empty_spec.rb +0 -44
- data/spec/lib/immutable/set/eqeq_spec.rb +0 -103
- data/spec/lib/immutable/set/eql_spec.rb +0 -109
- data/spec/lib/immutable/set/exclusion_spec.rb +0 -47
- data/spec/lib/immutable/set/find_spec.rb +0 -35
- data/spec/lib/immutable/set/first_spec.rb +0 -28
- data/spec/lib/immutable/set/flatten_spec.rb +0 -46
- data/spec/lib/immutable/set/grep_spec.rb +0 -57
- data/spec/lib/immutable/set/grep_v_spec.rb +0 -59
- data/spec/lib/immutable/set/group_by_spec.rb +0 -59
- data/spec/lib/immutable/set/hash_spec.rb +0 -22
- data/spec/lib/immutable/set/include_spec.rb +0 -60
- data/spec/lib/immutable/set/inspect_spec.rb +0 -47
- data/spec/lib/immutable/set/intersect_spec.rb +0 -25
- data/spec/lib/immutable/set/intersection_spec.rb +0 -52
- data/spec/lib/immutable/set/join_spec.rb +0 -64
- data/spec/lib/immutable/set/map_spec.rb +0 -59
- data/spec/lib/immutable/set/marshal_spec.rb +0 -28
- data/spec/lib/immutable/set/maximum_spec.rb +0 -36
- data/spec/lib/immutable/set/minimum_spec.rb +0 -36
- data/spec/lib/immutable/set/new_spec.rb +0 -53
- data/spec/lib/immutable/set/none_spec.rb +0 -47
- data/spec/lib/immutable/set/one_spec.rb +0 -47
- data/spec/lib/immutable/set/partition_spec.rb +0 -52
- data/spec/lib/immutable/set/product_spec.rb +0 -23
- data/spec/lib/immutable/set/reduce_spec.rb +0 -55
- data/spec/lib/immutable/set/reject_spec.rb +0 -50
- data/spec/lib/immutable/set/reverse_each_spec.rb +0 -38
- data/spec/lib/immutable/set/sample_spec.rb +0 -13
- data/spec/lib/immutable/set/select_spec.rb +0 -73
- data/spec/lib/immutable/set/size_spec.rb +0 -17
- data/spec/lib/immutable/set/sorting_spec.rb +0 -65
- data/spec/lib/immutable/set/subset_spec.rb +0 -51
- data/spec/lib/immutable/set/sum_spec.rb +0 -23
- data/spec/lib/immutable/set/superset_spec.rb +0 -51
- data/spec/lib/immutable/set/to_a_spec.rb +0 -30
- data/spec/lib/immutable/set/to_list_spec.rb +0 -35
- data/spec/lib/immutable/set/to_set_spec.rb +0 -19
- data/spec/lib/immutable/set/union_spec.rb +0 -63
- data/spec/lib/immutable/sorted_set/above_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/add_spec.rb +0 -62
- data/spec/lib/immutable/sorted_set/at_spec.rb +0 -24
- data/spec/lib/immutable/sorted_set/below_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/between_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/clear_spec.rb +0 -43
- data/spec/lib/immutable/sorted_set/copying_spec.rb +0 -20
- data/spec/lib/immutable/sorted_set/delete_at_spec.rb +0 -18
- data/spec/lib/immutable/sorted_set/delete_spec.rb +0 -89
- data/spec/lib/immutable/sorted_set/difference_spec.rb +0 -22
- data/spec/lib/immutable/sorted_set/disjoint_spec.rb +0 -25
- data/spec/lib/immutable/sorted_set/drop_spec.rb +0 -55
- data/spec/lib/immutable/sorted_set/drop_while_spec.rb +0 -34
- data/spec/lib/immutable/sorted_set/each_spec.rb +0 -28
- data/spec/lib/immutable/sorted_set/empty_spec.rb +0 -34
- data/spec/lib/immutable/sorted_set/eql_spec.rb +0 -120
- data/spec/lib/immutable/sorted_set/exclusion_spec.rb +0 -22
- data/spec/lib/immutable/sorted_set/fetch_spec.rb +0 -64
- data/spec/lib/immutable/sorted_set/find_index_spec.rb +0 -40
- data/spec/lib/immutable/sorted_set/first_spec.rb +0 -18
- data/spec/lib/immutable/sorted_set/from_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/group_by_spec.rb +0 -57
- data/spec/lib/immutable/sorted_set/include_spec.rb +0 -23
- data/spec/lib/immutable/sorted_set/inspect_spec.rb +0 -37
- data/spec/lib/immutable/sorted_set/intersect_spec.rb +0 -25
- data/spec/lib/immutable/sorted_set/intersection_spec.rb +0 -28
- data/spec/lib/immutable/sorted_set/last_spec.rb +0 -36
- data/spec/lib/immutable/sorted_set/map_spec.rb +0 -51
- data/spec/lib/immutable/sorted_set/marshal_spec.rb +0 -36
- data/spec/lib/immutable/sorted_set/maximum_spec.rb +0 -36
- data/spec/lib/immutable/sorted_set/minimum_spec.rb +0 -19
- data/spec/lib/immutable/sorted_set/new_spec.rb +0 -137
- data/spec/lib/immutable/sorted_set/reverse_each_spec.rb +0 -28
- data/spec/lib/immutable/sorted_set/sample_spec.rb +0 -13
- data/spec/lib/immutable/sorted_set/select_spec.rb +0 -61
- data/spec/lib/immutable/sorted_set/size_spec.rb +0 -17
- data/spec/lib/immutable/sorted_set/slice_spec.rb +0 -256
- data/spec/lib/immutable/sorted_set/sorting_spec.rb +0 -56
- data/spec/lib/immutable/sorted_set/subset_spec.rb +0 -47
- data/spec/lib/immutable/sorted_set/superset_spec.rb +0 -47
- data/spec/lib/immutable/sorted_set/take_spec.rb +0 -54
- data/spec/lib/immutable/sorted_set/take_while_spec.rb +0 -33
- data/spec/lib/immutable/sorted_set/to_set_spec.rb +0 -17
- data/spec/lib/immutable/sorted_set/union_spec.rb +0 -58
- data/spec/lib/immutable/sorted_set/up_to_spec.rb +0 -52
- data/spec/lib/immutable/sorted_set/util_spec.rb +0 -48
- data/spec/lib/immutable/sorted_set/values_at_spec.rb +0 -33
- data/spec/lib/immutable/vector/add_spec.rb +0 -67
- data/spec/lib/immutable/vector/any_spec.rb +0 -69
- data/spec/lib/immutable/vector/assoc_spec.rb +0 -45
- data/spec/lib/immutable/vector/bsearch_spec.rb +0 -65
- data/spec/lib/immutable/vector/clear_spec.rb +0 -33
- data/spec/lib/immutable/vector/combination_spec.rb +0 -81
- data/spec/lib/immutable/vector/compact_spec.rb +0 -29
- data/spec/lib/immutable/vector/compare_spec.rb +0 -31
- data/spec/lib/immutable/vector/concat_spec.rb +0 -34
- data/spec/lib/immutable/vector/copying_spec.rb +0 -20
- data/spec/lib/immutable/vector/count_spec.rb +0 -17
- data/spec/lib/immutable/vector/delete_at_spec.rb +0 -53
- data/spec/lib/immutable/vector/delete_spec.rb +0 -30
- data/spec/lib/immutable/vector/dig_spec.rb +0 -30
- data/spec/lib/immutable/vector/drop_spec.rb +0 -41
- data/spec/lib/immutable/vector/drop_while_spec.rb +0 -54
- data/spec/lib/immutable/vector/each_index_spec.rb +0 -40
- data/spec/lib/immutable/vector/each_spec.rb +0 -44
- data/spec/lib/immutable/vector/each_with_index_spec.rb +0 -39
- data/spec/lib/immutable/vector/empty_spec.rb +0 -41
- data/spec/lib/immutable/vector/eql_spec.rb +0 -76
- data/spec/lib/immutable/vector/fetch_spec.rb +0 -64
- data/spec/lib/immutable/vector/fill_spec.rb +0 -88
- data/spec/lib/immutable/vector/first_spec.rb +0 -18
- data/spec/lib/immutable/vector/flat_map_spec.rb +0 -50
- data/spec/lib/immutable/vector/flatten_spec.rb +0 -58
- data/spec/lib/immutable/vector/get_spec.rb +0 -74
- data/spec/lib/immutable/vector/group_by_spec.rb +0 -57
- data/spec/lib/immutable/vector/include_spec.rb +0 -30
- data/spec/lib/immutable/vector/insert_spec.rb +0 -68
- data/spec/lib/immutable/vector/inspect_spec.rb +0 -49
- data/spec/lib/immutable/vector/join_spec.rb +0 -58
- data/spec/lib/immutable/vector/last_spec.rb +0 -45
- data/spec/lib/immutable/vector/length_spec.rb +0 -45
- data/spec/lib/immutable/vector/ltlt_spec.rb +0 -65
- data/spec/lib/immutable/vector/map_spec.rb +0 -51
- data/spec/lib/immutable/vector/marshal_spec.rb +0 -31
- data/spec/lib/immutable/vector/maximum_spec.rb +0 -33
- data/spec/lib/immutable/vector/minimum_spec.rb +0 -33
- data/spec/lib/immutable/vector/multiply_spec.rb +0 -47
- data/spec/lib/immutable/vector/new_spec.rb +0 -50
- data/spec/lib/immutable/vector/partition_spec.rb +0 -52
- data/spec/lib/immutable/vector/permutation_spec.rb +0 -91
- data/spec/lib/immutable/vector/pop_spec.rb +0 -26
- data/spec/lib/immutable/vector/product_spec.rb +0 -70
- data/spec/lib/immutable/vector/reduce_spec.rb +0 -55
- data/spec/lib/immutable/vector/reject_spec.rb +0 -43
- data/spec/lib/immutable/vector/repeated_combination_spec.rb +0 -77
- data/spec/lib/immutable/vector/repeated_permutation_spec.rb +0 -93
- data/spec/lib/immutable/vector/reverse_each_spec.rb +0 -31
- data/spec/lib/immutable/vector/reverse_spec.rb +0 -21
- data/spec/lib/immutable/vector/rindex_spec.rb +0 -36
- data/spec/lib/immutable/vector/rotate_spec.rb +0 -73
- data/spec/lib/immutable/vector/sample_spec.rb +0 -13
- data/spec/lib/immutable/vector/select_spec.rb +0 -63
- data/spec/lib/immutable/vector/set_spec.rb +0 -174
- data/spec/lib/immutable/vector/shift_spec.rb +0 -27
- data/spec/lib/immutable/vector/shuffle_spec.rb +0 -43
- data/spec/lib/immutable/vector/slice_spec.rb +0 -240
- data/spec/lib/immutable/vector/sorting_spec.rb +0 -56
- data/spec/lib/immutable/vector/sum_spec.rb +0 -17
- data/spec/lib/immutable/vector/take_spec.rb +0 -42
- data/spec/lib/immutable/vector/take_while_spec.rb +0 -34
- data/spec/lib/immutable/vector/to_a_spec.rb +0 -41
- data/spec/lib/immutable/vector/to_ary_spec.rb +0 -34
- data/spec/lib/immutable/vector/to_list_spec.rb +0 -30
- data/spec/lib/immutable/vector/to_set_spec.rb +0 -21
- data/spec/lib/immutable/vector/transpose_spec.rb +0 -48
- data/spec/lib/immutable/vector/uniq_spec.rb +0 -76
- data/spec/lib/immutable/vector/unshift_spec.rb +0 -28
- data/spec/lib/immutable/vector/update_in_spec.rb +0 -82
- data/spec/lib/immutable/vector/values_at_spec.rb +0 -33
- data/spec/lib/immutable/vector/zip_spec.rb +0 -57
- data/spec/lib/load_spec.rb +0 -42
- data/spec/spec_helper.rb +0 -96
@@ -1,52 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::SortedSet do
|
4
|
-
describe "#up_to" do
|
5
|
-
context "when called without a block" do
|
6
|
-
it "returns a sorted set of all items equal to or less than the argument" do
|
7
|
-
100.times do
|
8
|
-
items = rand(100).times.collect { rand(1000) }.uniq
|
9
|
-
set = SS.new(items)
|
10
|
-
threshold = rand(1000)
|
11
|
-
result = set.up_to(threshold)
|
12
|
-
array = items.select { |x| x <= threshold }.sort
|
13
|
-
result.class.should be(Immutable::SortedSet)
|
14
|
-
result.size.should == array.size
|
15
|
-
result.to_a.should == array
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "when called with a block" do
|
21
|
-
it "yields all the items equal to or less than than the argument" do
|
22
|
-
100.times do
|
23
|
-
items = rand(100).times.collect { rand(1000) }.uniq
|
24
|
-
set = SS.new(items)
|
25
|
-
threshold = rand(1000)
|
26
|
-
result = []
|
27
|
-
set.up_to(threshold) { |x| result << x }
|
28
|
-
array = items.select { |x| x <= threshold }.sort
|
29
|
-
result.size.should == array.size
|
30
|
-
result.should == array
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "on an empty set" do
|
36
|
-
it "returns an empty set" do
|
37
|
-
SS.empty.up_to(1).should be_empty
|
38
|
-
SS.empty.up_to('abc').should be_empty
|
39
|
-
SS.empty.up_to(:symbol).should be_empty
|
40
|
-
SS.empty.up_to(nil).should be_empty
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "with an argument less than all the values in the set" do
|
45
|
-
it "returns an empty set" do
|
46
|
-
result = SS.new(1..100).up_to(0)
|
47
|
-
result.class.should be(Immutable::SortedSet)
|
48
|
-
result.should be_empty
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::SortedSet do
|
4
|
-
# Utility method used for filtering out duplicate objects, with equality
|
5
|
-
# determined by comparator
|
6
|
-
describe ".uniq_by_comparator!" do
|
7
|
-
it "can handle empty arrays" do
|
8
|
-
array = []
|
9
|
-
SS.uniq_by_comparator!(array, ->(x,y) { x <=> y })
|
10
|
-
expect(array).to be_empty
|
11
|
-
end
|
12
|
-
|
13
|
-
it "can handle arrays with 1 element" do
|
14
|
-
array = [1]
|
15
|
-
SS.uniq_by_comparator!(array, ->(x,y) { x <=> y })
|
16
|
-
expect(array).to eq([1])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "can handle arrays with 2 elements and no dupes" do
|
20
|
-
array = [1, 2]
|
21
|
-
SS.uniq_by_comparator!(array, ->(x,y) { x <=> y })
|
22
|
-
expect(array).to eq([1, 2])
|
23
|
-
end
|
24
|
-
|
25
|
-
it "can handle arrays with 2 elements and dupes" do
|
26
|
-
array = [1, 1]
|
27
|
-
SS.uniq_by_comparator!(array, ->(x,y) { x <=> y })
|
28
|
-
expect(array).to eq([1])
|
29
|
-
end
|
30
|
-
|
31
|
-
it "can handle arrays with lots of elements" do
|
32
|
-
100.times do
|
33
|
-
array1 = rand(100).times.collect { rand(100) }.sort
|
34
|
-
array2 = array1.dup.uniq
|
35
|
-
SS.uniq_by_comparator!(array1, ->(x,y) { x <=> y })
|
36
|
-
expect(array1).to eq(array2)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "works with funny comparators" do
|
41
|
-
# let's work in modulo arithmetic
|
42
|
-
comparator = ->(x,y) { (x % 7) <=> (y % 7) }
|
43
|
-
array = [21, 1, 8, 1, 9, 10, 3, 5, 6, 20] # this is "sorted" (modulo 7)
|
44
|
-
SS.uniq_by_comparator!(array, comparator)
|
45
|
-
expect(array).to eq([21, 1, 9, 10, 5, 6])
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::SortedSet do
|
4
|
-
describe "#values_at" do
|
5
|
-
let(:sorted_set) { SS['a', 'b', 'c'] }
|
6
|
-
|
7
|
-
it "accepts any number of indices, and returns a sorted_set of items at those indices" do
|
8
|
-
sorted_set.values_at(0).should eql(SS['a'])
|
9
|
-
sorted_set.values_at(1,2).should eql(SS['b', 'c'])
|
10
|
-
end
|
11
|
-
|
12
|
-
context "when passed invalid indices" do
|
13
|
-
it "filters them out" do
|
14
|
-
sorted_set.values_at(1,2,3).should eql(SS['b', 'c'])
|
15
|
-
sorted_set.values_at(-10,10).should eql(SS.empty)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when passed no arguments" do
|
20
|
-
it "returns an empty sorted_set" do
|
21
|
-
sorted_set.values_at.should eql(SS.empty)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "from a subclass" do
|
26
|
-
it "returns an instance of the subclass" do
|
27
|
-
subclass = Class.new(Immutable::SortedSet)
|
28
|
-
instance = subclass.new([1,2,3])
|
29
|
-
instance.values_at(1,2).class.should be(subclass)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[*values] }
|
5
|
-
|
6
|
-
[:add, :<<, :push].each do |method|
|
7
|
-
describe "##{method}" do
|
8
|
-
shared_examples "checking adding values" do
|
9
|
-
let(:added_vector) { V[*added_values] }
|
10
|
-
|
11
|
-
it "preserves the original" do
|
12
|
-
original = vector
|
13
|
-
vector.send(method, added_value)
|
14
|
-
expect(original).to eq(vector)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "adds the item to the vector" do
|
18
|
-
result = vector.send(method, added_value)
|
19
|
-
expect(result).to eq(added_vector)
|
20
|
-
expect(result.size).to eq(vector.size + 1)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with a empty vector adding a single item" do
|
25
|
-
let(:values) { [] }
|
26
|
-
let(:added_value) { "A" }
|
27
|
-
let(:added_values) { ["A"] }
|
28
|
-
|
29
|
-
include_examples "checking adding values"
|
30
|
-
end
|
31
|
-
|
32
|
-
context "with a single-item vector adding a different item" do
|
33
|
-
let(:values) { ["A"] }
|
34
|
-
let(:added_value) { "B" }
|
35
|
-
let(:added_values) { %w[A B] }
|
36
|
-
|
37
|
-
include_examples "checking adding values"
|
38
|
-
end
|
39
|
-
|
40
|
-
context "with a single-item vector adding a duplicate item" do
|
41
|
-
let(:values) { ["A"] }
|
42
|
-
let(:added_value) { "A" }
|
43
|
-
let(:added_values) { %w[A A] }
|
44
|
-
|
45
|
-
include_examples "checking adding values"
|
46
|
-
end
|
47
|
-
|
48
|
-
[31, 32, 33, 1023, 1024, 1025].each do |size|
|
49
|
-
context "with a #{size}-item vector adding a different item" do
|
50
|
-
let(:values) { (1..size).to_a }
|
51
|
-
let(:added_value) { size+1 }
|
52
|
-
let(:added_values) { (1..(size+1)).to_a }
|
53
|
-
|
54
|
-
include_examples "checking adding values"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "from a subclass" do
|
59
|
-
it "returns an instance of the subclass" do
|
60
|
-
subclass = Class.new(Immutable::Vector)
|
61
|
-
instance = subclass[1,2,3]
|
62
|
-
instance.add(4).class.should be(subclass)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[*values] }
|
5
|
-
|
6
|
-
describe "#any?" do
|
7
|
-
let(:any?) { vector.any?(&block) }
|
8
|
-
|
9
|
-
context "when created with no values" do
|
10
|
-
let(:values) { [] }
|
11
|
-
|
12
|
-
context "with a block" do
|
13
|
-
let(:block) { ->(item) { item + 1 } }
|
14
|
-
|
15
|
-
it "returns false" do
|
16
|
-
expect(any?).to be(false)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "with a block" do
|
21
|
-
let(:block) { nil }
|
22
|
-
|
23
|
-
it "returns false" do
|
24
|
-
expect(any?).to be(false)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "when created with values" do
|
30
|
-
let(:values) { ["A", "B", 3, nil] }
|
31
|
-
|
32
|
-
context "with a block that returns true" do
|
33
|
-
let(:block) { ->(item) { item == 3 } }
|
34
|
-
|
35
|
-
it "returns true" do
|
36
|
-
expect(any?).to be(true)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "with a block that doesn't return true" do
|
41
|
-
let(:block) { ->(item) { item == "D" } }
|
42
|
-
|
43
|
-
it "returns false" do
|
44
|
-
expect(any?).to be(false)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "without a block" do
|
49
|
-
let(:block) { nil }
|
50
|
-
|
51
|
-
context "with some values that are truthy" do
|
52
|
-
let(:values) { [nil, false, "B"] }
|
53
|
-
|
54
|
-
it "returns true" do
|
55
|
-
expect(any?).to be(true)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "with all values that are falsey" do
|
60
|
-
let(:values) { [nil, false] }
|
61
|
-
|
62
|
-
it "returns false" do
|
63
|
-
expect(any?).to be(false)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[[:a, 3], [:b, 2], [:c, 1]] }
|
5
|
-
|
6
|
-
describe "#assoc" do
|
7
|
-
it "searches for a 2-element array with a given 1st item" do
|
8
|
-
vector.assoc(:b).should == [:b, 2]
|
9
|
-
end
|
10
|
-
|
11
|
-
it "returns nil if a matching 1st item is not found" do
|
12
|
-
vector.assoc(:d).should be_nil
|
13
|
-
end
|
14
|
-
|
15
|
-
it "uses #== to compare 1st items with provided object" do
|
16
|
-
vector.assoc(EqualNotEql.new).should_not be_nil
|
17
|
-
vector.assoc(EqlNotEqual.new).should be_nil
|
18
|
-
end
|
19
|
-
|
20
|
-
it "skips elements which are not indexable" do
|
21
|
-
V[false, true, nil].assoc(:b).should be_nil
|
22
|
-
V[[1,2], nil].assoc(3).should be_nil
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#rassoc" do
|
27
|
-
it "searches for a 2-element array with a given 2nd item" do
|
28
|
-
vector.rassoc(1).should == [:c, 1]
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns nil if a matching 2nd item is not found" do
|
32
|
-
vector.rassoc(4).should be_nil
|
33
|
-
end
|
34
|
-
|
35
|
-
it "uses #== to compare 2nd items with provided object" do
|
36
|
-
vector.rassoc(EqualNotEql.new).should_not be_nil
|
37
|
-
vector.rassoc(EqlNotEqual.new).should be_nil
|
38
|
-
end
|
39
|
-
|
40
|
-
it "skips elements which are not indexable" do
|
41
|
-
V[false, true, nil].rassoc(:b).should be_nil
|
42
|
-
V[[1,2], nil].rassoc(3).should be_nil
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#bsearch" do
|
5
|
-
let(:vector) { V[5,10,20,30] }
|
6
|
-
|
7
|
-
context "with a block which returns false for elements below desired position, and true for those at/above" do
|
8
|
-
it "returns the first element for which the predicate is true" do
|
9
|
-
vector.bsearch { |x| x > 10 }.should be(20)
|
10
|
-
vector.bsearch { |x| x > 1 }.should be(5)
|
11
|
-
vector.bsearch { |x| x > 25 }.should be(30)
|
12
|
-
end
|
13
|
-
|
14
|
-
context "if the block always returns false" do
|
15
|
-
it "returns nil" do
|
16
|
-
vector.bsearch { false }.should be_nil
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "if the block always returns true" do
|
21
|
-
it "returns the first element" do
|
22
|
-
vector.bsearch { true }.should be(5)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "with a block which returns a negative number for elements below desired position, zero for the right element, and positive for those above" do
|
28
|
-
it "returns the element for which the block returns zero" do
|
29
|
-
vector.bsearch { |x| x <=> 10 }.should be(10)
|
30
|
-
end
|
31
|
-
|
32
|
-
context "if the block always returns positive" do
|
33
|
-
it "returns nil" do
|
34
|
-
vector.bsearch { 1 }.should be_nil
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "if the block always returns negative" do
|
39
|
-
it "returns nil" do
|
40
|
-
vector.bsearch { -1 }.should be_nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "if the block returns sometimes positive, sometimes negative, but never zero" do
|
45
|
-
it "returns nil" do
|
46
|
-
vector.bsearch { |x| x <=> 11 }.should be_nil
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "if not passed a block" do
|
51
|
-
it "returns an Enumerator" do
|
52
|
-
enum = vector.bsearch
|
53
|
-
enum.should be_a(Enumerator)
|
54
|
-
enum.each { |x| x <=> 10 }.should == 10
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "on an empty vector" do
|
60
|
-
it "returns nil" do
|
61
|
-
V.empty.bsearch { |x| x > 5 }.should be_nil
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#clear" do
|
5
|
-
[
|
6
|
-
[],
|
7
|
-
["A"],
|
8
|
-
%w[A B C],
|
9
|
-
].each do |values|
|
10
|
-
describe "on #{values}" do
|
11
|
-
let(:vector) { V[*values] }
|
12
|
-
|
13
|
-
it "preserves the original" do
|
14
|
-
vector.clear
|
15
|
-
vector.should eql(V[*values])
|
16
|
-
end
|
17
|
-
|
18
|
-
it "returns an empty vector" do
|
19
|
-
vector.clear.should equal(V.empty)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "from a subclass" do
|
24
|
-
it "returns an instance of the subclass" do
|
25
|
-
subclass = Class.new(Immutable::Vector)
|
26
|
-
instance = subclass.new(%w{a b c})
|
27
|
-
instance.clear.class.should be(subclass)
|
28
|
-
instance.clear.should be_empty
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#combination" do
|
5
|
-
let(:vector) { V[1,2,3,4] }
|
6
|
-
|
7
|
-
context "with a block" do
|
8
|
-
it "returns self" do
|
9
|
-
vector.combination(2) {}.should be(vector)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context "with no block" do
|
14
|
-
it "returns an Enumerator" do
|
15
|
-
vector.combination(2).class.should be(Enumerator)
|
16
|
-
vector.combination(2).to_a.should == vector.to_a.combination(2).to_a
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "when passed an argument which is out of bounds" do
|
21
|
-
it "yields nothing and returns self" do
|
22
|
-
vector.combination(5) { fail }.should be(vector)
|
23
|
-
vector.combination(-1) { fail }.should be(vector)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when passed an argument zero" do
|
28
|
-
it "yields an empty array" do
|
29
|
-
result = []
|
30
|
-
vector.combination(0) { |obj| result << obj }
|
31
|
-
result.should eql([[]])
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when passed an argument equal to the vector's length" do
|
36
|
-
it "yields self as an array" do
|
37
|
-
result = []
|
38
|
-
vector.combination(4) { |obj| result << obj }
|
39
|
-
result.should eql([vector.to_a])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context "when passed an argument 1" do
|
44
|
-
it "yields each item in the vector, as single-item vectors" do
|
45
|
-
result = []
|
46
|
-
vector.combination(1) { |obj| result << obj }
|
47
|
-
result.should eql([[1], [2], [3], [4]])
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "when passed another integral argument" do
|
52
|
-
it "yields all combinations of the given length" do
|
53
|
-
result = []
|
54
|
-
vector.combination(3) { |obj| result << obj }
|
55
|
-
result.should eql([[1,2,3], [1,2,4], [1,3,4], [2,3,4]])
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "on an empty vector" do
|
60
|
-
it "works the same" do
|
61
|
-
V.empty.combination(0).to_a.should == [[]]
|
62
|
-
V.empty.combination(1).to_a.should == []
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
it "works on many combinations of input" do
|
67
|
-
0.upto(5) do |comb_size|
|
68
|
-
array = 12.times.map { rand(1000) }
|
69
|
-
V.new(array).combination(comb_size).to_a.should == array.combination(comb_size).to_a
|
70
|
-
end
|
71
|
-
|
72
|
-
array = 20.times.map { rand(1000) }
|
73
|
-
V.new(array).combination(2).to_a.should == array.combination(2).to_a
|
74
|
-
end
|
75
|
-
|
76
|
-
it "leaves the original unmodified" do
|
77
|
-
vector.combination(2) {}
|
78
|
-
vector.should eql(V[1,2,3,4])
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#compact" do
|
5
|
-
it "returns a new Vector with all nils removed" do
|
6
|
-
V[1, nil, 2, nil].compact.should eql(V[1, 2])
|
7
|
-
V[1, 2, 3].compact.should eql(V[1, 2, 3])
|
8
|
-
V[nil].compact.should eql(V.empty)
|
9
|
-
end
|
10
|
-
|
11
|
-
context "on an empty vector" do
|
12
|
-
it "returns self" do
|
13
|
-
V.empty.compact.should be(V.empty)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "doesn't remove false" do
|
18
|
-
V[false].compact.should eql(V[false])
|
19
|
-
end
|
20
|
-
|
21
|
-
context "from a subclass" do
|
22
|
-
it "returns an instance of the subclass" do
|
23
|
-
subclass = Class.new(V)
|
24
|
-
instance = subclass[1, nil, 2]
|
25
|
-
instance.compact.class.should be(subclass)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#<=>" do
|
5
|
-
[
|
6
|
-
[[], [1]],
|
7
|
-
[[1], [2]],
|
8
|
-
[[1], [1, 2]],
|
9
|
-
[[2, 3, 4], [3, 4, 5]],
|
10
|
-
[[[0]], [[1]]]
|
11
|
-
].each do |items1, items2|
|
12
|
-
describe "with #{items1} and #{items2}" do
|
13
|
-
it "returns -1" do
|
14
|
-
(V.new(items1) <=> V.new(items2)).should be(-1)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "with #{items2} and #{items1}" do
|
19
|
-
it "returns 1" do
|
20
|
-
(V.new(items2) <=> V.new(items1)).should be(1)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "with #{items1} and #{items1}" do
|
25
|
-
it "returns 0" do
|
26
|
-
(V.new(items1) <=> V.new(items1)).should be(0)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
[:+, :concat].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
let(:vector) { V.new(1..100) }
|
7
|
-
|
8
|
-
it "preserves the original" do
|
9
|
-
vector.concat([1,2,3])
|
10
|
-
vector.should eql(V.new(1..100))
|
11
|
-
end
|
12
|
-
|
13
|
-
it "appends the elements in the other enumerable" do
|
14
|
-
vector.concat([1,2,3]).should eql(V.new((1..100).to_a + [1,2,3]))
|
15
|
-
vector.concat(1..1000).should eql(V.new((1..100).to_a + (1..1000).to_a))
|
16
|
-
vector.concat(1..200).size.should == 300
|
17
|
-
vector.concat(vector).should eql(V.new((1..100).to_a * 2))
|
18
|
-
vector.concat(V.empty).should eql(vector)
|
19
|
-
V.empty.concat(vector).should eql(vector)
|
20
|
-
end
|
21
|
-
|
22
|
-
[1, 31, 32, 33, 1023, 1024, 1025].each do |size|
|
23
|
-
context "on a #{size}-item vector" do
|
24
|
-
it "works the same" do
|
25
|
-
vector = V.new(1..size)
|
26
|
-
result = vector.concat((size+1)..size+10)
|
27
|
-
result.size.should == size + 10
|
28
|
-
result.should eql(V.new(1..(size+10)))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -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
|