1
+ using System . Globalization ;
2
+ using System . Text ;
3
+ using Hexa . NET . Utilities . Text ;
4
+
5
+ namespace Hexa . NET . Utilities . Tests ;
6
+
7
+ public class Utf8FormatterTests
8
+ {
9
+ [ TestCase ( 1f , 0 , "1" ) ]
10
+ [ TestCase ( 10f , 0 , "10" ) ]
11
+ [ TestCase ( 0.5f , 1 , "0.5" ) ]
12
+ [ TestCase ( 0.75f , 2 , "0.75" ) ]
13
+ [ TestCase ( 0.125f , 3 , "0.125" ) ]
14
+ [ TestCase ( 0.0625f , 4 , "0.0625" ) ]
15
+ [ TestCase ( 0.03125f , 5 , "0.03125" ) ]
16
+ [ TestCase ( 0.015625f , 6 , "0.015625" ) ]
17
+ [ TestCase ( 0.0078125f , 7 , "0.0078125" ) ]
18
+ public unsafe void FormatFloatTest ( float value , int digit , string expected )
19
+ {
20
+ // Arrange
21
+ byte * buffer = stackalloc byte [ 128 ] ;
22
+
23
+ // Act
24
+ int len = Utf8Formatter . Format ( value , buffer , 128 , CultureInfo . InvariantCulture , digit ) ;
25
+ ReadOnlySpan < byte > utf8Span = new ReadOnlySpan < byte > ( buffer , len ) ;
26
+
27
+ // Assert
28
+ Assert . That ( Encoding . UTF8 . GetString ( utf8Span ) , Is . EqualTo ( expected ) ) ;
29
+ }
30
+
31
+ [ TestCase ( 1 , 0 , "1" ) ]
32
+ [ TestCase ( 10 , 0 , "10" ) ]
33
+ [ TestCase ( 0.5 , 1 , "0.5" ) ]
34
+ [ TestCase ( 0.75 , 2 , "0.75" ) ]
35
+ [ TestCase ( 0.125 , 3 , "0.125" ) ]
36
+ [ TestCase ( 0.0625 , 4 , "0.0625" ) ]
37
+ [ TestCase ( 0.03125 , 5 , "0.03125" ) ]
38
+ [ TestCase ( 0.015625 , 6 , "0.015625" ) ]
39
+ [ TestCase ( 0.0078125 , 7 , "0.0078125" ) ]
40
+ public unsafe void FormatDoubleTest ( double value , int digit , string expected )
41
+ {
42
+ // Arrange
43
+ byte * buffer = stackalloc byte [ 128 ] ;
44
+
45
+ // Act
46
+ int len = Utf8Formatter . Format ( value , buffer , 128 , CultureInfo . InvariantCulture , digit ) ;
47
+ ReadOnlySpan < byte > utf8Span = new ReadOnlySpan < byte > ( buffer , len ) ;
48
+
49
+ // Assert
50
+ Assert . That ( Encoding . UTF8 . GetString ( utf8Span ) , Is . EqualTo ( expected ) ) ;
51
+ }
52
+
53
+ [ TestCase ( 10 , 0 , "." , "10" ) ]
54
+ [ TestCase ( 10 , 0 , "\uFF0C " , "10" ) ]
55
+ [ TestCase ( 0.75f , 2 , "." , "0.75" ) ]
56
+ [ TestCase ( 0.75f , 2 , "\uFF0C " , "0\uFF0C 75" ) ]
57
+ public unsafe void FormatFloatCultureTest ( float value , int digit , string separator , string expected )
58
+ {
59
+ // Arrange
60
+ byte * buffer = stackalloc byte [ 128 ] ;
61
+ var culture = new CultureInfo ( "" , false )
62
+ {
63
+ NumberFormat =
64
+ {
65
+ CurrencyDecimalSeparator = separator
66
+ }
67
+ } ;
68
+
69
+ // Act
70
+ int len = Utf8Formatter . Format ( value , buffer , 128 , culture , digit ) ;
71
+ ReadOnlySpan < byte > utf8Span = new ReadOnlySpan < byte > ( buffer , len ) ;
72
+
73
+ // Assert
74
+ Assert . That ( Encoding . UTF8 . GetString ( utf8Span ) , Is . EqualTo ( expected ) ) ;
75
+ }
76
+
77
+ [ TestCase ( 10 , 0 , "." , "10" ) ]
78
+ [ TestCase ( 10 , 0 , "\uFF0C " , "10" ) ]
79
+ [ TestCase ( 0.75 , 2 , "." , "0.75" ) ]
80
+ [ TestCase ( 0.75 , 2 , "\uFF0C " , "0\uFF0C 75" ) ]
81
+ public unsafe void FormatDoubleCultureTest ( double value , int digit , string separator , string expected )
82
+ {
83
+ // Arrange
84
+ byte * buffer = stackalloc byte [ 128 ] ;
85
+ var culture = new CultureInfo ( "" , false )
86
+ {
87
+ NumberFormat =
88
+ {
89
+ CurrencyDecimalSeparator = separator
90
+ }
91
+ } ;
92
+
93
+ // Act
94
+ int len = Utf8Formatter . Format ( value , buffer , 128 , culture , digit ) ;
95
+ var utf8Span = new ReadOnlySpan < byte > ( buffer , len ) ;
96
+
97
+ // Assert
98
+ Assert . That ( Encoding . UTF8 . GetString ( utf8Span ) , Is . EqualTo ( expected ) ) ;
99
+ }
100
+ }
0 commit comments