root/misc/S29_round.t

Revision 11446, 12.7 kB (checked in by daxim, 2 years ago)

added tests for Math::Basic rounding suite

Line 
1# from the article text
2# http://www.pldesignline.com/howto/showArticle.jhtml?articleID=175801189
3is(round_half_up_symmetric(3.5), 4);
4is(round_half_up_symmetric(-3.5), -4);
5is(round_half_up_asymmetric(3.5), 4);
6is(round_half_up_asymmetric(-3.5), -3);
7
8is(round_half_down_symmetric(3.5), 3);
9is(round_half_down_symmetric(-3.5), -3);
10is(round_half_down_asymmetric(3.5), 3);
11is(round_half_down_asymmetric(-3.5), -4);
12
13is(round_half_even(3.5), 4);
14is(round_half_even(4.5), 4);
15is(round_half_even(-3.5), -4);
16is(round_half_even(-4.5), -4);
17
18is(round_half_odd(3.5), 3);
19is(round_half_odd(4.5), 5);
20is(round_half_odd(-3.5), -3);
21is(round_half_odd(-4.5), -5);
22
23is(round_alternate(3.5), 4, 'alternate: first round up');
24is(round_alternate(3.5), 3, 'alternate: then round down');
25is(round_alternate(3.5), 4, 'alternate: then round up');
26is(round_alternate(3.5), 3, 'alternate: then round down');
27is(round_alternate(3.5), 4, 'alternate: then round up');
28is(round_alternate(3.5), 3, 'alternate: then round down');
29
30# FIXME
31# how do I reset the state $round_up variable?
32# is(round_alternate(-3.5), -4, 'alternate with neg: first round up');
33# is(round_alternate(-3.5), -3, 'alternate with neg: then round down');
34# is(round_alternate(-3.5), -4, 'alternate with neg: then round up');
35# is(round_alternate(-3.5), -3, 'alternate with neg: then round down');
36# is(round_alternate(-3.5), -4, 'alternate with neg: then round up');
37# is(round_alternate(-3.5), -3, 'alternate with neg: then round down');
38
39is(round_random(3.5), any(3,4));
40is(round_random(4.5), any(4,5));
41is(round_random(5.5), any(5,6));
42is(round_random(6.5), any(6,7));
43is(round_random(7.5), any(7,8));
44is(round_random(8.5), any(8,9));
45
46is(round_ceiling(3.0), 3);
47is(round_ceiling(3.1), 4);
48is(round_ceiling(3.2), 4);
49is(round_ceiling(3.3), 4);
50is(round_ceiling(3.4), 4);
51is(round_ceiling(3.5), 4);
52is(round_ceiling(3.6), 4);
53is(round_ceiling(3.7), 4);
54is(round_ceiling(3.8), 4);
55is(round_ceiling(3.9), 4);
56is(round_ceiling(-3.0), -3);
57is(round_ceiling(-3.1), -3);
58is(round_ceiling(-3.2), -3);
59is(round_ceiling(-3.3), -3);
60is(round_ceiling(-3.4), -3);
61is(round_ceiling(-3.5), -3);
62is(round_ceiling(-3.6), -3);
63is(round_ceiling(-3.7), -3);
64is(round_ceiling(-3.8), -3);
65is(round_ceiling(-3.9), -3);
66
67is(round_floor(-3.0), -3);
68is(round_floor(-3.1), -4);
69is(round_floor(-3.2), -4);
70is(round_floor(-3.3), -4);
71is(round_floor(-3.4), -4);
72is(round_floor(-3.5), -4);
73is(round_floor(-3.6), -4);
74is(round_floor(-3.7), -4);
75is(round_floor(-3.8), -4);
76is(round_floor(-3.9), -4);
77is(round_floor(3.0), 3);
78is(round_floor(3.1), 3);
79is(round_floor(3.2), 3);
80is(round_floor(3.3), 3);
81is(round_floor(3.4), 3);
82is(round_floor(3.5), 3);
83is(round_floor(3.6), 3);
84is(round_floor(3.7), 3);
85is(round_floor(3.8), 3);
86is(round_floor(3.9), 3);
87
88is(round_toward_zero(3.1), 3);
89is(round_toward_zero(3.2), 3);
90is(round_toward_zero(3.3), 3);
91is(round_toward_zero(3.4), 3);
92is(round_toward_zero(3.5), 3);
93is(round_toward_zero(3.6), 3);
94is(round_toward_zero(3.7), 3);
95is(round_toward_zero(3.8), 3);
96is(round_toward_zero(3.9), 3);
97is(round_toward_zero(-3.1), -3);
98is(round_toward_zero(-3.2), -3);
99is(round_toward_zero(-3.3), -3);
100is(round_toward_zero(-3.4), -3);
101is(round_toward_zero(-3.5), -3);
102is(round_toward_zero(-3.6), -3);
103is(round_toward_zero(-3.7), -3);
104is(round_toward_zero(-3.8), -3);
105is(round_toward_zero(-3.9), -3);
106
107is(round_away_from_zero(3.1), 4);
108is(round_away_from_zero(3.2), 4);
109is(round_away_from_zero(3.3), 4);
110is(round_away_from_zero(3.4), 4);
111is(round_away_from_zero(3.5), 4);
112is(round_away_from_zero(3.6), 4);
113is(round_away_from_zero(3.7), 4);
114is(round_away_from_zero(3.8), 4);
115is(round_away_from_zero(3.9), 4);
116is(round_away_from_zero(-3.1), -4);
117is(round_away_from_zero(-3.2), -4);
118is(round_away_from_zero(-3.3), -4);
119is(round_away_from_zero(-3.4), -4);
120is(round_away_from_zero(-3.5), -4);
121is(round_away_from_zero(-3.6), -4);
122is(round_away_from_zero(-3.7), -4);
123is(round_away_from_zero(-3.8), -4);
124is(round_away_from_zero(-3.9), -4);
125
126is(sign(3.0), 1);
127is(sign(0.0), 0);
128is(sign(-3.0), -1);
129
130# from the table
131# http://i.cmpnet.com/pldesignline/2006/01/max-round-tab01.gif
132
133is(round_half_up_symmetric(3.0), +3);
134is(round_half_up_symmetric(3.1), +3);
135is(round_half_up_symmetric(3.4), +3);
136is(round_half_up_symmetric(3.5), +4);
137is(round_half_up_symmetric(3.6), +4);
138is(round_half_up_symmetric(3.9), +4);
139is(round_half_up_symmetric(4.0), +4);
140is(round_half_up_symmetric(4.1), +4);
141is(round_half_up_symmetric(4.4), +4);
142is(round_half_up_symmetric(4.5), +5);
143is(round_half_up_symmetric(4.6), +5);
144is(round_half_up_symmetric(4.9), +5);
145is(round_half_up_symmetric(5.0), +5);
146is(round_half_up_symmetric(-3.0), -3);
147is(round_half_up_symmetric(-3.1), -3);
148is(round_half_up_symmetric(-3.4), -3);
149is(round_half_up_symmetric(-3.5), -4);
150is(round_half_up_symmetric(-3.6), -4);
151is(round_half_up_symmetric(-3.9), -4);
152is(round_half_up_symmetric(-4.0), -4);
153is(round_half_up_symmetric(-4.1), -4);
154is(round_half_up_symmetric(-4.4), -4);
155is(round_half_up_symmetric(-4.5), -5);
156is(round_half_up_symmetric(-4.6), -5);
157is(round_half_up_symmetric(-4.9), -5);
158is(round_half_up_symmetric(-5.0), -5);
159
160is(round_half_up_asymmetric(3.0), +3);
161is(round_half_up_asymmetric(3.1), +3);
162is(round_half_up_asymmetric(3.4), +3);
163is(round_half_up_asymmetric(3.5), +4);
164is(round_half_up_asymmetric(3.6), +4);
165is(round_half_up_asymmetric(3.9), +4);
166is(round_half_up_asymmetric(4.0), +4);
167is(round_half_up_asymmetric(4.1), +4);
168is(round_half_up_asymmetric(4.4), +4);
169is(round_half_up_asymmetric(4.5), +5);
170is(round_half_up_asymmetric(4.6), +5);
171is(round_half_up_asymmetric(4.9), +5);
172is(round_half_up_asymmetric(5.0), +5);
173is(round_half_up_asymmetric(-3.0), -3);
174is(round_half_up_asymmetric(-3.1), -3);
175is(round_half_up_asymmetric(-3.4), -3);
176is(round_half_up_asymmetric(-3.5), -3);
177is(round_half_up_asymmetric(-3.6), -4);
178is(round_half_up_asymmetric(-3.9), -4);
179is(round_half_up_asymmetric(-4.0), -4);
180is(round_half_up_asymmetric(-4.1), -4);
181is(round_half_up_asymmetric(-4.4), -4);
182is(round_half_up_asymmetric(-4.5), -4);
183is(round_half_up_asymmetric(-4.6), -5);
184is(round_half_up_asymmetric(-4.9), -5);
185is(round_half_up_asymmetric(-5.0), -5);
186
187is(round_half_down_symmetric(3.0), +3);
188is(round_half_down_symmetric(3.1), +3);
189is(round_half_down_symmetric(3.4), +3);
190is(round_half_down_symmetric(3.5), +3);
191is(round_half_down_symmetric(3.6), +4);
192is(round_half_down_symmetric(3.9), +4);
193is(round_half_down_symmetric(4.0), +4);
194is(round_half_down_symmetric(4.1), +4);
195is(round_half_down_symmetric(4.4), +4);
196is(round_half_down_symmetric(4.5), +4);
197is(round_half_down_symmetric(4.6), +5);
198is(round_half_down_symmetric(4.9), +5);
199is(round_half_down_symmetric(5.0), +5);
200is(round_half_down_symmetric(-3.0), -3);
201is(round_half_down_symmetric(-3.1), -3);
202is(round_half_down_symmetric(-3.4), -3);
203is(round_half_down_symmetric(-3.5), -3);
204is(round_half_down_symmetric(-3.6), -4);
205is(round_half_down_symmetric(-3.9), -4);
206is(round_half_down_symmetric(-4.0), -4);
207is(round_half_down_symmetric(-4.1), -4);
208is(round_half_down_symmetric(-4.4), -4);
209is(round_half_down_symmetric(-4.5), -4);
210is(round_half_down_symmetric(-4.6), -5);
211is(round_half_down_symmetric(-4.9), -5);
212is(round_half_down_symmetric(-5.0), -5);
213
214is(round_half_down_asymmetric(3.0), +3);
215is(round_half_down_asymmetric(3.1), +3);
216is(round_half_down_asymmetric(3.4), +3);
217is(round_half_down_asymmetric(3.5), +3);
218is(round_half_down_asymmetric(3.6), +4);
219is(round_half_down_asymmetric(3.9), +4);
220is(round_half_down_asymmetric(4.0), +4);
221is(round_half_down_asymmetric(4.1), +4);
222is(round_half_down_asymmetric(4.4), +4);
223is(round_half_down_asymmetric(4.5), +4);
224is(round_half_down_asymmetric(4.6), +5);
225is(round_half_down_asymmetric(4.9), +5);
226is(round_half_down_asymmetric(5.0), +5);
227is(round_half_down_asymmetric(-3.0), -3);
228is(round_half_down_asymmetric(-3.1), -3);
229is(round_half_down_asymmetric(-3.4), -3);
230is(round_half_down_asymmetric(-3.5), -4);
231is(round_half_down_asymmetric(-3.6), -4);
232is(round_half_down_asymmetric(-3.9), -4);
233is(round_half_down_asymmetric(-4.0), -4);
234is(round_half_down_asymmetric(-4.1), -4);
235is(round_half_down_asymmetric(-4.4), -4);
236is(round_half_down_asymmetric(-4.5), -5);
237is(round_half_down_asymmetric(-4.6), -5);
238is(round_half_down_asymmetric(-4.9), -5);
239is(round_half_down_asymmetric(-5.0), -5);
240
241is(round_half_even(3.0), +3);
242is(round_half_even(3.1), +3);
243is(round_half_even(3.4), +3);
244is(round_half_even(3.5), +4);
245is(round_half_even(3.6), +4);
246is(round_half_even(3.9), +4);
247is(round_half_even(4.0), +4);
248is(round_half_even(4.1), +4);
249is(round_half_even(4.4), +4);
250is(round_half_even(4.5), +4);
251is(round_half_even(4.6), +5);
252is(round_half_even(4.9), +5);
253is(round_half_even(5.0), +5);
254is(round_half_even(-3.0), -3);
255is(round_half_even(-3.1), -3);
256is(round_half_even(-3.4), -3);
257is(round_half_even(-3.5), -4);
258is(round_half_even(-3.6), -4);
259is(round_half_even(-3.9), -4);
260is(round_half_even(-4.0), -4);
261is(round_half_even(-4.1), -4);
262is(round_half_even(-4.4), -4);
263is(round_half_even(-4.5), -4);
264is(round_half_even(-4.6), -5);
265is(round_half_even(-4.9), -5);
266is(round_half_even(-5.0), -5);
267
268is(round_half_odd(3.0), +3);
269is(round_half_odd(3.1), +3);
270is(round_half_odd(3.4), +3);
271is(round_half_odd(3.5), +3);
272is(round_half_odd(3.6), +4);
273is(round_half_odd(3.9), +4);
274is(round_half_odd(4.0), +4);
275is(round_half_odd(4.1), +4);
276is(round_half_odd(4.4), +4);
277is(round_half_odd(4.5), +5);
278is(round_half_odd(4.6), +5);
279is(round_half_odd(4.9), +5);
280is(round_half_odd(5.0), +5);
281is(round_half_odd(-3.0), -3);
282is(round_half_odd(-3.1), -3);
283is(round_half_odd(-3.4), -3);
284is(round_half_odd(-3.5), -3);
285is(round_half_odd(-3.6), -4);
286is(round_half_odd(-3.9), -4);
287is(round_half_odd(-4.0), -4);
288is(round_half_odd(-4.1), -4);
289is(round_half_odd(-4.4), -4);
290is(round_half_odd(-4.5), -5);
291is(round_half_odd(-4.6), -5);
292is(round_half_odd(-4.9), -5);
293is(round_half_odd(-5.0), -5);
294
295is(round_ceiling(3.0), +3);
296is(round_ceiling(3.1), +4);
297is(round_ceiling(3.4), +4);
298is(round_ceiling(3.5), +4);
299is(round_ceiling(3.6), +4);
300is(round_ceiling(3.9), +4);
301is(round_ceiling(4.0), +4);
302is(round_ceiling(4.1), +5);
303is(round_ceiling(4.4), +5);
304is(round_ceiling(4.5), +5);
305is(round_ceiling(4.6), +5);
306is(round_ceiling(4.9), +5);
307is(round_ceiling(5.0), +5);
308is(round_ceiling(-3.0), -3);
309is(round_ceiling(-3.1), -3);
310is(round_ceiling(-3.4), -3);
311is(round_ceiling(-3.5), -3);
312is(round_ceiling(-3.6), -3);
313is(round_ceiling(-3.9), -3);
314is(round_ceiling(-4.0), -4);
315is(round_ceiling(-4.1), -4);
316is(round_ceiling(-4.4), -4);
317is(round_ceiling(-4.5), -4);
318is(round_ceiling(-4.6), -4);
319is(round_ceiling(-4.9), -4);
320is(round_ceiling(-5.0), -5);
321
322is(round_floor(3.0), +3);
323is(round_floor(3.1), +3);
324is(round_floor(3.4), +3);
325is(round_floor(3.5), +3);
326is(round_floor(3.6), +3);
327is(round_floor(3.9), +3);
328is(round_floor(4.0), +4);
329is(round_floor(4.1), +4);
330is(round_floor(4.4), +4);
331is(round_floor(4.5), +4);
332is(round_floor(4.6), +4);
333is(round_floor(4.9), +4);
334is(round_floor(5.0), +5);
335is(round_floor(-3.0), -3);
336is(round_floor(-3.1), -4);
337is(round_floor(-3.4), -4);
338is(round_floor(-3.5), -4);
339is(round_floor(-3.6), -4);
340is(round_floor(-3.9), -4);
341is(round_floor(-4.0), -4);
342is(round_floor(-4.1), -5);
343is(round_floor(-4.4), -5);
344is(round_floor(-4.5), -5);
345is(round_floor(-4.6), -5);
346is(round_floor(-4.9), -5);
347is(round_floor(-5.0), -5);
348
349is(round_toward_zero(3.0), +3);
350is(round_toward_zero(3.1), +3);
351is(round_toward_zero(3.4), +3);
352is(round_toward_zero(3.5), +3);
353is(round_toward_zero(3.6), +3);
354is(round_toward_zero(3.9), +3);
355is(round_toward_zero(4.0), +4);
356is(round_toward_zero(4.1), +4);
357is(round_toward_zero(4.4), +4);
358is(round_toward_zero(4.5), +4);
359is(round_toward_zero(4.6), +4);
360is(round_toward_zero(4.9), +4);
361is(round_toward_zero(5.0), +5);
362is(round_toward_zero(-3.0), -3);
363is(round_toward_zero(-3.1), -3);
364is(round_toward_zero(-3.4), -3);
365is(round_toward_zero(-3.5), -3);
366is(round_toward_zero(-3.6), -3);
367is(round_toward_zero(-3.9), -3);
368is(round_toward_zero(-4.0), -4);
369is(round_toward_zero(-4.1), -4);
370is(round_toward_zero(-4.4), -4);
371is(round_toward_zero(-4.5), -4);
372is(round_toward_zero(-4.6), -4);
373is(round_toward_zero(-4.9), -4);
374is(round_toward_zero(-5.0), -5);
375
376is(round_away_from_zero(3.0), +3);
377is(round_away_from_zero(3.1), +4);
378is(round_away_from_zero(3.4), +4);
379is(round_away_from_zero(3.5), +4);
380is(round_away_from_zero(3.6), +4);
381is(round_away_from_zero(3.9), +4);
382is(round_away_from_zero(4.0), +4);
383is(round_away_from_zero(4.1), +5);
384is(round_away_from_zero(4.4), +5);
385is(round_away_from_zero(4.5), +5);
386is(round_away_from_zero(4.6), +5);
387is(round_away_from_zero(4.9), +5);
388is(round_away_from_zero(5.0), +5);
389is(round_away_from_zero(-3.0), -3);
390is(round_away_from_zero(-3.1), -4);
391is(round_away_from_zero(-3.4), -4);
392is(round_away_from_zero(-3.5), -4);
393is(round_away_from_zero(-3.6), -4);
394is(round_away_from_zero(-3.9), -4);
395is(round_away_from_zero(-4.0), -4);
396is(round_away_from_zero(-4.1), -5);
397is(round_away_from_zero(-4.4), -5);
398is(round_away_from_zero(-4.5), -5);
399is(round_away_from_zero(-4.6), -5);
400is(round_away_from_zero(-4.9), -5);
401is(round_away_from_zero(-5.0), -5);
Note: See TracBrowser for help on using the browser.