Skip to content

Commit 9f18574

Browse files
create new modes - Combinatorial, PairwiseOptimized and CombinatorialOptimized
add possiblity to change the strategy in the ABC how we generate the intial population add possibility to clone ABC config, and change the Random Seed for the algorithm add new test to find the optimal seed for the ABC
1 parent d394eb8 commit 9f18574

26 files changed

+278
-96
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dotnet add package Testimize
3838

3939
## 📐 Modes of Generation
4040

41-
Testimize offers **three powerful modes** of test case generation:
41+
Testimize offers **two powerful modes** of test case generation:
4242

4343
### ✅ 1. Precise Mode
4444

@@ -243,6 +243,7 @@ public void QueryCountry_WithLanguageAndContinentFilters_ShouldReturn200(
243243
See `/samples` for examples of using Testimize in:
244244

245245
- ✅ Unit tests
246+
- ✅ System Web, Mobile, Desktop, API tests
246247
- ✅ Data-driven tests
247248
- ✅ Exploratory test generation
248249

Testimize.Tests/Experiments/ABCPairwiseScoresComparisonTests.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
using Testimize.TestCaseGenerators;
2121
using Testimize.Contracts;
2222
using Testimize.Parameters.Core;
23+
using System.Threading.Tasks;
24+
using System.Collections.Concurrent;
2325

2426
namespace Testimize.Tests.Experiments;
2527

@@ -41,6 +43,35 @@ public void SetUp()
4143
PrecomputePairwiseScores();
4244
}
4345

46+
[Test]
47+
public void FindBestSeed_ForTopABCConfig_Parallel_Optimized()
48+
{
49+
const int maxSeed = 10000;
50+
var baseConfig = new ABCGenerationSettings();
51+
52+
Console.WriteLine("\n========== Finding Best Seed for Top Config ==========");
53+
54+
var results = new ConcurrentBag<(int Seed, double Score)>();
55+
56+
Parallel.For(0, maxSeed, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, seed =>
57+
{
58+
var config = (ABCGenerationSettings)baseConfig.Clone();
59+
config.Seed = seed;
60+
61+
var abcGenerator = new HybridArtificialBeeColonyTestCaseGenerator(config);
62+
var abcTestCases = abcGenerator.RunABCAlgorithm(_parameters);
63+
64+
var evaluator = new TestCaseEvaluator();
65+
double score = evaluator.EvaluatePopulationToDictionary(abcTestCases).Values.Sum();
66+
results.Add((seed, score));
67+
});
68+
69+
var best = results.OrderByDescending(r => r.Score).First();
70+
71+
Console.WriteLine($"\n✅ Best Seed Found: {best.Seed} with Score: {best.Score}");
72+
Debug.WriteLine($"\n✅ Best Seed Found: {best.Seed} with Score: {best.Score}");
73+
}
74+
4475
[Test]
4576
[Category(Categories.CI)]
4677
public void RunOptimizationBenchmark()
@@ -225,7 +256,7 @@ public void InitializeParameterSets()
225256
// 🔹 Precompute pairwise scores for baseline comparison
226257
private void PrecomputePairwiseScores()
227258
{
228-
var pairwiseTestCases = PairwiseTestCaseGenerator.GenerateTestCases(_parameters);
259+
var pairwiseTestCases = new PairwiseTestCaseGenerator().GenerateTestCases(_parameters);
229260
var testCaseEvaluator = new TestCaseEvaluator();
230261
testCaseEvaluator.EvaluatePopulation(pairwiseTestCases);
231262

Testimize.Tests/Experiments/ABCValidPairwiseScoresComparisonTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ private void InitializeParameterSets()
235235
// 🔹 Precompute pairwise scores for baseline comparison
236236
private void PrecomputePairwiseScores()
237237
{
238-
var pairwiseTestCases = PairwiseTestCaseGenerator.GenerateTestCases(_parameters);
238+
var pairwiseTestCases = new PairwiseTestCaseGenerator().GenerateTestCases(_parameters);
239239
var testCaseEvaluator = new TestCaseEvaluator();
240240
testCaseEvaluator.EvaluatePopulation(pairwiseTestCases);
241241

Testimize.Tests/RealWorldExamples/ExploratoryModeCountriesGraphQLTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static List<TestCase> ConfigureEngine() =>
5454
}).Generate();
5555

5656
[Test]
57-
[ABCTestCaseSource2(nameof(ConfigureEngine))]
57+
[TestimizeGeneratedTestCases(nameof(ConfigureEngine))]
5858
public void QueryCountry_WithLanguageAndContinentFilters_ShouldReturn200(
5959
string countryCode, string languageCode, string continentCode)
6060
{

Testimize.Tests/RealWorldExamples/JsonPlaceholderPostTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public static List<TestCase> ConfigureEngine() =>
6161
}).Generate();
6262

