Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using BenchmarkDotNet.Attributes;
using TryAtSoftware.CleanTests.Core.Utilities;
using TryAtSoftware.CleanTests.UnitTests.Extensions;
using TryAtSoftware.CleanTests.UnitTests.Parametrization;

/*
Expand All @@ -25,13 +26,13 @@ public class CombinatorialMachineBenchmark
private CombinatorialMachine _machine;

[ParamsSource(nameof(GetSetupValues))]
public CombinatorialMachineSetup Setup { get; set; }
public EnvironmentSetup Setup { get; set; }

[GlobalSetup]
public void SetupCombinatorialMachine() => this._machine = this.Setup.Materialize();
public void SetupCombinatorialMachine() => this._machine = this.Setup.MaterializeAsCombinatorialMachine();

[Benchmark]
public void GenerateAllCombinations() => _ = this._machine.GenerateAllCombinations().ToArray();

public static IEnumerable<CombinatorialMachineSetup> GetSetupValues() => TestParameters.ConstructObservableCombinatorialMachineSetups();
public static IEnumerable<EnvironmentSetup> GetSetupValues() => TestParameters.ConstructObservableCombinatorialMachineSetups().Select(x => x.EnvironmentSetup);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
namespace TryAtSoftware.CleanTests.Benchmark;

using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
using TryAtSoftware.CleanTests.Core.Construction;
using TryAtSoftware.CleanTests.Core.XUnit;
using TryAtSoftware.CleanTests.UnitTests.Extensions;
using TryAtSoftware.CleanTests.UnitTests.Parametrization;

/*
03/08/2023:
| Method | Setup | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
|------------------------ |--------- |-------------:|-----------:|-----------:|----------:|---------:|---------:|------------:|
| BuildConstructionGraphs | Setup #1 | 94.47 us | 1.825 us | 2.308 us | 21.9727 | 1.2207 | - | 180.41 KB |
| BuildConstructionGraphs | Setup #2 | 86.35 us | 0.873 us | 0.729 us | 20.6299 | 0.9766 | - | 168.82 KB |
| BuildConstructionGraphs | Setup #3 | 295.10 us | 2.822 us | 2.640 us | 69.8242 | 7.8125 | - | 573.04 KB |
| BuildConstructionGraphs | Setup #4 | 31,409.16 us | 118.546 us | 105.088 us | 5625.0000 | 906.2500 | 593.7500 | 45980.18 KB |
| BuildConstructionGraphs | Setup #5 | 639.69 us | 5.587 us | 4.953 us | 144.5313 | 27.3438 | - | 1185.68 KB |
| BuildConstructionGraphs | Setup #6 | 24.91 us | 0.175 us | 0.164 us | 6.0425 | 0.1221 | - | 49.47 KB |
*/
[MemoryDiagnoser]
public class ConstructionManagerBenchmark
{
private CleanTestAssemblyData _assemblyData;

[ParamsSource(nameof(GetSetupValues))]
public EnvironmentSetup Setup { get; set; }

[GlobalSetup]
public void SetupCombinatorialMachine() => this._assemblyData = this.Setup.MaterializeAsAssemblyData();

[Benchmark]
public void BuildConstructionGraphs()
{
var dependenciesManager = new ConstructionManager(this._assemblyData);
foreach (var utility in this._assemblyData.CleanUtilities.GetAllValues()) dependenciesManager.BuildIndividualConstructionGraphs(new[] { utility.Id });
}

public static IEnumerable<EnvironmentSetup> GetSetupValues() => TestParameters.ConstructObservableConstructionManagerSetups().Select(x => x.EnvironmentSetup);
}
7 changes: 5 additions & 2 deletions Tests/TryAtSoftware.CleanTests.Benchmark/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Running;
using TryAtSoftware.CleanTests.Benchmark;

BenchmarkRunner.Run<CombinatorialMachineBenchmark>();
BenchmarkRunner.Run<CombinatorialMachineBenchmark>();
BenchmarkRunner.Run<ConstructionManagerBenchmark>(ManualConfig.Create(DefaultConfig.Instance).AddDiagnoser(EventPipeProfiler.Default));
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
namespace TryAtSoftware.CleanTests.UnitTests;

using TryAtSoftware.CleanTests.UnitTests.Constants;
using TryAtSoftware.CleanTests.UnitTests.Extensions;
using TryAtSoftware.CleanTests.UnitTests.Parametrization;

