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