Class: Pbt::Arbitrary::IntegerArbitrary

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

Overview

Generates random integers between ‘min` and `max`.

Instance Method Summary collapse

Methods inherited from Arbitrary

#filter, #map

Constructor Details

#initialize(min, max) ⇒ IntegerArbitrary

Returns a new instance of IntegerArbitrary.

Parameters:

  • min (Integer)

    Minimum value to generate.

  • max (Integer)

    Maximum value to generate.



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

def initialize(min, max)
  @min = min
  @max = max
end

Instance Method Details

#generate(rng) ⇒ Object

See Also:



18
19
20
# File 'lib/pbt/arbitrary/integer_arbitrary.rb', line 18

def generate(rng)
  rng.rand(@min..@max)
end

#shrink(current, target: DEFAULT_TARGET) ⇒ Object

See Also:



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/pbt/arbitrary/integer_arbitrary.rb', line 23

def shrink(current, target: DEFAULT_TARGET)
  gap = current - target
  return Enumerator.new { |_| } if gap == 0

  is_positive_gap = gap > 0

  Enumerator.new do |y|
    while (diff = (current - target).abs) > 1
      halved = diff / 2
      current -= is_positive_gap ? halved : -halved
      y.yield current
    end
    y.yield target # no diff here
  end
end