rubycheck 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/example.rb +22 -20
  3. data/lib/rubycheck.rb +71 -50
  4. metadata +218 -10
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b4f40a17b352914e3fe3a4b207ddf58918169851
4
+ data.tar.gz: cc0c396f970798c6d49bddf94bc230b8f23e17d6
5
+ SHA512:
6
+ metadata.gz: 40466f085d6c7be387de6e0917da7d2a91db909915ba5117456504ffaf40b93c81f9f2b4ff13e671647e975053c471ea48711e19a7d545fa2e265aa4d7fdc1f7
7
+ data.tar.gz: 3bab24d7c007df4fe463499b06e204a9599122efc3625888cef56ba4b60f8862661ad9f56869e4d62f2c858963fc67d02d91c1fcacd72d486a51aa2dbc7dfa66
data/example.rb CHANGED
@@ -1,38 +1,40 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "rubycheck"
3
+ require 'rubycheck'
4
4
 
5
+ # Define gen_even
5
6
  module RubyCheck
6
- def self.gen_even
7
- i = gen_int
8
-
9
- if i % 2 == 0
10
- i
11
- else
12
- i + 1
13
- end
14
- end
7
+ def self.gen_even
8
+ i = gen_int
9
+
10
+ if i.even?
11
+ i
12
+ else
13
+ i + 1
14
+ end
15
+ end
15
16
  end
16
17
 
17
- propEven = Proc.new { |n| n.even? }
18
+ prop_even = -> n { n.even? }
18
19
 
19
20
  # Should fail.
20
- RubyCheck::for_all(propEven, [:gen_int])
21
+ RubyCheck.for_all(prop_even, [:gen_int])
21
22
 
22
23
  # Should pass.
23
- RubyCheck::for_all(propEven, [:gen_even])
24
+ RubyCheck.for_all(prop_even, [:gen_even])
24
25
 
26
+ # Define gen_palindrome
25
27
  module RubyCheck
26
- def self.gen_palindrome
27
- s = gen_str
28
- s + s.reverse
29
- end
28
+ def self.gen_palindrome
29
+ s = gen_str
30
+ s + s.reverse
31
+ end
30
32
  end
31
33
 
32
- propPalindrome = Proc.new { |s| s == s.reverse }
34
+ prop_palindrome = -> s { s == s.reverse }
33
35
 
34
36
  # Should fail.
35
- RubyCheck::for_all(propPalindrome, [:gen_str])
37
+ RubyCheck.for_all(prop_palindrome, [:gen_str])
36
38
 
37
39
  # Should pass.
38
- RubyCheck::for_all(propPalindrome, [:gen_palindrome])
40
+ RubyCheck.for_all(prop_palindrome, [:gen_palindrome])
data/lib/rubycheck.rb CHANGED
@@ -1,51 +1,72 @@
1
+ require 'contracts'
2
+ include Contracts
3
+
4
+ #
5
+ # RubyCheck
6
+ #
1
7
  module RubyCheck
