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,33 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#min" do
|
5
|
-
context "with a block" do
|
6
|
-
[
|
7
|
-
[[], nil],
|
8
|
-
[["A"], "A"],
|
9
|
-
[%w[Ichi Ni San], "Ni"],
|
10
|
-
].each do |values, expected|
|
11
|
-
describe "on #{values.inspect}" do
|
12
|
-
it "returns #{expected.inspect}" do
|
13
|
-
V[*values].min { |minimum, item| minimum.length <=> item.length }.should == expected
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "without a block" do
|
20
|
-
[
|
21
|
-
[[], nil],
|
22
|
-
[["A"], "A"],
|
23
|
-
[%w[Ichi Ni San], "Ichi"],
|
24
|
-
].each do |values, expected|
|
25
|
-
describe "on #{values.inspect}" do
|
26
|
-
it "returns #{expected.inspect}" do
|
27
|
-
V[*values].min.should == expected
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#*" do
|
5
|
-
let(:vector) { V[1, 2, 3] }
|
6
|
-
|
7
|
-
context "with a String argument" do
|
8
|
-
it "acts just like #join" do
|
9
|
-
(vector * 'boo').should eql(vector.join('boo'))
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context "with an Integer argument" do
|
14
|
-
it "concatenates n copies of the array" do
|
15
|
-
(vector * 0).should eql(V.empty)
|
16
|
-
(vector * 1).should eql(vector)
|
17
|
-
(vector * 2).should eql(V[1,2,3,1,2,3])
|
18
|
-
(vector * 3).should eql(V[1,2,3,1,2,3,1,2,3])
|
19
|
-
end
|
20
|
-
|
21
|
-
it "raises an ArgumentError if integer is negative" do
|
22
|
-
-> { vector * -1 }.should raise_error(ArgumentError)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "works on large vectors" do
|
26
|
-
array = (1..50).to_a
|
27
|
-
(V.new(array) * 25).should eql(V.new(array * 25))
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "with a subclass of Vector" do
|
32
|
-
it "returns an instance of the subclass" do
|
33
|
-
subclass = Class.new(Immutable::Vector)
|
34
|
-
instance = subclass.new([1,2,3])
|
35
|
-
(instance * 10).class.should be(subclass)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
it "raises a TypeError if passed nil" do
|
40
|
-
-> { vector * nil }.should raise_error(TypeError)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "raises an ArgumentError if passed no arguments" do
|
44
|
-
-> { vector.* }.should raise_error(ArgumentError)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe ".new" do
|
5
|
-
it "accepts a single enumerable argument and creates a new vector" do
|
6
|
-
vector = Immutable::Vector.new([1,2,3])
|
7
|
-
vector.size.should be(3)
|
8
|
-
vector[0].should be(1)
|
9
|
-
vector[1].should be(2)
|
10
|
-
vector[2].should be(3)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "makes a defensive copy of a non-frozen mutable Array passed in" do
|
14
|
-
array = [1,2,3]
|
15
|
-
vector = Immutable::Vector.new(array)
|
16
|
-
array[0] = 'changed'
|
17
|
-
vector[0].should be(1)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "is amenable to overriding of #initialize" do
|
21
|
-
class SnazzyVector < Immutable::Vector
|
22
|
-
def initialize
|
23
|
-
super(['SNAZZY!!!'])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
vector = SnazzyVector.new
|
28
|
-
vector.size.should be(1)
|
29
|
-
vector.should == ['SNAZZY!!!']
|
30
|
-
end
|
31
|
-
|
32
|
-
context "from a subclass" do
|
33
|
-
it "returns a frozen instance of the subclass" do
|
34
|
-
subclass = Class.new(Immutable::Vector)
|
35
|
-
instance = subclass.new(["some", "values"])
|
36
|
-
instance.class.should be subclass
|
37
|
-
instance.frozen?.should be true
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe ".[]" do
|
43
|
-
it "accepts a variable number of items and creates a new vector" do
|
44
|
-
vector = Immutable::Vector['a', 'b']
|
45
|
-
vector.size.should be(2)
|
46
|
-
vector[0].should == 'a'
|
47
|
-
vector[1].should == 'b'
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#partition" do
|
5
|
-
[
|
6
|
-
[[], [], []],
|
7
|
-
[[1], [1], []],
|
8
|
-
[[1, 2], [1], [2]],
|
9
|
-
[[1, 2, 3], [1, 3], [2]],
|
10
|
-
[[1, 2, 3, 4], [1, 3], [2, 4]],
|
11
|
-
[[2, 3, 4], [3], [2, 4]],
|
12
|
-
[[3, 4], [3], [4]],
|
13
|
-
[[4], [], [4]],
|
14
|
-
].each do |values, expected_matches, expected_remainder|
|
15
|
-
describe "on #{values.inspect}" do
|
16
|
-
let(:vector) { V[*values] }
|
17
|
-
|
18
|
-
describe "with a block" do
|
19
|
-
let(:result) { vector.partition(&:odd?) }
|
20
|
-
let(:matches) { result.first }
|
21
|
-
let(:remainder) { result.last }
|
22
|
-
|
23
|
-
it "preserves the original" do
|
24
|
-
result
|
25
|
-
vector.should eql(V[*values])
|
26
|
-
end
|
27
|
-
|
28
|
-
it "returns a frozen array with two items" do
|
29
|
-
result.class.should be(Array)
|
30
|
-
result.should be_frozen
|
31
|
-
result.size.should be(2)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "correctly identifies the matches" do
|
35
|
-
matches.should eql(V[*expected_matches])
|
36
|
-
end
|
37
|
-
|
38
|
-
it "correctly identifies the remainder" do
|
39
|
-
remainder.should eql(V[*expected_remainder])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "without a block" do
|
44
|
-
it "returns an Enumerator" do
|
45
|
-
vector.partition.class.should be(Enumerator)
|
46
|
-
vector.partition.each(&:odd?).should eql([V.new(expected_matches), V.new(expected_remainder)])
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#permutation" do
|
5
|
-
let(:vector) { V[1,2,3,4] }
|
6
|
-
|
7
|
-
context "without a block or arguments" do
|
8
|
-
it "returns an Enumerator of all permutations" do
|
9
|
-
vector.permutation.class.should be(Enumerator)
|
10
|
-
vector.permutation.to_a.should eql(vector.to_a.permutation.to_a)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "without a block, but with integral argument" do
|
15
|
-
it "returns an Enumerator of all permutations of given length" do
|
16
|
-
vector.permutation(2).class.should be(Enumerator)
|
17
|
-
vector.permutation(2).to_a.should eql(vector.to_a.permutation(2).to_a)
|
18
|
-
vector.permutation(3).class.should be(Enumerator)
|
19
|
-
vector.permutation(3).to_a.should eql(vector.to_a.permutation(3).to_a)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "with a block" do
|
24
|
-
it "returns self" do
|
25
|
-
vector.permutation {}.should be(vector)
|
26
|
-
end
|
27
|
-
|
28
|
-
context "and no argument" do
|
29
|
-
it "yields all permutations" do
|
30
|
-
yielded = []
|
31
|
-
vector.permutation { |obj| yielded << obj }
|
32
|
-
yielded.sort.should eql([[1,2,3,4], [1,2,4,3], [1,3,2,4], [1,3,4,2],
|
33
|
-
[1,4,2,3], [1,4,3,2], [2,1,3,4], [2,1,4,3], [2,3,1,4], [2,3,4,1],
|
34
|
-
[2,4,1,3], [2,4,3,1], [3,1,2,4], [3,1,4,2], [3,2,1,4], [3,2,4,1],
|
35
|
-
[3,4,1,2], [3,4,2,1], [4,1,2,3], [4,1,3,2], [4,2,1,3], [4,2,3,1],
|
36
|
-
[4,3,1,2], [4,3,2,1]])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "and an integral argument" do
|
41
|
-
it "yields all permutations of the given length" do
|
42
|
-
yielded = []
|
43
|
-
vector.permutation(2) { |obj| yielded << obj }
|
44
|
-
yielded.sort.should eql([[1,2], [1,3], [1,4], [2,1], [2,3], [2,4], [3,1],
|
45
|
-
[3,2], [3,4], [4,1], [4,2], [4,3]])
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "on an empty vector" do
|
51
|
-
it "yields the empty permutation" do
|
52
|
-
yielded = []
|
53
|
-
V.empty.permutation { |obj| yielded << obj }
|
54
|
-
yielded.should eql([[]])
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "with an argument of zero" do
|
59
|
-
it "yields the empty permutation" do
|
60
|
-
yielded = []
|
61
|
-
vector.permutation(0) { |obj| yielded << obj }
|
62
|
-
yielded.should eql([[]])
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context "with a length greater than the size of the vector" do
|
67
|
-
it "yields no permutations" do
|
68
|
-
vector.permutation(5) { |obj| fail }
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
it "handles duplicate elements correctly" do
|
73
|
-
V[1,2,3,1].permutation(2).sort.should eql([[1,1], [1,1], [1,2], [1,2],
|
74
|
-
[1,3], [1,3], [2,1],[2,1],[2,3], [3,1],[3,1],[3,2]])
|
75
|
-
end
|
76
|
-
|
77
|
-
it "leaves the original unmodified" do
|
78
|
-
vector.permutation(2) {}
|
79
|
-
vector.should eql(V[1,2,3,4])
|
80
|
-
end
|
81
|
-
|
82
|
-
it "behaves like Array#permutation" do
|
83
|
-
10.times do
|
84
|
-
array = rand(8).times.map { rand(10000) }
|
85
|
-
vector = V.new(array)
|
86
|
-
perm_size = array.size == 0 ? 0 : rand(array.size)
|
87
|
-
array.permutation(perm_size).to_a.should == vector.permutation(perm_size).to_a
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#pop" do
|
5
|
-
[
|
6
|
-
[[], []],
|
7
|
-
[["A"], []],
|
8
|
-
[%w[A B C], %w[A B]],
|
9
|
-
[1..32, 1..31],
|
10
|
-
[1..33, 1..32]
|
11
|
-
].each do |values, expected|
|
12
|
-
context "on #{values.inspect}" do
|
13
|
-
let(:vector) { V[*values] }
|
14
|
-
|
15
|
-
it "preserves the original" do
|
16
|
-
vector.pop
|
17
|
-
vector.should eql(V[*values])
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns #{expected.inspect}" do
|
21
|
-
vector.pop.should eql(V[*expected])
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#product" do
|
5
|
-
context "when passed no arguments" do
|
6
|
-
it "multiplies all items in vector" do
|
7
|
-
[
|
8
|
-
[[], 1],
|
9
|
-
[[2], 2],
|
10
|
-
[[1, 3, 5, 7, 11], 1155],
|
11
|
-
].each do |values, expected|
|
12
|
-
V[*values].product.should == expected
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "when passed one or more vectors" do
|
18
|
-
let(:vector) { V[1,2,3] }
|
19
|
-
|
20
|
-
context "when passed a block" do
|
21
|
-
it "yields an array for each combination of items from the vectors" do
|
22
|
-
yielded = []
|
23
|
-
vector.product(vector) { |obj| yielded << obj }
|
24
|
-
yielded.should eql([[1,1], [1,2], [1,3], [2,1], [2,2], [2,3], [3,1], [3,2], [3,3]])
|
25
|
-
|
26
|
-
yielded = []
|
27
|
-
vector.product(V[3,4,5], V[6,8]) { |obj| yielded << obj }
|
28
|
-
yielded.should eql(
|
29
|
-
[[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
|
30
|
-
[2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8],
|
31
|
-
[3, 3, 6], [3, 3, 8], [3, 4, 6], [3, 4, 8], [3, 5, 6], [3, 5, 8]])
|
32
|
-
end
|
33
|
-
|
34
|
-
it "returns self" do
|
35
|
-
vector.product(V.empty) {}.should be(vector)
|
36
|
-
vector.product(V[1,2], V[3]) {}.should be(vector)
|
37
|
-
V.empty.product(vector) {}.should be(V.empty)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "when not passed a block" do
|
42
|
-
it "returns the cartesian product in an array" do
|
43
|
-
V[1,2].product(V[3,4,5], V[6,8]).should eql(
|
44
|
-
[[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
|
45
|
-
[2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8]])
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "when one of the arguments is empty" do
|
50
|
-
it "returns an empty array" do
|
51
|
-
vector.product(V.empty, V[4,5,6]).should eql([])
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context "when the receiver is empty" do
|
56
|
-
it "returns an empty array" do
|
57
|
-
V.empty.product(vector, V[4,5,6]).should eql([])
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context "when passed one or more Arrays" do
|
63
|
-
it "also calculates the cartesian product correctly" do
|
64
|
-
V[1,2].product([3,4,5], [6,8]).should eql(
|
65
|
-
[[1, 3, 6], [1, 3, 8], [1, 4, 6], [1, 4, 8], [1, 5, 6], [1, 5, 8],
|
66
|
-
[2, 3, 6], [2, 3, 8], [2, 4, 6], [2, 4, 8], [2, 5, 6], [2, 5, 8]])
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
[:reduce, :inject].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
[
|
7
|
-
[[], 10, 10],
|
8
|
-
[[1], 10, 9],
|
9
|
-
[[1, 2, 3], 10, 4],
|
10
|
-
].each do |values, initial, expected|
|
11
|
-
describe "on #{values.inspect}" do
|
12
|
-
let(:vector) { V[*values] }
|
13
|
-
|
14
|
-
describe "with an initial value of #{initial}" do
|
15
|
-
describe "and a block" do
|
16
|
-
it "returns #{expected.inspect}" do
|
17
|
-
vector.send(method, initial) { |memo, item| memo - item }.should == expected
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
[
|
25
|
-
[[], nil],
|
26
|
-
[[1], 1],
|
27
|
-
[[1, 2, 3], -4],
|
28
|
-
].each do |values, expected|
|
29
|
-
describe "on #{values.inspect}" do
|
30
|
-
let(:vector) { V[*values] }
|
31
|
-
|
32
|
-
describe "with no initial value" do
|
33
|
-
describe "and a block" do
|
34
|
-
it "returns #{expected.inspect}" do
|
35
|
-
vector.send(method) { |memo, item| memo - item }.should == expected
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "with no block and a symbol argument" do
|
43
|
-
it "uses the symbol as the name of a method to reduce with" do
|
44
|
-
V[1, 2, 3].send(method, :+).should == 6
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "with no block and a string argument" do
|
49
|
-
it "uses the string as the name of a method to reduce with" do
|
50
|
-
V[1, 2, 3].send(method, '+').should == 6
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
[:reject, :delete_if].each do |method|
|
5
|
-
describe "##{method}" do
|
6
|
-
[
|
7
|
-
[[], []],
|
8
|
-
[["A"], ["A"]],
|
9
|
-
[%w[A B C], %w[A B C]],
|
10
|
-
[%w[A b C], %w[A C]],
|
11
|
-
[%w[a b c], []],
|
12
|
-
].each do |values, expected|
|
13
|
-
describe "on #{values.inspect}" do
|
14
|
-
let(:vector) { V[*values] }
|
15
|
-
|
16
|
-
context "with a block" do
|
17
|
-
it "returns #{expected.inspect}" do
|
18
|
-
vector.send(method) { |item| item == item.downcase }.should eql(V[*expected])
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "without a block" do
|
23
|
-
it "returns an Enumerator" do
|
24
|
-
vector.send(method).class.should be(Enumerator)
|
25
|
-
vector.send(method).each { |item| item == item.downcase }.should eql(V[*expected])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
it "works with a variety of inputs" do
|
32
|
-
[1, 2, 10, 31, 32, 33, 1023, 1024, 1025].each do |size|
|
33
|
-
[0, 5, 32, 50, 500, 800, 1024].each do |threshold|
|
34
|
-
vector = V.new(1..size)
|
35
|
-
result = vector.send(method) { |item| item > threshold }
|
36
|
-
result.size.should == [size, threshold].min
|
37
|
-
result.should eql(V.new(1..[size, threshold].min))
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#repeated_combination" do
|
5
|
-
let(:vector) { V[1,2,3,4] }
|
6
|
-
|
7
|
-
context "with no block" do
|
8
|
-
it "returns an Enumerator" do
|
9
|
-
vector.repeated_combination(2).class.should be(Enumerator)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context "with a block" do
|
14
|
-
it "returns self" do
|
15
|
-
vector.repeated_combination(2) {}.should be(vector)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "with a negative argument" do
|
20
|
-
it "yields nothing and returns self" do
|
21
|
-
result = []
|
22
|
-
vector.repeated_combination(-1) { |obj| result << obj }.should be(vector)
|
23
|
-
result.should eql([])
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "with a zero argument" do
|
28
|
-
it "yields an empty array" do
|
29
|
-
result = []
|
30
|
-
vector.repeated_combination(0) { |obj| result << obj }
|
31
|
-
result.should eql([[]])
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "with a argument of 1" do
|
36
|
-
it "yields each item in the vector, as single-item vectors" do
|
37
|
-
result = []
|
38
|
-
vector.repeated_combination(1) { |obj| result << obj }
|
39
|
-
result.should eql([[1],[2],[3],[4]])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context "on an empty vector, with an argument greater than zero" do
|
44
|
-
it "yields nothing" do
|
45
|
-
result = []
|
46
|
-
V.empty.repeated_combination(1) { |obj| result << obj }
|
47
|
-
result.should eql([])
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "with a positive argument, greater than 1" do
|
52
|
-
it "yields all combinations of the given size (where a single element can appear more than once in a row)" do
|
53
|
-
vector.repeated_combination(2).to_a.should == [[1,1], [1,2], [1,3], [1,4], [2,2], [2,3], [2,4], [3,3], [3,4], [4,4]]
|
54
|
-
vector.repeated_combination(3).to_a.should == [[1,1,1], [1,1,2], [1,1,3], [1,1,4],
|
55
|
-
[1,2,2], [1,2,3], [1,2,4], [1,3,3], [1,3,4], [1,4,4], [2,2,2], [2,2,3],
|
56
|
-
[2,2,4], [2,3,3], [2,3,4], [2,4,4], [3,3,3], [3,3,4], [3,4,4], [4,4,4]]
|
57
|
-
V[1,2,3].repeated_combination(3).to_a.should == [[1,1,1], [1,1,2],
|
58
|
-
[1,1,3], [1,2,2], [1,2,3], [1,3,3], [2,2,2], [2,2,3], [2,3,3], [3,3,3]]
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
it "leaves the original unmodified" do
|
63
|
-
vector.repeated_combination(2) {}
|
64
|
-
vector.should eql(V[1,2,3,4])
|
65
|
-
end
|
66
|
-
|
67
|
-
it "behaves like Array#repeated_combination" do
|
68
|
-
0.upto(5) do |comb_size|
|
69
|
-
array = 10.times.map { rand(1000) }
|
70
|
-
V.new(array).repeated_combination(comb_size).to_a.should == array.repeated_combination(comb_size).to_a
|
71
|
-
end
|
72
|
-
|
73
|
-
array = 18.times.map { rand(1000) }
|
74
|
-
V.new(array).repeated_combination(2).to_a.should == array.repeated_combination(2).to_a
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#repeated_permutation" do
|
5
|
-
let(:vector) { V[1,2,3,4] }
|
6
|
-
|
7
|
-
context "without a block" do
|
8
|
-
context "and without argument" do
|
9
|
-
it "returns an Enumerator of all repeated permutations" do
|
10
|
-
vector.repeated_permutation.class.should be(Enumerator)
|
11
|
-
vector.repeated_permutation.to_a.sort.should eql(vector.to_a.repeated_permutation(4).to_a.sort)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "with an integral argument" do
|
16
|
-
it "returns an Enumerator of all repeated permutations of the given length" do
|
17
|
-
vector.repeated_permutation(2).class.should be(Enumerator)
|
18
|
-
vector.repeated_permutation(2).to_a.sort.should eql(vector.to_a.repeated_permutation(2).to_a.sort)
|
19
|
-
vector.repeated_permutation(3).class.should be(Enumerator)
|
20
|
-
vector.repeated_permutation(3).to_a.sort.should eql(vector.to_a.repeated_permutation(3).to_a.sort)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "with a block" do
|
26
|
-
it "returns self" do
|
27
|
-
vector.repeated_permutation {}.should be(vector)
|
28
|
-
end
|
29
|
-
|
30
|
-
context "on an empty vector" do
|
31
|
-
it "yields the empty permutation" do
|
32
|
-
yielded = []
|
33
|
-
V.empty.repeated_permutation { |obj| yielded << obj }
|
34
|
-
yielded.should eql([[]])
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with an argument of zero" do
|
39
|
-
it "yields the empty permutation" do
|
40
|
-
yielded = []
|
41
|
-
vector.repeated_permutation(0) { |obj| yielded << obj }
|
42
|
-
yielded.should eql([[]])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "with no argument" do
|
47
|
-
it "yields all repeated permutations" do
|
48
|
-
yielded = []
|
49
|
-
V[1,2,3].repeated_permutation { |obj| yielded << obj }
|
50
|
-
yielded.sort.should eql([[1,1,1], [1,1,2], [1,1,3], [1,2,1], [1,2,2],
|
51
|
-
[1,2,3], [1,3,1], [1,3,2], [1,3,3], [2,1,1], [2,1,2], [2,1,3], [2,2,1],
|
52
|
-
[2,2,2], [2,2,3], [2,3,1], [2,3,2], [2,3,3], [3,1,1], [3,1,2], [3,1,3],
|
53
|
-
[3,2,1], [3,2,2], [3,2,3], [3,3,1], [3,3,2], [3,3,3]])
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context "with a positive integral argument" do
|
58
|
-
it "yields all repeated permutations of the given length" do
|
59
|
-
yielded = []
|
60
|
-
vector.repeated_permutation(2) { |obj| yielded << obj }
|
61
|
-
yielded.sort.should eql([[1,1], [1,2], [1,3], [1,4], [2,1], [2,2], [2,3], [2,4],
|
62
|
-
[3,1], [3,2], [3,3], [3,4], [4,1], [4,2], [4,3], [4,4]])
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
it "handles duplicate elements correctly" do
|
68
|
-
V[10,11,10].repeated_permutation(2).sort.should eql([[10, 10], [10, 10],
|
69
|
-
[10, 10], [10, 10], [10, 11], [10, 11], [11, 10], [11, 10], [11, 11]])
|
70
|
-
end
|
71
|
-
|
72
|
-
it "allows permutations larger than the number of elements" do
|
73
|
-
V[1,2].repeated_permutation(3).sort.should eql(
|
74
|
-
[[1, 1, 1], [1, 1, 2], [1, 2, 1],
|
75
|
-
[1, 2, 2], [2, 1, 1], [2, 1, 2],
|
76
|
-
[2, 2, 1], [2, 2, 2]])
|
77
|
-
end
|
78
|
-
|
79
|
-
it "leaves the original unmodified" do
|
80
|
-
vector.repeated_permutation(2) {}
|
81
|
-
vector.should eql(V[1,2,3,4])
|
82
|
-
end
|
83
|
-
|
84
|
-
it "behaves like Array#repeated_permutation" do
|
85
|
-
10.times do
|
86
|
-
array = rand(8).times.map { rand(10000) }
|
87
|
-
vector = V.new(array)
|
88
|
-
perm_size = array.size == 0 ? 0 : rand(array.size)
|
89
|
-
array.repeated_permutation(perm_size).to_a.should == vector.repeated_permutation(perm_size).to_a
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Immutable::Vector do
|
4
|
-
describe "#reverse_each" do
|
5
|
-
[2, 31, 32, 33, 1000, 1024, 1025, 2000].each do |size|
|
6
|
-
context "on a #{size}-item vector" do
|
7
|
-
let(:vector) { V[1..size] }
|
8
|
-
|
9
|
-
context "with a block (internal iteration)" do
|
10
|
-
it "returns self" do
|
11
|
-
vector.reverse_each {}.should be(vector)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "yields all items in the opposite order as #each" do
|
15
|
-
result = []
|
16
|
-
vector.reverse_each { |item| result << item }
|
17
|
-
result.should eql(vector.to_a.reverse)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "with no block" do
|
22
|
-
it "returns an Enumerator" do
|
23
|
-
result = vector.reverse_each
|
24
|
-
result.class.should be(Enumerator)
|
25
|
-
result.to_a.should eql(vector.to_a.reverse)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|