/// <summary> /// Runs a given scenario. It makes a cartesian product of all the scenario possibilities. /// </summary> /// <typeparam name="TGenerator"></typeparam> /// <typeparam name="TLayout"></typeparam> /// <param name="generator"></param> /// <param name="scenario"></param> /// <param name="mapDescriptions"></param> /// <param name="repeats"></param> /// <param name="numberOfLayouts"></param> /// <param name="writer"></param> public void Execute <TGenerator>(TGenerator generator, BenchmarkScenario <TGenerator> scenario, List <Tuple <string, TMapDescription> > mapDescriptions, int repeats = 10, int numberOfLayouts = 10, TextWriter writer = null, TextWriter debugWriter = null) where TGenerator : IBenchmarkableLayoutGenerator <TMapDescription, TLayout> { foreach (var product in scenario.GetSetupsGroups().Select(x => x.GetSetups()).Where(x => x.Count != 0).CartesianProduct()) { var name = string.Join(", ", product.Select(x => x.Item1)); product.Select(x => x.Item2).ToList().ForEach(x => x(generator)); Execute(generator, name, mapDescriptions, repeats, numberOfLayouts, writer, debugWriter); } }
/// <summary> /// Runs a given scenario. It makes a cartesian product of all the scenario possibilities. /// </summary> /// <typeparam name="TGenerator"></typeparam> /// <typeparam name="TLayout"></typeparam> /// <param name="generator"></param> /// <param name="scenario"></param> /// <param name="mapDescriptions"></param> /// <param name="repeats"></param> /// <param name="numberOfLayouts"></param> /// <param name="writer"></param> public void Execute<TGenerator>(TGenerator generator, BenchmarkScenario<TGenerator> scenario, List<Tuple<string, TMapDescription>> mapDescriptions, int repeats = 10, string filename = null) where TGenerator : IBenchmarkableLayoutGenerator<TMapDescription, TLayout> { filename = filename ?? $"{new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()}.txt"; foreach (var product in scenario.GetSetupsGroups().Select(x => x.GetSetups()).Where(x => x.Count != 0).CartesianProduct()) { var name = string.Join(", ", product.Select(x => x.Item1)); product.Select(x => x.Item2).ToList().ForEach(x => x(generator)); Execute(generator, name, mapDescriptions, repeats, filename); } }