Class: Pbt::Arbitrary::TupleArbitrary

Inherits:
Arbitrary
  • Object
show all
Defined in:
lib/pbt/arbitrary/tuple_arbitrary.rb

Overview

Generates a tuple of arbitrary values.

Instance Method Summary collapse

Methods inherited from Arbitrary

#filter, #map

Constructor Details

#initialize(*arbs) ⇒ TupleArbitrary

Returns a new instance of TupleArbitrary.

Parameters:

  • arbs (Array<Arbitrary>)

    Arbitraries used to generate the values of the tuple.



8
9
10
# File 'lib/pbt/arbitrary/tuple_arbitrary.rb', line 8

def initialize(*arbs)
  @arbs = arbs
end

Instance Method Details

#generate(rng) ⇒ Object

See Also:



13
14
15
# File 'lib/pbt/arbitrary/tuple_arbitrary.rb', line 13

def generate(rng)
  @arbs.map { |arb| arb.generate(rng) }
end

#shrink(current) ⇒ Object

See Also:



18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/pbt/arbitrary/tuple_arbitrary.rb', line 18

def shrink(current)
  # This is not the most comprehensive but allows a reasonable number of entries in the shrink.
  Enumerator.new do |y|
    @arbs.each_with_index do |arb, idx|
      arb.shrink(current[idx]).each do |v|
        next_values = current.dup
        next_values[idx] = v
        y << next_values
      end
    end
  end
end