Class: Pbt::Arbitrary::FilterArbitrary
- Defined in:
- lib/pbt/arbitrary/filter_arbitrary.rb
Overview
Generates values from another arbitrary, but only if they pass a predicate.
Instance Method Summary collapse
- #generate(rng) ⇒ Object
-
#initialize(arb, &refinement) ⇒ FilterArbitrary
constructor
A new instance of FilterArbitrary.
- #shrink(current) ⇒ Object
Methods inherited from Arbitrary
Constructor Details
permalink #initialize(arb, &refinement) ⇒ FilterArbitrary
Returns a new instance of FilterArbitrary.
9 10 11 12 |
# File 'lib/pbt/arbitrary/filter_arbitrary.rb', line 9 def initialize(arb, &refinement) @arb = arb @refinement = refinement end |
Instance Method Details
permalink #generate(rng) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/pbt/arbitrary/filter_arbitrary.rb', line 15 def generate(rng) loop do val = @arb.generate(rng) return val if @refinement.call(val) end end |
permalink #shrink(current) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/pbt/arbitrary/filter_arbitrary.rb', line 23 def shrink(current) Enumerator.new do |y| @arb.shrink(current).each do |v| if @refinement.call(v) y.yield v else next end end end end |