BillingData: Fix collapsing tested with permutations
All checks were successful
Test / Run tests (push) Successful in 3m7s
All checks were successful
Test / Run tests (push) Successful in 3m7s
This commit is contained in:
@ -972,5 +972,67 @@ namespace Tests.HelperTests {
|
||||
}
|
||||
"""));
|
||||
}
|
||||
|
||||
private static IEnumerable<List<T>> GetPermutations<T>(T[] input) {
|
||||
if (input.Length <= 1)
|
||||
yield return [..input];
|
||||
for (int i = 0; i < input.Length; i++) {
|
||||
yield return [input[i]];
|
||||
foreach (var p in GetPermutations(input.Where((_, j) => j != i).ToArray())) {
|
||||
p.Insert(0, input[i]);
|
||||
yield return p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IEnumerable<List<HashSet<RawVaribute>>> GetCurves(RawVaribute[] vaributes, int minNumCurves = 1, int maxNumCurves = 10) {
|
||||
foreach (var p in GetPermutations(vaributes)) {
|
||||
for (int nCurves = minNumCurves; nCurves <= Math.Min(maxNumCurves, p.Count); nCurves++) {
|
||||
yield return Enumerable.Range(0, nCurves)
|
||||
.Select(n => p.Where((v, idx) => idx % nCurves == n).ToHashSet())
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private readonly HashSet<string> TestedCurves = [];
|
||||
|
||||
private void TestCollapse(List<HashSet<RawVaribute>> curves) {
|
||||
var str = string.Join("\n", curves.Select(c => string.Join(" ", c.Select(v => v.ToString().PadRight(6)).Order())).Order().Select((c, n) => $"{n + 1}: [ " + c + " ]"));
|
||||
if (!TestedCurves.Add(str))
|
||||
return;
|
||||
var vaributes = curves.SelectMany(v => v).ToList();
|
||||
List<GraphEntry> entries = curves
|
||||
.Select((l, n) => new GraphEntry(n, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() {
|
||||
[73] = n + 1,
|
||||
}, null), GetSelection(l.Select(v => v.ToString()))))
|
||||
.ToList();
|
||||
var data = BillingData.FromGraphEntries(entries);
|
||||
var test = PaymentBillingData.FromJson(data.ToJsonString(), vaributes);
|
||||
for (int i = 0; i < curves.Count; i++) {
|
||||
foreach (var v in curves[i]) {
|
||||
var val = test.CalculatePrice(v.SortId!, v.AttrId, v.CultId, "QUW", false, 73.0, 15.0);
|
||||
var actualCurve = (int)val;
|
||||
Assert.That(actualCurve, Is.EqualTo(i + 1), $"Invalid: {v} (Curve {i + 1} -> {actualCurve})\n\n{str}\n\n{data.ToJsonString(JsonOpts)}\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestCollapse_01_Permutations() {
|
||||
RawVaribute[][] configurations = [
|
||||
[new("GV/-"), new("WR/-"), new("ZW/-"), new("GV/K-"), new("WR/K-"), new("ZW/K-")],
|
||||
[new("GV/-"), new("WR/-"), new("GV/K-"), new("WR/K-"), new("GV/S-"), new("WR/S-")],
|
||||
[new("GV/-"), new("WR/-"), new("ZW/-"), new("GV/-B"), new("WR/-B"), new("ZW/-B")],
|
||||
[new("GV/-"), new("WR/-"), new("GV/-B"), new("WR/-B"), new("GV/-KIP"), new("WR/-KIP")],
|
||||
[new("GV/-"), new("GV/K-"), new("ZW/-"), new("ZW/K-"), new("GV/-B"), new("GV/K-B"), new("ZW/-B"), new("ZW/K-B")],
|
||||
];
|
||||
Assert.Multiple(() => {
|
||||
foreach (var config in configurations) {
|
||||
foreach (var c in GetCurves(config))
|
||||
TestCollapse(c);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user