1 1| |// compile-flags: -Zinline-mir
3 3| |use std::fmt::Display;
6 6| 1| permutations(&['a', 'b', 'c']);
10 10| 1|fn permutations<T: Copy + Display>(xs: &[T]) {
11 11| 1| let mut ys = xs.to_owned();
12 12| 1| permutate(&mut ys, 0);
15 15| 16|fn permutate<T: Copy + Display>(xs: &mut [T], k: usize) {
16 16| 16| let n = length(xs);
19 19| 10| } else if k < n {
20 20| 15| for i in k..n {
22 21| 15| swap(xs, i, k);
23 22| 15| permutate(xs, k + 1);
24 23| 15| swap(xs, i, k);
31 30| 16|fn length<T>(xs: &[T]) -> usize {
36 35| 30|fn swap<T: Copy>(xs: &mut [T], i: usize, j: usize) {
37 36| 30| let t = xs[i];
38 37| 30| xs[i] = xs[j];
42 41| 6|fn display<T: Display>(xs: &[T]) {
44 43| 18| print!("{}", x);
49 48| |#[inline(always)]
51 50| | panic!("error");