@@ -79,6 +79,109 @@ public function testReverseTransform()
7979 $ this ->assertEquals (2 , $ transformer ->reverseTransform ('200 ' ));
8080 }
8181
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+
82185 public function testReverseTransformEmpty ()
83186 {
84187 $ transformer = new PercentToLocalizedStringTransformer ();
0 commit comments