Class: Pbt::Arbitrary::Arbitrary Abstract

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

Overview

This class is abstract.

Abstract class for generating random values on type ‘T`.

Instance Method Summary collapse

Instance Method Details

#filter(&refinement) ⇒ FilterArbitrary

Create another arbitrary by filtering values against ‘refinement`. All the values produced by the resulting arbitrary satisfy `!!refinement(value) == true`.

Be aware that using ‘filter` may reduce possible valid values and may impact the time required to generate a valid value.

Examples:

integer_generator = Pbt.integer
even_integer_generator = integer_arb.filter { |x| x.even? }
# or `integer_arb.filter(&:even?)`

Parameters:

  • refinement (Proc)

    Predicate proc to test each produced element. Return true to keep the element, false otherwise.

Returns:



53
54
55
# File 'lib/pbt/arbitrary/arbitrary.rb', line 53

def filter(&refinement)
  FilterArbitrary.new(self, &refinement)
end

#generate(rng) ⇒ Object

This method is abstract.

Generate a value of type ‘T`, based on the provided random number generator.

Parameters:

  • rng (Random)

    Random number generator.

Returns:

  • (Object)

    Random value of type ‘T`.

Raises:

  • (NotImplementedError)


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

def generate(rng)
  raise NotImplementedError
end

#map(mapper, unmapper) ⇒ MapArbitrary

Create another arbitrary by applying ‘mapper` value by value.

Examples:

integer_generator = Pbt.integer
num_str_generator = integer_arb.map(->(n){ n.to_s }, ->(s) {s.to_i})

Parameters:

  • mapper (Proc)

    Proc to map generated values. Mainly used for generation.

  • unmapper (Proc)

    Proc to unmap generated values. Used for shrinking.

Returns:



37
38
39
# File 'lib/pbt/arbitrary/arbitrary.rb', line 37

def map(mapper, unmapper)
  MapArbitrary.new(self, mapper, unmapper)
end

#shrink(current) ⇒ Enumerator<Object>

This method is abstract.

Shrink a value of type ‘T`. Must never be called with possibly invalid values.

Parameters:

  • current (Object)

Returns:

  • (Enumerator<Object>)

Raises:

  • (NotImplementedError)


24
25
26
# File 'lib/pbt/arbitrary/arbitrary.rb', line 24

def shrink(current)
  raise NotImplementedError
end