Module: Properb::Generators
- Extended by:
- Generators
- Included in:
- Generators
- Defined in:
- lib/properb/generators.rb,
lib/properb/generators/array_generator.rb,
lib/properb/generators/sized_generator.rb,
lib/properb/generators/tuple_generator.rb,
lib/properb/generators/choice_generator.rb,
lib/properb/generators/mapped_generator.rb,
lib/properb/generators/integer_generator.rb,
lib/properb/generators/constant_generator.rb,
lib/properb/generators/deferred_generator.rb,
lib/properb/generators/selected_generator.rb,
lib/properb/generators/recursive_generator.rb,
lib/properb/generators/frequencies_generator.rb
Defined Under Namespace
Classes: ArrayGenerator, ChoiceGenerator, ConstantGenerator, DeferredGenerator, FrequenciesGenerator, IntegerGenerator, MappedGenerator, RecursiveGenerator, SelectedGenerator, SizedGenerator, TupleGenerator
Instance Method Summary
collapse
Instance Method Details
#array(generator, length: 0) ⇒ Object
58
59
60
|
# File 'lib/properb/generators.rb', line 58
def array(generator, length: 0..)
ArrayGenerator.new(gen(generator), length: length)
end
|
#boolean ⇒ Object
46
47
48
|
# File 'lib/properb/generators.rb', line 46
def boolean
const(false).or(const(true))
end
|
#const(value) ⇒ Object
42
43
44
|
# File 'lib/properb/generators.rb', line 42
def const(value)
ConstantGenerator.new(value)
end
|
#defer(&block) ⇒ Object
17
18
19
|
# File 'lib/properb/generators.rb', line 17
def defer(&block)
DeferredGenerator.new(&block)
end
|
#frequencies(**generators_and_weights) ⇒ Object
54
55
56
|
# File 'lib/properb/generators.rb', line 54
def frequencies(**generators_and_weights)
FrequenciesGenerator.new(generators_and_weights.transform_values { gen(_1) })
end
|
#gen(object) ⇒ Object
21
22
23
24
25
26
27
|
# File 'lib/properb/generators.rb', line 21
def gen(object)
if object.respond_to?(:to_properb_generator)
object.to_properb_generator
else
const(object)
end
end
|
#hashmap(key_generator, value_generator = nil) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/properb/generators.rb', line 66
def hashmap(key_generator, value_generator = nil)
if value_generator.nil?
unless key_generator.is_a?(Hash)
raise "Single argument to `hashmap' must be a hash with generator values, not #{key_generator || "nil"}"
end
tuple(*key_generator.values.map { gen(_1) })
.map { key_generator.keys.zip(_1).to_h }
else
array(tuple(key_generator, value_generator)).map(&:to_h)
end
end
|
#int(range = 0..(2 << 32)) ⇒ Object
33
34
35
|
# File 'lib/properb/generators.rb', line 33
def int(range = 0..(2 << 32))
IntegerGenerator.new(range)
end
|
#maybe(generator) ⇒ Object
50
51
52
|
# File 'lib/properb/generators.rb', line 50
def maybe(generator)
ChoiceGenerator.new([const(nil), gen(generator)])
end
|
#one_of(*options) ⇒ Object
29
30
31
|
# File 'lib/properb/generators.rb', line 29
def one_of(*options)
ChoiceGenerator.new(options.map { gen(_1) })
end
|
#recursive(&block) ⇒ Object
79
80
81
|
# File 'lib/properb/generators.rb', line 79
def recursive(&block)
RecursiveGenerator.new(&block)
end
|
#string(char_generator = int(32..126).map { _1.chr }, length: 0) ⇒ Object
By default, generate printable ASCII characters
38
39
40
|
# File 'lib/properb/generators.rb', line 38
def string(char_generator = int(32..126).map { _1.chr }, length: 0..)
array(char_generator, length: length).map { _1.join }
end
|
#tuple(*generators) ⇒ Object
62
63
64
|
# File 'lib/properb/generators.rb', line 62
def tuple(*generators)
TupleGenerator.new(generators.map { gen(_1) })
end
|