Class: Properb::Generators::IntegerGenerator

Inherits:
Properb::Generator show all
Defined in:
lib/properb/generators/integer_generator.rb

Instance Method Summary collapse

Methods inherited from Properb::Generator

#map, #or, #reject, #select, #sized, #to_properb_generator

Constructor Details

#initialize(range = 0) ⇒ IntegerGenerator



4
5
6
# File 'lib/properb/generators/integer_generator.rb', line 4

def initialize(range = 0..)
  @range = range
end

Instance Method Details

#generate_value(random, _size) ⇒ Object



8
9
10
11
12
13
14
15
16
17
# File 'lib/properb/generators/integer_generator.rb', line 8

def generate_value(random, _size)
  value = random.random_number(@range)
  ShrinkTree.new(
    value,
    Enumerator.new do |out|
      out << ShrinkTree.new(@range.min, [])
      shrink(value, @range.min).each { out << _1 }
    end
  )
end

#shrink(value, min) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/properb/generators/integer_generator.rb', line 19

def shrink(value, min)
  midpoint = ((value + min) / 2).floor
  return [] if midpoint == min # termination

  Enumerator.new do |out|
    out << ShrinkTree.new(midpoint, shrink(midpoint, min))
    shrink(value, midpoint).each { out << _1 }
  end
end