Skip to content

Commit fc0cdeb

Browse files
author
Jorge Aparicio
committed
qc: bias towards generation of edge cases
1 parent 8603e64 commit fc0cdeb

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

src/qc.rs

+28-7
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,18 @@ macro_rules! arbitrary {
2020
fn arbitrary<G>(g: &mut G) -> $TY
2121
where G: Gen
2222
{
23-
$TY(g.gen())
23+
// NOTE Generate edge cases with a 10% chance
24+
let t = if g.gen_weighted_bool(10) {
25+
*g.choose(&[
26+
$ty::min_value(),
27+
0,
28+
$ty::max_value(),
29+
]).unwrap()
30+
} else {
31+
g.gen()
32+
};
33+
34+
$TY(t)
2435
}
2536

2637
fn shrink(&self) -> Box<Iterator<Item=$TY>> {
@@ -76,13 +87,23 @@ macro_rules! arbitrary_large {
7687
fn arbitrary<G>(g: &mut G) -> $TY
7788
where G: Gen
7889
{
79-
if g.gen() {
80-
$TY($ty::from_parts(g.gen(), g.gen()))
81-
} else if g.gen() {
82-
$TY($ty::from_parts(0, g.gen()))
90+
// NOTE Generate edge cases with a 10% chance
91+
let t = if g.gen_weighted_bool(10) {
92+
*g.choose(&[
93+
$ty::min_value(),
94+
0,
95+
$ty::max_value(),
96+
]).unwrap()
8397
} else {
84-
$TY($ty::from_parts(g.gen(), 0))
85-
}
98+
match g.gen_range(0, 3) {
99+
0 => $ty::from_parts(g.gen(), g.gen()),
100+
1 => $ty::from_parts(0, g.gen()),
101+
2 => $ty::from_parts(g.gen(), 0),
102+
_ => unreachable!(),
103+
}
104+
};
105+
106+
$TY(t)
86107
}
87108

88109
fn shrink(&self) -> Box<Iterator<Item=$TY>> {

0 commit comments

Comments
 (0)