2
- # Returns a random integer from 0 to 10^10 - 1.
3
- def self.gen_int
4
- Random::rand(10e10).to_i
5
- end
6
-
7
- # Returns a random byte.
8
- def self.gen_byte
9
- gen_int % 256
10
- end
11
-
12
- # Returns a random ASCII character.
13
- def self.gen_char
14
- (gen_int % 128).chr
15
- end
16
-
17
- # Returning a random array given a value generator.
18
- def self.gen_array(gen_sym)
19
- len = gen_int % 100
20
-
21
- 0.upto(len).collect { |i| self.send(gen_sym) }
22
- end
23
-
24
- # Returns a random string.
25
- def self.gen_str
26
- gen_array(:gen_char).join("")
27
- end
28
-
29
- # Evaluates property over 100 random unit tests,
30
- # with argument values specified in generators.
31
- def self.for_all(property, gen_syms)
32
- trials = 100
33
-
34
- passed_all = true
35
-
36
- 0.upto(trials - 1) { |i|
37
- test_case = gen_syms.collect { |gen_sym| self.send(gen_sym) }
38
-
39
- propertyHolds = property.call(*test_case)
40
-
41
- if not propertyHolds
42
- puts "*** Failed!"
43
- puts test_case
44
- return false
45
- end
46
- }
47
-
48
- puts "+++ OK, passed #{trials} tests."
49
- true
50
- end
51
- end
8
+ VERSION = '0.0.1'
9
+
10
+ # Returns a random integer from 0 to 10^10 - 1.
11
+ Contract nil => Num
12
+ def self.gen_int
13
+ Random.rand(10e10).to_i
14
+ end
15
+
16
+ # Returns a random byte.
17
+
18
+ Contract nil => Num
19
+ def self.gen_byte
20
+ gen_int % 256
21
+ end
22
+
23
+ # Returns a random ASCII character.
24
+
25
+ Contract nil => Num
26
+ def self.gen_char
27
+ (gen_int % 128).chr
28
+ end
29
+
30
+ # Returning a random array given a value generator.
31
+
32
+ Contract Proc => Array
33
+ def self.gen_array(gen_sym)
34
+ len = gen_int % 100
35
+
36
+ 0.upto(len).map { |i| send(gen_sym) }
37
+ end
38
+
39
+ # Returns a random string.
40
+ def self.gen_str
41
+ gen_array(:gen_char).join('')
42
+ end
43
+
44
+ TRIALS = 10000
45
+
46
+ # Used by for_all to detect property failures.
47
+ class PropertyFailure < RuntimeError
48
+ attr_accessor :test_case
49
+
50
+ Contract Array => Array
51
+ def initialize(test)
52
+ @test_case = test
53
+ end
54
+ end
55
+
56
+ # Evaluates property over 100 random unit tests,
57
+ # with argument values specified in generators.
58
+
59
+ Contract Proc, ArrayOf[Proc] => Bool
60
+ def self.for_all(property, gen_syms)
61
+ 0.upto(TRIALS - 1).each do |i|
62
+ test_case = gen_syms.map { |gen_sym| send(gen_sym) }
63
+ fail PropertyFailure.new(test_case), 'test case error' unless property.call(*test_case)
64
+ end
65
+ rescue PropertyFailure => e
66
+ puts "*** Failed!\n#{e.test_case}"
67
+ false
68
+ else
69
+ puts "+++ OK, passed #{TRIALS} tests."
70
+ true
71
+ end
72
+ end
metadata CHANGED
@@ -1,16 +1,225 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubycheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Andrew Pennebaker
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-13 00:00:00.000000000 Z
13
- dependencies: []
11
+ date: 2014-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: contracts
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: reek
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: flay
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: flog
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: roodi
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: churn
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: cane
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: excellent
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: tailor
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: guard
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: guard-shell
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: cucumber
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
14
223
  description: See example.rb for API usage.
15
224
  email: andrew.pennebaker@gmail.com
16
225
  executables: []
@@ -21,26 +230,25 @@ files:
21
230
  - example.rb
22
231
  homepage: http://www.yellosoft.us/quickcheck
23
232
  licenses: []
233
+ metadata: {}
24
234
  post_install_message:
25
235
  rdoc_options: []
26
236
  require_paths:
27
237
  - lib
28
238
  required_ruby_version: !ruby/object:Gem::Requirement
29
- none: false
30
239
  requirements:
31
- - - ! '>='
240
+ - - '>='
32
241
  - !ruby/object:Gem::Version
33
242
  version: '0'
34
243
  required_rubygems_version: !ruby/object:Gem::Requirement
35
- none: false
36
244
  requirements:
37
- - - ! '>='
245
+ - - '>='
38
246
  - !ruby/object:Gem::Version
39
247
  version: '0'
40
248
  requirements: []
41
249
  rubyforge_project:
42
- rubygems_version: 1.8.24
250
+ rubygems_version: 2.0.6
43
251
  signing_key:
44
- specification_version: 3
252
+ specification_version: 4
45
253
  summary: a Ruby port of the QuickCheck unit test framework
46
254
  test_files: []