@@ -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 ->assertSame ($ output ,$ transformer ->reverseTransform ($ input ));
183
+ }
184
+
82
185
public function testReverseTransformEmpty ()
83
186
{
84
187
$ transformer =new PercentToLocalizedStringTransformer ();