Class: Hegel::Generators::IntegerGenerator

Inherits:
Hegel::Generator show all
Defined in:
lib/hegel/generators.rb,
sig/hegel.rbs

Overview

Hegel::Syntax::Methods#integers. An integer in [min_value, max_value], defaulting to the full 64-bit range when either bound is omitted.

Constant Summary collapse

INT64_MIN =

hegel_generate_integer takes int64_t bounds; a bound outside this range dispatches to hegel_generate_integer_big instead (see #do_draw), so integers()'s own caller-facing surface does not change depending on which native call ends up making the draw -- only the dispatch threshold these two constants mark.

Returns:

  • (Integer)
-(2**63)
INT64_MAX =

Returns:

  • (Integer)
(2**63) - 1

Instance Method Summary collapse

Methods inherited from Hegel::Generator

#filter, #map

Constructor Details

#initialize(min_value:, max_value:) ⇒ IntegerGenerator

Returns a new instance of IntegerGenerator.

Parameters:

  • min_value: (Integer, nil)
  • max_value: (Integer, nil)


47
48
49
50
51
# File 'lib/hegel/generators.rb', line 47

def initialize(min_value:, max_value:)
  super()
  @min_value = min_value
  @max_value = max_value
end

Instance Method Details

#do_draw(tc) ⇒ Integer

Parameters:

  • tc (Object)

Returns:

  • (Integer)

Raises:



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/hegel/generators.rb', line 53

def do_draw(tc)
  min_value = @min_value || INT64_MIN
  max_value = @max_value || INT64_MAX
  raise Hegel::Error, "integers: max_value < min_value" if max_value < min_value

  if min_value.between?(INT64_MIN, INT64_MAX) && max_value.between?(INT64_MIN, INT64_MAX)
    tc.generate_integer(min_value, max_value)
  else
    tc.generate_integer_big(min_value, max_value)
  end
end