-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExperimentsTask.cs
More file actions
111 lines (95 loc) · 4.04 KB
/
Copy pathExperimentsTask.cs
File metadata and controls
111 lines (95 loc) · 4.04 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System.Collections.Generic;
namespace StructBenchmarking
{
public interface IExperimentsFactory
{
IClass CreateClassFactory();
IStruct CreateStructFactory();
}
public class ArrayCreationExperimentsFactory : IExperimentsFactory
{
public IClass CreateClassFactory() => new ArrayCreationForClass();
public IStruct CreateStructFactory() => new ArrayCreationForStruct();
}
public class MethodCallExperimentsFactory : IExperimentsFactory
{
public IClass CreateClassFactory() => new MethodCallForClass();
public IStruct CreateStructFactory() => new MethodCallForStruct();
}
public interface IClass
{
List<ExperimentResult> DoExperimentsForClass(IBenchmark benchmark, int repetitionsCount);
}
public class ArrayCreationForClass : IClass
{
public List<ExperimentResult> DoExperimentsForClass(IBenchmark benchmark, int repetitionsCount)
{
var results = new List<ExperimentResult>();
for (var i = 16; i <= 512; i *= 2)
results.Add(
new ExperimentResult(i,
benchmark.MeasureDurationInMs(new ClassArrayCreationTask(i), repetitionsCount)));
return results;
}
}
public class MethodCallForClass : IClass
{
public List<ExperimentResult> DoExperimentsForClass(IBenchmark benchmark, int repetitionsCount)
{
var results = new List<ExperimentResult>();
for (var i = 16; i <= 512; i *= 2)
results.Add(new ExperimentResult(i,
benchmark.MeasureDurationInMs(new MethodCallWithClassArgumentTask(i), repetitionsCount)));
return results;
}
}
public interface IStruct
{
List<ExperimentResult> DoExperimentsForStruct(IBenchmark benchmark, int repetitionsCount);
}
public class ArrayCreationForStruct : IStruct
{
public List<ExperimentResult> DoExperimentsForStruct(IBenchmark benchmark, int repetitionsCount)
{
var results = new List<ExperimentResult>();
for (var i = 16; i <= 512; i *= 2)
results.Add(new ExperimentResult(i,
benchmark.MeasureDurationInMs(new StructArrayCreationTask(i), repetitionsCount)));
return results;
}
}
public class MethodCallForStruct : IStruct
{
public List<ExperimentResult> DoExperimentsForStruct(IBenchmark benchmark, int repetitionsCount)
{
var results = new List<ExperimentResult>();
for (var i = 16; i <= 512; i *= 2)
results.Add(new ExperimentResult(i,
benchmark.MeasureDurationInMs(new MethodCallWithStructArgumentTask(i), repetitionsCount)));
return results;
}
}
public class Experiments
{
private static readonly IExperimentsFactory ArrayCreationFactory = new ArrayCreationExperimentsFactory();
private static readonly IExperimentsFactory MethodCallFactory = new MethodCallExperimentsFactory();
public static ChartData BuildChartDataForArrayCreation(IBenchmark benchmark, int repetitionsCount)
{
return new ChartData
{
Title = "Create array",
ClassPoints = ArrayCreationFactory.CreateClassFactory().DoExperimentsForClass(benchmark, repetitionsCount),
StructPoints = ArrayCreationFactory.CreateStructFactory().DoExperimentsForStruct(benchmark, repetitionsCount)
};
}
public static ChartData BuildChartDataForMethodCall(IBenchmark benchmark, int repetitionsCount)
{
return new ChartData
{
Title = "Call method with argument",
ClassPoints = MethodCallFactory.CreateClassFactory().DoExperimentsForClass(benchmark, repetitionsCount),
StructPoints = MethodCallFactory.CreateStructFactory().DoExperimentsForStruct(benchmark, repetitionsCount)
};
}
}
}