/
Statics-Permutations.cs
74 lines (69 loc) · 2.15 KB
/
Statics-Permutations.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
namespace Towel_Testing;
// [TestClass]
public partial class Statics_Testing
{
internal static void TestPermuteAlgorithm(Action<char[], Action> algorithm)
{
{
char[] array = { 'a' };
ListArray<string> list = new();
algorithm(array, () => list.Add(new string(array)));
string[] expected =
{
"a",
};
Assert.IsTrue(list.Count is 1);
Assert.IsTrue(EquateSet<string>(list.ToArray(), expected));
}
{
char[] array = { 'a', 'b' };
ListArray<string> list = new();
algorithm(array, () => list.Add(new string(array)));
string[] expected =
{
"ab",
"ba",
};
Assert.IsTrue(list.Count is 2);
Assert.IsTrue(EquateSet<string>(list.ToArray(), expected));
}
{
char[] array = { 'a', 'b', 'c' };
ListArray<string> list = new();
algorithm(array, () => list.Add(new string(array)));
string[] expected =
{
"abc",
"acb",
"bac",
"bca",
"cab",
"cba",
};
Assert.IsTrue(list.Count is 6);
Assert.IsTrue(EquateSet<string>(list.ToArray(), expected));
}
{
char[] array = { 'a', 'b', 'c', 'd' };
ListArray<string> list = new();
algorithm(array, () => list.Add(new string(array)));
string[] expected =
{
"abcd", "acbd", "bacd", "bcad", "cabd", "cbad",
"abdc", "acdb", "badc", "bcda", "cadb", "cbda",
"adbc", "adcb", "bdac", "bdca", "cdab", "cdba",
"dabc", "dacb", "dbac", "dbca", "dcab", "dcba",
};
Assert.IsTrue(list.Count is 24);
Assert.IsTrue(EquateSet<string>(list.ToArray(), expected));
}
}
[TestMethod]
public void PermuteRecursive_Testing() => TestPermuteAlgorithm((array, action) => PermuteRecursive<char>(0, array.Length - 1, action, i => array[i], (i, v) => array[i] = v));
[TestMethod]
public void PermuteRecursive_Span_Testing() => TestPermuteAlgorithm((array, action) => PermuteRecursive<char>(array, action));
[TestMethod]
public void PermuteIterative_Testing() => TestPermuteAlgorithm((array, action) => PermuteIterative<char>(0, array.Length - 1, action, i => array[i], (i, v) => array[i] = v));
[TestMethod]
public void PermuteIterative_Span_Testing() => TestPermuteAlgorithm((array, action) => PermuteIterative<char>(array, action));
}