Module: RubyCheck
- Defined in:
- lib/version.rb,
lib/rubycheck.rb
Overview
RubyCheck - a Ruby port of the QuickCheck unit test framework
See www.yellosoft.us/quickcheck for an introduction to QuickCheck property testing.
RubyCheck defines test case generators for several basic Ruby types, and encourages monkeypatching for defining generators for custom types.
Defined Under Namespace
Classes: PropertyFailure
Constant Summary collapse
- VERSION =
VERSION is defined once, available to gemspec during packaging, and available programmatically to Ruby code.
'0.0.5'
- TRIALS =
Number of test cases to generate per for_all run
10000
Class Method Summary collapse
-
.for_all(property, gen_syms) ⇒ Object
Evaluates property, TRIALS times, over random inputs generated by gen_syms.
-
.gen_array(gen_sym) ⇒ Object
Generate a random array, populated with values generated with gen_sym.
-
.gen_byte ⇒ Object
Generate a random byte in [0, 255].
-
.gen_char ⇒ Object
Generate a random ASCII character.
-
.gen_int ⇒ Object
Generate a random integer in [0, 10^10 - 1].
-
.gen_str ⇒ Object
Generate a random ASCII string.
Class Method Details
.for_all(property, gen_syms) ⇒ Object
Evaluates property, TRIALS times, over random inputs generated by gen_syms.
Returns true, or the first failing test case.
Example:
RubyCheck::for_all( ->(i) { i.even? }, [:gen_int])
=> [9]
RubyCheck::for_all( ->(i) { i.even? || i.odd? }, [:gen_int])
=> true
121 122 123 124 125 126 127 128 129 130 |
# File 'lib/rubycheck.rb', line 121 def self.for_all(property, gen_syms) 0.upto(TRIALS - 1).each do |i| test_case = gen_syms.map { |gen_sym| send(gen_sym) } fail PropertyFailure.new(test_case), 'test case error' unless property.call(*test_case) end rescue PropertyFailure => e e.test_case else true end |
.gen_array(gen_sym) ⇒ Object
Generate a random array, populated with values generated with gen_sym.
Example:
RubyCheck::gen_array(:gen_int)
=> [1, 3, 3, 7]
63 64 65 66 67 |
# File 'lib/rubycheck.rb', line 63 def self.gen_array(gen_sym) len = gen_int % 100 0.upto(len).map { |i| send(gen_sym) } end |
.gen_byte ⇒ Object
Generate a random byte in [0, 255].
Example:
RubyCheck::gen_byte
=> 96
37 38 39 |
# File 'lib/rubycheck.rb', line 37 def self.gen_byte gen_int % 256 end |
.gen_char ⇒ Object
Generate a random ASCII character.
Example:
RubyCheck::gen_char
=> "Q"
50 51 52 |
# File 'lib/rubycheck.rb', line 50 def self.gen_char (gen_int % 128).chr end |
.gen_int ⇒ Object
Generate a random integer in [0, 10^10 - 1].
Example:
RubyCheck::gen_int
=> 4
24 25 26 |
# File 'lib/rubycheck.rb', line 24 def self.gen_int Random.rand(10e10).to_i end |
.gen_str ⇒ Object
Generate a random ASCII string.
Example:
RubyCheck::gen_str
=> "qwerty123!@#"
78 79 80 |
# File 'lib/rubycheck.rb', line 78 def self.gen_str gen_array(:gen_char).join('') end |