@@ -5,7 +5,9 @@ namespace LuhnDotNetBenchmark;
5
5
using LuhnDotNet ;
6
6
using System ;
7
7
using System . Collections . Generic ;
8
+ using System . Diagnostics . CodeAnalysis ;
8
9
10
+ [ ExcludeFromCodeCoverage ]
9
11
[ MemoryDiagnoser ]
10
12
[ GroupBenchmarksBy ( BenchmarkLogicalGroupRule . ByCategory ) ]
11
13
[ CategoriesColumn ]
@@ -15,66 +17,146 @@ public class LuhnDotNetBenchmark
15
17
private const string ComputeLuhnCheckDigitCategory = "Compute Luhn check digit" ;
16
18
private const string IsValidLuhnNumberCategory = "Validate Luhn number" ;
17
19
private const string IsValidLuhnCheckDigitCategory = "Validate Luhn check digit" ;
20
+ private const string AlphaNumericToNumericCategory = "AlphaNumeric to Numeric" ;
21
+ private const string RemoveSeparatorCategory = "Remove separators" ;
22
+ private const string ValidationChainCategory = "Validation chain" ;
23
+ private const string ComputeChainCategory = "Compute chain" ;
18
24
19
- public static IEnumerable < string > NumbersAsString ( )
25
+ public static IEnumerable < string > NumericNumbersAsString ( )
20
26
{
21
27
yield return "79927398713" ;
22
28
yield return "79927398718234234134645645645624563445654634343462545462546546245624356245625624565265432" ;
23
29
}
24
30
31
+ public static IEnumerable < string > AlphaNumericNumbersAsString ( )
32
+ {
33
+ yield return "US79927398713" ;
34
+ yield return "79927398713DE" ;
35
+ yield return "ABCDEF" ;
36
+ yield return "DE79927398718234234134645645645624563445654634343462545462546546245624356245625624565265432" ;
37
+ }
38
+
39
+ public static IEnumerable < string > SeparatedNumbersAsString ( )
40
+ {
41
+ yield return "7992-7398-7134" ;
42
+ yield return "79927398/71823423413464564564562456344565463434346254546254654/6245624356245625624565265432" ;
43
+ }
44
+
45
+ public static IEnumerable < string > SeparatedAlphaNumericNumbersAsString ( )
46
+ {
47
+ yield return "US-7992-7398-7134" ;
48
+ yield return "A7992-B7398-C7134" ;
49
+ }
50
+
25
51
[ Benchmark ( Baseline = true ) , BenchmarkCategory ( ComputeLuhnNumberCategory ) ]
26
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
52
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
27
53
public void ComputeLuhnNumberBasedOnString ( string number )
28
54
{
29
55
number . ComputeLuhnNumber ( ) ;
30
56
}
31
57
32
58
[ Benchmark ( Baseline = true ) , BenchmarkCategory ( ComputeLuhnCheckDigitCategory ) ]
33
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
59
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
34
60
public void ComputeLuhnCheckDigitBasedOnString ( string number )
35
61
{
36
62
number . ComputeLuhnCheckDigit ( ) ;
37
63
}
38
64
39
65
[ Benchmark ( Baseline = true ) , BenchmarkCategory ( IsValidLuhnNumberCategory ) ]
40
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
66
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
41
67
public void IsValidLuhnNumberBasedOnString ( string number )
42
68
{
43
69
number . IsValidLuhnNumber ( ) ;
44
70
}
45
71
46
72
[ Benchmark ( Baseline = true ) , BenchmarkCategory ( IsValidLuhnCheckDigitCategory ) ]
47
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
73
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
48
74
public void IsValidLuhnCheckDigitBasedOnString ( string number )
49
75
{
50
76
byte . MinValue . IsValidLuhnCheckDigit ( number ) ;
51
77
}
52
78
53
79
[ Benchmark , BenchmarkCategory ( ComputeLuhnNumberCategory ) ]
54
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
80
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
55
81
public void ComputeLuhnNumberBasedOnSpan ( string number )
56
82
{
57
83
number . AsSpan ( ) . ComputeLuhnNumber ( ) ;
58
84
}
59
85
60
86
[ Benchmark , BenchmarkCategory ( ComputeLuhnCheckDigitCategory ) ]
61
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
87
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
62
88
public void ComputeLuhnCheckDigitBasedOnSpan ( string number )
63
89
{
64
90
number . AsSpan ( ) . ComputeLuhnCheckDigit ( ) ;
65
91
}
66
92
67
93
[ Benchmark , BenchmarkCategory ( IsValidLuhnNumberCategory ) ]
68
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
94
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
69
95
public void IsValidLuhnNumberBasedOnSpan ( string number )
70
96
{
71
97
number . AsSpan ( ) . IsValidLuhnNumber ( ) ;
72
98
}
73
99
74
100
[ Benchmark , BenchmarkCategory ( IsValidLuhnCheckDigitCategory ) ]
75
- [ ArgumentsSource ( nameof ( NumbersAsString ) ) ]
101
+ [ ArgumentsSource ( nameof ( NumericNumbersAsString ) ) ]
76
102
public void IsValidLuhnCheckDigitBasedOnSpan ( string number )
77
103
{
78
104
byte . MinValue . IsValidLuhnCheckDigit ( number . AsSpan ( ) ) ;
79
105
}
80
- }
106
+
107
+ [ Benchmark ( Baseline = true ) , BenchmarkCategory ( AlphaNumericToNumericCategory ) ]
108
+ [ ArgumentsSource ( nameof ( AlphaNumericNumbersAsString ) ) ]
109
+ public void AlphaNumericToNumericBasedOnString ( string number )
110
+ {
111
+ number . AlphaNumericToNumeric ( ) ;
112
+ }
113
+
114
+ [ Benchmark , BenchmarkCategory ( AlphaNumericToNumericCategory ) ]
115
+ [ ArgumentsSource ( nameof ( AlphaNumericNumbersAsString ) ) ]
116
+ public void AlphaNumericToNumericBasedOnSpan ( string number )
117
+ {
118
+ number . AsSpan ( ) . AlphaNumericToNumeric ( ) ;
119
+ }
120
+
121
+ [ Benchmark ( Baseline = true ) , BenchmarkCategory ( RemoveSeparatorCategory ) ]
122
+ [ ArgumentsSource ( nameof ( SeparatedNumbersAsString ) ) ]
123
+ public void RemoveSeparatorBasedOnString ( string number )
124
+ {
125
+ number . RemoveSeparators ( ) ;
126
+ }
127
+
128
+ [ Benchmark , BenchmarkCategory ( RemoveSeparatorCategory ) ]
129
+ [ ArgumentsSource ( nameof ( SeparatedNumbersAsString ) ) ]
130
+ public void RemoveSeparatorBasedOnSpan ( string number )
131
+ {
132
+ number . AsSpan ( ) . RemoveSeparators ( ) ;
133
+ }
134
+
135
+ [ Benchmark ( Baseline = true ) , BenchmarkCategory ( ComputeChainCategory ) ]
136
+ [ ArgumentsSource ( nameof ( SeparatedAlphaNumericNumbersAsString ) ) ]
137
+ public void ComputeChainBasedOnString ( string number )
138
+ {
139
+ number . RemoveSeparators ( ) . AlphaNumericToNumeric ( ) . ComputeLuhnNumber ( ) ;
140
+ }
141
+
142
+ [ Benchmark , BenchmarkCategory ( ComputeChainCategory ) ]
143
+ [ ArgumentsSource ( nameof ( SeparatedAlphaNumericNumbersAsString ) ) ]
144
+ public void ComputeChainBasedOnSpan ( string number )
145
+ {
146
+ number . AsSpan ( ) . RemoveSeparators ( ) . AlphaNumericToNumeric ( ) . ComputeLuhnNumber ( ) ;
147
+ }
148
+
149
+ [ Benchmark ( Baseline = true ) , BenchmarkCategory ( ValidationChainCategory ) ]
150
+ [ ArgumentsSource ( nameof ( SeparatedAlphaNumericNumbersAsString ) ) ]
151
+ public void ValidationChainBasedOnString ( string number )
152
+ {
153
+ number . RemoveSeparators ( ) . AlphaNumericToNumeric ( ) . IsValidLuhnNumber ( ) ;
154
+ }
155
+
156
+ [ Benchmark , BenchmarkCategory ( ValidationChainCategory ) ]
157
+ [ ArgumentsSource ( nameof ( SeparatedAlphaNumericNumbersAsString ) ) ]
158
+ public void ValidationChainBasedOnSpan ( string number )
159
+ {
160
+ number . AsSpan ( ) . RemoveSeparators ( ) . AlphaNumericToNumeric ( ) . IsValidLuhnNumber ( ) ;
161
+ }
162
+ }
0 commit comments