module PropCheck::Helper

Helper functions that have no other place to live

Public Instance Methods

call_splatted(val, &block) click to toggle source
# File lib/prop_check/helper.rb, line 35
def call_splatted(val, &block)
  case val
  when Hash
    block.call(**val)
  else
    block.call(val)
  end
  # if kwval != {}
  #   block.call(**kwval)
  # else
  #   block.call(*val)
  # end
end
lazy_append(this_enumerator, other_enumerator) click to toggle source

allow lazy appending of two (potentially lazy) enumerators:

>> PropCheck::Helper::LazyAppend.lazy_append([1,2,3],[4,5.6]).to_a
=> [1,2,3,4,5,6]
# File lib/prop_check/helper.rb, line 31
def lazy_append(this_enumerator, other_enumerator)
  [this_enumerator, other_enumerator].lazy.flat_map(&:lazy)
end
scanl(elem, &operation) click to toggle source

Creates a (potentially lazy) Enumerator starting with `elem` with each consecutive element obtained by calling `operation` on the previous element.

>> Helper.scanl(0, &:next).take(10).force
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>> Helper.scanl([0, 1]) { |curr, next_elem| [next_elem, curr + next_elem] }.map(&:first).take(10).force
=> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
# File lib/prop_check/helper.rb, line 16
def scanl(elem, &operation)
  Enumerator.new do |yielder|
    acc = elem
    loop do
      # p acc
      yielder << acc
      acc = operation.call(acc)
    end
  end.lazy
end