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,240 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[1,2,3,4] }
|
5
|
-
let(:big) { V.new(1..10000) }
|
6
|
-
|
7
|
-
[:slice, :[]].each do |method|
|
8
|
-
describe "##{method}" do
|
9
|
-
context "when passed a positive integral index" do
|
10
|
-
it "returns the element at that index" do
|
11
|
-
vector.send(method, 0).should be(1)
|
12
|
-
vector.send(method, 1).should be(2)
|
13
|
-
vector.send(method, 2).should be(3)
|
14
|
-
vector.send(method, 3).should be(4)
|
15
|
-
vector.send(method, 4).should be(nil)
|
16
|
-
vector.send(method, 10).should be(nil)
|
17
|
-
|
18
|
-
big.send(method, 0).should be(1)
|
19
|
-
big.send(method, 9999).should be(10000)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "leaves the original unchanged" do
|
23
|
-
vector.should eql(V[1,2,3,4])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when passed a negative integral index" do
|
28
|
-
it "returns the element which is number (index.abs) counting from the end of the vector" do
|
29
|
-
vector.send(method, -1).should be(4)
|
30
|
-
vector.send(method, -2).should be(3)
|
31
|
-
vector.send(method, -3).should be(2)
|
32
|
-
vector.send(method, -4).should be(1)
|
33
|
-
vector.send(method, -5).should be(nil)
|
34
|
-
vector.send(method, -10).should be(nil)
|
35
|
-
|
36
|
-
big.send(method, -1).should be(10000)
|
37
|
-
big.send(method, -10000).should be(1)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "when passed a positive integral index and count" do
|
42
|
-
it "returns 'count' elements starting from 'index'" do
|
43
|
-
vector.send(method, 0, 0).should eql(V.empty)
|
44
|
-
vector.send(method, 0, 1).should eql(V[1])
|
45
|
-
vector.send(method, 0, 2).should eql(V[1,2])
|
46
|
-
vector.send(method, 0, 4).should eql(V[1,2,3,4])
|
47
|
-
vector.send(method, 0, 6).should eql(V[1,2,3,4])
|
48
|
-
vector.send(method, 0, -1).should be_nil
|
49
|
-
vector.send(method, 0, -2).should be_nil
|
50
|
-
vector.send(method, 0, -4).should be_nil
|
51
|
-
vector.send(method, 2, 0).should eql(V.empty)
|
52
|
-
vector.send(method, 2, 1).should eql(V[3])
|
53
|
-
vector.send(method, 2, 2).should eql(V[3,4])
|
54
|
-
vector.send(method, 2, 4).should eql(V[3,4])
|
55
|
-
vector.send(method, 2, -1).should be_nil
|
56
|
-
vector.send(method, 4, 0).should eql(V.empty)
|
57
|
-
vector.send(method, 4, 2).should eql(V.empty)
|
58
|
-
vector.send(method, 4, -1).should be_nil
|
59
|
-
vector.send(method, 5, 0).should be_nil
|
60
|
-
vector.send(method, 5, 2).should be_nil
|
61
|
-
vector.send(method, 5, -1).should be_nil
|
62
|
-
vector.send(method, 6, 0).should be_nil
|
63
|
-
vector.send(method, 6, 2).should be_nil
|
64
|
-
vector.send(method, 6, -1).should be_nil
|
65
|
-
|
66
|
-
big.send(method, 0, 3).should eql(V[1,2,3])
|
67
|
-
big.send(method, 1023, 4).should eql(V[1024,1025,1026,1027])
|
68
|
-
big.send(method, 1024, 4).should eql(V[1025,1026,1027,1028])
|
69
|
-
end
|
70
|
-
|
71
|
-
it "leaves the original unchanged" do
|
72
|
-
vector.should eql(V[1,2,3,4])
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context "when passed a negative integral index and count" do
|
77
|
-
it "returns 'count' elements, starting from index which is number 'index.abs' counting from the end of the array" do
|
78
|
-
vector.send(method, -1, 0).should eql(V.empty)
|
79
|
-
vector.send(method, -1, 1).should eql(V[4])
|
80
|
-
vector.send(method, -1, 2).should eql(V[4])
|
81
|
-
vector.send(method, -1, -1).should be_nil
|
82
|
-
vector.send(method, -2, 0).should eql(V.empty)
|
83
|
-
vector.send(method, -2, 1).should eql(V[3])
|
84
|
-
vector.send(method, -2, 2).should eql(V[3,4])
|
85
|
-
vector.send(method, -2, 4).should eql(V[3,4])
|
86
|
-
vector.send(method, -2, -1).should be_nil
|
87
|
-
vector.send(method, -4, 0).should eql(V.empty)
|
88
|
-
vector.send(method, -4, 1).should eql(V[1])
|
89
|
-
vector.send(method, -4, 2).should eql(V[1,2])
|
90
|
-
vector.send(method, -4, 4).should eql(V[1,2,3,4])
|
91
|
-
vector.send(method, -4, 6).should eql(V[1,2,3,4])
|
92
|
-
vector.send(method, -4, -1).should be_nil
|
93
|
-
vector.send(method, -5, 0).should be_nil
|
94
|
-
vector.send(method, -5, 1).should be_nil
|
95
|
-
vector.send(method, -5, 10).should be_nil
|
96
|
-
vector.send(method, -5, -1).should be_nil
|
97
|
-
|
98
|
-
big.send(method, -1, 1).should eql(V[10000])
|
99
|
-
big.send(method, -1, 2).should eql(V[10000])
|
100
|
-
big.send(method, -6, 2).should eql(V[9995,9996])
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "when passed a Range" do
|
105
|
-
it "returns the elements whose indexes are within the given Range" do
|
106
|
-
vector.send(method, 0..-1).should eql(V[1,2,3,4])
|
107
|
-
vector.send(method, 0..-10).should eql(V.empty)
|
108
|
-
vector.send(method, 0..0).should eql(V[1])
|
109
|
-
vector.send(method, 0..1).should eql(V[1,2])
|
110
|
-
vector.send(method, 0..2).should eql(V[1,2,3])
|
111
|
-
vector.send(method, 0..3).should eql(V[1,2,3,4])
|
112
|
-
vector.send(method, 0..4).should eql(V[1,2,3,4])
|
113
|
-
vector.send(method, 0..10).should eql(V[1,2,3,4])
|
114
|
-
vector.send(method, 2..-10).should eql(V.empty)
|
115
|
-
vector.send(method, 2..0).should eql(V.empty)
|
116
|
-
vector.send(method, 2..2).should eql(V[3])
|
117
|
-
vector.send(method, 2..3).should eql(V[3,4])
|
118
|
-
vector.send(method, 2..4).should eql(V[3,4])
|
119
|
-
vector.send(method, 3..0).should eql(V.empty)
|
120
|
-
vector.send(method, 3..3).should eql(V[4])
|
121
|
-
vector.send(method, 3..4).should eql(V[4])
|
122
|
-
vector.send(method, 4..0).should eql(V.empty)
|
123
|
-
vector.send(method, 4..4).should eql(V.empty)
|
124
|
-
vector.send(method, 4..5).should eql(V.empty)
|
125
|
-
vector.send(method, 5..0).should be_nil
|
126
|
-
vector.send(method, 5..5).should be_nil
|
127
|
-
vector.send(method, 5..6).should be_nil
|
128
|
-
|
129
|
-
big.send(method, 159..162).should eql(V[160,161,162,163])
|
130
|
-
big.send(method, 160..162).should eql(V[161,162,163])
|
131
|
-
big.send(method, 161..162).should eql(V[162,163])
|
132
|
-
big.send(method, 9999..10100).should eql(V[10000])
|
133
|
-
big.send(method, 10000..10100).should eql(V.empty)
|
134
|
-
big.send(method, 10001..10100).should be_nil
|
135
|
-
|
136
|
-
vector.send(method, 0...-1).should eql(V[1,2,3])
|
137
|
-
vector.send(method, 0...-10).should eql(V.empty)
|
138
|
-
vector.send(method, 0...0).should eql(V.empty)
|
139
|
-
vector.send(method, 0...1).should eql(V[1])
|
140
|
-
vector.send(method, 0...2).should eql(V[1,2])
|
141
|
-
vector.send(method, 0...3).should eql(V[1,2,3])
|
142
|
-
vector.send(method, 0...4).should eql(V[1,2,3,4])
|
143
|
-
vector.send(method, 0...10).should eql(V[1,2,3,4])
|
144
|
-
vector.send(method, 2...-10).should eql(V.empty)
|
145
|
-
vector.send(method, 2...0).should eql(V.empty)
|
146
|
-
vector.send(method, 2...2).should eql(V.empty)
|
147
|
-
vector.send(method, 2...3).should eql(V[3])
|
148
|
-
vector.send(method, 2...4).should eql(V[3,4])
|
149
|
-
vector.send(method, 3...0).should eql(V.empty)
|
150
|
-
vector.send(method, 3...3).should eql(V.empty)
|
151
|
-
vector.send(method, 3...4).should eql(V[4])
|
152
|
-
vector.send(method, 4...0).should eql(V.empty)
|
153
|
-
vector.send(method, 4...4).should eql(V.empty)
|
154
|
-
vector.send(method, 4...5).should eql(V.empty)
|
155
|
-
vector.send(method, 5...0).should be_nil
|
156
|
-
vector.send(method, 5...5).should be_nil
|
157
|
-
vector.send(method, 5...6).should be_nil
|
158
|
-
|
159
|
-
big.send(method, 159...162).should eql(V[160,161,162])
|
160
|
-
big.send(method, 160...162).should eql(V[161,162])
|
161
|
-
big.send(method, 161...162).should eql(V[162])
|
162
|
-
big.send(method, 9999...10100).should eql(V[10000])
|
163
|
-
big.send(method, 10000...10100).should eql(V.empty)
|
164
|
-
big.send(method, 10001...10100).should be_nil
|
165
|
-
|
166
|
-
vector.send(method, -1..-1).should eql(V[4])
|
167
|
-
vector.send(method, -1...-1).should eql(V.empty)
|
168
|
-
vector.send(method, -1..3).should eql(V[4])
|
169
|
-
vector.send(method, -1...3).should eql(V.empty)
|
170
|
-
vector.send(method, -1..4).should eql(V[4])
|
171
|
-
vector.send(method, -1...4).should eql(V[4])
|
172
|
-
vector.send(method, -1..10).should eql(V[4])
|
173
|
-
vector.send(method, -1...10).should eql(V[4])
|
174
|
-
vector.send(method, -1..0).should eql(V.empty)
|
175
|
-
vector.send(method, -1..-4).should eql(V.empty)
|
176
|
-
vector.send(method, -1...-4).should eql(V.empty)
|
177
|
-
vector.send(method, -1..-6).should eql(V.empty)
|
178
|
-
vector.send(method, -1...-6).should eql(V.empty)
|
179
|
-
vector.send(method, -2..-2).should eql(V[3])
|
180
|
-
vector.send(method, -2...-2).should eql(V.empty)
|
181
|
-
vector.send(method, -2..-1).should eql(V[3,4])
|
182
|
-
vector.send(method, -2...-1).should eql(V[3])
|
183
|
-
vector.send(method, -2..10).should eql(V[3,4])
|
184
|
-
vector.send(method, -2...10).should eql(V[3,4])
|
185
|
-
|
186
|
-
big.send(method, -1..-1).should eql(V[10000])
|
187
|
-
big.send(method, -1..9999).should eql(V[10000])
|
188
|
-
big.send(method, -1...9999).should eql(V.empty)
|
189
|
-
big.send(method, -2...9999).should eql(V[9999])
|
190
|
-
big.send(method, -2..-1).should eql(V[9999,10000])
|
191
|
-
|
192
|
-
vector.send(method, -4..-4).should eql(V[1])
|
193
|
-
vector.send(method, -4..-2).should eql(V[1,2,3])
|
194
|
-
vector.send(method, -4...-2).should eql(V[1,2])
|
195
|
-
vector.send(method, -4..-1).should eql(V[1,2,3,4])
|
196
|
-
vector.send(method, -4...-1).should eql(V[1,2,3])
|
197
|
-
vector.send(method, -4..3).should eql(V[1,2,3,4])
|
198
|
-
vector.send(method, -4...3).should eql(V[1,2,3])
|
199
|
-
vector.send(method, -4..4).should eql(V[1,2,3,4])
|
200
|
-
vector.send(method, -4...4).should eql(V[1,2,3,4])
|
201
|
-
vector.send(method, -4..0).should eql(V[1])
|
202
|
-
vector.send(method, -4...0).should eql(V.empty)
|
203
|
-
vector.send(method, -4..1).should eql(V[1,2])
|
204
|
-
vector.send(method, -4...1).should eql(V[1])
|
205
|
-
|
206
|
-
vector.send(method, -5..-5).should be_nil
|
207
|
-
vector.send(method, -5...-5).should be_nil
|
208
|
-
vector.send(method, -5..-4).should be_nil
|
209
|
-
vector.send(method, -5..-1).should be_nil
|
210
|
-
vector.send(method, -5..10).should be_nil
|
211
|
-
|
212
|
-
big.send(method, -10001..-1).should be_nil
|
213
|
-
end
|
214
|
-
|
215
|
-
it "leaves the original unchanged" do
|
216
|
-
vector.should eql(V[1,2,3,4])
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
context "when passed a subclass of Range" do
|
222
|
-
it "works the same as with a Range" do
|
223
|
-
subclass = Class.new(Range)
|
224
|
-
vector.send(method, subclass.new(1,2)).should eql(V[2,3])
|
225
|
-
vector.send(method, subclass.new(-3,-1,true)).should eql(V[2,3])
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
context "on a subclass of Vector" do
|
230
|
-
it "with index and count or a range, returns an instance of the subclass" do
|
231
|
-
subclass = Class.new(Immutable::Vector)
|
232
|
-
instance = subclass.new([1,2,3])
|
233
|
-
instance.send(method, 0, 0).class.should be(subclass)
|
234
|
-
instance.send(method, 0, 2).class.should be(subclass)
|
235
|
-
instance.send(method, 0..0).class.should be(subclass)
|
236
|
-
instance.send(method, 1..-1).class.should be(subclass)
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
[
|
5
|
-
[:sort, ->(left, right) { left.length <=> right.length }],
|
6
|
-
[:sort_by, ->(item) { item.length }],
|
7
|
-
].each do |method, comparator|
|
8
|
-
describe "##{method}" do
|
9
|
-
[
|
10
|
-
[[], []],
|
11
|
-
[["A"], ["A"]],
|
12
|
-
[%w[Ichi Ni San], %w[Ni San Ichi]],
|
13
|
-
].each do |values, expected|
|
14
|
-
describe "on #{values.inspect}" do
|
15
|
-
let(:vector) { V[*values] }
|
16
|
-
|
17
|
-
context "with a block" do
|
18
|
-
it "preserves the original" do
|
19
|
-
vector.send(method, &comparator)
|
20
|
-
vector.should eql(V[*values])
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns #{expected.inspect}" do
|
24
|
-
vector.send(method, &comparator).should eql(V[*expected])
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "without a block" do
|
29
|
-
it "preserves the original" do
|
30
|
-
vector.send(method)
|
31
|
-
vector.should eql(V[*values])
|
32
|
-
end
|
33
|
-
|
34
|
-
it "returns #{expected.sort.inspect}" do
|
35
|
-
vector.send(method).should eql(V[*expected.sort])
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
[10, 31, 32, 33, 1023, 1024, 1025].each do |size|
|
42
|
-
context "on a #{size}-item vector" do
|
43
|
-
it "behaves like Array#{method}" do
|
44
|
-
array = size.times.map { rand(10000) }
|
45
|
-
vector = V.new(array)
|
46
|
-
if method == :sort
|
47
|
-
vector.sort.should == array.sort
|
48
|
-
else
|
49
|
-
vector.sort_by { |x| -x }.should == array.sort_by { |x| -x }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#sum" do
|
5
|
-
[
|
6
|
-
[[], 0],
|
7
|
-
[[2], 2],
|
8
|
-
[[1, 3, 5, 7, 11], 27],
|
9
|
-
].each do |values, expected|
|
10
|
-
describe "on #{values.inspect}" do
|
11
|
-
it "returns #{expected.inspect}" do
|
12
|
-
V[*values].sum.should == expected
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#take" do
|
5
|
-
[
|
6
|
-
[[], 10, []],
|
7
|
-
[["A"], 10, ["A"]],
|
8
|
-
[%w[A B C], 0, []],
|
9
|
-
[%w[A B C], 2, %w[A B]],
|
10
|
-
[(1..32), 1, [1]],
|
11
|
-
[(1..33), 32, (1..32)],
|
12
|
-
[(1..100), 40, (1..40)]
|
13
|
-
].each do |values, number, expected|
|
14
|
-
describe "#{number} from #{values.inspect}" do
|
15
|
-
let(:vector) { V[*values] }
|
16
|
-
|
17
|
-
it "preserves the original" do
|
18
|
-
vector.take(number)
|
19
|
-
vector.should eql(V[*values])
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns #{expected.inspect}" do
|
23
|
-
vector.take(number).should eql(V[*expected])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "when number of elements specified is identical to size" do
|
29
|
-
let(:vector) { V[1, 2, 3, 4, 5, 6] }
|
30
|
-
it "returns self" do
|
31
|
-
vector.take(vector.size).should be(vector)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when number of elements specified is bigger than size" do
|
36
|
-
let(:vector) { V[1, 2, 3, 4, 5, 6] }
|
37
|
-
it "returns self" do
|
38
|
-
vector.take(vector.size + 1).should be(vector)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#take_while" do
|
5
|
-
[
|
6
|
-
[[], []],
|
7
|
-
[["A"], ["A"]],
|
8
|
-
[%w[A B C], %w[A B]]
|
9
|
-
].each do |values, expected|
|
10
|
-
describe "on #{values.inspect}" do
|
11
|
-
let(:vector) { V[*values] }
|
12
|
-
let(:result) { vector.take_while { |item| item < "C" }}
|
13
|
-
|
14
|
-
describe "with a block" do
|
15
|
-
it "returns #{expected.inspect}" do
|
16
|
-
result.should eql(V[*expected])
|
17
|
-
end
|
18
|
-
|
19
|
-
it "preserves the original" do
|
20
|
-
result
|
21
|
-
vector.should eql(V[*values])
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "without a block" do
|
26
|
-
it "returns an Enumerator" do
|
27
|
-
vector.take_while.class.should be(Enumerator)
|
28
|
-
vector.take_while.each { |item| item < "C" }.should eql(V[*expected])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[*values] }
|
5
|
-
|
6
|
-
describe "#to_a" do
|
7
|
-
let(:to_a) { vector.to_a }
|
8
|
-
|
9
|
-
shared_examples "checking to_a values" do
|
10
|
-
it "returns the values" do
|
11
|
-
expect(to_a).to eq(values)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "with an empty vector" do
|
16
|
-
let(:values) { [] }
|
17
|
-
|
18
|
-
include_examples "checking to_a values"
|
19
|
-
end
|
20
|
-
|
21
|
-
context "with an single item vector" do
|
22
|
-
let(:values) { %w[A] }
|
23
|
-
|
24
|
-
include_examples "checking to_a values"
|
25
|
-
end
|
26
|
-
|
27
|
-
context "with an multi-item vector" do
|
28
|
-
let(:values) { %w[A B] }
|
29
|
-
|
30
|
-
include_examples "checking to_a values"
|
31
|
-
end
|
32
|
-
|
33
|
-
[10, 31, 32, 33, 1000, 1023, 1024, 1025].each do |size|
|
34
|
-
context "with a #{size}-item vector" do
|
35
|
-
let(:values) { (1..size).to_a }
|
36
|
-
|
37
|
-
include_examples "checking to_a values"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
let(:vector) { V[*values] }
|
5
|
-
|
6
|
-
describe "#to_ary" do
|
7
|
-
let(:values) { %w[A B C D] }
|
8
|
-
|
9
|
-
it "converts using block parameters" do
|
10
|
-
def expectations(&block)
|
11
|
-
yield(vector)
|
12
|
-
end
|
13
|
-
expectations do |a, b, *c|
|
14
|
-
expect(a).to eq("A")
|
15
|
-
expect(b).to eq("B")
|
16
|
-
expect(c).to eq(%w[C D])
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it "converts using method arguments" do
|
21
|
-
def expectations(a, b, *c)
|
22
|
-
expect(a).to eq("A")
|
23
|
-
expect(b).to eq("B")
|
24
|
-
expect(c).to eq(%w[C D])
|
25
|
-
end
|
26
|
-
expectations(*vector)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "converts using splat" do
|
30
|
-
array = *vector
|
31
|
-
expect(array).to eq(%w[A B C D])
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#to_list" do
|
5
|
-
[
|
6
|
-
[],
|
7
|
-
["A"],
|
8
|
-
%w[A B C],
|
9
|
-
].each do |values|
|
10
|
-
describe "on #{values.inspect}" do
|
11
|
-
let(:vector) { V.new(values) }
|
12
|
-
let(:list) { vector.to_list }
|
13
|
-
|
14
|
-
it "returns a list" do
|
15
|
-
list.is_a?(Immutable::List).should == true
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "the returned list" do
|
19
|
-
it "has the correct length" do
|
20
|
-
list.size.should == values.size
|
21
|
-
end
|
22
|
-
|
23
|
-
it "contains all values" do
|
24
|
-
list.to_a.should == values
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#to_set" do
|
5
|
-
[
|
6
|
-
[],
|
7
|
-
["A"],
|
8
|
-
%w[A B C],
|
9
|
-
(1..10),
|
10
|
-
(1..32),
|
11
|
-
(1..33),
|
12
|
-
(1..1000)
|
13
|
-
].each do |values|
|
14
|
-
describe "on #{values.inspect}" do
|
15
|
-
it "returns a set with the same values" do
|
16
|
-
V[*values].to_set.should eql(S[*values])
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#transpose" do
|
5
|
-
it "takes a vector of vectors and transposes rows and columns" do
|
6
|
-
V[V[1, 'a'], V[2, 'b'], V[3, 'c']].transpose.should eql(V[V[1, 2, 3], V["a", "b", "c"]])
|
7
|
-
V[V[1, 2, 3], V["a", "b", "c"]].transpose.should eql(V[V[1, 'a'], V[2, 'b'], V[3, 'c']])
|
8
|
-
V[].transpose.should eql(V[])
|
9
|
-
V[V[]].transpose.should eql(V[])
|
10
|
-
V[V[], V[]].transpose.should eql(V[])
|
11
|
-
V[V[0]].transpose.should eql(V[V[0]])
|
12
|
-
V[V[0], V[1]].transpose.should eql(V[V[0, 1]])
|
13
|
-
end
|
14
|
-
|
15
|
-
it "raises an IndexError if the vectors are not of the same length" do
|
16
|
-
-> { V[V[1,2], V[:a]].transpose }.should raise_error(IndexError)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "also works on Vectors of Arrays" do
|
20
|
-
V[[1,2,3], [4,5,6]].transpose.should eql(V[V[1,4], V[2,5], V[3,6]])
|
21
|
-
end
|
22
|
-
|
23
|
-
[10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
|
24
|
-
context "on #{size}-item vectors" do
|
25
|
-
it "behaves like Array#transpose" do
|
26
|
-
array = rand(10).times.map { size.times.map { rand(10000) }}
|
27
|
-
vector = V.new(array)
|
28
|
-
result = vector.transpose
|
29
|
-
# Array#== uses Object#== to compare corresponding elements,
|
30
|
-
# so although Vector#== does type coercion, it does not consider
|
31
|
-
# nested Arrays and corresponding nested Vectors to be equal
|
32
|
-
# That is why the following ".map { |a| V.new(a) }" is needed
|
33
|
-
result.should == array.transpose.map { |a| V.new(a) }
|
34
|
-
result.each { |v| v.class.should be(Immutable::Vector) }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context "on a subclass of Vector" do
|
40
|
-
it "returns instances of the subclass" do
|
41
|
-
subclass = Class.new(V)
|
42
|
-
instance = subclass.new([[1,2,3], [4,5,6]])
|
43
|
-
instance.transpose.class.should be(subclass)
|
44
|
-
instance.transpose.each { |v| v.class.should be(subclass) }
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#uniq" do
|
5
|
-
let(:vector) { V['a', 'b', 'a', 'a', 'c', 'b'] }
|
6
|
-
|
7
|
-
it "returns a vector with no duplicates" do
|
8
|
-
vector.uniq.should eql(V['a', 'b', 'c'])
|
9
|
-
end
|
10
|
-
|
11
|
-
it "leaves the original unmodified" do
|
12
|
-
vector.uniq
|
13
|
-
vector.should eql(V['a', 'b', 'a', 'a', 'c', 'b'])
|
14
|
-
end
|
15
|
-
|
16
|
-
it "uses #eql? semantics" do
|
17
|
-
V[1.0, 1].uniq.should eql(V[1.0, 1])
|
18
|
-
end
|
19
|
-
|
20
|
-
it "also uses #hash when determining which values are duplicates" do
|
21
|
-
x = double(1)
|
22
|
-
x.should_receive(:hash).at_least(1).times.and_return(1)
|
23
|
-
y = double(2)
|
24
|
-
y.should_receive(:hash).at_least(1).times.and_return(2)
|
25
|
-
V[x, y].uniq
|
26
|
-
end
|
27
|
-
|
28
|
-
it "keeps the first of each group of duplicate values" do
|
29
|
-
x, y, z = 'a', 'a', 'a'
|
30
|
-
result = V[x, y, z].uniq
|
31
|
-
result.size.should == 1
|
32
|
-
result[0].should be(x)
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when passed a block" do
|
36
|
-
it "uses the return value of the block to determine which items are duplicate" do
|
37
|
-
v = V['a', 'A', 'B', 'b']
|
38
|
-
v.uniq(&:upcase).should == V['a', 'B']
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context "on a vector with no duplicates" do
|
43
|
-
it "returns an unchanged vector" do
|
44
|
-
V[1, 2, 3].uniq.should eql(V[1, 2, 3])
|
45
|
-
end
|
46
|
-
|
47
|
-
context "if the vector has more than 32 elements and is initialized with Vector.new" do
|
48
|
-
# Regression test for GitHub issue #182
|
49
|
-
it "returns an unchanged vector" do
|
50
|
-
vector1,vector2 = 2.times.collect { V.new(0..36) }
|
51
|
-
vector1.uniq.should eql(vector2)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
[10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
|
57
|
-
context "on a #{size}-item vector" do
|
58
|
-
it "behaves like Array#uniq" do
|
59
|
-
array = size.times.map { rand(size*2) }
|
60
|
-
vector = V.new(array)
|
61
|
-
result = vector.uniq
|
62
|
-
result.should == array.uniq
|
63
|
-
result.class.should be(Immutable::Vector)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context "from a subclass" do
|
69
|
-
it "returns an instance of the subclass" do
|
70
|
-
subclass = Class.new(Immutable::Vector)
|
71
|
-
instance = subclass.new([1,2,3])
|
72
|
-
instance.uniq.class.should be(subclass)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#unshift" do
|
5
|
-
[
|
6
|
-
[[], "A", ["A"]],
|
7
|
-
[["A"], "B", %w[B A]],
|
8
|
-
[["A"], "A", %w[A A]],
|
9
|
-
[%w[A B C], "D", %w[D A B C]],
|
10
|
-
[1..31, 0, 0..31],
|
11
|
-
[1..32, 0, 0..32],
|
12
|
-
[1..33, 0, 0..33]
|
13
|
-
].each do |values, new_value, expected|
|
14
|
-
context "on #{values.inspect} with #{new_value.inspect}" do
|
15
|
-
let(:vector) { V[*values] }
|
16
|
-
|
17
|
-
it "preserves the original" do
|
18
|
-
vector.unshift(new_value)
|
19
|
-
vector.should eql(V[*values])
|
20
|
-
end
|
21
|
-
|
22
|
-
it "returns #{expected.inspect}" do
|
23
|
-
vector.unshift(new_value).should eql(V[*expected])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|