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,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
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#update_in" do
|
5
|
-
let(:vector) {
|
6
|
-
Immutable::Vector[
|
7
|
-
100,
|
8
|
-
101,
|
9
|
-
102,
|
10
|
-
Immutable::Vector[200, 201, Immutable::Vector[300, 301, 302]],
|
11
|
-
Immutable::Hash["A" => "alpha", "B" => "bravo"],
|
12
|
-
[400, 401, 402]
|
13
|
-
]
|
14
|
-
}
|
15
|
-
|
16
|
-
context "with one level on existing key" do
|
17
|
-
it "passes the value to the block" do
|
18
|
-
vector.update_in(1) { |value| value.should == 101 }
|
19
|
-
end
|
20
|
-
|
21
|
-
it "replaces the value with the result of the block" do
|
22
|
-
result = vector.update_in(1) { |value| "FLIBBLE" }
|
23
|
-
result.get(1).should == "FLIBBLE"
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should preserve the original" do
|
27
|
-
result = vector.update_in(1) { |value| "FLIBBLE" }
|
28
|
-
vector.get(1).should == 101
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "with multi-level vectors on existing keys" do
|
33
|
-
it "passes the value to the block" do
|
34
|
-
vector.update_in(3, 2, 0) { |value| value.should == 300 }
|
35
|
-
end
|
36
|
-
|
37
|
-
it "replaces the value with the result of the block" do
|
38
|
-
result = vector.update_in(3, 2, 0) { |value| "FLIBBLE" }
|
39
|
-
result[3][2][0].should == "FLIBBLE"
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should preserve the original" do
|
43
|
-
result = vector.update_in(3, 2, 0) { |value| "FLIBBLE" }
|
44
|
-
vector[3][2][0].should == 300
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "with multi-level creating sub-hashes when keys don't exist" do
|
49
|
-
it "passes nil to the block" do
|
50
|
-
vector.update_in(3, 3, "X", "Y") { |value| value.should be_nil }
|
51
|
-
end
|
52
|
-
|
53
|
-
it "creates subhashes on the way to set the value" do
|
54
|
-
result = vector.update_in(3, 3, "X", "Y") { |value| "NEWVALUE" }
|
55
|
-
result[3][3]["X"]["Y"].should == "NEWVALUE"
|
56
|
-
result[3][2][0].should == 300
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "with multi-level including hash with existing keys" do
|
61
|
-
it "passes the value to the block" do
|
62
|
-
vector.update_in(4, "B") { |value| value.should == "bravo" }
|
63
|
-
end
|
64
|
-
|
65
|
-
it "replaces the value with the result of the block" do
|
66
|
-
result = vector.update_in(4, "B") { |value| "FLIBBLE" }
|
67
|
-
result[4]["B"].should == "FLIBBLE"
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should preserve the original" do
|
71
|
-
result = vector.update_in(4, "B") { |value| "FLIBBLE" }
|
72
|
-
vector[4]["B"].should == "bravo"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context "with empty key_path" do
|
77
|
-
it "raises ArguemntError" do
|
78
|
-
expect { vector.update_in() { |v| 42 } }.to raise_error(ArgumentError)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#values_at" do
|
5
|
-
let(:vector) { V['a', 'b', 'c'] }
|
6
|
-
|
7
|
-
it "accepts any number of indices, and returns a vector of items at those indices" do
|
8
|
-
vector.values_at(0).should eql(V['a'])
|
9
|
-
vector.values_at(1,2).should eql(V['b', 'c'])
|
10
|
-
end
|
11
|
-
|
12
|
-
context "when passed invalid indices" do
|
13
|
-
it "fills in with nils" do
|
14
|
-
vector.values_at(1,2,3).should eql(V['b', 'c', nil])
|
15
|
-
vector.values_at(-10,10).should eql(V[nil, nil])
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when passed no arguments" do
|
20
|
-
it "returns an empty vector" do
|
21
|
-
vector.values_at.should eql(V.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::Vector)
|
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,57 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#zip" do
|
5
|
-
let(:vector) { V[1,2,3,4] }
|
6
|
-
|
7
|
-
context "with a block" do
|
8
|
-
it "yields arrays of one corresponding element from each input sequence" do
|
9
|
-
result = []
|
10
|
-
vector.zip(['a', 'b', 'c', 'd']) { |obj| result << obj }
|
11
|
-
result.should eql([[1,'a'], [2,'b'], [3,'c'], [4,'d']])
|
12
|
-
end
|
13
|
-
|
14
|
-
it "fills in the missing values with nils" do
|
15
|
-
result = []
|
16
|
-
vector.zip(['a', 'b']) { |obj| result << obj }
|
17
|
-
result.should eql([[1,'a'], [2,'b'], [3,nil], [4,nil]])
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns nil" do
|
21
|
-
vector.zip([2,3,4]) {}.should be_nil
|
22
|
-
end
|
23
|
-
|
24
|
-
it "can handle multiple inputs, of different classes" do
|
25
|
-
result = []
|
26
|
-
vector.zip(V[2,3,4,5], [5,6,7,8]) { |obj| result << obj }
|
27
|
-
result.should eql([[1,2,5], [2,3,6], [3,4,7], [4,5,8]])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "without a block" do
|
32
|
-
it "returns a vector of arrays (one corresponding element from each input sequence)" do
|
33
|
-
vector.zip([2,3,4,5]).should eql(V[[1,2], [2,3], [3,4], [4,5]])
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
[10, 31, 32, 33, 1000, 1023, 1024, 1025].each do |size|
|
38
|
-
context "on #{size}-item vectors" do
|
39
|
-
it "behaves like Array#zip" do
|
40
|
-
array = (rand(9)+1).times.map { size.times.map { rand(10000) }}
|
41
|
-
vectors = array.map { |a| V.new(a) }
|
42
|
-
result = vectors.first.zip(*vectors.drop(1))
|
43
|
-
result.class.should be(Immutable::Vector)
|
44
|
-
result.should == array[0].zip(*array.drop(1))
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "from a subclass" do
|
50
|
-
it "returns an instance of the subclass" do
|
51
|
-
subclass = Class.new(Immutable::Vector)
|
52
|
-
instance = subclass.new([1,2,3])
|
53
|
-
instance.zip([4,5,6]).class.should be(subclass)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/spec/lib/load_spec.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
# It should be possible to require any one Immutable structure,
|
2
|
-
# without loading all the others
|
3
|
-
|
4
|
-
immutable_lib_dir = File.join(File.dirname(__FILE__), "..", "..", 'lib')
|
5
|
-
|
6
|
-
describe :Immutable do
|
7
|
-
describe :Hash do
|
8
|
-
it "can be loaded separately" do
|
9
|
-
system(%{ruby -e "$:.unshift('#{immutable_lib_dir}'); require 'immutable/hash'; Immutable::Hash.new"}).should be(true)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe :Set do
|
14
|
-
it "can be loaded separately" do
|
15
|
-
system(%{ruby -e "$:.unshift('#{immutable_lib_dir}'); require 'immutable/set'; Immutable::Set.new"}).should be(true)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe :Vector do
|
20
|
-
it "can be loaded separately" do
|
21
|
-
system(%{ruby -e "$:.unshift('#{immutable_lib_dir}'); require 'immutable/vector'; Immutable::Vector.new"}).should be(true)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe :List do
|
26
|
-
it "can be loaded separately" do
|
27
|
-
system(%{ruby -e "$:.unshift('#{immutable_lib_dir}'); require 'immutable/list'; Immutable::List[]"}).should be(true)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe :SortedSet do
|
32
|
-
it "can be loaded separately" do
|
33
|
-
system(%{ruby -e "$:.unshift('#{immutable_lib_dir}'); require 'immutable/sorted_set'; Immutable::SortedSet.new"}).should be(true)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe :Deque do
|
38
|
-
it "can be loaded separately" do
|
39
|
-
system(%{ruby -e "$:.unshift('#{immutable_lib_dir}'); require 'immutable/deque'; Immutable::Deque.new"}).should be(true)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
require "pry"
|
2
|
-
require "rspec"
|
3
|
-
require "immutable/hash"
|
4
|
-
require "immutable/set"
|
5
|
-
require "immutable/vector"
|
6
|
-
require "immutable/sorted_set"
|
7
|
-
require "immutable/list"
|
8
|
-
require "immutable/deque"
|
9
|
-
require "immutable/core_ext"
|
10
|
-
require "immutable/nested"
|
11
|
-
|
12
|
-
# Suppress warnings from use of old RSpec expectation and mock syntax
|
13
|
-
# If all tests are eventually updated to use the new syntax, this can be removed
|
14
|
-
RSpec.configure do |config|
|
15
|
-
config.expect_with :rspec do |c|
|
16
|
-
c.syntax = [:should, :expect]
|
17
|
-
end
|
18
|
-
config.mock_with :rspec do |c|
|
19
|
-
c.syntax = [:should, :expect]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
V = Immutable::Vector
|
24
|
-
L = Immutable::List
|
25
|
-
H = Immutable::Hash
|
26
|
-
S = Immutable::Set
|
27
|
-
SS = Immutable::SortedSet
|
28
|
-
D = Immutable::Deque
|
29
|
-
EmptyList = Immutable::EmptyList
|
30
|
-
|
31
|
-
Struct.new("Customer", :name, :address)
|
32
|
-
|
33
|
-
def fixture(name)
|
34
|
-
File.read(fixture_path(name))
|
35
|
-
end
|
36
|
-
|
37
|
-
def fixture_path(name)
|
38
|
-
File.join("spec", "fixtures", name)
|
39
|
-
end
|
40
|
-
|
41
|
-
if RUBY_ENGINE == "ruby"
|
42
|
-
def calculate_stack_overflow_depth(n)
|
43
|
-
calculate_stack_overflow_depth(n + 1)
|
44
|
-
rescue SystemStackError
|
45
|
-
n
|
46
|
-
end
|
47
|
-
STACK_OVERFLOW_DEPTH = calculate_stack_overflow_depth(2)
|
48
|
-
else
|
49
|
-
STACK_OVERFLOW_DEPTH = 16_384
|
50
|
-
end
|
51
|
-
|
52
|
-
BigList = Immutable.interval(0, STACK_OVERFLOW_DEPTH)
|
53
|
-
|
54
|
-
class DeterministicHash
|
55
|
-
attr_reader :hash, :value
|
56
|
-
|
57
|
-
def initialize(value, hash)
|
58
|
-
@value = value
|
59
|
-
@hash = hash
|
60
|
-
end
|
61
|
-
|
62
|
-
def to_s
|
63
|
-
@value.to_s
|
64
|
-
end
|
65
|
-
|
66
|
-
def inspect
|
67
|
-
@value.inspect
|
68
|
-
end
|
69
|
-
|
70
|
-
def ==(other)
|
71
|
-
other.is_a?(DeterministicHash) && self.value == other.value
|
72
|
-
end
|
73
|
-
alias :eql? :==
|
74
|
-
|
75
|
-
def <=>(other)
|
76
|
-
self.value <=> other.value
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
class EqualNotEql
|
81
|
-
def ==(other)
|
82
|
-
true
|
83
|
-
end
|
84
|
-
def eql?(other)
|
85
|
-
false
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
class EqlNotEqual
|
90
|
-
def ==(other)
|
91
|
-
false
|
92
|
-
end
|
93
|
-
def eql?(other)
|
94
|
-
true
|
95
|
-
end
|
96
|
-
end
|