Class: Radagen::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/radagen/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(&gen_proc) ⇒ Generator

Returns a new instance of Generator.



5
6
7
# File 'lib/radagen/generator.rb', line 5

def initialize(&gen_proc)
  @gen_proc = gen_proc
end

Instance Method Details

#call(prng, size) ⇒ Object

Realize a value from the generator.

Parameters:

  • prng (Object)

    psuedo random number generator

  • size (Fixnum)

    size used in the generation of the value

Returns:

  • (Object)


15
16
17
# File 'lib/radagen/generator.rb', line 15

def call(prng, size)
  @gen_proc.call(prng, size)
end

#gen(size = 30, seed = Random.new_seed) ⇒ Object

Generate a single value from the generator.

Examples:

string_alpha.gen => "Qwad"
string_alpha.gen(200, 45362642634632684368) => "IaxBvRLxDIvLBhKezMdMmVZBCGzSJZvVjHkcLHsEchCpZWOmLAUQ"

Parameters:

  • size (Fixnum) (defaults to: 30)

    size passed to the generator

  • seed (Fixnum) (defaults to: Random.new_seed)

    seed used as the initial state of the generator

Returns:

  • (Object)


47
48
49
50
# File 'lib/radagen/generator.rb', line 47

def gen(size=30, seed=Random.new_seed)
  prng = prng(seed)
  self.call(prng, size)
end

#sample(n = 10) ⇒ Array<Object>

Note:

max size on samples is set by #to_enum

Generate n samples from the generator. Sizing is linear and starts at 0. Max size is defined by #to_enum. This is to see what type of values your generator will make.

Examples:

fixnum.sample(3) #=> [0, 1, 1]

Parameters:

  • n (Fixnum) (defaults to: 10)

    sample generated values from generator

Returns:

  • (Array<Object>)

See Also:



31
32
33
# File 'lib/radagen/generator.rb', line 31

def sample(n=10)
  self.to_enum.take(n).to_a
end

#to_enum(opts = {}) ⇒ Enumerator::Lazy

Note:

the size value is the upper bound of the sizes that could be generated

Create a lazy enumerable of generator values. Size cycles from size_min to size_max

Examples:

string_ascii.to_enum.take(10).to_a #=> ["", "", ")", "{?", "wE&", "h*hq", "9gm>dG", "9Ljn,(Z", "", "1q7:\\q{"]

Parameters:

  • opts (Hash) (defaults to: {})

    options hash to control behavior of enumerator

Options Hash (opts):

  • :size_min (Fixnum) — default: 0

    minimum size passed to generator in size cycles

  • :size_max (Fixnum) — default: 300

    maximum size passed to generator in size cycles

  • :seed (Fixnum)

    initial state passed to the pseudo random number generator

Returns:

  • (Enumerator::Lazy)


64
65
66
67
68
69
70
71
72
# File 'lib/radagen/generator.rb', line 64

def to_enum(opts={})
  default_opts = {size_min: 0, size_max: 300, seed: Random.new_seed}
  size_min, size_max, seed = default_opts.merge(opts).values_at(:size_min, :size_max, :seed)
  prng = prng(seed)

  (size_min...size_max).cycle.lazy.map do |size|
    @gen_proc.call(prng, size)
  end
end