Module: Speculation::Gen

Defined in:
lib/speculation/gen.rb

Class Method Summary collapse

Class Method Details

.gen_for_pred(pred) ⇒ Proc

Given a predicate, returns a built-in generator if one exists.

Parameters:

  • pred

Returns:

  • (Proc)

    built-in generator for pred

  • nil if no built-in generator found

See Also:



49
50
51
52
53
54
55
# File 'lib/speculation/gen.rb', line 49

def self.gen_for_pred(pred)
  if pred.is_a?(Set)
    ->(r) { r.choose(*pred) }
  else
    GEN_BUILTINS[pred]
  end
end

.generate(gen, limit = 100) ⇒ Object

Returns single value using gen.

Parameters:

  • gen (Proc)

    Rantly generator

  • limit (Integer) (defaults to: 100)

    specifies how many times ‘gen` can fail to produce a valid value.

Returns:

  • single value using gen

See Also:



31
32
33
# File 'lib/speculation/gen.rb', line 31

def self.generate(gen, limit = 100)
  Rantly.value(limit, &gen)
end

.sample(gen, n = 10, limit = 100) ⇒ Array

Generate ‘n` values using `gen`

Parameters:

  • gen (Proc)

    Rantly generator

  • limit (Integer) (defaults to: 100)

    specifies how many times ‘gen` can fail to produce a valid value.

Returns:

  • (Array)

    array of generated values using gne

See Also:



40
41
42
# File 'lib/speculation/gen.rb', line 40

def self.sample(gen, n = 10, limit = 100)
  Rantly.map(n, limit, &gen)
end

.such_that(pred, gen) ⇒ Proc

Adds ‘pred` as a Rantly `guard` to generator `gen`.

Parameters:

  • pred
  • gen (Proc)

Returns:

  • (Proc)

See Also:



21
22
23
24
25
# File 'lib/speculation/gen.rb', line 21

def self.such_that(pred, gen)
  ->(rantly) do
    gen.call(rantly).tap { |val| rantly.guard(pred.call(val)) }
  end
end