hamster 1.0.0 → 1.0.1.pre.rc.1
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 -3
- data/lib/hamster/core_ext.rb +1 -0
- data/lib/hamster/core_ext/enumerable.rb +17 -17
- data/lib/hamster/core_ext/enumerator.rb +16 -0
- data/lib/hamster/core_ext/io.rb +17 -15
- data/lib/hamster/enumerable.rb +107 -123
- data/lib/hamster/experimental/mutable_queue.rb +6 -2
- data/lib/hamster/experimental/mutable_set.rb +3 -1
- data/lib/hamster/experimental/mutable_stack.rb +30 -0
- data/lib/hamster/hash.rb +95 -713
- data/lib/hamster/immutable.rb +0 -4
- data/lib/hamster/list.rb +242 -1062
- data/lib/hamster/mutable_hash.rb +3 -1
- data/lib/hamster/queue.rb +87 -0
- data/lib/hamster/read_copy_update.rb +1 -2
- data/lib/hamster/set.rb +73 -478
- data/lib/hamster/sorter.rb +25 -0
- data/lib/hamster/stack.rb +75 -0
- data/lib/hamster/trie.rb +48 -199
- data/lib/hamster/tuple.rb +39 -0
- data/lib/hamster/undefined.rb +3 -1
- data/lib/hamster/vector.rb +72 -1326
- data/lib/hamster/version.rb +1 -1
- data/spec/hamster/core_ext/array_spec.rb +20 -0
- data/spec/{lib/hamster → hamster}/core_ext/enumerable_spec.rb +0 -5
- data/spec/hamster/core_ext/enumerator_spec.rb +19 -0
- data/spec/{lib/hamster → hamster}/core_ext/io_spec.rb +0 -0
- data/spec/hamster/experimental/mutable_set/add_qm_spec.rb +47 -0
- data/spec/hamster/experimental/mutable_set/add_spec.rb +51 -0
- data/spec/hamster/experimental/mutable_set/delete_qm_spec.rb +47 -0
- data/spec/hamster/experimental/mutable_set/delete_spec.rb +47 -0
- data/spec/hamster/experimental/mutable_stack/pop_spec.rb +41 -0
- data/spec/hamster/experimental/mutable_stack/push_spec.rb +41 -0
- data/spec/hamster/hash/all_spec.rb +59 -0
- data/spec/hamster/hash/any_spec.rb +67 -0
- data/spec/hamster/hash/clear_spec.rb +36 -0
- data/spec/hamster/hash/construction_spec.rb +35 -0
- data/spec/{lib/hamster → hamster}/hash/copying_spec.rb +12 -3
- data/spec/hamster/hash/delete_spec.rb +47 -0
- data/spec/hamster/hash/each_spec.rb +41 -0
- data/spec/hamster/hash/empty_spec.rb +27 -0
- data/spec/hamster/hash/eql_spec.rb +62 -0
- data/spec/hamster/hash/except_spec.rb +31 -0
- data/spec/hamster/hash/fetch_spec.rb +95 -0
- data/spec/hamster/hash/filter_spec.rb +63 -0
- data/spec/hamster/hash/find_spec.rb +58 -0
- data/spec/hamster/hash/get_spec.rb +55 -0
- data/spec/hamster/hash/has_key_spec.rb +35 -0
- data/spec/hamster/hash/hash_spec.rb +52 -0
- data/spec/{lib/hamster → hamster}/hash/immutable_spec.rb +3 -0
- data/spec/hamster/hash/inspect_spec.rb +32 -0
- data/spec/hamster/hash/keys_spec.rb +21 -0
- data/spec/hamster/hash/map_spec.rb +64 -0
- data/spec/{lib/hamster → hamster}/hash/marshal_spec.rb +3 -3
- data/spec/hamster/hash/merge_spec.rb +36 -0
- data/spec/{lib/hamster → hamster}/hash/none_spec.rb +14 -12
- data/spec/hamster/hash/put_spec.rb +65 -0
- data/spec/hamster/hash/reduce_spec.rb +60 -0
- data/spec/hamster/hash/remove_spec.rb +63 -0
- data/spec/{lib/hamster → hamster}/hash/size_spec.rb +2 -2
- data/spec/hamster/hash/slice_spec.rb +26 -0
- data/spec/hamster/hash/uniq_spec.rb +23 -0
- data/spec/hamster/hash/values_spec.rb +34 -0
- data/spec/{lib/hamster → hamster}/immutable/copying_spec.rb +8 -1
- data/spec/{lib/hamster → hamster}/immutable/immutable_spec.rb +14 -1
- data/spec/{lib/hamster → hamster}/immutable/memoize_spec.rb +3 -2
- data/spec/{lib/hamster → hamster}/immutable/new_spec.rb +0 -0
- data/spec/{lib/hamster → hamster}/immutable/transform_spec.rb +0 -0
- data/spec/{lib/hamster → hamster}/immutable/transform_unless_spec.rb +0 -0
- data/spec/hamster/list/add_spec.rb +16 -0
- data/spec/hamster/list/all_spec.rb +111 -0
- data/spec/hamster/list/any_spec.rb +79 -0
- data/spec/{lib/hamster → hamster}/list/append_spec.rb +22 -11
- data/spec/hamster/list/at_spec.rb +49 -0
- data/spec/hamster/list/break_spec.rb +85 -0
- data/spec/{lib/hamster → hamster}/list/cadr_spec.rb +17 -6
- data/spec/{lib/hamster → hamster}/list/chunk_spec.rb +17 -6
- data/spec/{lib/hamster → hamster}/list/clear_spec.rb +16 -5
- data/spec/hamster/list/combinations_spec.rb +51 -0
- data/spec/{lib/hamster → hamster}/list/compact_spec.rb +17 -6
- data/spec/hamster/list/cons_spec.rb +41 -0
- data/spec/hamster/list/construction_spec.rb +166 -0
- data/spec/{lib/hamster → hamster}/list/copying_spec.rb +16 -4
- data/spec/hamster/list/count_spec.rb +66 -0
- data/spec/hamster/list/cycle_spec.rb +45 -0
- data/spec/{lib/hamster → hamster}/list/drop_spec.rb +17 -6
- data/spec/hamster/list/drop_while_spec.rb +59 -0
- data/spec/hamster/list/each_slice_spec.rb +80 -0
- data/spec/hamster/list/each_spec.rb +72 -0
- data/spec/hamster/list/each_with_index_spec.rb +42 -0
- data/spec/hamster/list/elem_index_spec.rb +58 -0
- data/spec/hamster/list/elem_indices_spec.rb +45 -0
- data/spec/hamster/list/empty_spec.rb +47 -0
- data/spec/hamster/list/eql_spec.rb +78 -0
- data/spec/hamster/list/filter_spec.rb +70 -0
- data/spec/{lib/hamster → hamster}/list/find_all_spec.rb +2 -3
- data/spec/{lib/hamster → hamster}/list/find_index_spec.rb +27 -5
- data/spec/hamster/list/find_indices_spec.rb +45 -0
- data/spec/{lib/hamster → hamster}/list/find_spec.rb +33 -11
- data/spec/{lib/hamster → hamster}/list/flat_map_spec.rb +0 -0
- data/spec/{lib/hamster → hamster}/list/flatten_spec.rb +17 -6
- data/spec/{lib/hamster → hamster}/list/grep_spec.rb +33 -10
- data/spec/{lib/hamster → hamster}/list/group_by_spec.rb +44 -9
- data/spec/{lib/hamster → hamster}/list/hash_spec.rb +12 -4
- data/spec/{lib/hamster → hamster}/list/head_spec.rb +18 -3
- data/spec/{lib/hamster → hamster}/list/include_spec.rb +27 -6
- data/spec/{lib/hamster → hamster}/list/init_spec.rb +17 -6
- data/spec/hamster/list/inits_spec.rb +42 -0
- data/spec/hamster/list/inspect_spec.rb +43 -0
- data/spec/{lib/hamster → hamster}/list/intersperse_spec.rb +17 -6
- data/spec/hamster/list/join_spec.rb +81 -0
- data/spec/hamster/list/last_spec.rb +44 -0
- data/spec/{lib/hamster → hamster}/list/map_spec.rb +35 -12
- data/spec/hamster/list/maximum_spec.rb +77 -0
- data/spec/{lib/hamster → hamster}/list/merge_by_spec.rb +32 -5
- data/spec/{lib/hamster → hamster}/list/merge_spec.rb +20 -1
- data/spec/hamster/list/minimum_spec.rb +77 -0
- data/spec/{lib/hamster → hamster}/list/none_spec.rb +39 -12
- data/spec/{lib/hamster → hamster}/list/one_spec.rb +38 -13
- data/spec/hamster/list/partition_spec.rb +75 -0
- data/spec/{lib/hamster → hamster}/list/pop_spec.rb +1 -1
- data/spec/hamster/list/product_spec.rb +44 -0
- data/spec/hamster/list/reduce_spec.rb +73 -0
- data/spec/{lib/hamster/list/reject_spec.rb → hamster/list/remove_spec.rb} +35 -11
- data/spec/{lib/hamster → hamster}/list/reverse_spec.rb +25 -8
- data/spec/{lib/hamster → hamster}/list/select_spec.rb +2 -3
- data/spec/{lib/hamster → hamster}/list/size_spec.rb +26 -5
- data/spec/hamster/list/slice_spec.rb +50 -0
- data/spec/{lib/hamster → hamster}/list/sorting_spec.rb +34 -11
- data/spec/hamster/list/span_spec.rb +86 -0
- data/spec/{lib/hamster → hamster}/list/split_at_spec.rb +23 -14
- data/spec/hamster/list/sum_spec.rb +44 -0
- data/spec/hamster/list/tail_spec.rb +48 -0
- data/spec/hamster/list/tails_spec.rb +42 -0
- data/spec/{lib/hamster → hamster}/list/take_spec.rb +17 -6
- data/spec/{lib/hamster → hamster}/list/take_while_spec.rb +18 -11
- data/spec/hamster/list/to_a_spec.rb +54 -0
- data/spec/{lib/hamster → hamster}/list/to_ary_spec.rb +4 -1
- data/spec/{lib/hamster → hamster}/list/to_list_spec.rb +16 -4
- data/spec/hamster/list/to_set_spec.rb +33 -0
- data/spec/{lib/hamster → hamster}/list/union_spec.rb +23 -6
- data/spec/hamster/list/uniq_spec.rb +45 -0
- data/spec/{lib/hamster → hamster}/list/zip_spec.rb +9 -2
- data/spec/hamster/queue/clear_spec.rb +36 -0
- data/spec/hamster/queue/construction_spec.rb +43 -0
- data/spec/hamster/queue/dequeue_spec.rb +40 -0
- data/spec/hamster/queue/empty_spec.rb +47 -0
- data/spec/{lib/hamster/deque → hamster/queue}/enqueue_spec.rb +21 -8
- data/spec/hamster/queue/head_spec.rb +35 -0
- data/spec/hamster/queue/inspect_spec.rb +31 -0
- data/spec/{lib/hamster/deque → hamster/queue}/size_spec.rb +20 -5
- data/spec/hamster/queue/to_a_spec.rb +42 -0
- data/spec/{lib/hamster/deque → hamster/queue}/to_ary_spec.rb +6 -6
- data/spec/hamster/queue/to_list_spec.rb +44 -0
- data/spec/hamster/set/add_spec.rb +51 -0
- data/spec/hamster/set/all_spec.rb +67 -0
- data/spec/hamster/set/any_spec.rb +67 -0
- data/spec/hamster/set/clear_spec.rb +36 -0
- data/spec/{lib/hamster → hamster}/set/compact_spec.rb +16 -5
- data/spec/{lib/hamster → hamster}/set/construction_spec.rb +17 -5
- data/spec/{lib/hamster → hamster}/set/copying_spec.rb +12 -3
- data/spec/{lib/hamster → hamster}/set/count_spec.rb +28 -11
- data/spec/hamster/set/delete_spec.rb +47 -0
- data/spec/{lib/hamster/sorted_set → hamster/set}/difference_spec.rb +21 -7
- data/spec/{lib/hamster/set/reverse_each_spec.rb → hamster/set/each_spec.rb} +7 -8
- data/spec/hamster/set/empty_spec.rb +35 -0
- data/spec/{lib/hamster → hamster}/set/eqeq_spec.rb +0 -0
- data/spec/{lib/hamster → hamster}/set/eql_spec.rb +1 -7
- data/spec/{lib/hamster/sorted_set → hamster/set}/exclusion_spec.rb +20 -5
- data/spec/hamster/set/filter_spec.rb +79 -0
- data/spec/{lib/hamster → hamster}/set/find_spec.rb +25 -8
- data/spec/hamster/set/flatten_spec.rb +49 -0
- data/spec/hamster/set/foreach_spec.rb +39 -0
- data/spec/{lib/hamster → hamster}/set/grep_spec.rb +1 -1
- data/spec/hamster/set/group_by_spec.rb +65 -0
- data/spec/hamster/set/hash_spec.rb +20 -0
- data/spec/hamster/set/head_spec.rb +39 -0
- data/spec/{lib/hamster → hamster}/set/immutable_spec.rb +4 -1
- data/spec/hamster/set/include_spec.rb +35 -0
- data/spec/hamster/set/inspect_spec.rb +32 -0
- data/spec/hamster/set/intersection_spec.rb +46 -0
- data/spec/{lib/hamster/vector → hamster/set}/join_spec.rb +33 -23
- data/spec/hamster/set/map_spec.rb +64 -0
- data/spec/{lib/hamster → hamster}/set/marshal_spec.rb +9 -4
- data/spec/hamster/set/maximum_spec.rb +65 -0
- data/spec/hamster/set/minimum_spec.rb +65 -0
- data/spec/{lib/hamster → hamster}/set/none_spec.rb +30 -15
- data/spec/{lib/hamster → hamster}/set/one_spec.rb +29 -14
- data/spec/hamster/set/partition_spec.rb +71 -0
- data/spec/{lib/hamster → hamster}/set/product_spec.rb +15 -7
- data/spec/hamster/set/reduce_spec.rb +87 -0
- data/spec/hamster/set/remove_spec.rb +63 -0
- data/spec/{lib/hamster → hamster}/set/size_spec.rb +10 -1
- data/spec/{lib/hamster → hamster}/set/sorting_spec.rb +16 -18
- data/spec/hamster/set/subset_spec.rb +39 -0
- data/spec/{lib/hamster/vector → hamster/set}/sum_spec.rb +18 -4
- data/spec/hamster/set/superset_spec.rb +39 -0
- data/spec/hamster/set/to_a_spec.rb +42 -0
- data/spec/{lib/hamster/vector → hamster/set}/to_list_spec.rb +23 -8
- data/spec/{lib/hamster → hamster}/set/to_set_spec.rb +15 -3
- data/spec/hamster/set/union_spec.rb +45 -0
- data/spec/hamster/set/uniq_spec.rb +23 -0
- data/spec/hamster/sorter/immutable_spec.rb +12 -0
- data/spec/hamster/stack/clear_spec.rb +36 -0
- data/spec/hamster/stack/construction_spec.rb +43 -0
- data/spec/hamster/stack/copying_spec.rb +31 -0
- data/spec/hamster/stack/empty_spec.rb +31 -0
- data/spec/hamster/stack/eql_spec.rb +60 -0
- data/spec/hamster/stack/immutable_spec.rb +12 -0
- data/spec/hamster/stack/inspect_spec.rb +31 -0
- data/spec/hamster/stack/peek_spec.rb +40 -0
- data/spec/hamster/stack/pop_spec.rb +41 -0
- data/spec/hamster/stack/push_spec.rb +41 -0
- data/spec/hamster/stack/size_spec.rb +35 -0
- data/spec/hamster/stack/to_a_spec.rb +42 -0
- data/spec/hamster/stack/to_ary.rb +37 -0
- data/spec/hamster/stack/to_list_spec.rb +33 -0
- data/spec/hamster/trie/remove_spec.rb +117 -0
- data/spec/hamster/tuple/copying_spec.rb +24 -0
- data/spec/hamster/tuple/eql_spec.rb +61 -0
- data/spec/hamster/tuple/first_spec.rb +19 -0
- data/spec/hamster/tuple/immutable_spec.rb +12 -0
- data/spec/hamster/tuple/inspect_spec.rb +19 -0
- data/spec/hamster/tuple/last_spec.rb +19 -0
- data/spec/hamster/tuple/to_a_spec.rb +38 -0
- data/spec/hamster/tuple/to_ary_spec.rb +38 -0
- data/spec/hamster/undefined/erase_spec.rb +47 -0
- data/spec/hamster/vector/add_spec.rb +48 -0
- data/spec/{lib/hamster → hamster}/vector/any_spec.rb +0 -0
- data/spec/hamster/vector/clear_spec.rb +35 -0
- data/spec/{lib/hamster → hamster}/vector/copying_spec.rb +14 -4
- data/spec/hamster/vector/each_spec.rb +45 -0
- data/spec/hamster/vector/each_with_index_spec.rb +41 -0
- data/spec/hamster/vector/empty_spec.rb +34 -0
- data/spec/hamster/vector/eql_spec.rb +64 -0
- data/spec/hamster/vector/filter_spec.rb +62 -0
- data/spec/hamster/vector/first_spec.rb +35 -0
- data/spec/hamster/vector/get_spec.rb +80 -0
- data/spec/{lib/hamster → hamster}/vector/include_spec.rb +17 -4
- data/spec/hamster/vector/inspect_spec.rb +33 -0
- data/spec/{lib/hamster → hamster}/vector/last_spec.rb +3 -12
- data/spec/{lib/hamster → hamster}/vector/length_spec.rb +3 -12
- data/spec/hamster/vector/map_spec.rb +63 -0
- data/spec/{lib/hamster → hamster}/vector/reduce_spec.rb +47 -16
- data/spec/hamster/vector/set_spec.rb +113 -0
- data/spec/{lib/hamster → hamster}/vector/to_a_spec.rb +12 -11
- data/spec/{lib/hamster → hamster}/vector/to_ary_spec.rb +0 -0
- data/spec/lib/hamster/vector/cons_spec.rb +48 -0
- data/spec/lib/hamster/vector/exist_spec.rb +70 -0
- data/spec/lib/hamster/vector/exists_spec.rb +70 -0
- data/spec/lib/hamster/vector/ltlt_spec.rb +2 -20
- data/spec/spec_helper.rb +5 -36
- metadata +510 -723
- data/lib/hamster/deque.rb +0 -252
- data/lib/hamster/nested.rb +0 -36
- data/lib/hamster/sorted_set.rb +0 -1397
- data/spec/lib/hamster/core_ext/array_spec.rb +0 -14
- data/spec/lib/hamster/deque/clear_spec.rb +0 -34
- data/spec/lib/hamster/deque/construction_spec.rb +0 -30
- data/spec/lib/hamster/deque/copying_spec.rb +0 -20
- data/spec/lib/hamster/deque/dequeue_spec.rb +0 -35
- data/spec/lib/hamster/deque/empty_spec.rb +0 -40
- data/spec/lib/hamster/deque/first_spec.rb +0 -18
- data/spec/lib/hamster/deque/inspect_spec.rb +0 -24
- data/spec/lib/hamster/deque/last_spec.rb +0 -18
- data/spec/lib/hamster/deque/marshal_spec.rb +0 -34
- data/spec/lib/hamster/deque/new_spec.rb +0 -44
- data/spec/lib/hamster/deque/pop_spec.rb +0 -33
- data/spec/lib/hamster/deque/pretty_print_spec.rb +0 -24
- data/spec/lib/hamster/deque/random_modification_spec.rb +0 -34
- data/spec/lib/hamster/deque/to_a_spec.rb +0 -27
- data/spec/lib/hamster/deque/to_list_spec.rb +0 -26
- data/spec/lib/hamster/deque/unshift_spec.rb +0 -26
- data/spec/lib/hamster/experimental/mutable_set/add_qm_spec.rb +0 -39
- data/spec/lib/hamster/experimental/mutable_set/add_spec.rb +0 -37
- data/spec/lib/hamster/experimental/mutable_set/delete_qm_spec.rb +0 -38
- data/spec/lib/hamster/experimental/mutable_set/delete_spec.rb +0 -37
- data/spec/lib/hamster/hash/all_spec.rb +0 -54
- data/spec/lib/hamster/hash/any_spec.rb +0 -54
- data/spec/lib/hamster/hash/assoc_spec.rb +0 -52
- data/spec/lib/hamster/hash/clear_spec.rb +0 -43
- data/spec/lib/hamster/hash/construction_spec.rb +0 -39
- data/spec/lib/hamster/hash/default_proc_spec.rb +0 -73
- data/spec/lib/hamster/hash/delete_spec.rb +0 -40
- data/spec/lib/hamster/hash/each_spec.rb +0 -78
- data/spec/lib/hamster/hash/each_with_index_spec.rb +0 -30
- data/spec/lib/hamster/hash/empty_spec.rb +0 -44
- data/spec/lib/hamster/hash/eql_spec.rb +0 -70
- data/spec/lib/hamster/hash/except_spec.rb +0 -43
- data/spec/lib/hamster/hash/fetch_spec.rb +0 -58
- data/spec/lib/hamster/hash/find_spec.rb +0 -44
- data/spec/lib/hamster/hash/flat_map_spec.rb +0 -36
- data/spec/lib/hamster/hash/flatten_spec.rb +0 -99
- data/spec/lib/hamster/hash/get_spec.rb +0 -80
- data/spec/lib/hamster/hash/has_key_spec.rb +0 -32
- data/spec/lib/hamster/hash/has_value_spec.rb +0 -28
- data/spec/lib/hamster/hash/hash_spec.rb +0 -30
- data/spec/lib/hamster/hash/inspect_spec.rb +0 -31
- data/spec/lib/hamster/hash/invert_spec.rb +0 -31
- data/spec/lib/hamster/hash/key_spec.rb +0 -28
- data/spec/lib/hamster/hash/keys_spec.rb +0 -17
- data/spec/lib/hamster/hash/map_spec.rb +0 -46
- data/spec/lib/hamster/hash/merge_spec.rb +0 -83
- data/spec/lib/hamster/hash/min_max_spec.rb +0 -46
- data/spec/lib/hamster/hash/new_spec.rb +0 -71
- data/spec/lib/hamster/hash/partition_spec.rb +0 -36
- data/spec/lib/hamster/hash/pretty_print_spec.rb +0 -35
- data/spec/lib/hamster/hash/put_spec.rb +0 -103
- data/spec/lib/hamster/hash/reduce_spec.rb +0 -36
- data/spec/lib/hamster/hash/reject_spec.rb +0 -62
- data/spec/lib/hamster/hash/reverse_each_spec.rb +0 -28
- data/spec/lib/hamster/hash/sample_spec.rb +0 -14
- data/spec/lib/hamster/hash/select_spec.rb +0 -58
- data/spec/lib/hamster/hash/slice_spec.rb +0 -45
- data/spec/lib/hamster/hash/sort_spec.rb +0 -27
- data/spec/lib/hamster/hash/store_spec.rb +0 -76
- data/spec/lib/hamster/hash/take_spec.rb +0 -36
- data/spec/lib/hamster/hash/to_a_spec.rb +0 -14
- data/spec/lib/hamster/hash/to_hash_spec.rb +0 -22
- data/spec/lib/hamster/hash/update_in_spec.rb +0 -80
- data/spec/lib/hamster/hash/values_at_spec.rb +0 -14
- data/spec/lib/hamster/hash/values_spec.rb +0 -25
- data/spec/lib/hamster/list/add_spec.rb +0 -26
- data/spec/lib/hamster/list/all_spec.rb +0 -58
- data/spec/lib/hamster/list/any_spec.rb +0 -50
- data/spec/lib/hamster/list/at_spec.rb +0 -30
- data/spec/lib/hamster/list/break_spec.rb +0 -70
- data/spec/lib/hamster/list/combination_spec.rb +0 -34
- data/spec/lib/hamster/list/compare_spec.rb +0 -31
- data/spec/lib/hamster/list/cons_spec.rb +0 -26
- data/spec/lib/hamster/list/construction_spec.rb +0 -111
- data/spec/lib/hamster/list/count_spec.rb +0 -37
- data/spec/lib/hamster/list/cycle_spec.rb +0 -29
- data/spec/lib/hamster/list/delete_at_spec.rb +0 -19
- data/spec/lib/hamster/list/delete_spec.rb +0 -17
- data/spec/lib/hamster/list/drop_while_spec.rb +0 -39
- data/spec/lib/hamster/list/each_slice_spec.rb +0 -52
- data/spec/lib/hamster/list/each_spec.rb +0 -41
- data/spec/lib/hamster/list/each_with_index_spec.rb +0 -29
- data/spec/lib/hamster/list/empty_spec.rb +0 -24
- data/spec/lib/hamster/list/eql_spec.rb +0 -62
- data/spec/lib/hamster/list/fill_spec.rb +0 -50
- data/spec/lib/hamster/list/index_spec.rb +0 -34
- data/spec/lib/hamster/list/indices_spec.rb +0 -62
- data/spec/lib/hamster/list/inits_spec.rb +0 -29
- data/spec/lib/hamster/list/insert_spec.rb +0 -47
- data/spec/lib/hamster/list/inspect_spec.rb +0 -30
- data/spec/lib/hamster/list/join_spec.rb +0 -64
- data/spec/lib/hamster/list/last_spec.rb +0 -24
- data/spec/lib/hamster/list/ltlt_spec.rb +0 -20
- data/spec/lib/hamster/list/maximum_spec.rb +0 -40
- data/spec/lib/hamster/list/minimum_spec.rb +0 -40
- data/spec/lib/hamster/list/multithreading_spec.rb +0 -48
- data/spec/lib/hamster/list/partition_spec.rb +0 -116
- data/spec/lib/hamster/list/permutation_spec.rb +0 -56
- data/spec/lib/hamster/list/product_spec.rb +0 -24
- data/spec/lib/hamster/list/reduce_spec.rb +0 -54
- data/spec/lib/hamster/list/rotate_spec.rb +0 -37
- data/spec/lib/hamster/list/sample_spec.rb +0 -14
- data/spec/lib/hamster/list/slice_spec.rb +0 -230
- data/spec/lib/hamster/list/span_spec.rb +0 -77
- data/spec/lib/hamster/list/subsequences_spec.rb +0 -24
- data/spec/lib/hamster/list/sum_spec.rb +0 -24
- data/spec/lib/hamster/list/tail_spec.rb +0 -31
- data/spec/lib/hamster/list/tails_spec.rb +0 -29
- data/spec/lib/hamster/list/to_a_spec.rb +0 -40
- data/spec/lib/hamster/list/to_set_spec.rb +0 -19
- data/spec/lib/hamster/list/transpose_spec.rb +0 -20
- data/spec/lib/hamster/list/uniq_spec.rb +0 -30
- data/spec/lib/hamster/nested/construction_spec.rb +0 -44
- data/spec/lib/hamster/set/add_spec.rb +0 -76
- data/spec/lib/hamster/set/all_spec.rb +0 -52
- data/spec/lib/hamster/set/any_spec.rb +0 -52
- data/spec/lib/hamster/set/clear_spec.rb +0 -34
- data/spec/lib/hamster/set/delete_spec.rb +0 -72
- data/spec/lib/hamster/set/difference_spec.rb +0 -50
- data/spec/lib/hamster/set/disjoint_spec.rb +0 -26
- data/spec/lib/hamster/set/each_spec.rb +0 -46
- data/spec/lib/hamster/set/empty_spec.rb +0 -45
- data/spec/lib/hamster/set/exclusion_spec.rb +0 -48
- data/spec/lib/hamster/set/first_spec.rb +0 -29
- data/spec/lib/hamster/set/flatten_spec.rb +0 -47
- data/spec/lib/hamster/set/group_by_spec.rb +0 -60
- data/spec/lib/hamster/set/hash_spec.rb +0 -23
- data/spec/lib/hamster/set/include_spec.rb +0 -61
- data/spec/lib/hamster/set/inspect_spec.rb +0 -48
- data/spec/lib/hamster/set/intersect_spec.rb +0 -26
- data/spec/lib/hamster/set/intersection_spec.rb +0 -53
- data/spec/lib/hamster/set/join_spec.rb +0 -65
- data/spec/lib/hamster/set/map_spec.rb +0 -60
- data/spec/lib/hamster/set/maximum_spec.rb +0 -37
- data/spec/lib/hamster/set/minimum_spec.rb +0 -37
- data/spec/lib/hamster/set/new_spec.rb +0 -54
- data/spec/lib/hamster/set/partition_spec.rb +0 -53
- data/spec/lib/hamster/set/reduce_spec.rb +0 -56
- data/spec/lib/hamster/set/reject_spec.rb +0 -51
- data/spec/lib/hamster/set/sample_spec.rb +0 -14
- data/spec/lib/hamster/set/select_spec.rb +0 -74
- data/spec/lib/hamster/set/subset_spec.rb +0 -52
- data/spec/lib/hamster/set/sum_spec.rb +0 -24
- data/spec/lib/hamster/set/superset_spec.rb +0 -52
- data/spec/lib/hamster/set/to_a_spec.rb +0 -31
- data/spec/lib/hamster/set/to_list_spec.rb +0 -37
- data/spec/lib/hamster/set/union_spec.rb +0 -64
- data/spec/lib/hamster/sorted_set/above_spec.rb +0 -52
- data/spec/lib/hamster/sorted_set/add_spec.rb +0 -63
- data/spec/lib/hamster/sorted_set/at_spec.rb +0 -25
- data/spec/lib/hamster/sorted_set/below_spec.rb +0 -52
- data/spec/lib/hamster/sorted_set/between_spec.rb +0 -52
- data/spec/lib/hamster/sorted_set/clear_spec.rb +0 -44
- data/spec/lib/hamster/sorted_set/construction_spec.rb +0 -29
- data/spec/lib/hamster/sorted_set/delete_at_spec.rb +0 -19
- data/spec/lib/hamster/sorted_set/delete_spec.rb +0 -90
- data/spec/lib/hamster/sorted_set/disjoint_spec.rb +0 -26
- data/spec/lib/hamster/sorted_set/drop_spec.rb +0 -56
- data/spec/lib/hamster/sorted_set/drop_while_spec.rb +0 -35
- data/spec/lib/hamster/sorted_set/each_spec.rb +0 -29
- data/spec/lib/hamster/sorted_set/empty_spec.rb +0 -35
- data/spec/lib/hamster/sorted_set/eql_spec.rb +0 -121
- data/spec/lib/hamster/sorted_set/fetch_spec.rb +0 -65
- data/spec/lib/hamster/sorted_set/find_index_spec.rb +0 -41
- data/spec/lib/hamster/sorted_set/first_spec.rb +0 -19
- data/spec/lib/hamster/sorted_set/from_spec.rb +0 -52
- data/spec/lib/hamster/sorted_set/group_by_spec.rb +0 -58
- data/spec/lib/hamster/sorted_set/include_spec.rb +0 -24
- data/spec/lib/hamster/sorted_set/inspect_spec.rb +0 -38
- data/spec/lib/hamster/sorted_set/intersect_spec.rb +0 -26
- data/spec/lib/hamster/sorted_set/intersection_spec.rb +0 -29
- data/spec/lib/hamster/sorted_set/last_spec.rb +0 -37
- data/spec/lib/hamster/sorted_set/map_spec.rb +0 -36
- data/spec/lib/hamster/sorted_set/marshal_spec.rb +0 -37
- data/spec/lib/hamster/sorted_set/maximum_spec.rb +0 -37
- data/spec/lib/hamster/sorted_set/minimum_spec.rb +0 -20
- data/spec/lib/hamster/sorted_set/new_spec.rb +0 -52
- data/spec/lib/hamster/sorted_set/reverse_each_spec.rb +0 -29
- data/spec/lib/hamster/sorted_set/sample_spec.rb +0 -14
- data/spec/lib/hamster/sorted_set/select_spec.rb +0 -62
- data/spec/lib/hamster/sorted_set/size_spec.rb +0 -18
- data/spec/lib/hamster/sorted_set/slice_spec.rb +0 -257
- data/spec/lib/hamster/sorted_set/sorting_spec.rb +0 -45
- data/spec/lib/hamster/sorted_set/subset_spec.rb +0 -48
- data/spec/lib/hamster/sorted_set/superset_spec.rb +0 -48
- data/spec/lib/hamster/sorted_set/take_spec.rb +0 -55
- data/spec/lib/hamster/sorted_set/take_while_spec.rb +0 -34
- data/spec/lib/hamster/sorted_set/to_set_spec.rb +0 -19
- data/spec/lib/hamster/sorted_set/union_spec.rb +0 -28
- data/spec/lib/hamster/sorted_set/up_to_spec.rb +0 -52
- data/spec/lib/hamster/sorted_set/values_at_spec.rb +0 -34
- data/spec/lib/hamster/vector/add_spec.rb +0 -68
- data/spec/lib/hamster/vector/assoc_spec.rb +0 -36
- data/spec/lib/hamster/vector/bsearch_spec.rb +0 -58
- data/spec/lib/hamster/vector/clear_spec.rb +0 -34
- data/spec/lib/hamster/vector/combination_spec.rb +0 -82
- data/spec/lib/hamster/vector/compact_spec.rb +0 -30
- data/spec/lib/hamster/vector/compare_spec.rb +0 -32
- data/spec/lib/hamster/vector/concat_spec.rb +0 -35
- data/spec/lib/hamster/vector/count_spec.rb +0 -18
- data/spec/lib/hamster/vector/delete_at_spec.rb +0 -54
- data/spec/lib/hamster/vector/delete_spec.rb +0 -31
- data/spec/lib/hamster/vector/drop_spec.rb +0 -42
- data/spec/lib/hamster/vector/drop_while_spec.rb +0 -55
- data/spec/lib/hamster/vector/each_index_spec.rb +0 -41
- data/spec/lib/hamster/vector/each_spec.rb +0 -45
- data/spec/lib/hamster/vector/each_with_index_spec.rb +0 -40
- data/spec/lib/hamster/vector/empty_spec.rb +0 -42
- data/spec/lib/hamster/vector/eql_spec.rb +0 -77
- data/spec/lib/hamster/vector/fetch_spec.rb +0 -65
- data/spec/lib/hamster/vector/fill_spec.rb +0 -89
- data/spec/lib/hamster/vector/first_spec.rb +0 -19
- data/spec/lib/hamster/vector/flat_map_spec.rb +0 -51
- data/spec/lib/hamster/vector/flatten_spec.rb +0 -44
- data/spec/lib/hamster/vector/get_spec.rb +0 -75
- data/spec/lib/hamster/vector/group_by_spec.rb +0 -58
- data/spec/lib/hamster/vector/insert_spec.rb +0 -69
- data/spec/lib/hamster/vector/inspect_spec.rb +0 -50
- data/spec/lib/hamster/vector/map_spec.rb +0 -52
- data/spec/lib/hamster/vector/marshal_spec.rb +0 -32
- data/spec/lib/hamster/vector/maximum_spec.rb +0 -34
- data/spec/lib/hamster/vector/minimum_spec.rb +0 -34
- data/spec/lib/hamster/vector/multiply_spec.rb +0 -48
- data/spec/lib/hamster/vector/new_spec.rb +0 -51
- data/spec/lib/hamster/vector/partition_spec.rb +0 -53
- data/spec/lib/hamster/vector/permutation_spec.rb +0 -92
- data/spec/lib/hamster/vector/pop_spec.rb +0 -27
- data/spec/lib/hamster/vector/product_spec.rb +0 -71
- data/spec/lib/hamster/vector/reject_spec.rb +0 -44
- data/spec/lib/hamster/vector/repeated_combination_spec.rb +0 -78
- data/spec/lib/hamster/vector/repeated_permutation_spec.rb +0 -94
- data/spec/lib/hamster/vector/reverse_each_spec.rb +0 -32
- data/spec/lib/hamster/vector/reverse_spec.rb +0 -22
- data/spec/lib/hamster/vector/rindex_spec.rb +0 -37
- data/spec/lib/hamster/vector/rotate_spec.rb +0 -74
- data/spec/lib/hamster/vector/sample_spec.rb +0 -14
- data/spec/lib/hamster/vector/select_spec.rb +0 -64
- data/spec/lib/hamster/vector/set_spec.rb +0 -175
- data/spec/lib/hamster/vector/shift_spec.rb +0 -28
- data/spec/lib/hamster/vector/shuffle_spec.rb +0 -44
- data/spec/lib/hamster/vector/slice_spec.rb +0 -241
- data/spec/lib/hamster/vector/sorting_spec.rb +0 -57
- data/spec/lib/hamster/vector/take_spec.rb +0 -43
- data/spec/lib/hamster/vector/take_while_spec.rb +0 -35
- data/spec/lib/hamster/vector/to_set_spec.rb +0 -23
- data/spec/lib/hamster/vector/transpose_spec.rb +0 -49
- data/spec/lib/hamster/vector/uniq_spec.rb +0 -56
- data/spec/lib/hamster/vector/unshift_spec.rb +0 -29
- data/spec/lib/hamster/vector/update_in_spec.rb +0 -83
- data/spec/lib/hamster/vector/values_at_spec.rb +0 -34
- data/spec/lib/hamster/vector/zip_spec.rb +0 -58
@@ -1,56 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe Hamster::List do
|
5
|
-
describe "#permutation" do
|
6
|
-
let(:list) { Hamster.list(1,2,3,4,5) }
|
7
|
-
|
8
|
-
context "with no block" do
|
9
|
-
it "returns an Enumerator" do
|
10
|
-
list.permutation.class.should be(Enumerator)
|
11
|
-
list.permutation.to_a.sort.should == [1,2,3,4,5].permutation.to_a.sort
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "with no argument" do
|
16
|
-
it "yields all permutations of the list" do
|
17
|
-
perms = list.permutation.to_a
|
18
|
-
perms.size.should be(120)
|
19
|
-
perms.sort.should == [1,2,3,4,5].permutation.to_a.sort
|
20
|
-
perms.each { |item| item.should be_kind_of(Hamster::List) }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with a length argument" do
|
25
|
-
it "yields all N-size permutations of the list" do
|
26
|
-
perms = list.permutation(3).to_a
|
27
|
-
perms.size.should be(60)
|
28
|
-
perms.sort.should == [1,2,3,4,5].permutation(3).to_a.sort
|
29
|
-
perms.each { |item| item.should be_kind_of(Hamster::List) }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "with a length argument greater than length of list" do
|
34
|
-
it "yields nothing" do
|
35
|
-
list.permutation(6).to_a.should be_empty
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context "with a length argument of 0" do
|
40
|
-
it "yields an empty list" do
|
41
|
-
perms = list.permutation(0).to_a
|
42
|
-
perms.size.should be(1)
|
43
|
-
perms[0].should be_kind_of(Hamster::List)
|
44
|
-
perms[0].should be_empty
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "with a block" do
|
49
|
-
it "returns the original list" do
|
50
|
-
list.permutation(0) {}.should be(list)
|
51
|
-
list.permutation(1) {}.should be(list)
|
52
|
-
list.permutation {}.should be(list)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe Hamster::List do
|
5
|
-
describe "#product" do
|
6
|
-
context "on a really big list" do
|
7
|
-
it "doesn't run out of stack" do
|
8
|
-
-> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).product }.should_not raise_error
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
[
|
13
|
-
[[], 1],
|
14
|
-
[[2], 2],
|
15
|
-
[[1, 3, 5, 7, 11], 1155],
|
16
|
-
].each do |values, expected|
|
17
|
-
context "on #{values.inspect}" do
|
18
|
-
it "returns #{expected.inspect}" do
|
19
|
-
Hamster.list(*values).product.should == expected
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe Hamster::List do
|
5
|
-
[:reduce, :inject].each do |method|
|
6
|
-
describe "##{method}" do
|
7
|
-
context "on a really big list" do
|
8
|
-
it "doesn't run out of stack" do
|
9
|
-
-> { Hamster.interval(0, STACK_OVERFLOW_DEPTH).send(method, &:+) }.should_not raise_error
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
[
|
14
|
-
[[], 10, 10],
|
15
|
-
[[1], 10, 9],
|
16
|
-
[[1, 2, 3], 10, 4],
|
17
|
-
].each do |values, initial, expected|
|
18
|
-
context "on #{values.inspect}" do
|
19
|
-
context "with an initial value of #{initial} and a block" do
|
20
|
-
it "returns #{expected.inspect}" do
|
21
|
-
Hamster.list(*values).send(method, initial) { |memo, item| memo - item }.should == expected
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
[
|
28
|
-
[[], nil],
|
29
|
-
[[1], 1],
|
30
|
-
[[1, 2, 3], -4],
|
31
|
-
].each do |values, expected|
|
32
|
-
context "on #{values.inspect}" do
|
33
|
-
context "with no initial value and a block" do
|
34
|
-
it "returns #{expected.inspect}" do
|
35
|
-
Hamster.list(*values).send(method) { |memo, item| memo - item }.should == expected
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with no block and a symbol argument" do
|
42
|
-
it "uses the symbol as the name of a method to reduce with" do
|
43
|
-
Hamster.list(1, 2, 3).send(method, :+).should == 6
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context "with no block and a string argument" do
|
48
|
-
it "uses the string as the name of a method to reduce with" do
|
49
|
-
Hamster.list(1, 2, 3).send(method, '+').should == 6
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe Hamster::List do
|
5
|
-
describe "#rotate" do
|
6
|
-
let(:list) { Hamster.list(1,2,3,4,5) }
|
7
|
-
|
8
|
-
context "when passed no argument" do
|
9
|
-
it "returns a new list with the first element moved to the end" do
|
10
|
-
list.rotate.should eql(Hamster.list(2,3,4,5,1))
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "with an integral argument n" do
|
15
|
-
it "returns a new list with the first (n % size) elements moved to the end" do
|
16
|
-
list.rotate(2).should eql(Hamster.list(3,4,5,1,2))
|
17
|
-
list.rotate(3).should eql(Hamster.list(4,5,1,2,3))
|
18
|
-
list.rotate(4).should eql(Hamster.list(5,1,2,3,4))
|
19
|
-
list.rotate(5).should eql(Hamster.list(1,2,3,4,5))
|
20
|
-
list.rotate(-1).should eql(Hamster.list(5,1,2,3,4))
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "with a non-numeric argument" do
|
25
|
-
it "raises a TypeError" do
|
26
|
-
-> { list.rotate('hello') }.should raise_error(TypeError)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "with an argument of zero (or one evenly divisible by list length)" do
|
31
|
-
it "it returns self" do
|
32
|
-
list.rotate(0).should be(list)
|
33
|
-
list.rotate(5).should be(list)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe Hamster::List do
|
5
|
-
describe "#sample" do
|
6
|
-
let(:list) { Hamster.list(*(1..10)) }
|
7
|
-
|
8
|
-
it "returns a randomly chosen item" do
|
9
|
-
chosen = 100.times.map { list.sample }
|
10
|
-
chosen.each { |item| list.include?(item).should == true }
|
11
|
-
list.each { |item| chosen.include?(item).should == true }
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,230 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe Hamster::List do
|
5
|
-
let(:list) { Hamster.list(1,2,3,4) }
|
6
|
-
let(:big) { Hamster.list(*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
|
-
list.send(method, 0).should be(1)
|
13
|
-
list.send(method, 1).should be(2)
|
14
|
-
list.send(method, 2).should be(3)
|
15
|
-
list.send(method, 3).should be(4)
|
16
|
-
list.send(method, 4).should be(nil)
|
17
|
-
list.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
|
-
list.should eql(Hamster.list(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 list" do
|
30
|
-
list.send(method, -1).should be(4)
|
31
|
-
list.send(method, -2).should be(3)
|
32
|
-
list.send(method, -3).should be(2)
|
33
|
-
list.send(method, -4).should be(1)
|
34
|
-
list.send(method, -5).should be(nil)
|
35
|
-
list.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
|
-
list.send(method, 0, 0).should eql(Hamster.list)
|
45
|
-
list.send(method, 0, 1).should eql(Hamster.list(1))
|
46
|
-
list.send(method, 0, 2).should eql(Hamster.list(1,2))
|
47
|
-
list.send(method, 0, 4).should eql(Hamster.list(1,2,3,4))
|
48
|
-
list.send(method, 0, 6).should eql(Hamster.list(1,2,3,4))
|
49
|
-
list.send(method, 0, -1).should be_nil
|
50
|
-
list.send(method, 0, -2).should be_nil
|
51
|
-
list.send(method, 0, -4).should be_nil
|
52
|
-
list.send(method, 2, 0).should eql(Hamster.list)
|
53
|
-
list.send(method, 2, 1).should eql(Hamster.list(3))
|
54
|
-
list.send(method, 2, 2).should eql(Hamster.list(3,4))
|
55
|
-
list.send(method, 2, 4).should eql(Hamster.list(3,4))
|
56
|
-
list.send(method, 2, -1).should be_nil
|
57
|
-
list.send(method, 4, 0).should eql(Hamster.list)
|
58
|
-
list.send(method, 4, 2).should eql(Hamster.list)
|
59
|
-
list.send(method, 4, -1).should be_nil
|
60
|
-
list.send(method, 5, 0).should be_nil
|
61
|
-
list.send(method, 5, 2).should be_nil
|
62
|
-
list.send(method, 5, -1).should be_nil
|
63
|
-
list.send(method, 6, 0).should be_nil
|
64
|
-
list.send(method, 6, 2).should be_nil
|
65
|
-
list.send(method, 6, -1).should be_nil
|
66
|
-
|
67
|
-
big.send(method, 0, 3).should eql(Hamster.list(1,2,3))
|
68
|
-
big.send(method, 1023, 4).should eql(Hamster.list(1024,1025,1026,1027))
|
69
|
-
big.send(method, 1024, 4).should eql(Hamster.list(1025,1026,1027,1028))
|
70
|
-
end
|
71
|
-
|
72
|
-
it "leaves the original unchanged" do
|
73
|
-
list.should eql(Hamster.list(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
|
-
list.send(method, -1, 0).should eql(Hamster.list)
|
80
|
-
list.send(method, -1, 1).should eql(Hamster.list(4))
|
81
|
-
list.send(method, -1, 2).should eql(Hamster.list(4))
|
82
|
-
list.send(method, -1, -1).should be_nil
|
83
|
-
list.send(method, -2, 0).should eql(Hamster.list)
|
84
|
-
list.send(method, -2, 1).should eql(Hamster.list(3))
|
85
|
-
list.send(method, -2, 2).should eql(Hamster.list(3,4))
|
86
|
-
list.send(method, -2, 4).should eql(Hamster.list(3,4))
|
87
|
-
list.send(method, -2, -1).should be_nil
|
88
|
-
list.send(method, -4, 0).should eql(Hamster.list)
|
89
|
-
list.send(method, -4, 1).should eql(Hamster.list(1))
|
90
|
-
list.send(method, -4, 2).should eql(Hamster.list(1,2))
|
91
|
-
list.send(method, -4, 4).should eql(Hamster.list(1,2,3,4))
|
92
|
-
list.send(method, -4, 6).should eql(Hamster.list(1,2,3,4))
|
93
|
-
list.send(method, -4, -1).should be_nil
|
94
|
-
list.send(method, -5, 0).should be_nil
|
95
|
-
list.send(method, -5, 1).should be_nil
|
96
|
-
list.send(method, -5, 10).should be_nil
|
97
|
-
list.send(method, -5, -1).should be_nil
|
98
|
-
|
99
|
-
big.send(method, -1, 1).should eql(Hamster.list(10000))
|
100
|
-
big.send(method, -1, 2).should eql(Hamster.list(10000))
|
101
|
-
big.send(method, -6, 2).should eql(Hamster.list(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
|
-
list.send(method, 0..-1).should eql(Hamster.list(1,2,3,4))
|
108
|
-
list.send(method, 0..-10).should eql(Hamster.list)
|
109
|
-
list.send(method, 0..0).should eql(Hamster.list(1))
|
110
|
-
list.send(method, 0..1).should eql(Hamster.list(1,2))
|
111
|
-
list.send(method, 0..2).should eql(Hamster.list(1,2,3))
|
112
|
-
list.send(method, 0..3).should eql(Hamster.list(1,2,3,4))
|
113
|
-
list.send(method, 0..4).should eql(Hamster.list(1,2,3,4))
|
114
|
-
list.send(method, 0..10).should eql(Hamster.list(1,2,3,4))
|
115
|
-
list.send(method, 2..-10).should eql(Hamster.list)
|
116
|
-
list.send(method, 2..0).should eql(Hamster.list)
|
117
|
-
list.send(method, 2..2).should eql(Hamster.list(3))
|
118
|
-
list.send(method, 2..3).should eql(Hamster.list(3,4))
|
119
|
-
list.send(method, 2..4).should eql(Hamster.list(3,4))
|
120
|
-
list.send(method, 3..0).should eql(Hamster.list)
|
121
|
-
list.send(method, 3..3).should eql(Hamster.list(4))
|
122
|
-
list.send(method, 3..4).should eql(Hamster.list(4))
|
123
|
-
list.send(method, 4..0).should eql(Hamster.list)
|
124
|
-
list.send(method, 4..4).should eql(Hamster.list)
|
125
|
-
list.send(method, 4..5).should eql(Hamster.list)
|
126
|
-
list.send(method, 5..0).should be_nil
|
127
|
-
list.send(method, 5..5).should be_nil
|
128
|
-
list.send(method, 5..6).should be_nil
|
129
|
-
|
130
|
-
big.send(method, 159..162).should eql(Hamster.list(160,161,162,163))
|
131
|
-
big.send(method, 160..162).should eql(Hamster.list(161,162,163))
|
132
|
-
big.send(method, 161..162).should eql(Hamster.list(162,163))
|
133
|
-
big.send(method, 9999..10100).should eql(Hamster.list(10000))
|
134
|
-
big.send(method, 10000..10100).should eql(Hamster.list)
|
135
|
-
big.send(method, 10001..10100).should be_nil
|
136
|
-
|
137
|
-
list.send(method, 0...-1).should eql(Hamster.list(1,2,3))
|
138
|
-
list.send(method, 0...-10).should eql(Hamster.list)
|
139
|
-
list.send(method, 0...0).should eql(Hamster.list)
|
140
|
-
list.send(method, 0...1).should eql(Hamster.list(1))
|
141
|
-
list.send(method, 0...2).should eql(Hamster.list(1,2))
|
142
|
-
list.send(method, 0...3).should eql(Hamster.list(1,2,3))
|
143
|
-
list.send(method, 0...4).should eql(Hamster.list(1,2,3,4))
|
144
|
-
list.send(method, 0...10).should eql(Hamster.list(1,2,3,4))
|
145
|
-
list.send(method, 2...-10).should eql(Hamster.list)
|
146
|
-
list.send(method, 2...0).should eql(Hamster.list)
|
147
|
-
list.send(method, 2...2).should eql(Hamster.list)
|
148
|
-
list.send(method, 2...3).should eql(Hamster.list(3))
|
149
|
-
list.send(method, 2...4).should eql(Hamster.list(3,4))
|
150
|
-
list.send(method, 3...0).should eql(Hamster.list)
|
151
|
-
list.send(method, 3...3).should eql(Hamster.list)
|
152
|
-
list.send(method, 3...4).should eql(Hamster.list(4))
|
153
|
-
list.send(method, 4...0).should eql(Hamster.list)
|
154
|
-
list.send(method, 4...4).should eql(Hamster.list)
|
155
|
-
list.send(method, 4...5).should eql(Hamster.list)
|
156
|
-
list.send(method, 5...0).should be_nil
|
157
|
-
list.send(method, 5...5).should be_nil
|
158
|
-
list.send(method, 5...6).should be_nil
|
159
|
-
|
160
|
-
big.send(method, 159...162).should eql(Hamster.list(160,161,162))
|
161
|
-
big.send(method, 160...162).should eql(Hamster.list(161,162))
|
162
|
-
big.send(method, 161...162).should eql(Hamster.list(162))
|
163
|
-
big.send(method, 9999...10100).should eql(Hamster.list(10000))
|
164
|
-
big.send(method, 10000...10100).should eql(Hamster.list)
|
165
|
-
big.send(method, 10001...10100).should be_nil
|
166
|
-
|
167
|
-
list.send(method, -1..-1).should eql(Hamster.list(4))
|
168
|
-
list.send(method, -1...-1).should eql(Hamster.list)
|
169
|
-
list.send(method, -1..3).should eql(Hamster.list(4))
|
170
|
-
list.send(method, -1...3).should eql(Hamster.list)
|
171
|
-
list.send(method, -1..4).should eql(Hamster.list(4))
|
172
|
-
list.send(method, -1...4).should eql(Hamster.list(4))
|
173
|
-
list.send(method, -1..10).should eql(Hamster.list(4))
|
174
|
-
list.send(method, -1...10).should eql(Hamster.list(4))
|
175
|
-
list.send(method, -1..0).should eql(Hamster.list)
|
176
|
-
list.send(method, -1..-4).should eql(Hamster.list)
|
177
|
-
list.send(method, -1...-4).should eql(Hamster.list)
|
178
|
-
list.send(method, -1..-6).should eql(Hamster.list)
|
179
|
-
list.send(method, -1...-6).should eql(Hamster.list)
|
180
|
-
list.send(method, -2..-2).should eql(Hamster.list(3))
|
181
|
-
list.send(method, -2...-2).should eql(Hamster.list)
|
182
|
-
list.send(method, -2..-1).should eql(Hamster.list(3,4))
|
183
|
-
list.send(method, -2...-1).should eql(Hamster.list(3))
|
184
|
-
list.send(method, -2..10).should eql(Hamster.list(3,4))
|
185
|
-
list.send(method, -2...10).should eql(Hamster.list(3,4))
|
186
|
-
|
187
|
-
big.send(method, -1..-1).should eql(Hamster.list(10000))
|
188
|
-
big.send(method, -1..9999).should eql(Hamster.list(10000))
|
189
|
-
big.send(method, -1...9999).should eql(Hamster.list)
|
190
|
-
big.send(method, -2...9999).should eql(Hamster.list(9999))
|
191
|
-
big.send(method, -2..-1).should eql(Hamster.list(9999,10000))
|
192
|
-
|
193
|
-
list.send(method, -4..-4).should eql(Hamster.list(1))
|
194
|
-
list.send(method, -4..-2).should eql(Hamster.list(1,2,3))
|
195
|
-
list.send(method, -4...-2).should eql(Hamster.list(1,2))
|
196
|
-
list.send(method, -4..-1).should eql(Hamster.list(1,2,3,4))
|
197
|
-
list.send(method, -4...-1).should eql(Hamster.list(1,2,3))
|
198
|
-
list.send(method, -4..3).should eql(Hamster.list(1,2,3,4))
|
199
|
-
list.send(method, -4...3).should eql(Hamster.list(1,2,3))
|
200
|
-
list.send(method, -4..4).should eql(Hamster.list(1,2,3,4))
|
201
|
-
list.send(method, -4...4).should eql(Hamster.list(1,2,3,4))
|
202
|
-
list.send(method, -4..0).should eql(Hamster.list(1))
|
203
|
-
list.send(method, -4...0).should eql(Hamster.list)
|
204
|
-
list.send(method, -4..1).should eql(Hamster.list(1,2))
|
205
|
-
list.send(method, -4...1).should eql(Hamster.list(1))
|
206
|
-
|
207
|
-
list.send(method, -5..-5).should be_nil
|
208
|
-
list.send(method, -5...-5).should be_nil
|
209
|
-
list.send(method, -5..-4).should be_nil
|
210
|
-
list.send(method, -5..-1).should be_nil
|
211
|
-
list.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
|
-
list.should eql(Hamster.list(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
|
-
list.send(method, subclass.new(1,2)).should eql(Hamster.list(2,3))
|
226
|
-
list.send(method, subclass.new(-3,-1,true)).should eql(Hamster.list(2,3))
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "hamster/list"
|
3
|
-
|
4
|
-
describe "Hamster.list#span" do
|
5
|
-
it "is lazy" do
|
6
|
-
-> { Hamster.stream { |item| fail }.span { true } }.should_not raise_error
|
7
|
-
end
|
8
|
-
|
9
|
-
describe <<-DESC do
|
10
|
-
given a predicate (in the form of a block), splits the list into two lists
|
11
|
-
(returned as an array) such that elements in the first list (the prefix) are
|
12
|
-
taken from the head of the list while the predicate is satisfied, and elements
|
13
|
-
in the second list (the remainder) are the remaining elements from the list
|
14
|
-
once the predicate is not satisfied. For example:
|
15
|
-
DESC
|
16
|
-
|
17
|
-
[
|
18
|
-
[[], [], []],
|
19
|
-
[[1], [1], []],
|
20
|
-
[[1, 2], [1, 2], []],
|
21
|
-
[[1, 2, 3], [1, 2], [3]],
|
22
|
-
[[1, 2, 3, 4], [1, 2], [3, 4]],
|
23
|
-
[[2, 3, 4], [2], [3, 4]],
|
24
|
-
[[3, 4], [], [3, 4]],
|
25
|
-
[[4], [], [4]],
|
26
|
-
].each do |values, expected_prefix, expected_remainder|
|
27
|
-
context "given the list #{values.inspect}" do
|
28
|
-
let(:list) { Hamster.list(*values) }
|
29
|
-
|
30
|
-
context "and a predicate that returns true for values <= 2" do
|
31
|
-
let(:result) { list.span { |item| item <= 2 }}
|
32
|
-
let(:prefix) { result.first }
|
33
|
-
let(:remainder) { result.last }
|
34
|
-
|
35
|
-
it "preserves the original" do
|
36
|
-
result
|
37
|
-
list.should eql(Hamster.list(*values))
|
38
|
-
end
|
39
|
-
|
40
|
-
it "returns the prefix as #{expected_prefix.inspect}" do
|
41
|
-
prefix.should eql(Hamster.list(*expected_prefix))
|
42
|
-
end
|
43
|
-
|
44
|
-
it "returns the remainder as #{expected_remainder.inspect}" do
|
45
|
-
remainder.should eql(Hamster.list(*expected_remainder))
|
46
|
-
end
|
47
|
-
|
48
|
-
it "calls the block only once for each element" do
|
49
|
-
count = 0
|
50
|
-
result = list.span { |item| count += 1; item <= 2 }
|
51
|
-
# force realization of lazy lists
|
52
|
-
result.first.size.should == expected_prefix.size
|
53
|
-
result.last.size.should == expected_remainder.size
|
54
|
-
# it may not need to call the block on every element, just up to the
|
55
|
-
# point where the block first returns a false value
|
56
|
-
count.should <= values.size
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "without a predicate" do
|
61
|
-
it "returns a frozen array" do
|
62
|
-
list.span.class.should be(Array)
|
63
|
-
list.span.should be_frozen
|
64
|
-
end
|
65
|
-
|
66
|
-
it "returns self as the prefix" do
|
67
|
-
list.span.first.should equal(list)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "returns an empty list as the remainder" do
|
71
|
-
list.span.last.should be_empty
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|