1+ package io .r2dbc .postgresql .codec ;
2+
3+ import io .netty .buffer .ByteBuf ;
4+ import io .r2dbc .postgresql .util .TestByteBufAllocator ;
5+ import org .junit .jupiter .params .ParameterizedTest ;
6+ import org .junit .jupiter .params .provider .MethodSource ;
7+ import org .postgresql .util .ByteConverter ;
8+
9+ import java .math .BigDecimal ;
10+ import java .math .BigInteger ;
11+ import java .math .RoundingMode ;
12+ import java .util .stream .Stream ;
13+
14+ import static org .assertj .core .api .Assertions .assertThat ;
15+
16+ class NumericDecodeUtilsTest {
17+
18+ static Stream <Object []> bigDecimalValues () {
19+ return Stream .of (
20+ new Object []{new BigDecimal ("0.1" )},
21+ new Object []{new BigDecimal ("0.10" )},
22+ new Object []{new BigDecimal ("0.01" )},
23+ new Object []{new BigDecimal ("0.001" )},
24+ new Object []{new BigDecimal ("0.0001" )},
25+ new Object []{new BigDecimal ("0.00001" )},
26+ new Object []{new BigDecimal ("-0.1" )},
27+ new Object []{new BigDecimal ("-0.10" )},
28+ new Object []{new BigDecimal ("-0.01" )},
29+ new Object []{new BigDecimal ("-0.002" )},
30+ new Object []{new BigDecimal ("-0.0033" )},
31+ new Object []{new BigDecimal ("-0.004343" )},
32+ new Object []{new BigDecimal ("1.0" )},
33+ new Object []{new BigDecimal ("0.000000000000000000000000000000000000000000000000000" )},
34+ new Object []{new BigDecimal ("0.100000000000000000000000000000000000000000000009900" )},
35+ new Object []{new BigDecimal ("-1.0" )},
36+ new Object []{new BigDecimal ("-1" )},
37+ new Object []{new BigDecimal ("1.2" )},
38+ new Object []{new BigDecimal ("-2.05" )},
39+ new Object []{new BigDecimal ("0.000000000000000000000000000990" )},
40+ new Object []{new BigDecimal ("-0.000000000000000000000000000990" )},
41+ new Object []{new BigDecimal ("10.0000000000099" )},
42+ new Object []{new BigDecimal (".10000000000000" )},
43+ new Object []{new BigDecimal ("1.10000000000000" )},
44+ new Object []{new BigDecimal ("99999.2" )},
45+ new Object []{new BigDecimal ("99999" )},
46+ new Object []{new BigDecimal ("-99999.2" )},
47+ new Object []{new BigDecimal ("-99999" )},
48+ new Object []{new BigDecimal ("2147483647" )},
49+ new Object []{new BigDecimal ("-2147483648" )},
50+ new Object []{new BigDecimal ("2147483648" )},
51+ new Object []{new BigDecimal ("-2147483649" )},
52+ new Object []{new BigDecimal ("9223372036854775807" )},
53+ new Object []{new BigDecimal ("-9223372036854775808" )},
54+ new Object []{new BigDecimal ("9223372036854775808" )},
55+ new Object []{new BigDecimal ("-9223372036854775809" )},
56+ new Object []{new BigDecimal ("10223372036850000000" )},
57+ new Object []{new BigDecimal ("19223372036854775807" )},
58+ new Object []{new BigDecimal ("19223372036854775807.300" )},
59+ new Object []{new BigDecimal ("-19223372036854775807.300" )},
60+ new Object []{new BigDecimal (BigInteger .valueOf (1234567890987654321L ), -1 )},
61+ new Object []{new BigDecimal (BigInteger .valueOf (1234567890987654321L ), -5 )},
62+ new Object []{new BigDecimal (BigInteger .valueOf (-1234567890987654321L ), -3 )},
63+ new Object []{new BigDecimal (BigInteger .valueOf (6 ), -8 )},
64+ new Object []{new BigDecimal ("30000" )},
65+ new Object []{new BigDecimal ("40000" ).setScale (15 , RoundingMode .UNNECESSARY )},
66+ new Object []{new BigDecimal ("20000.000000000000000000" )},
67+ new Object []{new BigDecimal ("9990000" ).setScale (8 , RoundingMode .UNNECESSARY )},
68+ new Object []{new BigDecimal ("1000000" ).setScale (31 , RoundingMode .UNNECESSARY )},
69+ new Object []{new BigDecimal ("10000000000000000000000000000000000000" ).setScale (14 , RoundingMode .UNNECESSARY )},
70+ new Object []{new BigDecimal ("90000000000000000000000000000000000000" )},
71+ new Object []{new BigDecimal ("1234567890.12" )},
72+ new Object []{new BigDecimal ("-3.141592653590" )},
73+ new Object []{new BigDecimal ("3.141592653590" )},
74+ new Object []{new BigDecimal ("-0.141592653590" )},
75+ new Object []{new BigDecimal ("0.141592653590" )}
76+ );
77+ }
78+
79+ @ MethodSource ("bigDecimalValues" )
80+ @ ParameterizedTest
81+ void decodeBinary2 (BigDecimal value ) {
82+ ByteBuf byteBuf = TestByteBufAllocator .TEST .buffer ();
83+ byteBuf .writeBytes (ByteConverter .numeric (value ));
84+ assertThat (NumericDecodeUtils .decodeBinary (byteBuf )).isEqualByComparingTo (value );
85+ }
86+
87+ }
0 commit comments