@@ -79,6 +79,109 @@ public function testReverseTransform()
79
79
$ this ->assertEquals (2 , $ transformer ->reverseTransform ('200 ' ));
80
80
}
81
81
82
+ public function reverseTransformWithRoundingProvider ()
83
+ {
84
+ return [
85
+ // towards positive infinity (1.6 -> 2, -1.6 -> -1)
86
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
87
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
88
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
89
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
90
+ [null , 0 , '34.5 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
91
+ [null , 0 , '34.4 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
92
+ [null , 1 , '3.45 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
93
+ [null , 1 , '3.44 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
94
+ // towards negative infinity (1.6 -> 1, -1.6 -> -2)
95
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
96
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
97
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
98
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
99
+ [null , 0 , '34.5 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
100
+ [null , 0 , '34.4 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
101
+ [null , 1 , '3.45 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
102
+ [null , 1 , '3.44 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
103
+ // away from zero (1.6 -> 2, -1.6 -> 2)
104
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 35 , PercentToLocalizedStringTransformer::ROUND_UP ],
105
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 35 , PercentToLocalizedStringTransformer::ROUND_UP ],
106
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_UP ],
107
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_UP ],
108
+ [null , 0 , '34.5 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_UP ],
109
+ [null , 0 , '34.4 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_UP ],
110
+ [null , 1 , '3.45 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_UP ],
111
+ [null , 1 , '3.44 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_UP ],
112
+ // towards zero (1.6 -> 1, -1.6 -> -1)
113
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
114
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
115
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
116
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
117
+ [PercentToLocalizedStringTransformer::INTEGER , 2 , '37.37 ' , 37.37 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
118
+ [PercentToLocalizedStringTransformer::INTEGER , 2 , '2.01 ' , 2.01 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
119
+ [null , 0 , '34.5 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
120
+ [null , 0 , '34.4 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
121
+ [null , 1 , '3.45 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
122
+ [null , 1 , '3.44 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
123
+ [null , 2 , '37.37 ' , 0.3737 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
124
+ [null , 2 , '2.01 ' , 0.0201 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
125
+ // round halves (.5) to the next even number
126
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.6 ' , 35 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
127
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
128
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
129
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '33.5 ' , 34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
130
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '32.5 ' , 32 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
131
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.46 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
132
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
133
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
134
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.35 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
135
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.25 ' , 3.2 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
136
+ [null , 0 , '34.6 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
137
+ [null , 0 , '34.5 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
138
+ [null , 0 , '34.4 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
139
+ [null , 0 , '33.5 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
140
+ [null , 0 , '32.5 ' , 0.32 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
141
+ [null , 1 , '3.46 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
142
+ [null , 1 , '3.45 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
143
+ [null , 1 , '3.44 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
144
+ [null , 1 , '3.35 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
145
+ [null , 1 , '3.25 ' , 0.032 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
146
+ // round halves (.5) away from zero
147
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.6 ' , 35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
148
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
149
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 34 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
150
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.46 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
151
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
152
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
153
+ [null , 0 , '34.6 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
154
+ [null , 0 , '34.5 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
155
+ [null , 0 , '34.4 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
156
+ [null , 1 , '3.46 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
157
+ [null , 1 , '3.45 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
158
+ [null , 1 , '3.44 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
159
+ // round halves (.5) towards zero
160
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.6 ' , 35 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
161
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.5 ' , 34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
162
+ [PercentToLocalizedStringTransformer::INTEGER , 0 , '34.4 ' , 34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
163
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.46 ' , 3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
164
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.45 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
165
+ [PercentToLocalizedStringTransformer::INTEGER , 1 , '3.44 ' , 3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
166
+ [null , 0 , '34.6 ' , 0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
167
+ [null , 0 , '34.5 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
168
+ [null , 0 , '34.4 ' , 0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
169
+ [null , 1 , '3.46 ' , 0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
170
+ [null , 1 , '3.45 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
171
+ [null , 1 , '3.44 ' , 0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
172
+ ];
173
+ }
174
+
175
+ /**
176
+ * @dataProvider reverseTransformWithRoundingProvider
177
+ */
178
+ public function testReverseTransformWithRounding ($ type , $ scale , $ input , $ output , $ roundingMode )
179
+ {
180
+ $ transformer = new PercentToLocalizedStringTransformer ($ scale , $ type , $ roundingMode );
181
+
182
+ $ this ->assertEquals ($ output , $ transformer ->reverseTransform ($ input ));
183
+ }
184
+
82
185
public function testReverseTransformEmpty ()
83
186
{
84
187
$ transformer = new PercentToLocalizedStringTransformer ();
0 commit comments