hamster 1.0.1.pre.rc2 → 1.0.1.pre.rc3
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/hamster.rb +2 -2
- data/lib/hamster/core_ext.rb +0 -1
- data/lib/hamster/core_ext/enumerable.rb +17 -17
- data/lib/hamster/core_ext/io.rb +15 -17
- data/lib/hamster/deque.rb +229 -0
- data/lib/hamster/enumerable.rb +147 -105
- data/lib/hamster/experimental/mutable_queue.rb +2 -2
- data/lib/hamster/hash.rb +488 -82
- data/lib/hamster/immutable.rb +4 -0
- data/lib/hamster/list.rb +839 -196
- data/lib/hamster/read_copy_update.rb +1 -0
- data/lib/hamster/set.rb +317 -54
- data/lib/hamster/sorted_set.rb +1014 -0
- data/lib/hamster/trie.rb +67 -47
- data/lib/hamster/undefined.rb +1 -3
- data/lib/hamster/vector.rb +989 -76
- data/lib/hamster/version.rb +1 -1
- data/spec/{hamster → lib/hamster}/core_ext/array_spec.rb +1 -1
- data/spec/{hamster → lib/hamster}/core_ext/enumerable_spec.rb +4 -0
- data/spec/{hamster → lib/hamster}/core_ext/io_spec.rb +0 -0
- data/spec/lib/hamster/deque/clear_spec.rb +34 -0
- data/spec/lib/hamster/deque/construction_spec.rb +30 -0
- data/spec/lib/hamster/deque/copying_spec.rb +20 -0
- data/spec/lib/hamster/deque/dequeue_spec.rb +27 -0
- data/spec/lib/hamster/deque/empty_spec.rb +42 -0
- data/spec/{hamster/queue → lib/hamster/deque}/enqueue_spec.rb +7 -10
- data/spec/lib/hamster/deque/head_spec.rb +20 -0
- data/spec/lib/hamster/deque/inspect_spec.rb +24 -0
- data/spec/lib/hamster/deque/last_spec.rb +20 -0
- data/spec/lib/hamster/deque/marshal_spec.rb +34 -0
- data/spec/lib/hamster/deque/new_spec.rb +44 -0
- data/spec/lib/hamster/deque/pop_spec.rb +25 -0
- data/spec/lib/hamster/deque/random_modification_spec.rb +34 -0
- data/spec/{hamster/queue → lib/hamster/deque}/size_spec.rb +4 -9
- data/spec/lib/hamster/deque/to_a_spec.rb +27 -0
- data/spec/{hamster/queue → lib/hamster/deque}/to_ary_spec.rb +6 -6
- data/spec/lib/hamster/deque/to_list_spec.rb +26 -0
- data/spec/lib/hamster/deque/unshift_spec.rb +26 -0
- data/spec/{hamster → lib/hamster}/experimental/mutable_set/add_qm_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/experimental/mutable_set/add_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/experimental/mutable_set/delete_qm_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/experimental/mutable_set/delete_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/hash/all_spec.rb +10 -0
- data/spec/lib/hamster/hash/any_spec.rb +56 -0
- data/spec/lib/hamster/hash/assoc_spec.rb +52 -0
- data/spec/lib/hamster/hash/clear_spec.rb +43 -0
- data/spec/lib/hamster/hash/construction_spec.rb +39 -0
- data/spec/{hamster → lib/hamster}/hash/copying_spec.rb +2 -4
- data/spec/lib/hamster/hash/default_proc_spec.rb +73 -0
- data/spec/lib/hamster/hash/delete_spec.rb +40 -0
- data/spec/lib/hamster/hash/each_spec.rb +78 -0
- data/spec/lib/hamster/hash/each_with_index_spec.rb +30 -0
- data/spec/lib/hamster/hash/empty_spec.rb +46 -0
- data/spec/lib/hamster/hash/eql_spec.rb +70 -0
- data/spec/lib/hamster/hash/except_spec.rb +43 -0
- data/spec/lib/hamster/hash/fetch_spec.rb +58 -0
- data/spec/lib/hamster/hash/filter_spec.rb +58 -0
- data/spec/lib/hamster/hash/find_spec.rb +44 -0
- data/spec/lib/hamster/hash/flat_map_spec.rb +36 -0
- data/spec/lib/hamster/hash/flatten_spec.rb +99 -0
- data/spec/lib/hamster/hash/get_spec.rb +80 -0
- data/spec/lib/hamster/hash/has_key_spec.rb +32 -0
- data/spec/lib/hamster/hash/has_value_spec.rb +28 -0
- data/spec/{hamster → lib/hamster}/hash/hash_spec.rb +5 -12
- data/spec/{hamster → lib/hamster}/hash/immutable_spec.rb +0 -0
- data/spec/lib/hamster/hash/inspect_spec.rb +31 -0
- data/spec/lib/hamster/hash/invert_spec.rb +31 -0
- data/spec/lib/hamster/hash/key_spec.rb +28 -0
- data/spec/{hamster → lib/hamster}/hash/keys_spec.rb +3 -6
- data/spec/lib/hamster/hash/map_spec.rb +46 -0
- data/spec/{hamster → lib/hamster}/hash/marshal_spec.rb +3 -3
- data/spec/lib/hamster/hash/merge_spec.rb +77 -0
- data/spec/lib/hamster/hash/min_max_spec.rb +50 -0
- data/spec/lib/hamster/hash/new_spec.rb +71 -0
- data/spec/{hamster → lib/hamster}/hash/none_spec.rb +12 -14
- data/spec/lib/hamster/hash/partition_spec.rb +36 -0
- data/spec/lib/hamster/hash/pretty_print_spec.rb +35 -0
- data/spec/lib/hamster/hash/put_spec.rb +81 -0
- data/spec/lib/hamster/hash/reduce_spec.rb +36 -0
- data/spec/lib/hamster/hash/remove_spec.rb +62 -0
- data/spec/lib/hamster/hash/reverse_each_spec.rb +28 -0
- data/spec/lib/hamster/hash/sample_spec.rb +14 -0
- data/spec/{hamster → lib/hamster}/hash/size_spec.rb +2 -2
- data/spec/lib/hamster/hash/slice_spec.rb +45 -0
- data/spec/lib/hamster/hash/sort_spec.rb +27 -0
- data/spec/lib/hamster/hash/store_spec.rb +54 -0
- data/spec/lib/hamster/hash/take_spec.rb +36 -0
- data/spec/lib/hamster/hash/to_a_spec.rb +14 -0
- data/spec/lib/hamster/hash/to_hash_spec.rb +22 -0
- data/spec/{hamster → lib/hamster}/hash/uniq_spec.rb +2 -4
- data/spec/lib/hamster/hash/values_at_spec.rb +14 -0
- data/spec/lib/hamster/hash/values_spec.rb +25 -0
- data/spec/{hamster → lib/hamster}/immutable/copying_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/immutable/immutable_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/immutable/memoize_spec.rb +2 -2
- data/spec/{hamster → lib/hamster}/immutable/new_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/immutable/transform_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/immutable/transform_unless_spec.rb +0 -0
- data/spec/lib/hamster/list/add_spec.rb +20 -0
- data/spec/lib/hamster/list/all_spec.rb +60 -0
- data/spec/{hamster → lib/hamster}/list/any_spec.rb +12 -20
- data/spec/{hamster → lib/hamster}/list/append_spec.rb +9 -10
- data/spec/lib/hamster/list/at_spec.rb +30 -0
- data/spec/lib/hamster/list/break_spec.rb +70 -0
- data/spec/{hamster → lib/hamster}/list/cadr_spec.rb +5 -8
- data/spec/{hamster → lib/hamster}/list/chunk_spec.rb +5 -8
- data/spec/{hamster → lib/hamster}/list/clear_spec.rb +4 -7
- data/spec/lib/hamster/list/combination_spec.rb +34 -0
- data/spec/{hamster → lib/hamster}/list/compact_spec.rb +5 -8
- data/spec/lib/hamster/list/compare_spec.rb +31 -0
- data/spec/{hamster → lib/hamster}/list/cons_spec.rb +5 -9
- data/spec/lib/hamster/list/construction_spec.rb +118 -0
- data/spec/{hamster → lib/hamster}/list/copying_spec.rb +3 -7
- data/spec/lib/hamster/list/count_spec.rb +37 -0
- data/spec/lib/hamster/list/cycle_spec.rb +29 -0
- data/spec/lib/hamster/list/delete_at_spec.rb +19 -0
- data/spec/lib/hamster/list/delete_spec.rb +17 -0
- data/spec/{hamster → lib/hamster}/list/drop_spec.rb +5 -8
- data/spec/lib/hamster/list/drop_while_spec.rb +39 -0
- data/spec/lib/hamster/list/each_slice_spec.rb +52 -0
- data/spec/lib/hamster/list/each_spec.rb +43 -0
- data/spec/lib/hamster/list/each_with_index_spec.rb +29 -0
- data/spec/{hamster → lib/hamster}/list/elem_index_spec.rb +4 -14
- data/spec/{hamster → lib/hamster}/list/elem_indices_spec.rb +5 -9
- data/spec/{hamster → lib/hamster}/list/empty_spec.rb +4 -13
- data/spec/{hamster → lib/hamster}/list/eql_spec.rb +2 -8
- data/spec/lib/hamster/list/fill_spec.rb +50 -0
- data/spec/{hamster → lib/hamster}/list/filter_spec.rb +3 -2
- data/spec/{hamster → lib/hamster}/list/find_all_spec.rb +3 -2
- data/spec/{hamster → lib/hamster}/list/find_index_spec.rb +4 -14
- data/spec/{hamster → lib/hamster}/list/find_indices_spec.rb +11 -9
- data/spec/{hamster → lib/hamster}/list/find_spec.rb +10 -16
- data/spec/{hamster → lib/hamster}/list/flat_map_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/list/flatten_spec.rb +5 -8
- data/spec/{hamster → lib/hamster}/list/grep_spec.rb +9 -17
- data/spec/{hamster → lib/hamster}/list/group_by_spec.rb +8 -24
- data/spec/{hamster → lib/hamster}/list/hash_spec.rb +4 -12
- data/spec/{hamster → lib/hamster}/list/head_spec.rb +2 -7
- data/spec/{hamster → lib/hamster}/list/include_spec.rb +4 -13
- data/spec/{hamster → lib/hamster}/list/init_spec.rb +5 -9
- data/spec/lib/hamster/list/inits_spec.rb +29 -0
- data/spec/lib/hamster/list/insert_spec.rb +47 -0
- data/spec/lib/hamster/list/inspect_spec.rb +30 -0
- data/spec/{hamster → lib/hamster}/list/intersperse_spec.rb +5 -8
- data/spec/lib/hamster/list/join_spec.rb +64 -0
- data/spec/lib/hamster/list/last_spec.rb +24 -0
- data/spec/{hamster → lib/hamster}/list/map_spec.rb +11 -20
- data/spec/lib/hamster/list/maximum_spec.rb +42 -0
- data/spec/{hamster → lib/hamster}/list/merge_by_spec.rb +4 -13
- data/spec/{hamster → lib/hamster}/list/merge_spec.rb +0 -0
- data/spec/lib/hamster/list/minimum_spec.rb +42 -0
- data/spec/lib/hamster/list/multithreading_spec.rb +48 -0
- data/spec/{hamster → lib/hamster}/list/none_spec.rb +11 -21
- data/spec/{hamster → lib/hamster}/list/one_spec.rb +12 -22
- data/spec/lib/hamster/list/partition_spec.rb +116 -0
- data/spec/lib/hamster/list/permutation_spec.rb +56 -0
- data/spec/{hamster → lib/hamster}/list/pop_spec.rb +1 -1
- data/spec/lib/hamster/list/product_spec.rb +24 -0
- data/spec/lib/hamster/list/reduce_spec.rb +97 -0
- data/spec/{hamster → lib/hamster}/list/remove_spec.rb +9 -19
- data/spec/{hamster → lib/hamster}/list/reverse_spec.rb +7 -14
- data/spec/lib/hamster/list/rotate_spec.rb +37 -0
- data/spec/lib/hamster/list/sample_spec.rb +14 -0
- data/spec/{hamster → lib/hamster}/list/select_spec.rb +3 -2
- data/spec/{hamster → lib/hamster}/list/size_spec.rb +4 -13
- data/spec/lib/hamster/list/slice_spec.rb +230 -0
- data/spec/{hamster → lib/hamster}/list/sorting_spec.rb +10 -20
- data/spec/lib/hamster/list/span_spec.rb +77 -0
- data/spec/{hamster → lib/hamster}/list/split_at_spec.rb +13 -14
- data/spec/lib/hamster/list/subsequences_spec.rb +24 -0
- data/spec/lib/hamster/list/sum_spec.rb +24 -0
- data/spec/lib/hamster/list/tail_spec.rb +31 -0
- data/spec/lib/hamster/list/tails_spec.rb +29 -0
- data/spec/{hamster → lib/hamster}/list/take_spec.rb +5 -8
- data/spec/{hamster → lib/hamster}/list/take_while_spec.rb +11 -17
- data/spec/lib/hamster/list/to_a_spec.rb +40 -0
- data/spec/{hamster → lib/hamster}/list/to_ary_spec.rb +1 -3
- data/spec/{hamster → lib/hamster}/list/to_list_spec.rb +3 -7
- data/spec/{hamster → lib/hamster}/list/to_set_spec.rb +2 -10
- data/spec/lib/hamster/list/transpose_spec.rb +20 -0
- data/spec/{hamster → lib/hamster}/list/union_spec.rb +5 -12
- data/spec/{hamster → lib/hamster}/list/uniq_spec.rb +5 -8
- data/spec/{hamster → lib/hamster}/list/zip_spec.rb +2 -9
- data/spec/lib/hamster/set/add_spec.rb +76 -0
- data/spec/{hamster → lib/hamster}/set/all_spec.rb +18 -14
- data/spec/{hamster → lib/hamster}/set/any_spec.rb +19 -16
- data/spec/{hamster → lib/hamster}/set/clear_spec.rb +8 -11
- data/spec/{hamster → lib/hamster}/set/compact_spec.rb +4 -7
- data/spec/{hamster → lib/hamster}/set/construction_spec.rb +4 -8
- data/spec/{hamster → lib/hamster}/set/copying_spec.rb +3 -5
- data/spec/{hamster → lib/hamster}/set/count_spec.rb +11 -16
- data/spec/lib/hamster/set/delete_spec.rb +72 -0
- data/spec/lib/hamster/set/difference_spec.rb +50 -0
- data/spec/lib/hamster/set/disjoint_spec.rb +26 -0
- data/spec/lib/hamster/set/each_spec.rb +46 -0
- data/spec/lib/hamster/set/empty_spec.rb +47 -0
- data/spec/{hamster → lib/hamster}/set/eqeq_spec.rb +0 -0
- data/spec/{hamster → lib/hamster}/set/eql_spec.rb +7 -1
- data/spec/lib/hamster/set/exclusion_spec.rb +48 -0
- data/spec/lib/hamster/set/filter_spec.rb +74 -0
- data/spec/{hamster → lib/hamster}/set/find_spec.rb +7 -11
- data/spec/lib/hamster/set/flatten_spec.rb +47 -0
- data/spec/{hamster → lib/hamster}/set/foreach_spec.rb +5 -4
- data/spec/{hamster → lib/hamster}/set/grep_spec.rb +1 -1
- data/spec/lib/hamster/set/group_by_spec.rb +60 -0
- data/spec/lib/hamster/set/hash_spec.rb +23 -0
- data/spec/lib/hamster/set/head_spec.rb +31 -0
- data/spec/{hamster → lib/hamster}/set/immutable_spec.rb +0 -0
- data/spec/lib/hamster/set/include_spec.rb +61 -0
- data/spec/lib/hamster/set/inspect_spec.rb +48 -0
- data/spec/lib/hamster/set/intersect_spec.rb +26 -0
- data/spec/lib/hamster/set/intersection_spec.rb +53 -0
- data/spec/lib/hamster/set/join_spec.rb +65 -0
- data/spec/lib/hamster/set/map_spec.rb +60 -0
- data/spec/{hamster → lib/hamster}/set/marshal_spec.rb +3 -3
- data/spec/{hamster → lib/hamster}/set/maximum_spec.rb +6 -15
- data/spec/{hamster → lib/hamster}/set/minimum_spec.rb +6 -16
- data/spec/lib/hamster/set/new_spec.rb +54 -0
- data/spec/{hamster → lib/hamster}/set/none_spec.rb +15 -15
- data/spec/{hamster → lib/hamster}/set/one_spec.rb +14 -16
- data/spec/lib/hamster/set/partition_spec.rb +53 -0
- data/spec/{hamster → lib/hamster}/set/product_spec.rb +6 -6
- data/spec/lib/hamster/set/reduce_spec.rb +56 -0
- data/spec/lib/hamster/set/remove_spec.rb +51 -0
- data/spec/{hamster/set/each_spec.rb → lib/hamster/set/reverse_each_spec.rb} +8 -7
- data/spec/lib/hamster/set/sample_spec.rb +14 -0
- data/spec/{hamster → lib/hamster}/set/size_spec.rb +0 -1
- data/spec/{hamster → lib/hamster}/set/sorting_spec.rb +17 -13
- data/spec/lib/hamster/set/subset_spec.rb +52 -0
- data/spec/lib/hamster/set/sum_spec.rb +24 -0
- data/spec/lib/hamster/set/superset_spec.rb +52 -0
- data/spec/lib/hamster/set/to_a_spec.rb +31 -0
- data/spec/lib/hamster/set/to_list_spec.rb +37 -0
- data/spec/{hamster → lib/hamster}/set/to_set_spec.rb +2 -6
- data/spec/lib/hamster/set/union_spec.rb +55 -0
- data/spec/{hamster → lib/hamster}/set/uniq_spec.rb +2 -5
- data/spec/lib/hamster/sorted_set/above_spec.rb +52 -0
- data/spec/lib/hamster/sorted_set/add_spec.rb +63 -0
- data/spec/lib/hamster/sorted_set/at_spec.rb +25 -0
- data/spec/lib/hamster/sorted_set/below_spec.rb +52 -0
- data/spec/lib/hamster/sorted_set/between_spec.rb +52 -0
- data/spec/lib/hamster/sorted_set/clear_spec.rb +35 -0
- data/spec/lib/hamster/sorted_set/construction_spec.rb +29 -0
- data/spec/lib/hamster/sorted_set/delete_at_spec.rb +19 -0
- data/spec/lib/hamster/sorted_set/delete_spec.rb +81 -0
- data/spec/{hamster/set → lib/hamster/sorted_set}/difference_spec.rb +5 -9
- data/spec/lib/hamster/sorted_set/disjoint_spec.rb +26 -0
- data/spec/lib/hamster/sorted_set/drop_spec.rb +29 -0
- data/spec/lib/hamster/sorted_set/drop_while_spec.rb +35 -0
- data/spec/lib/hamster/sorted_set/each_spec.rb +31 -0
- data/spec/lib/hamster/sorted_set/empty_spec.rb +37 -0
- data/spec/lib/hamster/sorted_set/eql_spec.rb +121 -0
- data/spec/{hamster/set → lib/hamster/sorted_set}/exclusion_spec.rb +4 -9
- data/spec/lib/hamster/sorted_set/fetch_spec.rb +65 -0
- data/spec/lib/hamster/sorted_set/filter_spec.rb +62 -0
- data/spec/lib/hamster/sorted_set/find_index_spec.rb +33 -0
- data/spec/lib/hamster/sorted_set/first_spec.rb +21 -0
- data/spec/lib/hamster/sorted_set/from_spec.rb +52 -0
- data/spec/lib/hamster/sorted_set/group_by_spec.rb +58 -0
- data/spec/lib/hamster/sorted_set/include_spec.rb +24 -0
- data/spec/lib/hamster/sorted_set/inspect_spec.rb +38 -0
- data/spec/lib/hamster/sorted_set/intersect_spec.rb +26 -0
- data/spec/lib/hamster/sorted_set/intersection_spec.rb +29 -0
- data/spec/lib/hamster/sorted_set/last_spec.rb +37 -0
- data/spec/lib/hamster/sorted_set/map_spec.rb +36 -0
- data/spec/lib/hamster/sorted_set/marshal_spec.rb +37 -0
- data/spec/lib/hamster/sorted_set/minimum_spec.rb +22 -0
- data/spec/lib/hamster/sorted_set/new_spec.rb +52 -0
- data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +29 -0
- data/spec/lib/hamster/sorted_set/sample_spec.rb +14 -0
- data/spec/lib/hamster/sorted_set/size_spec.rb +18 -0
- data/spec/lib/hamster/sorted_set/slice_spec.rb +241 -0
- data/spec/lib/hamster/sorted_set/sorting_spec.rb +45 -0
- data/spec/lib/hamster/sorted_set/subset_spec.rb +48 -0
- data/spec/lib/hamster/sorted_set/superset_spec.rb +48 -0
- data/spec/lib/hamster/sorted_set/take_spec.rb +26 -0
- data/spec/lib/hamster/sorted_set/take_while_spec.rb +34 -0
- data/spec/lib/hamster/sorted_set/to_set_spec.rb +19 -0
- data/spec/lib/hamster/sorted_set/union_spec.rb +28 -0
- data/spec/lib/hamster/sorted_set/up_to_spec.rb +52 -0
- data/spec/lib/hamster/sorted_set/values_at_spec.rb +34 -0
- data/spec/lib/hamster/vector/add_spec.rb +68 -0
- data/spec/{hamster → lib/hamster}/vector/any_spec.rb +0 -0
- data/spec/lib/hamster/vector/assoc_spec.rb +36 -0
- data/spec/lib/hamster/vector/bsearch_spec.rb +58 -0
- data/spec/lib/hamster/vector/clear_spec.rb +34 -0
- data/spec/lib/hamster/vector/combination_spec.rb +82 -0
- data/spec/lib/hamster/vector/compact_spec.rb +30 -0
- data/spec/lib/hamster/vector/compare_spec.rb +32 -0
- data/spec/lib/hamster/vector/concat_spec.rb +35 -0
- data/spec/{hamster → lib/hamster}/vector/copying_spec.rb +3 -6
- data/spec/lib/hamster/vector/count_spec.rb +18 -0
- data/spec/lib/hamster/vector/delete_at_spec.rb +54 -0
- data/spec/lib/hamster/vector/delete_spec.rb +31 -0
- data/spec/lib/hamster/vector/drop_spec.rb +35 -0
- data/spec/lib/hamster/vector/drop_while_spec.rb +55 -0
- data/spec/lib/hamster/vector/each_index_spec.rb +41 -0
- data/spec/lib/hamster/vector/each_spec.rb +47 -0
- data/spec/lib/hamster/vector/each_with_index_spec.rb +40 -0
- data/spec/lib/hamster/vector/empty_spec.rb +44 -0
- data/spec/lib/hamster/vector/eql_spec.rb +77 -0
- data/spec/lib/hamster/vector/exist_spec.rb +4 -4
- data/spec/lib/hamster/vector/exists_spec.rb +4 -4
- data/spec/lib/hamster/vector/fetch_spec.rb +65 -0
- data/spec/lib/hamster/vector/fill_spec.rb +89 -0
- data/spec/lib/hamster/vector/filter_spec.rb +64 -0
- data/spec/{hamster → lib/hamster}/vector/first_spec.rb +2 -6
- data/spec/lib/hamster/vector/flatten_spec.rb +44 -0
- data/spec/lib/hamster/vector/get_spec.rb +75 -0
- data/spec/lib/hamster/vector/group_by_spec.rb +58 -0
- data/spec/{hamster → lib/hamster}/vector/include_spec.rb +2 -6
- data/spec/lib/hamster/vector/insert_spec.rb +69 -0
- data/spec/lib/hamster/vector/inspect_spec.rb +50 -0
- data/spec/{hamster/set → lib/hamster/vector}/join_spec.rb +23 -18
- data/spec/{hamster → lib/hamster}/vector/last_spec.rb +12 -3
- data/spec/{hamster → lib/hamster}/vector/length_spec.rb +12 -3
- data/spec/lib/hamster/vector/ltlt_spec.rb +20 -2
- data/spec/lib/hamster/vector/map_spec.rb +52 -0
- data/spec/lib/hamster/vector/marshal_spec.rb +32 -0
- data/spec/lib/hamster/vector/maximum_spec.rb +36 -0
- data/spec/lib/hamster/vector/minimum_spec.rb +36 -0
- data/spec/lib/hamster/vector/multiply_spec.rb +48 -0
- data/spec/lib/hamster/vector/new_spec.rb +51 -0
- data/spec/lib/hamster/vector/partition_spec.rb +53 -0
- data/spec/lib/hamster/vector/permutation_spec.rb +92 -0
- data/spec/lib/hamster/vector/pop_spec.rb +27 -0
- data/spec/lib/hamster/vector/product_spec.rb +71 -0
- data/spec/lib/hamster/vector/reduce_spec.rb +108 -0
- data/spec/lib/hamster/vector/remove_spec.rb +44 -0
- data/spec/lib/hamster/vector/repeated_combination_spec.rb +78 -0
- data/spec/lib/hamster/vector/repeated_permutation_spec.rb +94 -0
- data/spec/lib/hamster/vector/reverse_each_spec.rb +32 -0
- data/spec/lib/hamster/vector/reverse_spec.rb +22 -0
- data/spec/lib/hamster/vector/rindex_spec.rb +37 -0
- data/spec/lib/hamster/vector/rotate_spec.rb +74 -0
- data/spec/lib/hamster/vector/sample_spec.rb +14 -0
- data/spec/{hamster → lib/hamster}/vector/set_spec.rb +48 -14
- data/spec/lib/hamster/vector/shift_spec.rb +28 -0
- data/spec/lib/hamster/vector/shuffle_spec.rb +44 -0
- data/spec/lib/hamster/vector/slice_spec.rb +241 -0
- data/spec/lib/hamster/vector/sorting_spec.rb +57 -0
- data/spec/{hamster/set → lib/hamster/vector}/sum_spec.rb +3 -9
- data/spec/lib/hamster/vector/take_spec.rb +29 -0
- data/spec/lib/hamster/vector/take_while_spec.rb +35 -0
- data/spec/{hamster → lib/hamster}/vector/to_a_spec.rb +11 -12
- data/spec/{hamster → lib/hamster}/vector/to_ary_spec.rb +0 -0
- data/spec/{hamster/set → lib/hamster/vector}/to_list_spec.rb +7 -12
- data/spec/lib/hamster/vector/to_set_spec.rb +23 -0
- data/spec/lib/hamster/vector/transpose_spec.rb +49 -0
- data/spec/lib/hamster/vector/uniq_spec.rb +56 -0
- data/spec/lib/hamster/vector/unshift_spec.rb +29 -0
- data/spec/lib/hamster/vector/values_at_spec.rb +34 -0
- data/spec/lib/hamster/vector/zip_spec.rb +58 -0
- data/spec/spec_helper.rb +34 -1
- metadata +684 -467
- data/lib/hamster/core_ext/enumerator.rb +0 -16
- data/lib/hamster/experimental/mutable_stack.rb +0 -30
- data/lib/hamster/groupable.rb +0 -12
- data/lib/hamster/queue.rb +0 -86
- data/lib/hamster/sorter.rb +0 -25
- data/lib/hamster/stack.rb +0 -77
- data/lib/hamster/tuple.rb +0 -24
- data/spec/hamster/core_ext/enumerator_spec.rb +0 -19
- data/spec/hamster/experimental/mutable_stack/pop_spec.rb +0 -35
- data/spec/hamster/experimental/mutable_stack/push_spec.rb +0 -21
- data/spec/hamster/hash/any_spec.rb +0 -52
- data/spec/hamster/hash/clear_spec.rb +0 -29
- data/spec/hamster/hash/construction_spec.rb +0 -27
- data/spec/hamster/hash/delete_spec.rb +0 -38
- data/spec/hamster/hash/each_spec.rb +0 -30
- data/spec/hamster/hash/empty_spec.rb +0 -27
- data/spec/hamster/hash/eql_spec.rb +0 -70
- data/spec/hamster/hash/except_spec.rb +0 -22
- data/spec/hamster/hash/fetch_spec.rb +0 -72
- data/spec/hamster/hash/filter_spec.rb +0 -48
- data/spec/hamster/hash/find_spec.rb +0 -45
- data/spec/hamster/hash/get_spec.rb +0 -55
- data/spec/hamster/hash/has_key_spec.rb +0 -26
- data/spec/hamster/hash/inspect_spec.rb +0 -24
- data/spec/hamster/hash/map_spec.rb +0 -49
- data/spec/hamster/hash/merge_spec.rb +0 -30
- data/spec/hamster/hash/new_spec.rb +0 -21
- data/spec/hamster/hash/put_spec.rb +0 -67
- data/spec/hamster/hash/reduce_spec.rb +0 -52
- data/spec/hamster/hash/remove_spec.rb +0 -48
- data/spec/hamster/hash/slice_spec.rb +0 -26
- data/spec/hamster/hash/values_spec.rb +0 -29
- data/spec/hamster/list/add_spec.rb +0 -11
- data/spec/hamster/list/all_spec.rb +0 -84
- data/spec/hamster/list/at_spec.rb +0 -37
- data/spec/hamster/list/break_spec.rb +0 -73
- data/spec/hamster/list/combinations_spec.rb +0 -41
- data/spec/hamster/list/construction_spec.rb +0 -137
- data/spec/hamster/list/count_spec.rb +0 -52
- data/spec/hamster/list/cycle_spec.rb +0 -36
- data/spec/hamster/list/drop_while_spec.rb +0 -47
- data/spec/hamster/list/each_slice_spec.rb +0 -64
- data/spec/hamster/list/each_spec.rb +0 -56
- data/spec/hamster/list/each_with_index_spec.rb +0 -33
- data/spec/hamster/list/inits_spec.rb +0 -34
- data/spec/hamster/list/inspect_spec.rb +0 -33
- data/spec/hamster/list/join_spec.rb +0 -64
- data/spec/hamster/list/last_spec.rb +0 -34
- data/spec/hamster/list/maximum_spec.rb +0 -58
- data/spec/hamster/list/minimum_spec.rb +0 -58
- data/spec/hamster/list/partition_spec.rb +0 -63
- data/spec/hamster/list/product_spec.rb +0 -34
- data/spec/hamster/list/reduce_spec.rb +0 -72
- data/spec/hamster/list/slice_spec.rb +0 -40
- data/spec/hamster/list/span_spec.rb +0 -75
- data/spec/hamster/list/sum_spec.rb +0 -34
- data/spec/hamster/list/tail_spec.rb +0 -38
- data/spec/hamster/list/tails_spec.rb +0 -34
- data/spec/hamster/list/to_a_spec.rb +0 -42
- data/spec/hamster/queue/clear_spec.rb +0 -28
- data/spec/hamster/queue/construction_spec.rb +0 -34
- data/spec/hamster/queue/dequeue_spec.rb +0 -30
- data/spec/hamster/queue/empty_spec.rb +0 -35
- data/spec/hamster/queue/head_spec.rb +0 -25
- data/spec/hamster/queue/inspect_spec.rb +0 -23
- data/spec/hamster/queue/to_a_spec.rb +0 -32
- data/spec/hamster/queue/to_list_spec.rb +0 -34
- data/spec/hamster/set/add_spec.rb +0 -40
- data/spec/hamster/set/delete_spec.rb +0 -38
- data/spec/hamster/set/empty_spec.rb +0 -25
- data/spec/hamster/set/filter_spec.rb +0 -72
- data/spec/hamster/set/flatten_spec.rb +0 -47
- data/spec/hamster/set/group_by_spec.rb +0 -56
- data/spec/hamster/set/hash_spec.rb +0 -20
- data/spec/hamster/set/head_spec.rb +0 -28
- data/spec/hamster/set/include_spec.rb +0 -27
- data/spec/hamster/set/inspect_spec.rb +0 -24
- data/spec/hamster/set/intersection_spec.rb +0 -36
- data/spec/hamster/set/map_spec.rb +0 -49
- data/spec/hamster/set/new_spec.rb +0 -21
- data/spec/hamster/set/partition_spec.rb +0 -59
- data/spec/hamster/set/reduce_spec.rb +0 -62
- data/spec/hamster/set/remove_spec.rb +0 -48
- data/spec/hamster/set/subset_spec.rb +0 -31
- data/spec/hamster/set/superset_spec.rb +0 -31
- data/spec/hamster/set/to_a_spec.rb +0 -32
- data/spec/hamster/set/union_spec.rb +0 -35
- data/spec/hamster/sorter/immutable_spec.rb +0 -9
- data/spec/hamster/stack/clear_spec.rb +0 -28
- data/spec/hamster/stack/construction_spec.rb +0 -34
- data/spec/hamster/stack/copying_spec.rb +0 -23
- data/spec/hamster/stack/empty_spec.rb +0 -23
- data/spec/hamster/stack/eql_spec.rb +0 -48
- data/spec/hamster/stack/immutable_spec.rb +0 -9
- data/spec/hamster/stack/inspect_spec.rb +0 -23
- data/spec/hamster/stack/peek_spec.rb +0 -30
- data/spec/hamster/stack/pop_spec.rb +0 -31
- data/spec/hamster/stack/push_spec.rb +0 -31
- data/spec/hamster/stack/size_spec.rb +0 -25
- data/spec/hamster/stack/to_a_spec.rb +0 -32
- data/spec/hamster/stack/to_ary.rb +0 -37
- data/spec/hamster/stack/to_list_spec.rb +0 -25
- data/spec/hamster/trie/remove_spec.rb +0 -117
- data/spec/hamster/tuple/construction_spec.rb +0 -30
- data/spec/hamster/tuple/copying_spec.rb +0 -17
- data/spec/hamster/tuple/eql_spec.rb +0 -78
- data/spec/hamster/tuple/first_spec.rb +0 -14
- data/spec/hamster/tuple/immutable_spec.rb +0 -9
- data/spec/hamster/tuple/inspect_spec.rb +0 -14
- data/spec/hamster/tuple/last_spec.rb +0 -14
- data/spec/hamster/tuple/to_a_spec.rb +0 -30
- data/spec/hamster/tuple/to_ary_spec.rb +0 -37
- data/spec/hamster/undefined/erase_spec.rb +0 -36
- data/spec/hamster/vector/add_spec.rb +0 -56
- data/spec/hamster/vector/clear_spec.rb +0 -28
- data/spec/hamster/vector/each_spec.rb +0 -35
- data/spec/hamster/vector/each_with_index_spec.rb +0 -33
- data/spec/hamster/vector/empty_spec.rb +0 -32
- data/spec/hamster/vector/eql_spec.rb +0 -53
- data/spec/hamster/vector/filter_spec.rb +0 -58
- data/spec/hamster/vector/get_spec.rb +0 -58
- data/spec/hamster/vector/inspect_spec.rb +0 -33
- data/spec/hamster/vector/map_spec.rb +0 -57
- data/spec/hamster/vector/new_spec.rb +0 -48
- data/spec/hamster/vector/reduce_spec.rb +0 -62
- data/spec/lib/hamster/vector/cons_spec.rb +0 -48
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
describe "#reverse" do
|
6
|
+
[
|
7
|
+
[[], []],
|
8
|
+
[[1], [1]],
|
9
|
+
[[1,2], [2,1]],
|
10
|
+
[(1..32).to_a, (1..32).to_a.reverse],
|
11
|
+
[(1..33).to_a, (1..33).to_a.reverse],
|
12
|
+
[(1..100).to_a, (1..100).to_a.reverse],
|
13
|
+
[(1..1024).to_a, (1..1024).to_a.reverse]
|
14
|
+
].each do |initial, expected|
|
15
|
+
describe "on #{initial}" do
|
16
|
+
it "returns #{expected}" do
|
17
|
+
Hamster::Vector.new(initial).reverse.should eql(Hamster::Vector.new(expected))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
describe "#rindex" do
|
6
|
+
let(:vector) { Hamster.vector(1,2,3,3,2,1) }
|
7
|
+
|
8
|
+
context "when passed an object present in the vector" do
|
9
|
+
it "returns the last index where the object is present" do
|
10
|
+
vector.rindex(1).should be(5)
|
11
|
+
vector.rindex(2).should be(4)
|
12
|
+
vector.rindex(3).should be(3)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when passed an object not present in the vector" do
|
17
|
+
it "returns nil" do
|
18
|
+
vector.rindex(0).should be_nil
|
19
|
+
vector.rindex(nil).should be_nil
|
20
|
+
vector.rindex('string').should be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "with a block" do
|
25
|
+
it "returns the last index of an object which the predicate is true for" do
|
26
|
+
vector.rindex { |n| n > 2 }.should be(3)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "without an argument OR block" do
|
31
|
+
it "returns an Enumerator" do
|
32
|
+
vector.rindex.class.should be(Enumerator)
|
33
|
+
vector.rindex.each { |n| n > 2 }.should be(3)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
describe "#rotate" do
|
6
|
+
let(:vector) { Hamster.vector(1,2,3,4,5) }
|
7
|
+
|
8
|
+
context "when passed no argument" do
|
9
|
+
it "returns a new vector with the first element moved to the end" do
|
10
|
+
vector.rotate.should eql(Hamster.vector(2,3,4,5,1))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with an integral argument n" do
|
15
|
+
it "returns a new vector with the first (n % size) elements moved to the end" do
|
16
|
+
vector.rotate(2).should eql(Hamster.vector(3,4,5,1,2))
|
17
|
+
vector.rotate(3).should eql(Hamster.vector(4,5,1,2,3))
|
18
|
+
vector.rotate(4).should eql(Hamster.vector(5,1,2,3,4))
|
19
|
+
vector.rotate(5).should eql(Hamster.vector(1,2,3,4,5))
|
20
|
+
vector.rotate(-1).should eql(Hamster.vector(5,1,2,3,4))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "with a floating-point argument n" do
|
25
|
+
it "coerces the argument to integer using to_int" do
|
26
|
+
vector.rotate(2.1).should eql(Hamster.vector(3,4,5,1,2))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with a non-numeric argument" do
|
31
|
+
it "raises a TypeError" do
|
32
|
+
-> { vector.rotate('hello') }.should raise_error(TypeError)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with an argument of zero" do
|
37
|
+
it "returns self" do
|
38
|
+
vector.rotate(0).should be(vector)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with an argument equal to the vector's size" do
|
43
|
+
it "returns self" do
|
44
|
+
vector.rotate(5).should be(vector)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
[31, 32, 33, 1000, 1023, 1024, 1025].each do |size|
|
49
|
+
context "on a #{size}-item vector" do
|
50
|
+
it "behaves like Array#rotate" do
|
51
|
+
array = (1..size).to_a
|
52
|
+
vector = V.new(array)
|
53
|
+
10.times do
|
54
|
+
offset = rand(size)
|
55
|
+
vector.rotate(offset).should == array.rotate(offset)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "from a subclass" do
|
62
|
+
it "returns an instance of the subclass" do
|
63
|
+
subclass = Class.new(Hamster::Vector)
|
64
|
+
instance = subclass.new([1,2,3])
|
65
|
+
instance.rotate(2).class.should be(subclass)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
it "leaves the original unmodified" do
|
70
|
+
vector.rotate(3)
|
71
|
+
vector.should eql(Hamster.vector(1,2,3,4,5))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
describe "#sample" do
|
6
|
+
let(:vector) { Hamster::Vector.new(1..10) }
|
7
|
+
|
8
|
+
it "returns a randomly chosen item" do
|
9
|
+
chosen = 100.times.map { vector.sample }
|
10
|
+
chosen.each { |item| vector.include?(item).should == true }
|
11
|
+
vector.each { |item| chosen.include?(item).should == true }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -27,18 +27,25 @@ describe Hamster::Vector do
|
|
27
27
|
|
28
28
|
it "replaces the value with the result of the block" do
|
29
29
|
result = vector.set(1) { |value| "FLIBBLE" }
|
30
|
-
result.should
|
30
|
+
result.should eql(Hamster.vector("A", "FLIBBLE", "C"))
|
31
31
|
end
|
32
32
|
|
33
33
|
it "supports to_proc methods" do
|
34
34
|
result = vector.set(1, &:downcase)
|
35
|
-
result.should
|
35
|
+
result.should eql(Hamster.vector("A", "b", "C"))
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
context "
|
39
|
+
context "just past the end of the vector" do
|
40
|
+
it "passes nil to the block and adds a new value" do
|
41
|
+
result = vector.set(3) { |value| value.should be_nil; "D" }
|
42
|
+
result.should eql(Hamster.vector("A", "B", "C", "D"))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "further outside the bounds of the vector" do
|
40
47
|
it "raises an error" do
|
41
|
-
expect { vector.set(
|
48
|
+
expect { vector.set(4) {} }.to raise_error
|
42
49
|
end
|
43
50
|
end
|
44
51
|
end
|
@@ -51,12 +58,12 @@ describe Hamster::Vector do
|
|
51
58
|
|
52
59
|
it "replaces the value with the result of the block" do
|
53
60
|
result = vector.set(-2) { |value| "FLIBBLE" }
|
54
|
-
result.should
|
61
|
+
result.should eql(Hamster.vector("A", "FLIBBLE", "C"))
|
55
62
|
end
|
56
63
|
|
57
64
|
it "supports to_proc methods" do
|
58
65
|
result = vector.set(-2, &:downcase)
|
59
|
-
result.should
|
66
|
+
result.should eql(Hamster.vector("A", "b", "C"))
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
@@ -74,17 +81,24 @@ describe Hamster::Vector do
|
|
74
81
|
let(:set) { vector.set(1, "FLIBBLE") }
|
75
82
|
|
76
83
|
it "preserves the original" do
|
77
|
-
vector.should
|
84
|
+
vector.should eql(Hamster.vector("A", "B", "C"))
|
78
85
|
end
|
79
86
|
|
80
87
|
it "sets the new value at the specified index" do
|
81
|
-
set.should
|
88
|
+
set.should eql(Hamster.vector("A", "FLIBBLE", "C"))
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "just past the end of the vector" do
|
93
|
+
it "adds a new value" do
|
94
|
+
result = vector.set(3, "FLIBBLE")
|
95
|
+
result.should eql(Hamster.vector("A", "B", "C", "FLIBBLE"))
|
82
96
|
end
|
83
97
|
end
|
84
98
|
|
85
99
|
context "outside the absolute bounds of the vector" do
|
86
100
|
it "raises an error" do
|
87
|
-
expect { vector.set(
|
101
|
+
expect { vector.set(4, "FLIBBLE") }.to raise_error
|
88
102
|
end
|
89
103
|
end
|
90
104
|
end
|
@@ -94,11 +108,11 @@ describe Hamster::Vector do
|
|
94
108
|
|
95
109
|
it "preserves the original" do
|
96
110
|
set
|
97
|
-
vector.should
|
111
|
+
vector.should eql(Hamster.vector("A", "B", "C"))
|
98
112
|
end
|
99
113
|
|
100
114
|
it "sets the new value at the specified index" do
|
101
|
-
set.should
|
115
|
+
set.should eql(Hamster.vector("A", "FLIBBLE", "C"))
|
102
116
|
end
|
103
117
|
end
|
104
118
|
|
@@ -112,9 +126,29 @@ describe Hamster::Vector do
|
|
112
126
|
|
113
127
|
context "from a subclass" do
|
114
128
|
it "returns an instance of the subclass" do
|
115
|
-
|
116
|
-
|
117
|
-
|
129
|
+
subclass = Class.new(Hamster::Vector)
|
130
|
+
instance = subclass[1,2,3]
|
131
|
+
instance.set(1, 2.5).class.should be(subclass)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
[10, 31, 32, 33, 1000, 1023, 1024, 1025, 2000].each do |size|
|
136
|
+
context "on a #{size}-item vector" do
|
137
|
+
it "works correctly" do
|
138
|
+
array = (1..size).to_a
|
139
|
+
vector = V.new(array)
|
140
|
+
|
141
|
+
[0, 1, 10, 31, 32, 33, 100, 500, 1000, 1023, 1024, 1025, 1998, 1999].select { |n| n < size }.each do |i|
|
142
|
+
value = rand(10000)
|
143
|
+
array[i] = value
|
144
|
+
vector = vector.set(i, value)
|
145
|
+
vector[i].should be(value)
|
146
|
+
end
|
147
|
+
|
148
|
+
0.upto(size-1) do |i|
|
149
|
+
vector.get(i).should == array[i]
|
150
|
+
end
|
151
|
+
end
|
118
152
|
end
|
119
153
|
end
|
120
154
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
describe "#shift" do
|
6
|
+
[
|
7
|
+
[[], []],
|
8
|
+
[["A"], []],
|
9
|
+
[%w[A B C], %w[B C]],
|
10
|
+
[1..31, 2..31],
|
11
|
+
[1..32, 2..32],
|
12
|
+
[1..33, 2..33]
|
13
|
+
].each do |values, expected|
|
14
|
+
context "on #{values.inspect}" do
|
15
|
+
let(:vector) { Hamster.vector(*values) }
|
16
|
+
|
17
|
+
it "preserves the original" do
|
18
|
+
vector.shift
|
19
|
+
vector.should eql(Hamster.vector(*values))
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns #{expected.inspect}" do
|
23
|
+
vector.shift.should eql(Hamster.vector(*expected))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
describe "#shuffle" do
|
6
|
+
let(:vector) { Hamster.vector(1,2,3,4) }
|
7
|
+
|
8
|
+
it "returns the same values, in a usually different order" do
|
9
|
+
different = false
|
10
|
+
10.times do
|
11
|
+
shuffled = vector.shuffle
|
12
|
+
shuffled.sort.should eql(vector)
|
13
|
+
different ||= (shuffled != vector)
|
14
|
+
end
|
15
|
+
different.should be(true)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "leaves the original unchanged" do
|
19
|
+
vector.shuffle
|
20
|
+
vector.should eql(Hamster.vector(1,2,3,4))
|
21
|
+
end
|
22
|
+
|
23
|
+
context "from a subclass" do
|
24
|
+
it "returns an instance of the subclass" do
|
25
|
+
subclass = Class.new(Hamster::Vector)
|
26
|
+
instance = subclass.new([1,2,3])
|
27
|
+
instance.shuffle.class.should be(subclass)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
[32, 33, 1023, 1024, 1025].each do |size|
|
32
|
+
context "on a #{size}-item vector" do
|
33
|
+
it "works correctly" do
|
34
|
+
vector = V.new(1..size)
|
35
|
+
shuffled = vector.shuffle
|
36
|
+
shuffled = vector.shuffle while shuffled.eql?(vector) # in case we get the same
|
37
|
+
vector.should eql(V.new(1..size))
|
38
|
+
shuffled.size.should == vector.size
|
39
|
+
shuffled.sort.should eql(vector)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "hamster/vector"
|
3
|
+
|
4
|
+
describe Hamster::Vector do
|
5
|
+
let(:vector) { Hamster.vector(1,2,3,4) }
|
6
|
+
let(:big) { Hamster::Vector.new(1..10000) }
|
7
|
+
|
8
|
+
[:slice, :[]].each do |method|
|
9
|
+
describe "##{method}" do
|
10
|
+
context "when passed a positive integral index" do
|
11
|
+
it "returns the element at that index" do
|
12
|
+
vector.send(method, 0).should be(1)
|
13
|
+
vector.send(method, 1).should be(2)
|
14
|
+
vector.send(method, 2).should be(3)
|
15
|
+
vector.send(method, 3).should be(4)
|
16
|
+
vector.send(method, 4).should be(nil)
|
17
|
+
vector.send(method, 10).should be(nil)
|
18
|
+
|
19
|
+
big.send(method, 0).should be(1)
|
20
|
+
big.send(method, 9999).should be(10000)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "leaves the original unchanged" do
|
24
|
+
vector.should eql(Hamster.vector(1,2,3,4))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when passed a negative integral index" do
|
29
|
+
it "returns the element which is number (index.abs) counting from the end of the vector" do
|
30
|
+
vector.send(method, -1).should be(4)
|
31
|
+
vector.send(method, -2).should be(3)
|
32
|
+
vector.send(method, -3).should be(2)
|
33
|
+
vector.send(method, -4).should be(1)
|
34
|
+
vector.send(method, -5).should be(nil)
|
35
|
+
vector.send(method, -10).should be(nil)
|
36
|
+
|
37
|
+
big.send(method, -1).should be(10000)
|
38
|
+
big.send(method, -10000).should be(1)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when passed a positive integral index and count" do
|
43
|
+
it "returns 'count' elements starting from 'index'" do
|
44
|
+
vector.send(method, 0, 0).should eql(Hamster.vector)
|
45
|
+
vector.send(method, 0, 1).should eql(Hamster.vector(1))
|
46
|
+
vector.send(method, 0, 2).should eql(Hamster.vector(1,2))
|
47
|
+
vector.send(method, 0, 4).should eql(Hamster.vector(1,2,3,4))
|
48
|
+
vector.send(method, 0, 6).should eql(Hamster.vector(1,2,3,4))
|
49
|
+
vector.send(method, 0, -1).should be_nil
|
50
|
+
vector.send(method, 0, -2).should be_nil
|
51
|
+
vector.send(method, 0, -4).should be_nil
|
52
|
+
vector.send(method, 2, 0).should eql(Hamster.vector)
|
53
|
+
vector.send(method, 2, 1).should eql(Hamster.vector(3))
|
54
|
+
vector.send(method, 2, 2).should eql(Hamster.vector(3,4))
|
55
|
+
vector.send(method, 2, 4).should eql(Hamster.vector(3,4))
|
56
|
+
vector.send(method, 2, -1).should be_nil
|
57
|
+
vector.send(method, 4, 0).should eql(Hamster.vector)
|
58
|
+
vector.send(method, 4, 2).should eql(Hamster.vector)
|
59
|
+
vector.send(method, 4, -1).should be_nil
|
60
|
+
vector.send(method, 5, 0).should be_nil
|
61
|
+
vector.send(method, 5, 2).should be_nil
|
62
|
+
vector.send(method, 5, -1).should be_nil
|
63
|
+
vector.send(method, 6, 0).should be_nil
|
64
|
+
vector.send(method, 6, 2).should be_nil
|
65
|
+
vector.send(method, 6, -1).should be_nil
|
66
|
+
|
67
|
+
big.send(method, 0, 3).should eql(Hamster.vector(1,2,3))
|
68
|
+
big.send(method, 1023, 4).should eql(Hamster.vector(1024,1025,1026,1027))
|
69
|
+
big.send(method, 1024, 4).should eql(Hamster.vector(1025,1026,1027,1028))
|
70
|
+
end
|
71
|
+
|
72
|
+
it "leaves the original unchanged" do
|
73
|
+
vector.should eql(Hamster.vector(1,2,3,4))
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when passed a negative integral index and count" do
|
78
|
+
it "returns 'count' elements, starting from index which is number 'index.abs' counting from the end of the array" do
|
79
|
+
vector.send(method, -1, 0).should eql(Hamster.vector)
|
80
|
+
vector.send(method, -1, 1).should eql(Hamster.vector(4))
|
81
|
+
vector.send(method, -1, 2).should eql(Hamster.vector(4))
|
82
|
+
vector.send(method, -1, -1).should be_nil
|
83
|
+
vector.send(method, -2, 0).should eql(Hamster.vector)
|
84
|
+
vector.send(method, -2, 1).should eql(Hamster.vector(3))
|
85
|
+
vector.send(method, -2, 2).should eql(Hamster.vector(3,4))
|
86
|
+
vector.send(method, -2, 4).should eql(Hamster.vector(3,4))
|
87
|
+
vector.send(method, -2, -1).should be_nil
|
88
|
+
vector.send(method, -4, 0).should eql(Hamster.vector)
|
89
|
+
vector.send(method, -4, 1).should eql(Hamster.vector(1))
|
90
|
+
vector.send(method, -4, 2).should eql(Hamster.vector(1,2))
|
91
|
+
vector.send(method, -4, 4).should eql(Hamster.vector(1,2,3,4))
|
92
|
+
vector.send(method, -4, 6).should eql(Hamster.vector(1,2,3,4))
|
93
|
+
vector.send(method, -4, -1).should be_nil
|
94
|
+
vector.send(method, -5, 0).should be_nil
|
95
|
+
vector.send(method, -5, 1).should be_nil
|
96
|
+
vector.send(method, -5, 10).should be_nil
|
97
|
+
vector.send(method, -5, -1).should be_nil
|
98
|
+
|
99
|
+
big.send(method, -1, 1).should eql(Hamster.vector(10000))
|
100
|
+
big.send(method, -1, 2).should eql(Hamster.vector(10000))
|
101
|
+
big.send(method, -6, 2).should eql(Hamster.vector(9995,9996))
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when passed a Range" do
|
106
|
+
it "returns the elements whose indexes are within the given Range" do
|
107
|
+
vector.send(method, 0..-1).should eql(Hamster.vector(1,2,3,4))
|
108
|
+
vector.send(method, 0..-10).should eql(Hamster.vector)
|
109
|
+
vector.send(method, 0..0).should eql(Hamster.vector(1))
|
110
|
+
vector.send(method, 0..1).should eql(Hamster.vector(1,2))
|
111
|
+
vector.send(method, 0..2).should eql(Hamster.vector(1,2,3))
|
112
|
+
vector.send(method, 0..3).should eql(Hamster.vector(1,2,3,4))
|
113
|
+
vector.send(method, 0..4).should eql(Hamster.vector(1,2,3,4))
|
114
|
+
vector.send(method, 0..10).should eql(Hamster.vector(1,2,3,4))
|
115
|
+
vector.send(method, 2..-10).should eql(Hamster.vector)
|
116
|
+
vector.send(method, 2..0).should eql(Hamster.vector)
|
117
|
+
vector.send(method, 2..2).should eql(Hamster.vector(3))
|
118
|
+
vector.send(method, 2..3).should eql(Hamster.vector(3,4))
|
119
|
+
vector.send(method, 2..4).should eql(Hamster.vector(3,4))
|
120
|
+
vector.send(method, 3..0).should eql(Hamster.vector)
|
121
|
+
vector.send(method, 3..3).should eql(Hamster.vector(4))
|
122
|
+
vector.send(method, 3..4).should eql(Hamster.vector(4))
|
123
|
+
vector.send(method, 4..0).should eql(Hamster.vector)
|
124
|
+
vector.send(method, 4..4).should eql(Hamster.vector)
|
125
|
+
vector.send(method, 4..5).should eql(Hamster.vector)
|
126
|
+
vector.send(method, 5..0).should be_nil
|
127
|
+
vector.send(method, 5..5).should be_nil
|
128
|
+
vector.send(method, 5..6).should be_nil
|
129
|
+
|
130
|
+
big.send(method, 159..162).should eql(Hamster.vector(160,161,162,163))
|
131
|
+
big.send(method, 160..162).should eql(Hamster.vector(161,162,163))
|
132
|
+
big.send(method, 161..162).should eql(Hamster.vector(162,163))
|
133
|
+
big.send(method, 9999..10100).should eql(Hamster.vector(10000))
|
134
|
+
big.send(method, 10000..10100).should eql(Hamster.vector)
|
135
|
+
big.send(method, 10001..10100).should be_nil
|
136
|
+
|
137
|
+
vector.send(method, 0...-1).should eql(Hamster.vector(1,2,3))
|
138
|
+
vector.send(method, 0...-10).should eql(Hamster.vector)
|
139
|
+
vector.send(method, 0...0).should eql(Hamster.vector)
|
140
|
+
vector.send(method, 0...1).should eql(Hamster.vector(1))
|
141
|
+
vector.send(method, 0...2).should eql(Hamster.vector(1,2))
|
142
|
+
vector.send(method, 0...3).should eql(Hamster.vector(1,2,3))
|
143
|
+
vector.send(method, 0...4).should eql(Hamster.vector(1,2,3,4))
|
144
|
+
vector.send(method, 0...10).should eql(Hamster.vector(1,2,3,4))
|
145
|
+
vector.send(method, 2...-10).should eql(Hamster.vector)
|
146
|
+
vector.send(method, 2...0).should eql(Hamster.vector)
|
147
|
+
vector.send(method, 2...2).should eql(Hamster.vector)
|
148
|
+
vector.send(method, 2...3).should eql(Hamster.vector(3))
|
149
|
+
vector.send(method, 2...4).should eql(Hamster.vector(3,4))
|
150
|
+
vector.send(method, 3...0).should eql(Hamster.vector)
|
151
|
+
vector.send(method, 3...3).should eql(Hamster.vector)
|
152
|
+
vector.send(method, 3...4).should eql(Hamster.vector(4))
|
153
|
+
vector.send(method, 4...0).should eql(Hamster.vector)
|
154
|
+
vector.send(method, 4...4).should eql(Hamster.vector)
|
155
|
+
vector.send(method, 4...5).should eql(Hamster.vector)
|
156
|
+
vector.send(method, 5...0).should be_nil
|
157
|
+
vector.send(method, 5...5).should be_nil
|
158
|
+
vector.send(method, 5...6).should be_nil
|
159
|
+
|
160
|
+
big.send(method, 159...162).should eql(Hamster.vector(160,161,162))
|
161
|
+
big.send(method, 160...162).should eql(Hamster.vector(161,162))
|
162
|
+
big.send(method, 161...162).should eql(Hamster.vector(162))
|
163
|
+
big.send(method, 9999...10100).should eql(Hamster.vector(10000))
|
164
|
+
big.send(method, 10000...10100).should eql(Hamster.vector)
|
165
|
+
big.send(method, 10001...10100).should be_nil
|
166
|
+
|
167
|
+
vector.send(method, -1..-1).should eql(Hamster.vector(4))
|
168
|
+
vector.send(method, -1...-1).should eql(Hamster.vector)
|
169
|
+
vector.send(method, -1..3).should eql(Hamster.vector(4))
|
170
|
+
vector.send(method, -1...3).should eql(Hamster.vector)
|
171
|
+
vector.send(method, -1..4).should eql(Hamster.vector(4))
|
172
|
+
vector.send(method, -1...4).should eql(Hamster.vector(4))
|
173
|
+
vector.send(method, -1..10).should eql(Hamster.vector(4))
|
174
|
+
vector.send(method, -1...10).should eql(Hamster.vector(4))
|
175
|
+
vector.send(method, -1..0).should eql(Hamster.vector)
|
176
|
+
vector.send(method, -1..-4).should eql(Hamster.vector)
|
177
|
+
vector.send(method, -1...-4).should eql(Hamster.vector)
|
178
|
+
vector.send(method, -1..-6).should eql(Hamster.vector)
|
179
|
+
vector.send(method, -1...-6).should eql(Hamster.vector)
|
180
|
+
vector.send(method, -2..-2).should eql(Hamster.vector(3))
|
181
|
+
vector.send(method, -2...-2).should eql(Hamster.vector)
|
182
|
+
vector.send(method, -2..-1).should eql(Hamster.vector(3,4))
|
183
|
+
vector.send(method, -2...-1).should eql(Hamster.vector(3))
|
184
|
+
vector.send(method, -2..10).should eql(Hamster.vector(3,4))
|
185
|
+
vector.send(method, -2...10).should eql(Hamster.vector(3,4))
|
186
|
+
|
187
|
+
big.send(method, -1..-1).should eql(Hamster.vector(10000))
|
188
|
+
big.send(method, -1..9999).should eql(Hamster.vector(10000))
|
189
|
+
big.send(method, -1...9999).should eql(Hamster.vector)
|
190
|
+
big.send(method, -2...9999).should eql(Hamster.vector(9999))
|
191
|
+
big.send(method, -2..-1).should eql(Hamster.vector(9999,10000))
|
192
|
+
|
193
|
+
vector.send(method, -4..-4).should eql(Hamster.vector(1))
|
194
|
+
vector.send(method, -4..-2).should eql(Hamster.vector(1,2,3))
|
195
|
+
vector.send(method, -4...-2).should eql(Hamster.vector(1,2))
|
196
|
+
vector.send(method, -4..-1).should eql(Hamster.vector(1,2,3,4))
|
197
|
+
vector.send(method, -4...-1).should eql(Hamster.vector(1,2,3))
|
198
|
+
vector.send(method, -4..3).should eql(Hamster.vector(1,2,3,4))
|
199
|
+
vector.send(method, -4...3).should eql(Hamster.vector(1,2,3))
|
200
|
+
vector.send(method, -4..4).should eql(Hamster.vector(1,2,3,4))
|
201
|
+
vector.send(method, -4...4).should eql(Hamster.vector(1,2,3,4))
|
202
|
+
vector.send(method, -4..0).should eql(Hamster.vector(1))
|
203
|
+
vector.send(method, -4...0).should eql(Hamster.vector)
|
204
|
+
vector.send(method, -4..1).should eql(Hamster.vector(1,2))
|
205
|
+
vector.send(method, -4...1).should eql(Hamster.vector(1))
|
206
|
+
|
207
|
+
vector.send(method, -5..-5).should be_nil
|
208
|
+
vector.send(method, -5...-5).should be_nil
|
209
|
+
vector.send(method, -5..-4).should be_nil
|
210
|
+
vector.send(method, -5..-1).should be_nil
|
211
|
+
vector.send(method, -5..10).should be_nil
|
212
|
+
|
213
|
+
big.send(method, -10001..-1).should be_nil
|
214
|
+
end
|
215
|
+
|
216
|
+
it "leaves the original unchanged" do
|
217
|
+
vector.should eql(Hamster.vector(1,2,3,4))
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context "when passed a subclass of Range" do
|
223
|
+
it "works the same as with a Range" do
|
224
|
+
subclass = Class.new(Range)
|
225
|
+
vector.send(method, subclass.new(1,2)).should eql(Hamster.vector(2,3))
|
226
|
+
vector.send(method, subclass.new(-3,-1,true)).should eql(Hamster.vector(2,3))
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context "on a subclass of Vector" do
|
231
|
+
it "with index and count or a range, returns an instance of the subclass" do
|
232
|
+
subclass = Class.new(Hamster::Vector)
|
233
|
+
instance = subclass.new([1,2,3])
|
234
|
+
instance.send(method, 0, 0).class.should be(subclass)
|
235
|
+
instance.send(method, 0, 2).class.should be(subclass)
|
236
|
+
instance.send(method, 0..0).class.should be(subclass)
|
237
|
+
instance.send(method, 1..-1).class.should be(subclass)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|