public class CombinatorialMachineTests
{
[Theory(Timeout = UnitTestConstants.Timeout)]
[MemberData(nameof(GetCombinatorialMachineSetups))]
public async Task CombinationsShouldBeGeneratedSuccessfully(CombinatorialMachineSetup setup)
public async Task CombinationsShouldBeGeneratedSuccessfully(EnvironmentSetup setup, int expectedCombinationsCount)
{
var machine = setup.Materialize();
var machine = setup.MaterializeAsCombinatorialMachine();
var combinations = await Task.Run(() => machine.GenerateAllCombinations().ToArray());
Assert.NotNull(combinations);
Assert.Equal(setup.ExpectedCombinationsCount, combinations.Length);
Assert.Equal(expectedCombinationsCount, combinations.Length);

var uniqueCombinations = new HashSet<string>();

Expand All @@ -30,5 +31,5 @@ public async Task CombinationsShouldBeGeneratedSuccessfully(CombinatorialMachine

public static IEnumerable<object[]> GetCombinatorialMachineSetups()
=> TestParameters.ConstructObservableCombinatorialMachineSetups()
.Select(combinatorialMachineSetup => new object[] { combinatorialMachineSetup });
.Select(combinatorialMachineSetup => new object[] { combinatorialMachineSetup.EnvironmentSetup, combinatorialMachineSetup.ExpectedCombinationsCount });
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
namespace TryAtSoftware.CleanTests.UnitTests;

using System.Text.Json;
using TryAtSoftware.CleanTests.Core.Construction;
using TryAtSoftware.CleanTests.Core.Dependencies;
using TryAtSoftware.CleanTests.UnitTests.Constants;
using TryAtSoftware.CleanTests.UnitTests.Extensions;
using TryAtSoftware.CleanTests.UnitTests.Parametrization;

public class DependenciesManagerTests
{
[Theory(Timeout = UnitTestConstants.Timeout)]
[MemberData(nameof(GetDependenciesManagerSetups))]
public void DependencyGraphsShouldBeConstructedSuccessfully(EnvironmentSetup setup, string pathToExpectedResult)
{
var assemblyTestData = setup.MaterializeAsAssemblyData();
var manager = new ConstructionManager(assemblyTestData);

var allUtilities = assemblyTestData.CleanUtilities.GetAllValues().ToArray();
var expectedOutput = File.ReadLines(pathToExpectedResult).ToArray();
Assert.Equal(allUtilities.Length, expectedOutput.Length);

for (var i = 0; i < allUtilities.Length; i++)
{
var constructionPaths = manager.BuildIndividualConstructionGraphs(new[] { allUtilities[i].Id });
var output = JsonSerializer.Serialize(constructionPaths);
Assert.Equal(expectedOutput[i], output);
}
}

public static IEnumerable<object[]> GetDependenciesManagerSetups()
=> TestParameters.ConstructObservableConstructionManagerSetups()
.Select(dependenciesManagerSetup => new object[] { dependenciesManagerSetup.EnvironmentSetup, dependenciesManagerSetup.PathToExpectedResult });
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[]}]}]]
[[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[]}]}]]
[[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[]}]}]]
[[{"Id":"c:B|n:B1","Dependencies":[]}]]
[[{"Id":"c:B|n:B2","Dependencies":[]}]]
[[{"Id":"c:B|n:B3","Dependencies":[]}]]
[[{"Id":"c:C|n:C1","Dependencies":[{"Id":"c:D|n:D1","Dependencies":[]}]}],[{"Id":"c:C|n:C1","Dependencies":[{"Id":"c:D|n:D2","Dependencies":[]}]}],[{"Id":"c:C|n:C1","Dependencies":[{"Id":"c:D|n:D3","Dependencies":[]}]}]]
[[{"Id":"c:C|n:C2","Dependencies":[{"Id":"c:D|n:D1","Dependencies":[]}]}],[{"Id":"c:C|n:C2","Dependencies":[{"Id":"c:D|n:D2","Dependencies":[]}]}],[{"Id":"c:C|n:C2","Dependencies":[{"Id":"c:D|n:D3","Dependencies":[]}]}]]
[[{"Id":"c:C|n:C3","Dependencies":[{"Id":"c:D|n:D1","Dependencies":[]}]}],[{"Id":"c:C|n:C3","Dependencies":[{"Id":"c:D|n:D2","Dependencies":[]}]}],[{"Id":"c:C|n:C3","Dependencies":[{"Id":"c:D|n:D3","Dependencies":[]}]}]]
[[{"Id":"c:D|n:D1","Dependencies":[]}]]
[[{"Id":"c:D|n:D2","Dependencies":[]}]]
[[{"Id":"c:D|n:D3","Dependencies":[]}]]
[[{"Id":"c:E|n:E1","Dependencies":[{"Id":"c:F|n:F1","Dependencies":[]}]}],[{"Id":"c:E|n:E1","Dependencies":[{"Id":"c:F|n:F2","Dependencies":[]}]}],[{"Id":"c:E|n:E1","Dependencies":[{"Id":"c:F|n:F3","Dependencies":[]}]}]]
[[{"Id":"c:E|n:E2","Dependencies":[{"Id":"c:F|n:F1","Dependencies":[]}]}],[{"Id":"c:E|n:E2","Dependencies":[{"Id":"c:F|n:F2","Dependencies":[]}]}],[{"Id":"c:E|n:E2","Dependencies":[{"Id":"c:F|n:F3","Dependencies":[]}]}]]
[[{"Id":"c:E|n:E3","Dependencies":[{"Id":"c:F|n:F1","Dependencies":[]}]}],[{"Id":"c:E|n:E3","Dependencies":[{"Id":"c:F|n:F2","Dependencies":[]}]}],[{"Id":"c:E|n:E3","Dependencies":[{"Id":"c:F|n:F3","Dependencies":[]}]}]]
[[{"Id":"c:F|n:F1","Dependencies":[]}]]
[[{"Id":"c:F|n:F2","Dependencies":[]}]]
[[{"Id":"c:F|n:F3","Dependencies":[]}]]
[[{"Id":"c:G|n:G1","Dependencies":[{"Id":"c:H|n:H1","Dependencies":[]}]}],[{"Id":"c:G|n:G1","Dependencies":[{"Id":"c:H|n:H2","Dependencies":[]}]}],[{"Id":"c:G|n:G1","Dependencies":[{"Id":"c:H|n:H3","Dependencies":[]}]}]]
[[{"Id":"c:G|n:G2","Dependencies":[{"Id":"c:H|n:H1","Dependencies":[]}]}],[{"Id":"c:G|n:G2","Dependencies":[{"Id":"c:H|n:H2","Dependencies":[]}]}],[{"Id":"c:G|n:G2","Dependencies":[{"Id":"c:H|n:H3","Dependencies":[]}]}]]
[[{"Id":"c:G|n:G3","Dependencies":[{"Id":"c:H|n:H1","Dependencies":[]}]}],[{"Id":"c:G|n:G3","Dependencies":[{"Id":"c:H|n:H2","Dependencies":[]}]}],[{"Id":"c:G|n:G3","Dependencies":[{"Id":"c:H|n:H3","Dependencies":[]}]}]]
[[{"Id":"c:H|n:H1","Dependencies":[]}]]
[[{"Id":"c:H|n:H2","Dependencies":[]}]]
[[{"Id":"c:H|n:H3","Dependencies":[]}]]
[[{"Id":"c:I|n:I1","Dependencies":[{"Id":"c:J|n:J1","Dependencies":[]}]}],[{"Id":"c:I|n:I1","Dependencies":[{"Id":"c:J|n:J2","Dependencies":[]}]}],[{"Id":"c:I|n:I1","Dependencies":[{"Id":"c:J|n:J3","Dependencies":[]}]}]]
[[{"Id":"c:I|n:I2","Dependencies":[{"Id":"c:J|n:J1","Dependencies":[]}]}],[{"Id":"c:I|n:I2","Dependencies":[{"Id":"c:J|n:J2","Dependencies":[]}]}],[{"Id":"c:I|n:I2","Dependencies":[{"Id":"c:J|n:J3","Dependencies":[]}]}]]
[[{"Id":"c:I|n:I3","Dependencies":[{"Id":"c:J|n:J1","Dependencies":[]}]}],[{"Id":"c:I|n:I3","Dependencies":[{"Id":"c:J|n:J2","Dependencies":[]}]}],[{"Id":"c:I|n:I3","Dependencies":[{"Id":"c:J|n:J3","Dependencies":[]}]}]]
[[{"Id":"c:J|n:J1","Dependencies":[]}]]
[[{"Id":"c:J|n:J2","Dependencies":[]}]]
[[{"Id":"c:J|n:J3","Dependencies":[]}]]
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A1","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}]]
[[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A2","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}]]
[[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}]}],[{"Id":"c:A|n:A3","Dependencies":[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]}]]
[[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}],[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}],[{"Id":"c:B|n:B1","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]]
[[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}],[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}],[{"Id":"c:B|n:B2","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]]
[[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C1","Dependencies":[]}]}],[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C2","Dependencies":[]}]}],[{"Id":"c:B|n:B3","Dependencies":[{"Id":"c:C|n:C3","Dependencies":[]}]}]]
[[{"Id":"c:C|n:C1","Dependencies":[]}]]
[[{"Id":"c:C|n:C2","Dependencies":[]}]]
[[{"Id":"c:C|n:C3","Dependencies":[]}]]
Loading