rubyqc 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -3
- data/CHANGES.md +6 -0
- data/Gemfile +2 -1
- data/README.md +9 -10
- data/lib/rubyqc.rb +13 -0
- data/lib/rubyqc/api.rb +2 -2
- data/lib/rubyqc/error.rb +11 -0
- data/lib/rubyqc/modifier.rb +52 -8
- data/lib/rubyqc/prelude.rb +6 -0
- data/lib/rubyqc/test.rb +9 -15
- data/lib/rubyqc/version.rb +1 -1
- data/rubyqc.gemspec +9 -6
- data/task/gemgem.rb +1 -5
- data/test/test_api.rb +25 -14
- data/test/test_modifier.rb +66 -0
- data/test/test_prelude.rb +34 -0
- data/test/test_readme.rb +6 -6
- metadata +8 -5
- data/test/test_kind_of.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cdbaeefbc325257c82c18d84d307384ccbb88a8
|
4
|
+
data.tar.gz: 5a745da2b4e4266025c3526fe25b71f8076407bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f4d722f681f47670d3819f29711a74db02f83fb5f96ce2b945588ffbedd38ec5f44742c4df44747eb8fb1ad6406906aaa1b5885ff200aba9dc15e9eaedc2fba
|
7
|
+
data.tar.gz: 95ad3bc090723bcc5511660adeb793323a206931266d3ea18f50ebbf7d47bb08d3155ef77621359ca6e24d347971ddf36b4c3929dbec68ed3b2a57dc15911a07
|
data/.travis.yml
CHANGED
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -80,20 +80,19 @@ it and raise our level of confidence about correctness.
|
|
80
80
|
|
81
81
|
### RubyQC::API.check
|
82
82
|
|
83
|
-
Here's a quick example using [
|
83
|
+
Here's a quick example using [Pork][]. We check if `Array#sort` has the
|
84
84
|
property that the front elements of the result array would be `<=` than
|
85
85
|
the rear elements of the result array for all arrays.
|
86
86
|
|
87
87
|
``` ruby
|
88
|
-
require '
|
88
|
+
require 'pork/auto'
|
89
89
|
require 'rubyqc'
|
90
90
|
|
91
|
-
Bacon.summary_on_exit
|
92
91
|
include RubyQC::API
|
93
92
|
|
94
93
|
describe Array do
|
95
94
|
describe 'sort' do
|
96
|
-
|
95
|
+
would 'Any front elements should be <= any rear elements' do
|
97
96
|
check([Fixnum]*100).times(10) do |array|
|
98
97
|
array.sort.each_cons(2).each{ |x, y| x.should <= y }
|
99
98
|
end
|
@@ -102,7 +101,7 @@ describe Array do
|
|
102
101
|
end
|
103
102
|
```
|
104
103
|
|
105
|
-
[
|
104
|
+
[Pork]: https://github.com/godfat/pork
|
106
105
|
|
107
106
|
Basically, `RubyQC::API.check` would merely take the arguments and
|
108
107
|
generate the instances via `rubyqc` method. Here the generated array
|
@@ -143,7 +142,7 @@ Here's an example for checking compare_by_identity:
|
|
143
142
|
``` ruby
|
144
143
|
describe Hash do
|
145
144
|
describe 'compare_by_identity' do
|
146
|
-
|
145
|
+
would 'Treat diff arr with the same contents diff when set' do
|
147
146
|
arr = [0]
|
148
147
|
forall(booleans, [arr, [0]], [arr, [1]]) do |flag, a, b|
|
149
148
|
h = {}
|
@@ -238,11 +237,11 @@ class User < Struct.new(:id, :name)
|
|
238
237
|
end
|
239
238
|
|
240
239
|
describe 'User.rubyqc' do
|
241
|
-
|
240
|
+
would 'Generate random users' do
|
242
241
|
check(User) do |user|
|
243
|
-
user .should.kind_of User
|
244
|
-
user.id .should.kind_of Fixnum
|
245
|
-
user.name.should.kind_of String
|
242
|
+
user .should.kind_of? User
|
243
|
+
user.id .should.kind_of? Fixnum
|
244
|
+
user.name.should.kind_of? String
|
246
245
|
end
|
247
246
|
end
|
248
247
|
end
|
data/lib/rubyqc.rb
CHANGED
@@ -1,3 +1,16 @@
|
|
1
1
|
|
2
2
|
require 'rubyqc/api'
|
3
3
|
require 'rubyqc/prelude'
|
4
|
+
|
5
|
+
module RubyQC
|
6
|
+
singleton_class.module_eval do
|
7
|
+
attr_writer :default_times, :default_parallel
|
8
|
+
def default_times
|
9
|
+
@default_times || 10
|
10
|
+
end
|
11
|
+
|
12
|
+
def default_parallel
|
13
|
+
@default_parallel || 1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/rubyqc/api.rb
CHANGED
data/lib/rubyqc/error.rb
ADDED
data/lib/rubyqc/modifier.rb
CHANGED
@@ -1,21 +1,65 @@
|
|
1
1
|
|
2
|
+
require 'rubyqc/error'
|
3
|
+
|
2
4
|
module RubyQC
|
3
|
-
class Modifier
|
5
|
+
class Modifier < Struct.new(:args, :errors, :cases, :threads)
|
4
6
|
def initialize args, &block
|
5
|
-
|
6
|
-
@times = 10
|
7
|
+
super(args, [], RubyQC.default_times, RubyQC.default_parallel)
|
7
8
|
run(&block)
|
8
9
|
end
|
9
10
|
|
10
11
|
def times t, &block
|
11
|
-
|
12
|
+
raise ArgumentError.new(
|
13
|
+
"Must run at least once, but got: #{t}") if t <= 0
|
14
|
+
self.cases = t
|
15
|
+
run(&block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def parallel t, &block
|
19
|
+
raise ArgumentError.new(
|
20
|
+
"Must have at least 1 thread, but got: #{t}") if t <= 0
|
21
|
+
self.threads = t
|
12
22
|
run(&block)
|
13
23
|
end
|
14
24
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
private
|
26
|
+
def mutex
|
27
|
+
@mutex ||= Mutex.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def run &block
|
31
|
+
if !block_given?
|
32
|
+
# waiting for block to be given
|
33
|
+
elsif threads == 1
|
34
|
+
run_thread(cases, &block)
|
35
|
+
else
|
36
|
+
divided = cases / threads
|
37
|
+
mod = cases % threads
|
38
|
+
|
39
|
+
ts = (threads - 1).times.map{
|
40
|
+
Thread.new{ run_thread(divided, &block) }
|
41
|
+
} + [Thread.new{ run_thread(divided + mod, &block) }]
|
42
|
+
ts.each(&:join)
|
43
|
+
|
44
|
+
raise Error.new(cases, errors) unless errors.empty?
|
45
|
+
end
|
46
|
+
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
def run_thread t
|
51
|
+
t.times do
|
52
|
+
if Thread.current == Thread.main
|
53
|
+
# we raise errors immediately if we're not running in parallels
|
54
|
+
yield(*args.map(&:rubyqc))
|
55
|
+
else
|
56
|
+
begin
|
57
|
+
yield(*args.map(&:rubyqc))
|
58
|
+
rescue Exception => e
|
59
|
+
mutex.synchronize{ errors << e }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
19
63
|
end
|
20
64
|
end
|
21
65
|
end
|
data/lib/rubyqc/prelude.rb
CHANGED
data/lib/rubyqc/test.rb
CHANGED
@@ -1,21 +1,15 @@
|
|
1
1
|
|
2
|
-
require '
|
2
|
+
require 'pork/auto'
|
3
|
+
require 'muack'
|
3
4
|
require 'rubyqc'
|
4
5
|
|
5
|
-
|
6
|
-
|
6
|
+
# enough of NameError: method `old_init' not defined in SortedSet
|
7
|
+
require 'set'
|
8
|
+
Set.new
|
7
9
|
|
8
|
-
|
9
|
-
def eq? rhs
|
10
|
-
self == rhs
|
11
|
-
end
|
12
|
-
end
|
10
|
+
Pork::Executor.__send__(:include, RubyQC::API, Muack::API)
|
13
11
|
|
14
|
-
|
15
|
-
def self.rubyqc
|
16
|
-
new(Class.rubyqc.rubyqc)
|
17
|
-
end
|
18
|
-
end
|
12
|
+
RubyQC.default_parallel = 4
|
19
13
|
|
20
14
|
def verify_generated generated, spec
|
21
15
|
if spec.empty?
|
@@ -60,8 +54,8 @@ end
|
|
60
54
|
|
61
55
|
def verify_other generated, spec
|
62
56
|
if spec.kind_of?(Class)
|
63
|
-
generated.should.kind_of spec
|
57
|
+
generated.should.kind_of? spec
|
64
58
|
else
|
65
|
-
generated.should.eq
|
59
|
+
generated.should.eq spec
|
66
60
|
end
|
67
61
|
end
|
data/lib/rubyqc/version.rb
CHANGED
data/rubyqc.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rubyqc 0.0.
|
2
|
+
# stub: rubyqc 0.0.3 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rubyqc"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.3"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["Lin Jen-Shin (godfat)"]
|
11
|
-
s.date = "2014-
|
11
|
+
s.date = "2014-08-01"
|
12
12
|
s.description = "RubyQC -- A conceptual [QuickCheck][] library for Ruby.\n\nIt's not a faithful port since Hsakell is totally different than Ruby.\nHowever it's still benefit to use some of the ideas behind QuickCheck,\nand we could also use RubyQC for generating arbitrary objects.\n\n[QuickCheck]: http://en.wikipedia.org/wiki/QuickCheck"
|
13
13
|
s.email = ["godfat (XD) godfat.org"]
|
14
14
|
s.files = [
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
"lib/rubyqc.rb",
|
24
24
|
"lib/rubyqc/all.rb",
|
25
25
|
"lib/rubyqc/api.rb",
|
26
|
+
"lib/rubyqc/error.rb",
|
26
27
|
"lib/rubyqc/modifier.rb",
|
27
28
|
"lib/rubyqc/prelude.rb",
|
28
29
|
"lib/rubyqc/stdlib.rb",
|
@@ -39,14 +40,16 @@ Gem::Specification.new do |s|
|
|
39
40
|
"task/README.md",
|
40
41
|
"task/gemgem.rb",
|
41
42
|
"test/test_api.rb",
|
42
|
-
"test/
|
43
|
+
"test/test_modifier.rb",
|
44
|
+
"test/test_prelude.rb",
|
43
45
|
"test/test_readme.rb"]
|
44
46
|
s.homepage = "https://github.com/godfat/rubyqc"
|
45
47
|
s.licenses = ["Apache License 2.0"]
|
46
|
-
s.rubygems_version = "2.
|
48
|
+
s.rubygems_version = "2.4.1"
|
47
49
|
s.summary = "RubyQC -- A conceptual [QuickCheck][] library for Ruby."
|
48
50
|
s.test_files = [
|
49
51
|
"test/test_api.rb",
|
50
|
-
"test/
|
52
|
+
"test/test_modifier.rb",
|
53
|
+
"test/test_prelude.rb",
|
51
54
|
"test/test_readme.rb"]
|
52
55
|
end
|
data/task/gemgem.rb
CHANGED
@@ -34,7 +34,7 @@ module Gemgem
|
|
34
34
|
s.executables = bin_files
|
35
35
|
end
|
36
36
|
spec_create.call(spec)
|
37
|
-
spec.homepage
|
37
|
+
spec.homepage ||= "https://github.com/godfat/#{spec.name}"
|
38
38
|
self.spec = spec
|
39
39
|
end
|
40
40
|
|
@@ -227,10 +227,6 @@ end # of gem namespace
|
|
227
227
|
desc 'Run tests'
|
228
228
|
task :test do
|
229
229
|
next if Gemgem.test_files.empty?
|
230
|
-
|
231
|
-
require 'bacon'
|
232
|
-
Bacon.extend(Bacon::TestUnitOutput)
|
233
|
-
Bacon.summary_on_exit
|
234
230
|
Gemgem.test_files.each{ |file| require "#{Gemgem.dir}/#{file[0..-4]}" }
|
235
231
|
end
|
236
232
|
|
data/test/test_api.rb
CHANGED
@@ -3,12 +3,12 @@ require 'rubyqc/test'
|
|
3
3
|
require 'rubyqc/all'
|
4
4
|
|
5
5
|
describe RubyQC::API do
|
6
|
-
|
6
|
+
would 'oneof' do
|
7
7
|
check([Class]*5) do |klasses|
|
8
|
-
klasses -= [Should] # bacon's Should won't work...
|
9
|
-
check(oneof(
|
8
|
+
# klasses -= [Pork::Should] # bacon's Should won't work...
|
9
|
+
check(oneof(klasses)) do |obj|
|
10
10
|
begin
|
11
|
-
klasses.find{ |klass| obj.kind_of?(klass) }.should.not.nil
|
11
|
+
klasses.find{ |klass| obj.kind_of?(klass) }.should.not.nil?
|
12
12
|
rescue => e
|
13
13
|
warn "Cannot find #{obj} in #{klasses}: #{e}"
|
14
14
|
raise
|
@@ -17,38 +17,49 @@ describe RubyQC::API do
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
would 'someof' do
|
21
|
+
check(2..5, 6..10) do |n, m|
|
22
|
+
check([Fixnum]*m) do |numbers|
|
23
|
+
check(someof(n, numbers)) do |nums|
|
24
|
+
nums.size.should.eq n
|
25
|
+
nums.should.all?{ |nn| numbers.should.include? nn }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
20
31
|
describe 'forall' do
|
21
|
-
|
32
|
+
would 'hard code' do
|
22
33
|
times = 0
|
23
34
|
forall([1,2], [3,4], [5,6]) do |a, b, c|
|
24
35
|
times += 1
|
25
|
-
[1,2].should.include a
|
26
|
-
[3,4].should.include b
|
27
|
-
[5,6].should.include c
|
36
|
+
[1,2].should.include? a
|
37
|
+
[3,4].should.include? b
|
38
|
+
[5,6].should.include? c
|
28
39
|
end
|
29
40
|
times.should.eq 2**3
|
30
41
|
end
|
31
42
|
|
32
|
-
|
43
|
+
would 'check' do
|
33
44
|
check([Fixnum, Fixnum], [Fixnum, Fixnum], [Fixnum, Fixnum]) do |a, b, c|
|
34
45
|
times = 0
|
35
46
|
forall(a, b, c) do |aa, bb, cc|
|
36
47
|
times += 1
|
37
|
-
a.should.include aa
|
38
|
-
b.should.include bb
|
39
|
-
c.should.include cc
|
48
|
+
a.should.include? aa
|
49
|
+
b.should.include? bb
|
50
|
+
c.should.include? cc
|
40
51
|
end
|
41
52
|
times.should.eq 2**3
|
42
53
|
end
|
43
54
|
end
|
44
55
|
|
45
|
-
|
56
|
+
would 'check check' do
|
46
57
|
check(1..5, 1..5) do |n, m|
|
47
58
|
check([[Fixnum]*n.abs]*m.abs) do |a|
|
48
59
|
times = 0
|
49
60
|
forall(*a) do |*aa|
|
50
61
|
times += 1
|
51
|
-
a.zip(aa).each{ |(b, bb)| b.should.include bb }
|
62
|
+
a.zip(aa).each{ |(b, bb)| b.should.include? bb }
|
52
63
|
end
|
53
64
|
times.should.eq n**m
|
54
65
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
|
2
|
+
require 'rubyqc/test'
|
3
|
+
|
4
|
+
describe RubyQC::Modifier do
|
5
|
+
would 'times' do
|
6
|
+
check(2..10) do |times|
|
7
|
+
t = 0
|
8
|
+
m = Mutex.new
|
9
|
+
check.times(times){ m.synchronize{ t += 1 } }
|
10
|
+
t.should.eq times
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'parallel' do
|
15
|
+
would 'have correct times' do
|
16
|
+
check(5..11, 2..4).parallel(1) do |times, parallel|
|
17
|
+
mutex = Mutex.new
|
18
|
+
array = []
|
19
|
+
mock(Thread).new.times(parallel)
|
20
|
+
|
21
|
+
check.times(times).parallel(parallel) do
|
22
|
+
mutex.synchronize{ array << true }
|
23
|
+
end
|
24
|
+
|
25
|
+
Muack.verify.should.eq true
|
26
|
+
array.size.should.eq times
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
would 'raise error immediately if not running in parallels' do
|
31
|
+
begin
|
32
|
+
t = -1
|
33
|
+
check.times(10).parallel(1) do
|
34
|
+
t += 1
|
35
|
+
raise 'boom'
|
36
|
+
end
|
37
|
+
rescue => e
|
38
|
+
t .should.eq 0
|
39
|
+
e.class.should.eq RuntimeError
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
would 'capture errors and report if we are running in parallels' do
|
44
|
+
check(4..8) do |parallel|
|
45
|
+
check(1..parallel) do |errors|
|
46
|
+
t = -1
|
47
|
+
m = Mutex.new
|
48
|
+
begin
|
49
|
+
check.times(10).parallel(parallel) do
|
50
|
+
m.synchronize do
|
51
|
+
t += 1
|
52
|
+
raise t.to_s if t < errors
|
53
|
+
end
|
54
|
+
end
|
55
|
+
rescue RubyQC::Error => e
|
56
|
+
e.times .should.eq RubyQC.default_times
|
57
|
+
e.errors.size.should.eq errors
|
58
|
+
e.errors.map(&:message).sort.each.with_index do |msg, index|
|
59
|
+
msg.should.eq index.to_s
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
require 'rubyqc/test'
|
3
|
+
|
4
|
+
describe 'prelude' do
|
5
|
+
would 'lambda' do
|
6
|
+
i = 0
|
7
|
+
k = 0
|
8
|
+
check(lambda{ i += 1 }).parallel(1) do |j|
|
9
|
+
k += 1
|
10
|
+
i.should.eq j
|
11
|
+
i.should.eq k
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'kind_of' do
|
16
|
+
[Fixnum, Bignum, Array, Integer, Class].each do |klass|
|
17
|
+
would klass.name do
|
18
|
+
check(klass){ |obj| obj.should.kind_of?(klass) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
[[], [Fixnum], [Fixnum, Array],
|
23
|
+
{}, {:a => 0}, {'b' => 1}, {2 => Integer},
|
24
|
+
{nil => [Fixnum]}, {true => {false => [Bignum]}}
|
25
|
+
].each do |spec|
|
26
|
+
|
27
|
+
would spec.inspect do
|
28
|
+
check(spec) do |generated|
|
29
|
+
verify_generated(generated, spec)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/test/test_readme.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rubyqc/test'
|
|
3
3
|
|
4
4
|
describe Array do
|
5
5
|
describe 'sort' do
|
6
|
-
|
6
|
+
would 'Any front elements should be <= any rear elements' do
|
7
7
|
check([Fixnum]*100).times(10) do |array|
|
8
8
|
array.sort.each_cons(2).each{ |x, y| x.should <= y }
|
9
9
|
end
|
@@ -13,7 +13,7 @@ end
|
|
13
13
|
|
14
14
|
describe Hash do
|
15
15
|
describe 'compare_by_identity' do
|
16
|
-
|
16
|
+
would 'Treat diff arr with the same contents diff when set' do
|
17
17
|
arr = [0]
|
18
18
|
forall(booleans, [arr, [0]], [arr, [1]]) do |flag, a, b|
|
19
19
|
h = {}
|
@@ -37,11 +37,11 @@ class User < Struct.new(:id, :name)
|
|
37
37
|
end
|
38
38
|
|
39
39
|
describe 'User.rubyqc' do
|
40
|
-
|
40
|
+
would 'Generate random users' do
|
41
41
|
check(User) do |user|
|
42
|
-
user .should.kind_of User
|
43
|
-
user.id .should.kind_of Fixnum
|
44
|
-
user.name.should.kind_of String
|
42
|
+
user .should.kind_of? User
|
43
|
+
user.id .should.kind_of? Fixnum
|
44
|
+
user.name.should.kind_of? String
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyqc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
14
|
RubyQC -- A conceptual [QuickCheck][] library for Ruby.
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- lib/rubyqc.rb
|
36
36
|
- lib/rubyqc/all.rb
|
37
37
|
- lib/rubyqc/api.rb
|
38
|
+
- lib/rubyqc/error.rb
|
38
39
|
- lib/rubyqc/modifier.rb
|
39
40
|
- lib/rubyqc/prelude.rb
|
40
41
|
- lib/rubyqc/stdlib.rb
|
@@ -51,7 +52,8 @@ files:
|
|
51
52
|
- task/README.md
|
52
53
|
- task/gemgem.rb
|
53
54
|
- test/test_api.rb
|
54
|
-
- test/
|
55
|
+
- test/test_modifier.rb
|
56
|
+
- test/test_prelude.rb
|
55
57
|
- test/test_readme.rb
|
56
58
|
homepage: https://github.com/godfat/rubyqc
|
57
59
|
licenses:
|
@@ -73,11 +75,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
75
|
version: '0'
|
74
76
|
requirements: []
|
75
77
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
78
|
+
rubygems_version: 2.4.1
|
77
79
|
signing_key:
|
78
80
|
specification_version: 4
|
79
81
|
summary: RubyQC -- A conceptual [QuickCheck][] library for Ruby.
|
80
82
|
test_files:
|
81
83
|
- test/test_api.rb
|
82
|
-
- test/
|
84
|
+
- test/test_modifier.rb
|
85
|
+
- test/test_prelude.rb
|
83
86
|
- test/test_readme.rb
|
data/test/test_kind_of.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rubyqc/test'
|
3
|
-
|
4
|
-
describe 'kind_of' do
|
5
|
-
[Fixnum, Bignum, Array, Integer, Class].each do |klass|
|
6
|
-
should klass.name do
|
7
|
-
check(klass){ |obj| obj.should.kind_of(klass) }
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[[], [Fixnum], [Fixnum, Array],
|
12
|
-
{}, {:a => 0}, {'b' => 1}, {2 => Integer},
|
13
|
-
{nil => [Fixnum]}, {true => {false => [Bignum]}}
|
14
|
-
].each do |spec|
|
15
|
-
|
16
|
-
should spec.inspect do
|
17
|
-
check(spec) do |generated|
|
18
|
-
verify_generated(generated, spec)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|