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