@@ -14,13 +14,23 @@ public static void KnownByteSequence()
14
14
{
15
15
byte [ ] inputBytes = new byte [ ] { 0x00 , 0x01 , 0x02 , 0xFD , 0xFE , 0xFF } ;
16
16
Assert . Equal ( "000102FDFEFF" , Convert . ToHexString ( inputBytes ) ) ;
17
+
18
+ Span < char > output = stackalloc char [ 12 ] ;
19
+ Assert . True ( Convert . TryToHexString ( inputBytes , output , out int charsWritten ) ) ;
20
+ Assert . Equal ( 12 , charsWritten ) ;
21
+ Assert . Equal ( "000102FDFEFF" , output . ToString ( ) ) ;
17
22
}
18
23
19
24
[ Fact ]
20
25
public static void KnownByteSequenceLower ( )
21
26
{
22
27
byte [ ] inputBytes = new byte [ ] { 0x00 , 0x01 , 0x02 , 0xFD , 0xFE , 0xFF } ;
23
28
Assert . Equal ( "000102fdfeff" , Convert . ToHexStringLower ( inputBytes ) ) ;
29
+
30
+ Span < char > output = stackalloc char [ 12 ] ;
31
+ Assert . True ( Convert . TryToHexStringLower ( inputBytes , output , out int charsWritten ) ) ;
32
+ Assert . Equal ( 12 , charsWritten ) ;
33
+ Assert . Equal ( "000102fdfeff" , output . ToString ( ) ) ;
24
34
}
25
35
26
36
[ Fact ]
@@ -34,7 +44,13 @@ public static void CompleteValueRange()
34
44
sb . Append ( $ "{ i : X2} ") ;
35
45
}
36
46
37
- Assert . Equal ( sb . ToString ( ) , Convert . ToHexString ( values ) ) ;
47
+ string excepted = sb . ToString ( ) ;
48
+ Assert . Equal ( excepted , Convert . ToHexString ( values ) ) ;
49
+
50
+ Span < char > output = stackalloc char [ 512 ] ;
51
+ Assert . True ( Convert . TryToHexString ( values , output , out int charsWritten ) ) ;
52
+ Assert . Equal ( 512 , charsWritten ) ;
53
+ Assert . Equal ( excepted , output . ToString ( ) ) ;
38
54
}
39
55
40
56
[ Fact ]
@@ -48,7 +64,13 @@ public static void CompleteValueRangeLower()
48
64
sb . Append ( $ "{ i : x2} ") ;
49
65
}
50
66
51
- Assert . Equal ( sb . ToString ( ) , Convert . ToHexStringLower ( values ) ) ;
67
+ string excepted = sb . ToString ( ) ;
68
+ Assert . Equal ( excepted , Convert . ToHexStringLower ( values ) ) ;
69
+
70
+ Span < char > output = stackalloc char [ 512 ] ;
71
+ Assert . True ( Convert . TryToHexStringLower ( values , output , out int charsWritten ) ) ;
72
+ Assert . Equal ( 512 , charsWritten ) ;
73
+ Assert . Equal ( excepted , output . ToString ( ) ) ;
52
74
}
53
75
54
76
[ Fact ]
@@ -57,6 +79,13 @@ public static void ZeroLength()
57
79
byte [ ] inputBytes = Convert . FromHexString ( "000102FDFEFF" ) ;
58
80
Assert . Same ( string . Empty , Convert . ToHexString ( inputBytes , 0 , 0 ) ) ;
59
81
Assert . Same ( string . Empty , Convert . ToHexStringLower ( inputBytes , 0 , 0 ) ) ;
82
+
83
+ int charsWritten ;
84
+ Span < char > output = stackalloc char [ 12 ] ;
85
+ Assert . True ( Convert . TryToHexString ( default , output , out charsWritten ) ) ;
86
+ Assert . Equal ( 0 , charsWritten ) ;
87
+ Assert . True ( Convert . TryToHexStringLower ( default , output , out charsWritten ) ) ;
88
+ Assert . Equal ( 0 , charsWritten ) ;
60
89
}
61
90
62
91
[ Fact ]
@@ -68,6 +97,22 @@ public static void InvalidInputBuffer()
68
97
AssertExtensions . Throws < ArgumentNullException > ( "inArray" , ( ) => Convert . ToHexStringLower ( null , 0 , 0 ) ) ;
69
98
}
70
99
100
+ [ Fact ]
101
+ public static void InvalidOutputBuffer ( )
102
+ {
103
+ byte [ ] inputBytes = new byte [ ] { 0x00 , 0x01 , 0x02 , 0xFD , 0xFE , 0xFF } ;
104
+ int charsWritten ;
105
+ Span < char > output = stackalloc char [ 11 ] ;
106
+ Assert . False ( Convert . TryToHexString ( inputBytes , default , out charsWritten ) ) ;
107
+ Assert . Equal ( 0 , charsWritten ) ;
108
+ Assert . False ( Convert . TryToHexString ( inputBytes , output , out charsWritten ) ) ;
109
+ Assert . Equal ( 0 , charsWritten ) ;
110
+ Assert . False ( Convert . TryToHexStringLower ( inputBytes , default , out charsWritten ) ) ;
111
+ Assert . Equal ( 0 , charsWritten ) ;
112
+ Assert . False ( Convert . TryToHexStringLower ( inputBytes , output , out charsWritten ) ) ;
113
+ Assert . Equal ( 0 , charsWritten ) ;
114
+ }
115
+
71
116
[ Fact ]
72
117
public static void InvalidOffset ( )
73
118
{
@@ -95,6 +140,13 @@ public static unsafe void InputTooLarge()
95
140
{
96
141
AssertExtensions . Throws < ArgumentOutOfRangeException > ( "bytes" , ( ) => Convert . ToHexString ( new ReadOnlySpan < byte > ( ( void * ) 0 , Int32 . MaxValue ) ) ) ;
97
142
AssertExtensions . Throws < ArgumentOutOfRangeException > ( "bytes" , ( ) => Convert . ToHexStringLower ( new ReadOnlySpan < byte > ( ( void * ) 0 , Int32 . MaxValue ) ) ) ;
143
+
144
+ int charsWritten ;
145
+ Span < char > output = new Span < char > ( ( void * ) 0 , Int32 . MaxValue ) ;
146
+ Assert . False ( Convert . TryToHexString ( new ReadOnlySpan < byte > ( ( void * ) 0 , Int32 . MaxValue ) , output , out charsWritten ) ) ;
147
+ Assert . Equal ( 0 , charsWritten ) ;
148
+ Assert . False ( Convert . TryToHexStringLower ( new ReadOnlySpan < byte > ( ( void * ) 0 , Int32 . MaxValue ) , output , out charsWritten ) ) ;
149
+ Assert . Equal ( 0 , charsWritten ) ;
98
150
}
99
151
100
152
public static IEnumerable < object [ ] > ToHexStringTestData ( )
@@ -137,12 +189,33 @@ public static unsafe void ToHexString(byte[] input, string expected)
137
189
Assert . Equal ( expected , actual ) ;
138
190
}
139
191
192
+ [ Theory ]
193
+ [ MemberData ( nameof ( ToHexStringTestData ) ) ]
194
+ public static unsafe void TryToHexString ( byte [ ] input , string expected )
195
+ {
196
+ Span < char > output = new char [ expected . Length ] ;
197
+ Assert . True ( Convert . TryToHexString ( input , output , out int charsWritten ) ) ;
198
+ Assert . Equal ( expected . Length , charsWritten ) ;
199
+ Assert . Equal ( expected , output . ToString ( ) ) ;
200
+ }
201
+
202
+
140
203
[ Theory ]
141
204
[ MemberData ( nameof ( ToHexStringTestData ) ) ]
142
205
public static unsafe void ToHexStringLower ( byte [ ] input , string expected )
143
206
{
144
207
string actual = Convert . ToHexStringLower ( input ) ;
145
208
Assert . Equal ( expected . ToLower ( ) , actual ) ;
146
209
}
210
+
211
+ [ Theory ]
212
+ [ MemberData ( nameof ( ToHexStringTestData ) ) ]
213
+ public static unsafe void TryToHexStringLower ( byte [ ] input , string expected )
214
+ {
215
+ Span < char > output = new char [ expected . Length ] ;
216
+ Assert . True ( Convert . TryToHexStringLower ( input , output , out int charsWritten ) ) ;
217
+ Assert . Equal ( expected . Length , charsWritten ) ;
218
+ Assert . Equal ( expected . ToLower ( ) , output . ToString ( ) ) ;
219
+ }
147
220
}
148
221
}
0 commit comments