-
Notifications
You must be signed in to change notification settings - Fork 391
/
Copy pathParseUnitBenchmarks.cs
123 lines (105 loc) · 3.72 KB
/
ParseUnitBenchmarks.cs
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
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Globalization;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using UnitsNet.Units;
namespace UnitsNet.Benchmark.Conversions.FromString;
[MemoryDiagnoser]
[SimpleJob(RuntimeMoniker.Net48)]
[SimpleJob(RuntimeMoniker.Net80)]
public class ParseUnitBenchmarks
{
private const int NbAbbreviations = 1000;
private static readonly CultureInfo Culture = CultureInfo.InvariantCulture;
private readonly Random _random = new(42);
private string[] _densityUnits;
private string[] _massUnits;
private string[] _pressureUnits;
private string[] _volumeFlowUnits;
private string[] _volumeUnits = [];
[GlobalSetup(Target = nameof(ParseMassUnit))]
public void PrepareMassUnits()
{
_massUnits = _random.GetItems(["mg", "g", "kg", "lbs", "Mlbs"], NbAbbreviations);
// initializes the QuantityInfoLookup and the abbreviations cache
Mass.TryParseUnit("_invalid", Culture, out _);
}
[GlobalSetup(Target = nameof(ParseVolumeUnit))]
public void PrepareVolumeUnits()
{
_volumeUnits = _random.GetItems(["ml", "l", "L", "cm³", "m³"], NbAbbreviations);
// initializes the QuantityInfoLookup and the abbreviations cache
Volume.TryParseUnit("_invalid", Culture, out _);
}
[GlobalSetup(Target = nameof(ParseDensityUnit))]
public void PrepareDensityUnits()
{
_densityUnits = _random.GetRandomAbbreviations<DensityUnit>(UnitsNetSetup.Default.UnitAbbreviations, NbAbbreviations);
// initializes the QuantityInfoLookup and the abbreviations cache
Density.TryParseUnit("_invalid", Culture, out _);
}
[GlobalSetup(Target = nameof(ParsePressureUnit))]
public void PreparePressureUnits()
{
_pressureUnits = _random.GetRandomAbbreviations<PressureUnit>(UnitsNetSetup.Default.UnitAbbreviations, NbAbbreviations);
// initializes the QuantityInfoLookup and the abbreviations cache
Pressure.TryParseUnit("_invalid", Culture, out _);
}
[GlobalSetup(Target = nameof(ParseVolumeFlowUnit))]
public void PrepareVolumeFlowUnits()
{
_volumeFlowUnits = _random.GetRandomAbbreviations<VolumeFlowUnit>(UnitsNetSetup.Default.UnitAbbreviations, NbAbbreviations);
// initializes the QuantityInfoLookup and the abbreviations cache
VolumeFlow.TryParseUnit("_invalid", Culture, out _);
}
[Benchmark(Baseline = true)]
public MassUnit ParseMassUnit()
{
MassUnit unit = default;
foreach (var unitToParse in _massUnits)
{
unit = Mass.ParseUnit(unitToParse, Culture);
}
return unit;
}
[Benchmark(Baseline = false)]
public VolumeUnit ParseVolumeUnit()
{
VolumeUnit unit = default;
foreach (var unitToParse in _volumeUnits)
{
unit = Volume.ParseUnit(unitToParse, Culture);
}
return unit;
}
[Benchmark(Baseline = false)]
public DensityUnit ParseDensityUnit()
{
DensityUnit unit = default;
foreach (var unitToParse in _densityUnits)
{
unit = Density.ParseUnit(unitToParse, Culture);
}
return unit;
}
[Benchmark(Baseline = false)]
public PressureUnit ParsePressureUnit()
{
PressureUnit unit = default;
foreach (var unitToParse in _pressureUnits)
{
unit = Pressure.ParseUnit(unitToParse, Culture);
}
return unit;
}
[Benchmark(Baseline = false)]
public VolumeFlowUnit ParseVolumeFlowUnit()
{
VolumeFlowUnit unit = default;
foreach (var unitToParse in _volumeFlowUnits)
{
unit = VolumeFlow.ParseUnit(unitToParse, Culture);
}
return unit;
}
}