rubycheck 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []