prop_check 0.18.0 → 0.18.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.
- checksums.yaml +4 -4
- data/.github/workflows/run_tests.yaml +8 -3
- data/.tool-versions +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -1
- data/Justfile +16 -0
- data/README.md +26 -5
- data/lib/prop_check/generator.rb +11 -2
- data/lib/prop_check/generators.rb +3 -3
- data/lib/prop_check/helper.rb +3 -0
- data/lib/prop_check/property.rb +1 -1
- data/lib/prop_check/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c85d7bb545c99b3953f68f42a7e37e14b96ddde115b42670689aa7094dfef42
|
4
|
+
data.tar.gz: efe151cb45c09d94d7e987d490096a321488832bc8d8041ab513ee64b71335d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5d180fe6141074ef202fba5c251a96492c2e5ad9706491ec615df1e5010c12623e3c5b53b8adaa5e75435df9ec48a464543672e33c81af4b18528da6f184860
|
7
|
+
data.tar.gz: a4b2e62dee58f53bc291202cbae157119eba7858f24b70ea5eb8790e578eceb0f2b140c1e5707c68037fcc09c2dddd17f57970de45fb3271503322a4de25fe05
|
@@ -15,7 +15,8 @@ jobs:
|
|
15
15
|
runs-on: ubuntu-latest
|
16
16
|
strategy:
|
17
17
|
matrix:
|
18
|
-
|
18
|
+
# NOTE: Ruby 3.2 is not in here, as `doctest-core` first needs to be updated to support it
|
19
|
+
ruby-version: ['2.6', '2.7', '3.0', '3.1', '3.2']
|
19
20
|
|
20
21
|
steps:
|
21
22
|
- uses: actions/checkout@v3
|
@@ -27,5 +28,9 @@ jobs:
|
|
27
28
|
with:
|
28
29
|
ruby-version: ${{ matrix.ruby-version }}
|
29
30
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
30
|
-
- name: Run tests
|
31
|
-
|
31
|
+
- name: Run tests & push test coverage to Codeclimate
|
32
|
+
uses: paambaati/codeclimate-action@v3.2.0
|
33
|
+
env:
|
34
|
+
CC_TEST_REPORTER_ID: '9d18f5b43e49eecd6c3da64d85ea9c765d3606c129289d7c8cadf6d448713311'
|
35
|
+
with:
|
36
|
+
coverageCommand: bundle exec rake
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 2.7.
|
1
|
+
ruby 2.7.6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
- 0.18.2
|
2
|
+
- Documentation updates:
|
3
|
+
- PR #18: Adding an example of using prop_check with the `test-unit` testing framework to the README. Thank you, @niku!
|
4
|
+
- PR #17, #18, #21: fixing typos in various parts of the documentation. Thank you, @meganemura, @niku and @harlantwood!
|
5
|
+
- 0.18.1
|
6
|
+
- Fixes:
|
7
|
+
- Compatibility with Ruby 3.2:
|
8
|
+
- Use `Random` instead of no-longer-available `Random::DEFAULT` on Ruby 3.x.
|
9
|
+
- Ensure when a hash is passed (such as in `PropCheck.forall(hash_of(integer, string)) { |hash| ... }` that when an empty hash is generated, `hash` is still `{}` and not `nil`. ([Ruby 3.x treats `fun(**{})` differently than Ruby 2.x](https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#other-minor-changes-empty-hash))
|
1
10
|
- 0.18.0
|
2
11
|
- Features:
|
3
12
|
- Allows calling `PropCheck::Property#check` without a block, which will just return `self`. This is useful for writing wrapper functions that use `before/after/around/with_config` etc hooks which might themselves optionally want a block so they can be chained. (See the `forall_with_db` snippet in the README for an example)
|
data/Gemfile
CHANGED
data/Justfile
ADDED
data/README.md
CHANGED
@@ -156,6 +156,23 @@ class NaiveAverageTest < MiniTest::Unit::TestCase
|
|
156
156
|
end
|
157
157
|
```
|
158
158
|
|
159
|
+
The test case, using test-unit:
|
160
|
+
``` ruby
|
161
|
+
require "test-unit"
|
162
|
+
|
163
|
+
class TestNaiveAverage < Test::Unit::TestCase
|
164
|
+
G = PropCheck::Generators
|
165
|
+
|
166
|
+
def test_that_it_returns_an_integer_for_any_input
|
167
|
+
PropCheck.forall(G.array(G.integer)) do |numbers|
|
168
|
+
result = naive_average(numbers)
|
169
|
+
|
170
|
+
assert_instance_of(Integer, result)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
```
|
175
|
+
|
159
176
|
The test case, using only vanilla Ruby:
|
160
177
|
```ruby
|
161
178
|
# And then in a test case:
|
@@ -250,7 +267,7 @@ Always returns the given value. No shrinking.
|
|
250
267
|
|
251
268
|
Allows you to take the result of one generator and transform it into something else.
|
252
269
|
|
253
|
-
>> G.choose(32..128).map(&:chr).sample(1, size: 10, Random.new(42))
|
270
|
+
>> G.choose(32..128).map(&:chr).sample(1, size: 10, rng: Random.new(42))
|
254
271
|
=> ["S"]
|
255
272
|
|
256
273
|
#### Generator#bind
|
@@ -262,7 +279,7 @@ Allows you to create one or another generator conditionally on the output of ano
|
|
262
279
|
|
263
280
|
This is an advanced feature. Often, you can use a combination of `Generators.tuple` and `Generator#map` instead:
|
264
281
|
|
265
|
-
>> G.tuple(integer, integer).sample(1, size: 100, rng: Random.new(42)
|
282
|
+
>> G.tuple(G.integer, G.integer).sample(1, size: 100, rng: Random.new(42))
|
266
283
|
=> [[2, 79]]
|
267
284
|
|
268
285
|
#### Generators.one_of
|
@@ -309,13 +326,17 @@ Here are some simple recommendations for the best results:
|
|
309
326
|
.check(&block)
|
310
327
|
end
|
311
328
|
```
|
312
|
-
- Other setup/cleanup should also usually happen around each generated example rather than around the whole test: Instead of using the hooks exposed by RSpec/MiniTest/etc., use the before/after/around hooks exposed by PropCheck.
|
329
|
+
- Other setup/cleanup should also usually happen around each generated example rather than around the whole test: Instead of using the hooks exposed by RSpec/MiniTest/test-unit/etc., use the before/after/around hooks exposed by PropCheck.
|
313
330
|
|
314
331
|
## Development
|
315
332
|
|
316
|
-
After checking out the repo,
|
333
|
+
After checking out the repo, use the [just](https://github.com/casey/just) command runner for common tasks:
|
317
334
|
|
318
|
-
|
335
|
+
- `just setup`: Installs dev dependencies
|
336
|
+
- `just test`: Runs the test suite
|
337
|
+
- `just console`: Opens an IRb console with the gem loaded for experimenting.
|
338
|
+
- `just install`: Install the gem on your local machine.
|
339
|
+
- `just release`: Create and push a new release to the git repo and Rubygems. (Be sure to increase the version number in `version.rb` first!)
|
319
340
|
|
320
341
|
## Contributing
|
321
342
|
|
data/lib/prop_check/generator.rb
CHANGED
@@ -9,7 +9,14 @@ module PropCheck
|
|
9
9
|
# to be used during the shrinking phase.
|
10
10
|
class Generator
|
11
11
|
@@default_size = 10
|
12
|
-
@@default_rng =
|
12
|
+
@@default_rng =
|
13
|
+
# Backwards compatibility: Random::DEFAULT is deprecated in Ruby 3.x
|
14
|
+
# but required in Ruby 2.x and 1.x
|
15
|
+
if RUBY_VERSION.to_i >= 3
|
16
|
+
Random
|
17
|
+
else
|
18
|
+
Random::DEFAULT
|
19
|
+
end
|
13
20
|
@@max_consecutive_attempts = 100
|
14
21
|
@@default_kwargs = { size: @@default_size, rng: @@default_rng,
|
15
22
|
max_consecutive_attempts: @@max_consecutive_attempts }
|
@@ -115,7 +122,9 @@ module PropCheck
|
|
115
122
|
# This can be used to inspect the configuration inside a `#map` or `#where`
|
116
123
|
# and act on it.
|
117
124
|
#
|
118
|
-
# >>
|
125
|
+
# >> example_config = PropCheck::Property::Configuration.new(default_epoch: Date.new(2022, 11, 22))
|
126
|
+
# >> generator = Generators.choose(0..100).with_config.map { |int, conf| Date.jd(conf[:default_epoch].jd + int) }
|
127
|
+
# >> generator.call(size: 10, rng: Random.new(42), config: example_config)
|
119
128
|
# => Date.new(2023, 01, 12)
|
120
129
|
def with_config
|
121
130
|
Generator.new do |**kwargs|
|
@@ -234,7 +234,7 @@ module PropCheck
|
|
234
234
|
end
|
235
235
|
|
236
236
|
##
|
237
|
-
# Generates any
|
237
|
+
# Generates any nonzero floating-point number.
|
238
238
|
# Will generate special floats (except NaN) from time to time.
|
239
239
|
# c.f. #float
|
240
240
|
def nonzero_float
|
@@ -266,7 +266,7 @@ module PropCheck
|
|
266
266
|
end
|
267
267
|
|
268
268
|
##
|
269
|
-
# Generates
|
269
|
+
# Generates negative floating point numbers
|
270
270
|
# Will generate special floats (except NaN) from time to time.
|
271
271
|
# c.f. #float
|
272
272
|
def negative_float
|
@@ -479,7 +479,7 @@ module PropCheck
|
|
479
479
|
|
480
480
|
##
|
481
481
|
#
|
482
|
-
# Alias for `#hash` that does not conflict with a possibly
|
482
|
+
# Alias for `#hash` that does not conflict with a possibly overridden `Object#hash`.
|
483
483
|
#
|
484
484
|
def hash_of(key_generator, value_generator, **kwargs)
|
485
485
|
array(tuple(key_generator, value_generator), **kwargs)
|
data/lib/prop_check/helper.rb
CHANGED
@@ -33,6 +33,9 @@ module PropCheck
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def call_splatted(val, &block)
|
36
|
+
# Handle edge case where Ruby >= 3 behaves differently than Ruby <= 2
|
37
|
+
# c.f. https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#other-minor-changes-empty-hash
|
38
|
+
return block.call({}) if val.is_a?(Hash) && val.empty?
|
36
39
|
return block.call(**val) if val.is_a?(Hash) && val.keys.all? { |k| k.is_a?(Symbol) }
|
37
40
|
|
38
41
|
block.call(val)
|
data/lib/prop_check/property.rb
CHANGED
@@ -332,7 +332,7 @@ c.f. https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-k
|
|
332
332
|
end
|
333
333
|
|
334
334
|
private def raw_attempts_enum(binding_generator)
|
335
|
-
rng = Random
|
335
|
+
rng = Random.new
|
336
336
|
size = 1
|
337
337
|
(0...@config.max_generate_attempts)
|
338
338
|
.lazy
|
data/lib/prop_check/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prop_check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.18.
|
4
|
+
version: 0.18.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Qqwy/Wiebe-Marten Wijnja
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amazing_print
|
@@ -43,6 +43,7 @@ files:
|
|
43
43
|
- CHANGELOG.md
|
44
44
|
- CODE_OF_CONDUCT.md
|
45
45
|
- Gemfile
|
46
|
+
- Justfile
|
46
47
|
- LICENSE.txt
|
47
48
|
- README.md
|
48
49
|
- Rakefile
|
@@ -68,7 +69,7 @@ metadata:
|
|
68
69
|
homepage_uri: https://github.com/Qqwy/ruby-prop_check/
|
69
70
|
source_code_uri: https://github.com/Qqwy/ruby-prop_check/
|
70
71
|
changelog_uri: https://github.com/Qqwy/ruby-prop_check/CHANGELOG.md
|
71
|
-
post_install_message:
|
72
|
+
post_install_message:
|
72
73
|
rdoc_options: []
|
73
74
|
require_paths:
|
74
75
|
- lib
|
@@ -83,8 +84,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
84
|
- !ruby/object:Gem::Version
|
84
85
|
version: '0'
|
85
86
|
requirements: []
|
86
|
-
rubygems_version: 3.
|
87
|
-
signing_key:
|
87
|
+
rubygems_version: 3.1.6
|
88
|
+
signing_key:
|
88
89
|
specification_version: 4
|
89
90
|
summary: PropCheck allows you to do property-based testing, including shrinking.
|
90
91
|
test_files: []
|