6363
[Test]
64-
[ABCTestCaseSource2(nameof(ConfigureEngine))]
64+
[TestimizeGeneratedTestCases(nameof(ConfigureEngine))]
6565
public void CreateFullPost_WithGeneratedMetadata_ShouldSucceed(
6666
string title,
6767
string body,

Testimize.Tests/RealWorldExamples/ReqresRegistrationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static List<TestCase> ConfigureEngine() =>
3636
}).Generate();
3737

3838
[Test]
39-
[ABCTestCaseSource2(nameof(ConfigureEngine))]
39+
[TestimizeGeneratedTestCases(nameof(ConfigureEngine))]
4040
public void RegisterUser_WithGeneratedEmailAndPassword(string email, string password)
4141
{
4242
var client = new RestClient("https://reqres.in");

Testimize.Tests/RealWorldExamples/SampleSecondVerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static List<TestCase> ConfigureEngine() =>
4343
}
4444
).Generate();
4545

46-
[Test, ABCTestCaseSource2(nameof(ConfigureEngine))]
46+
[Test, TestimizeGeneratedTestCases(nameof(ConfigureEngine))]
4747
//[Category(Categories.CI)]
4848
public void TestABCGeneration(string textValue, string email, string phone, string anotherText)
4949
{

Testimize.Tests/UnitTests/ABCTestCaseGeneratorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void SetUp()
8181
_abcGenerator = new HybridArtificialBeeColonyTestCaseGenerator(config);
8282
_abcTestCases = _abcGenerator.RunABCAlgorithm(_parameters);
8383

84-
_pairwiseTestCases = PairwiseTestCaseGenerator.GenerateTestCases(_parameters);
84+
_pairwiseTestCases = new PairwiseTestCaseGenerator().GenerateTestCases(_parameters);
8585

8686
_filteredPairwiseTestCases = _pairwiseTestCases
8787
.Where(tc => tc.Values.Count(value =>

Testimize.Tests/UnitTests/PairwiseTestCaseGeneratorTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void GeneratesValidPairwiseCombinations()
4747
new MockInputParameter("Param3", "X", "Y")
4848
};
4949

50-
var testCases = PairwiseTestCaseGenerator.GenerateTestCases(parameters);
50+
var testCases = new PairwiseTestCaseGenerator().GenerateTestCases(parameters);
5151

5252
Assert.That(testCases, Is.Not.Null);
5353
Assert.That(testCases.Count, Is.GreaterThan(0), "Test cases should be generated.");
@@ -98,7 +98,7 @@ public void GeneratesMinimalNumberOfTestCases()
9898
new MockInputParameter("Param3", "X", "Y")
9999
};
100100

101-
var testCases = PairwiseTestCaseGenerator.GenerateTestCases(parameters);
101+
var testCases = new PairwiseTestCaseGenerator().GenerateTestCases(parameters);
102102
Assert.That(testCases.Count, Is.LessThan(12), "Pairwise should generate fewer test cases than full cartesian.");
103103
}
104104

@@ -111,15 +111,15 @@ public void HandlesSingleParameterCase()
111111
new MockInputParameter("Param1", "A", "B", "C")
112112
};
113113

114-
var ex = Assert.Throws<ArgumentException>(() => PairwiseTestCaseGenerator.GenerateTestCases(parameters));
114+
var ex = Assert.Throws<ArgumentException>(() => new PairwiseTestCaseGenerator().GenerateTestCases(parameters));
115115
Assert.That(ex.Message, Is.EqualTo("Pairwise testing requires at least two parameters."));
116116
}
117117

118118
[Test]
119119
[Category(Categories.CI)]
120120
public void HandlesEmptyParameterList()
121121
{
122-
var ex = Assert.Throws<ArgumentException>(() => PairwiseTestCaseGenerator.GenerateTestCases(new List<IInputParameter>()));
122+
var ex = Assert.Throws<ArgumentException>(() => new PairwiseTestCaseGenerator().GenerateTestCases(new List<IInputParameter>()));
123123
Assert.That(ex.Message, Is.EqualTo("Pairwise testing requires at least two parameters."));
124124
}
125125

@@ -134,7 +134,7 @@ public void ValidatesNoDuplicateTestCases()
134134
new MockInputParameter("Param3", "X", "Y")
135135
};
136136

137-
var testCases = PairwiseTestCaseGenerator.GenerateTestCases(parameters);
137+
var testCases = new PairwiseTestCaseGenerator().GenerateTestCases(parameters);
138138
var uniqueTestCases = new HashSet<string>(testCases.Select(tc => string.Join(",", tc.Values.Select(v => v.Value))));
139139

140140
Assert.That(uniqueTestCases.Count, Is.EqualTo(testCases.Count), "No duplicate test cases should be generated.");

Testimize.Tests/testimizeSettings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
"enforceMutationUniqueness": true,
1818
"stagnationThresholdPercentage": 0.75,
1919
"coolingRate": 0.95,
20-
"allowMultipleInvalidInputs": false
20+
"allowMultipleInvalidInputs": false,
21+
"seed": 8941 // 42
2122
},
2223
"inputTypeSettings": {
2324
"Email": {

0 commit comments

Comments
 (0)