using System; using System.Collections.Generic; using System.Linq; namespace Avalonia.Controls.UnitTests { internal static class EnumerableExtensions { public static IEnumerable Do(this IEnumerable items, Action action) { foreach (var i in items) { action(i); yield return i; } } public static IEnumerable Permutations(this IEnumerable source) { var sourceArray = source.ToArray(); var results = new List(); Permute(sourceArray, 0, sourceArray.Length - 1); return results; void Permute(T[] elements, int depth, int maxDepth) { if (depth == maxDepth) { results.Add(elements.ToArray()); return; } for (var i = depth; i <= maxDepth; i++) { (elements[depth], elements[i]) = (elements[i], elements[depth]); Permute(elements, depth + 1, maxDepth); (elements[depth], elements[i]) = (elements[i], elements[depth]); } } } } }