Skip to content

Commit 8d13988

Browse files
committed
gen reverse alphabetical graphs
1 parent e185111 commit 8d13988

File tree

2 files changed

+72
-63
lines changed

2 files changed

+72
-63
lines changed

tests/testsuite/resolve.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ use crate::support::resolver::{
1212
resolve_with_config, PrettyPrintRegistry, ToDep, ToPkgId,
1313
};
1414

15-
use proptest::collection::vec;
16-
use proptest::prelude::*;
17-
use proptest::*;
15+
use proptest::{prelude::*, *};
1816

1917
/// NOTE: proptest is a form of fuzz testing. It generates random input and makes shore that
2018
/// certain universal truths are upheld. Therefore, it can pass when there is a problem,
@@ -114,7 +112,7 @@ proptest! {
114112
#[test]
115113
fn limited_independence_of_irrelevant_alternatives(
116114
PrettyPrintRegistry(input) in registry_strategy(50, 20, 60),
117-
indexs_to_unpublish in vec(any::<prop::sample::Index>(), 10)
115+
indexs_to_unpublish in collection::vec(any::<prop::sample::Index>(), 10)
118116
) {
119117
let reg = registry(input.clone());
120118
// there is only a small chance that eny one

tests/testsuite/support/resolver.rs

Lines changed: 70 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -400,67 +400,78 @@ pub fn registry_strategy(
400400

401401
let list_of_raw_dependency = vec(raw_dependency, ..=max_deps);
402402

403-
(list_of_crates_with_versions, list_of_raw_dependency).prop_map(
404-
|(crate_vers_by_name, raw_dependencies)| {
405-
let list_of_pkgid: Vec<_> = crate_vers_by_name
406-
.iter()
407-
.flat_map(|(name, vers)| vers.iter().map(move |x| ((name.as_str(), &x.0), x.1)))
408-
.collect();
409-
let len_all_pkgid = list_of_pkgid.len();
410-
let mut dependency_by_pkgid = vec![vec![]; len_all_pkgid];
411-
for (a, b, (c, d), k) in raw_dependencies {
412-
let (a, b) = order_index(a, b, len_all_pkgid);
413-
let ((dep_name, _), _) = list_of_pkgid[a];
414-
if (list_of_pkgid[b].0).0 == dep_name {
415-
continue;
403+
// By default a package depends only on other packages that have a smaller name,
404+
// this helps make sure that all things in the resulting index are DAGs.
405+
// If this is true then the DAG is maintained with grater instead.
406+
let reverse_alphabetical = any::<bool>();
407+
408+
(
409+
list_of_crates_with_versions,
410+
list_of_raw_dependency,
411+
reverse_alphabetical,
412+
)
413+
.prop_map(
414+
|(crate_vers_by_name, raw_dependencies, reverse_alphabetical)| {
415+
let list_of_pkgid: Vec<_> = crate_vers_by_name
416+
.iter()
417+
.flat_map(|(name, vers)| vers.iter().map(move |x| ((name.as_str(), &x.0), x.1)))
418+
.collect();
419+
let len_all_pkgid = list_of_pkgid.len();
420+
let mut dependency_by_pkgid = vec![vec![]; len_all_pkgid];
421+
for (a, b, (c, d), k) in raw_dependencies {
422+
let (a, b) = order_index(a, b, len_all_pkgid);
423+
let (a, b) = if reverse_alphabetical { (b, a) } else { (a, b) };
424+
let ((dep_name, _), _) = list_of_pkgid[a];
425+
if (list_of_pkgid[b].0).0 == dep_name {
426+
continue;
427+
}
428+
let s = &crate_vers_by_name[dep_name];
429+
let s_last_index = s.len() - 1;
430+
let (c, d) = order_index(c, d, s.len());
431+
432+
dependency_by_pkgid[b].push(dep_req_kind(
433+
&dep_name,
434+
&if c == 0 && d == s_last_index {
435+
"*".to_string()
436+
} else if c == 0 {
437+
format!("<={}", s[d].0)
438+
} else if d == s_last_index {
439+
format!(">={}", s[c].0)
440+
} else if c == d {
441+
format!("={}", s[c].0)
442+
} else {
443+
format!(">={}, <={}", s[c].0, s[d].0)
444+
},
445+
match k {
446+
0 => Kind::Normal,
447+
1 => Kind::Build,
448+
// => Kind::Development, // Development has not impact so don't gen
449+
_ => panic!("bad index for Kind"),
450+
},
451+
))
416452
}
417-
let s = &crate_vers_by_name[dep_name];
418-
let s_last_index = s.len() - 1;
419-
let (c, d) = order_index(c, d, s.len());
420-
421-
dependency_by_pkgid[b].push(dep_req_kind(
422-
&dep_name,
423-
&if c == 0 && d == s_last_index {
424-
"*".to_string()
425-
} else if c == 0 {
426-
format!("<={}", s[d].0)
427-
} else if d == s_last_index {
428-
format!(">={}", s[c].0)
429-
} else if c == d {
430-
format!("={}", s[c].0)
431-
} else {
432-
format!(">={}, <={}", s[c].0, s[d].0)
433-
},
434-
match k {
435-
0 => Kind::Normal,
436-
1 => Kind::Build,
437-
// => Kind::Development, // Development has not impact so don't gen
438-
_ => panic!("bad index for Kind"),
439-
},
440-
))
441-
}
442453

443-
PrettyPrintRegistry(
444-
list_of_pkgid
445-
.into_iter()
446-
.zip(dependency_by_pkgid.into_iter())
447-
.map(|(((name, ver), allow_deps), deps)| {
448-
pkg_dep(
449-
(name, ver).to_pkgid(),
450-
if !allow_deps {
451-
vec![dep_req("bad", "*")]
452-
} else {
453-
let mut deps = deps;
454-
deps.sort_by_key(|d| d.name_in_toml());
455-
deps.dedup_by_key(|d| d.name_in_toml());
456-
deps
457-
},
458-
)
459-
})
460-
.collect(),
461-
)
462-
},
463-
)
454+
PrettyPrintRegistry(
455+
list_of_pkgid
456+
.into_iter()
457+
.zip(dependency_by_pkgid.into_iter())
458+
.map(|(((name, ver), allow_deps), deps)| {
459+
pkg_dep(
460+
(name, ver).to_pkgid(),
461+
if !allow_deps {
462+
vec![dep_req("bad", "*")]
463+
} else {
464+
let mut deps = deps;
465+
deps.sort_by_key(|d| d.name_in_toml());
466+
deps.dedup_by_key(|d| d.name_in_toml());
467+
deps
468+
},
469+
)
470+
})
471+
.collect(),
472+
)
473+
},
474+
)
464475
}
465476

466477
/// This test is to test the generator to ensure

0 commit comments

Comments
 (0)