Class: Pbt::Arbitrary::MapArbitrary

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

Overview

Generates a mapped value from another arbitrary.

Instance Method Summary collapse

Methods inherited from Arbitrary

#filter, #map

Constructor Details

#initialize(arb, mapper, unmapper) ⇒ MapArbitrary

Returns a new instance of MapArbitrary.

Parameters:

  • arb (Arbitrary)

    Arbitrary to generate values to be mapped.

  • mapper (Proc)

    Proc to map generated values. Mainly used for generation.

  • unmapper (Proc)

    Proc to unmap generated values. Used for shrinking.



10
11
12
13
14
# File 'lib/pbt/arbitrary/map_arbitrary.rb', line 10

def initialize(arb, mapper, unmapper)
  @arb = arb
  @mapper = mapper
  @unmapper = unmapper
end

Instance Method Details

#generate(rng) ⇒ Object

See Also:



17
18
19
# File 'lib/pbt/arbitrary/map_arbitrary.rb', line 17

def generate(rng)
  @mapper.call(@arb.generate(rng))
end

#shrink(current) ⇒ Object

See Also:



22
23
24
25
26
27
28
# File 'lib/pbt/arbitrary/map_arbitrary.rb', line 22

def shrink(current)
  Enumerator.new do |y|
    @arb.shrink(@unmapper.call(current)).each do |v|
      y.yield @mapper.call(v)
    end
  end
end