Comments (6)
I personally kind of like writing TestResult::discard
because it's more explicit what's going on. I don't feel terribly strongly though.
from quickcheck.
I think TestResult
is much clearer, and it's not very inconvenient in my opinion.
from quickcheck.
This would be nice for use with the checked_
functions e.g.
#[quickcheck]
fn test_div_rem(a: i64, b: i64) -> Option<bool> {
let div = a.checked_div(b)?;
let rem = a.checked_rem(b)?;
Some(div * b + rem == a)
}
from quickcheck.
Has this been reconsidered? I'd be happy to submit a PR.
The more ideal solution would probably be to implement the Try
trait for TestResult
, allowing for early return of TestResult::discard()
, but it doesn't look like the trait will stabilise any time soon.
from quickcheck.
I remain unconvinced that this is worth doing. I'd rather see tests being explicitly discarded.
from quickcheck.
Types like the one drafted in #281 (whether they are part of this library or implemented on the user's side) create use-cases where returning an Option
would be preferable to the alternatives imo. Consider something like the following:
fn revrev(original: u128) -> Option<Equivalence<u128>> {
if original == u128::MAX {
// for some reason, u128::MAX must be ignored for the test
None
} else {
// pseudo idendity
Some(Equivalence::of(xs, revrev))
}
}
Without an Testable
implementation for Option
, we'd need to write something like:
fn revrev(original: u128) -> TestResult {
if original == u128::MAX {
// for some reason, u128::MAX must be ignored for the test
TestResult::discard()
} else {
// pseudo idendity
Equivalence::of(xs, revrev).into_result(Gen::new(0))
}
}
... with the very unsightly Gen::new(0)
which shouldn't even used in the conversion, if it is a conversion. That is, unless there is some other way to convert Equivalence
into a TestResult
. Such a function could be mandated for such convenience types, but it would require manually writing such a conversion for all those types (or introduce a trait explicitly for such conversions and maybe impl Testable
via that trait for the conversion case).
Of course, discarding a test/value explicitly would be far more expressive. And I myself am not sure whether using an Option
is really intuitive or whether it would confuse some users. Maybe a type expressing this intend explicitly would be worth considering?
from quickcheck.
Related Issues (20)
- Cannot use Rng methods on `Gen` when implementing `Arbitrary` HOT 5
- Identity checking HOT 3
- Stack overflow in quickcheck case shrinking HOT 3
- example case sort TEST FAILED HOT 1
- QuickChecking Const Generic Code HOT 5
- Implement Arbitrary for AsMut<[T: Arbitrary]> HOT 2
- Infinite Repetition/Never Ending Test with `f32` and `f64`. HOT 17
- Q: Idiomatic way to specify the length of an arbitrary vector HOT 7
- <newbie> How to generate a number within a range HOT 2
- Negating an integer leads to stack overflow HOT 2
- upgrade notes would be nice. HOT 1
- debug_reprs taking up 41% of test runtime HOT 2
- warning: panic message is not a string literal HOT 1
- Rng Size for Vec Arbitrary cannot be 0
- Impl Clone for Gen
- Implement something like choose_weighted for `Gen`
- Is this still maintained? HOT 1
- Is quickcheck still maintained? HOT 1
- How to combine quickcheck 1+ with fake? HOT 3
- Durations's Arbitrary instance is dependant on Gen's size HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from quickcheck.