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