hypothesis-specs 0.4.0 → 0.7.1
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/CHANGELOG.md +37 -1
- data/Cargo.toml +2 -2
- data/lib/hypothesis.rb +30 -2
- data/lib/hypothesis/engine.rb +5 -1
- data/src/lib.rs +28 -5
- metadata +3 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cbb474ec8dfa5611bdcd0b7c49b03f55f93aadc178fb4b826561085b1d18b7a1
|
|
4
|
+
data.tar.gz: 0261acdf7ba9861d1bbe2bed050fc6949bbc37636a6813bc035fa2f4b5305f14
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 522ffc7e052fbe1da4d8aa30e310858f9b2dde70dddf279a3e9271b0a927df0e9bb73911f471315d1620d703498144fed8a7a87f0929f450eeb087c9cb081e01
|
|
7
|
+
data.tar.gz: ca528d9fe8f1aaf1b39cbad52b0bb043da0940e9c26e2b866b9ae9a2595267a8cdd8e93c5a207898f2ca785bfa3db85f175e49a6443a9e1141c8137b17fe653f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
# Hypothesis for Ruby 0.7.1 (2021-03-27)
|
|
2
|
+
|
|
3
|
+
This patch fixes some internal typos. There is no user-visible change.
|
|
4
|
+
|
|
5
|
+
# Hypothesis for Ruby 0.7.0 (2021-03-12)
|
|
6
|
+
|
|
7
|
+
Moves rake from being a a runtime dependency to being a development dependency. Rake is used to run tests but is not required for consumers of hypothesis-ruby.
|
|
8
|
+
|
|
9
|
+
# Hypothesis for Ruby 0.6.1 (2021-02-01)
|
|
10
|
+
|
|
11
|
+
This patch contains minor performance improvements for `HypothesisCoreIntegers` class instantiation.
|
|
12
|
+
|
|
13
|
+
# Hypothesis for Ruby 0.6.0 (2021-01-27)
|
|
14
|
+
|
|
15
|
+
Adds support for skipping shrinking. While shrinking is extremely helpful and important in general, it has the potential to be quite time consuming. It can be useful to observe a raw failure before choosing to allow the engine to try to shrink. [hypothesis-python](https://hypothesis.readthedocs.io/en/latest/settings.html#phases) already provides the ability to skip shrinking, so there is precedent for this being useful. While `hypothesis-ruby` does not have the concept of other "Phases" yet, we can still start off the API by using this concept.
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
hypothesis(phases: Phase.excluding(:shrink)) do
|
|
21
|
+
# Failures here will be displayed directly and shrinking will be avoided
|
|
22
|
+
end
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
# Hypothesis for Ruby 0.5.0 (2021-01-25)
|
|
26
|
+
|
|
27
|
+
Adds support for skipping shrinking. While shrinking is extremely helpful and important in general, it has the potential to be quite time consuming. It can be useful to observe a raw failure before choosing to allow the engine to try to shrink. [hypothesis-python](https://hypothesis.readthedocs.io/en/latest/settings.html#phases) already provides the ability to skip shrinking, so there is precedent for this being useful. While `hypothesis-ruby` does not have the concept of other "Phases" yet, we can still start off the API by using this concept.
|
|
28
|
+
|
|
29
|
+
Usage:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
hypothesis(phases: Phase.excluding(:shrink)) do
|
|
33
|
+
# Failures here will be displayed directly and shrinking will be avoided
|
|
34
|
+
end
|
|
35
|
+
```
|
|
36
|
+
|
|
1
37
|
# Hypothesis for Ruby 0.4.0 (2021-01-12)
|
|
2
38
|
|
|
3
39
|
This removes hypothesis-ruby's dependence on RSpec. Now, it can be used with any Ruby test runner.
|
|
@@ -16,7 +52,7 @@ manually pass a seed.
|
|
|
16
52
|
|
|
17
53
|
# Hypothesis for Ruby 0.1.2 (2018-09-24)
|
|
18
54
|
|
|
19
|
-
This release makes the code
|
|
55
|
+
This release makes the code usable via a direct require.
|
|
20
56
|
I.e. no need for rubygems or any special LOAD_PATH.
|
|
21
57
|
|
|
22
58
|
For example, if the base directory were in /opt, you'd just say:
|
data/Cargo.toml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "hypothesis-ruby"
|
|
3
3
|
version = "0.1.0"
|
|
4
|
-
authors = ["David R. MacIver <david@drmaciver.com>", "Alex
|
|
4
|
+
authors = ["David R. MacIver <david@drmaciver.com>", "Alex Weisberger <alex.m.weisberger@gmail.com>"]
|
|
5
5
|
|
|
6
6
|
[lib]
|
|
7
7
|
name="hypothesis_ruby_core"
|
|
@@ -11,4 +11,4 @@ crate-type = ["cdylib"]
|
|
|
11
11
|
rutie = {version="0.8.1"}
|
|
12
12
|
lazy_static = "1.4.0"
|
|
13
13
|
rand = '0.3'
|
|
14
|
-
conjecture = '0.
|
|
14
|
+
conjecture = '0.7.0'
|
data/lib/hypothesis.rb
CHANGED
|
@@ -7,6 +7,28 @@ require_relative 'hypothesis/testcase'
|
|
|
7
7
|
require_relative 'hypothesis/engine'
|
|
8
8
|
require_relative 'hypothesis/world'
|
|
9
9
|
|
|
10
|
+
module Phase
|
|
11
|
+
SHRINK = :shrink
|
|
12
|
+
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
def all
|
|
16
|
+
[SHRINK]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def excluding(*phases)
|
|
20
|
+
unknown_phases = phases.reject { |phase| Phase.all.include?(phase) }
|
|
21
|
+
unless unknown_phases.empty?
|
|
22
|
+
raise(
|
|
23
|
+
ArgumentError,
|
|
24
|
+
"Attempting to exclude unknown phases: #{unknown_phases}"
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
all - phases
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
10
32
|
# This is the main module for using Hypothesis.
|
|
11
33
|
# It is expected that you will include this in your
|
|
12
34
|
# tests, but its methods are also available on the
|
|
@@ -47,7 +69,7 @@ module Hypothesis
|
|
|
47
69
|
# the previous examples.
|
|
48
70
|
|
|
49
71
|
# Note that essentially any answer to this method is
|
|
50
|
-
# "fine" in that the failure mode is that
|
|
72
|
+
# "fine" in that the failure mode is that sometimes we
|
|
51
73
|
# just won't run the same test, but it's nice to keep
|
|
52
74
|
# this as stable as possible if the code isn't changing.
|
|
53
75
|
|
|
@@ -201,7 +223,12 @@ module Hypothesis
|
|
|
201
223
|
# should store previously failing test cases. If it is nil, Hypothesis
|
|
202
224
|
# will use a default of .hypothesis/examples in the current directory.
|
|
203
225
|
# May also be set to false to disable the database functionality.
|
|
204
|
-
def hypothesis(
|
|
226
|
+
def hypothesis(
|
|
227
|
+
max_valid_test_cases: 200,
|
|
228
|
+
phases: Phase.all,
|
|
229
|
+
database: nil,
|
|
230
|
+
&block
|
|
231
|
+
)
|
|
205
232
|
unless World.current_engine.nil?
|
|
206
233
|
raise UsageError, 'Cannot nest hypothesis calls'
|
|
207
234
|
end
|
|
@@ -210,6 +237,7 @@ module Hypothesis
|
|
|
210
237
|
World.current_engine = Engine.new(
|
|
211
238
|
hypothesis_stable_identifier,
|
|
212
239
|
max_examples: max_valid_test_cases,
|
|
240
|
+
phases: phases,
|
|
213
241
|
database: database
|
|
214
242
|
)
|
|
215
243
|
World.current_engine.run(&block)
|
data/lib/hypothesis/engine.rb
CHANGED
|
@@ -19,7 +19,11 @@ module Hypothesis
|
|
|
19
19
|
database = nil if database == false
|
|
20
20
|
|
|
21
21
|
@core_engine = HypothesisCoreEngine.new(
|
|
22
|
-
name,
|
|
22
|
+
name,
|
|
23
|
+
database,
|
|
24
|
+
seed,
|
|
25
|
+
options.fetch(:max_examples),
|
|
26
|
+
options.fetch(:phases)
|
|
23
27
|
)
|
|
24
28
|
|
|
25
29
|
@exceptions_to_tags = Hash.new { |h, k| h[k] = h.size }
|
data/src/lib.rs
CHANGED
|
@@ -4,15 +4,19 @@ extern crate rutie;
|
|
|
4
4
|
extern crate lazy_static;
|
|
5
5
|
extern crate conjecture;
|
|
6
6
|
|
|
7
|
+
use std::convert::TryFrom;
|
|
7
8
|
use std::mem;
|
|
8
9
|
|
|
9
|
-
use rutie::{
|
|
10
|
+
use rutie::{
|
|
11
|
+
AnyException, AnyObject, Array, Boolean, Class, Exception, Float, Integer, NilClass, Object,
|
|
12
|
+
RString, Symbol, VM,
|
|
13
|
+
};
|
|
10
14
|
|
|
11
15
|
use conjecture::data::{DataSource, Status, TestResult};
|
|
12
16
|
use conjecture::database::{BoxedDatabase, DirectoryDatabase, NoDatabase};
|
|
13
17
|
use conjecture::distributions;
|
|
14
18
|
use conjecture::distributions::Repeat;
|
|
15
|
-
use conjecture::engine::Engine;
|
|
19
|
+
use conjecture::engine::{Engine, Phase};
|
|
16
20
|
|
|
17
21
|
pub struct HypothesisCoreDataSourceStruct {
|
|
18
22
|
source: Option<DataSource>,
|
|
@@ -46,6 +50,7 @@ wrappable_struct!(
|
|
|
46
50
|
|
|
47
51
|
class!(HypothesisCoreDataSource);
|
|
48
52
|
|
|
53
|
+
#[rustfmt::skip]
|
|
49
54
|
methods!(
|
|
50
55
|
HypothesisCoreDataSource,
|
|
51
56
|
itself,
|
|
@@ -77,6 +82,7 @@ impl HypothesisCoreEngineStruct {
|
|
|
77
82
|
database_path: Option<String>,
|
|
78
83
|
seed: u64,
|
|
79
84
|
max_examples: u64,
|
|
85
|
+
phases: Vec<Phase>,
|
|
80
86
|
) -> HypothesisCoreEngineStruct {
|
|
81
87
|
let xs: [u32; 2] = [seed as u32, (seed >> 32) as u32];
|
|
82
88
|
let db: BoxedDatabase = match database_path {
|
|
@@ -85,7 +91,7 @@ impl HypothesisCoreEngineStruct {
|
|
|
85
91
|
};
|
|
86
92
|
|
|
87
93
|
HypothesisCoreEngineStruct {
|
|
88
|
-
engine: Engine::new(name, max_examples, &xs, db),
|
|
94
|
+
engine: Engine::new(name, max_examples, phases, &xs, db),
|
|
89
95
|
pending: None,
|
|
90
96
|
interesting_examples: Vec::new(),
|
|
91
97
|
}
|
|
@@ -144,6 +150,7 @@ wrappable_struct!(
|
|
|
144
150
|
|
|
145
151
|
class!(HypothesisCoreEngine);
|
|
146
152
|
|
|
153
|
+
#[rustfmt::skip]
|
|
147
154
|
methods!(
|
|
148
155
|
HypothesisCoreEngine,
|
|
149
156
|
itself,
|
|
@@ -151,13 +158,26 @@ methods!(
|
|
|
151
158
|
name: RString,
|
|
152
159
|
database_path: RString,
|
|
153
160
|
seed: Integer,
|
|
154
|
-
max_example: Integer
|
|
161
|
+
max_example: Integer,
|
|
162
|
+
phases: Array
|
|
155
163
|
) -> AnyObject {
|
|
164
|
+
let rust_phases = safe_access(phases)
|
|
165
|
+
.into_iter()
|
|
166
|
+
.map(|ruby_phase| {
|
|
167
|
+
let phase_sym = safe_access(ruby_phase.try_convert_to::<Symbol>());
|
|
168
|
+
let phase = Phase::try_from(phase_sym.to_str())
|
|
169
|
+
.map_err(|e| AnyException::new("ArgumentError", Some(&e)));
|
|
170
|
+
|
|
171
|
+
safe_access(phase)
|
|
172
|
+
})
|
|
173
|
+
.collect();
|
|
174
|
+
|
|
156
175
|
let core_engine = HypothesisCoreEngineStruct::new(
|
|
157
176
|
safe_access(name).to_string(),
|
|
158
177
|
database_path.ok().map(|p| p.to_string()),
|
|
159
178
|
safe_access(seed).to_u64(),
|
|
160
179
|
safe_access(max_example).to_u64(),
|
|
180
|
+
rust_phases,
|
|
161
181
|
);
|
|
162
182
|
|
|
163
183
|
Class::from_existing("HypothesisCoreEngine")
|
|
@@ -259,6 +279,7 @@ wrappable_struct!(
|
|
|
259
279
|
|
|
260
280
|
class!(HypothesisCoreIntegers);
|
|
261
281
|
|
|
282
|
+
#[rustfmt::skip]
|
|
262
283
|
methods!(
|
|
263
284
|
HypothesisCoreIntegers,
|
|
264
285
|
itself,
|
|
@@ -315,6 +336,7 @@ wrappable_struct!(
|
|
|
315
336
|
|
|
316
337
|
class!(HypothesisCoreRepeatValues);
|
|
317
338
|
|
|
339
|
+
#[rustfmt::skip]
|
|
318
340
|
methods!(
|
|
319
341
|
HypothesisCoreRepeatValues,
|
|
320
342
|
itself,
|
|
@@ -376,6 +398,7 @@ wrappable_struct!(
|
|
|
376
398
|
|
|
377
399
|
class!(HypothesisCoreBoundedIntegers);
|
|
378
400
|
|
|
401
|
+
#[rustfmt::skip]
|
|
379
402
|
methods!(
|
|
380
403
|
HypothesisCoreBoundedIntegers,
|
|
381
404
|
itself,
|
|
@@ -465,5 +488,5 @@ fn mark_child_status(
|
|
|
465
488
|
}
|
|
466
489
|
|
|
467
490
|
fn safe_access<T>(value: Result<T, AnyException>) -> T {
|
|
468
|
-
|
|
491
|
+
value.map_err(VM::raise_ex).unwrap()
|
|
469
492
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hypothesis-specs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David R. Maciver
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2021-
|
|
12
|
+
date: 2021-03-27 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rutie
|
|
@@ -25,26 +25,6 @@ dependencies:
|
|
|
25
25
|
- - "~>"
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: 0.0.3
|
|
28
|
-
- !ruby/object:Gem::Dependency
|
|
29
|
-
name: rake
|
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
|
31
|
-
requirements:
|
|
32
|
-
- - ">="
|
|
33
|
-
- !ruby/object:Gem::Version
|
|
34
|
-
version: '10.0'
|
|
35
|
-
- - "<"
|
|
36
|
-
- !ruby/object:Gem::Version
|
|
37
|
-
version: '13.0'
|
|
38
|
-
type: :runtime
|
|
39
|
-
prerelease: false
|
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
requirements:
|
|
42
|
-
- - ">="
|
|
43
|
-
- !ruby/object:Gem::Version
|
|
44
|
-
version: '10.0'
|
|
45
|
-
- - "<"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '13.0'
|
|
48
28
|
description: 'Hypothesis is a powerful, flexible, and easy to use library for property-based
|
|
49
29
|
testing.
|
|
50
30
|
|
|
@@ -89,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
89
69
|
- !ruby/object:Gem::Version
|
|
90
70
|
version: '0'
|
|
91
71
|
requirements: []
|
|
92
|
-
rubygems_version: 3.2.
|
|
72
|
+
rubygems_version: 3.2.15
|
|
93
73
|
signing_key:
|
|
94
74
|
specification_version: 4
|
|
95
75
|
summary: Hypothesis is a powerful, flexible, and easy to use library for property-based
|