xref: /third_party/rust/crates/env_logger/ci/src/permute.rs
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/rust/crates/env_logger/ci/src/
1336d762aSopenharmony_ciuse std::collections::BTreeSet;
2336d762aSopenharmony_ci
3336d762aSopenharmony_cipub fn all<T>(input: &[T]) -> BTreeSet<BTreeSet<T>>
4336d762aSopenharmony_ciwhere
5336d762aSopenharmony_ci    T: Ord + Eq + Clone,
6336d762aSopenharmony_ci{
7336d762aSopenharmony_ci    let mut permutations = BTreeSet::new();
8336d762aSopenharmony_ci
9336d762aSopenharmony_ci    if input.is_empty() {
10336d762aSopenharmony_ci        return permutations;
11336d762aSopenharmony_ci    }
12336d762aSopenharmony_ci
13336d762aSopenharmony_ci    permutations.insert(input.iter().cloned().collect());
14336d762aSopenharmony_ci
15336d762aSopenharmony_ci    if input.len() > 1 {
16336d762aSopenharmony_ci        for t in input {
17336d762aSopenharmony_ci            let p = input
18336d762aSopenharmony_ci                .iter()
19336d762aSopenharmony_ci                .filter(|pt| *pt != t)
20336d762aSopenharmony_ci                .cloned()
21336d762aSopenharmony_ci                .collect::<Vec<_>>();
22336d762aSopenharmony_ci
23336d762aSopenharmony_ci            for pt in all(&p) {
24336d762aSopenharmony_ci                permutations.insert(pt);
25336d762aSopenharmony_ci            }
26336d762aSopenharmony_ci        }
27336d762aSopenharmony_ci    }
28336d762aSopenharmony_ci
29336d762aSopenharmony_ci    permutations
30336d762aSopenharmony_ci}
31

Indexes created Thu Nov 07 10:32:03 CST 2024