Class: Properb::Generators::TupleGenerator
- Inherits:
-
Properb::Generator
- Object
- Properb::Generator
- Properb::Generators::TupleGenerator
- Defined in:
- lib/properb/generators/tuple_generator.rb
Instance Method Summary collapse
- #generate_value(random, size) ⇒ Object
-
#initialize(generators) ⇒ TupleGenerator
constructor
A new instance of TupleGenerator.
- #shrink(values) ⇒ Object
Methods inherited from Properb::Generator
#map, #or, #reject, #select, #sized, #to_properb_generator
Constructor Details
#initialize(generators) ⇒ TupleGenerator
Returns a new instance of TupleGenerator.
4 5 6 |
# File 'lib/properb/generators/tuple_generator.rb', line 4 def initialize(generators) @generators = generators end |
Instance Method Details
#generate_value(random, size) ⇒ Object
8 9 10 11 |
# File 'lib/properb/generators/tuple_generator.rb', line 8 def generate_value(random, size) values = @generators.map { _1.generate_value(random, size) } ShrinkTree.new(values.map(&:value), shrink(values)) end |
#shrink(values) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/properb/generators/tuple_generator.rb', line 13 def shrink(values) Enumerator.new do |out| # Try shrinking the individual items in the vector (0...values.length).each do |i| values[i].children.each do |value| new_values = values[0...i] + [value] + values[i + 1...] out << ShrinkTree.new(new_values.map(&:value), shrink(new_values)) end end # Try shrinking pairs of items in the vector (0...values.length).each do |i| values[i].children.each do |value| new_values = values[0...i] + [value] + values[i + 1...] (0...values.length).each do |j| new_values[j].children.each do |value| newer_values = new_values[0...j] + [value] + new_values[j + 1...] out << ShrinkTree.new( newer_values.map(&:value), shrink(newer_values) ) end end end end end end |