@@ -209,36 +209,45 @@ unittest // formatNumber unit tests
209209 assert (formatNumber(1234567891234.0 , 0 ) == " 1234567891234" );
210210 assert (formatNumber(1234567891234.0 , 1 ) == " 1234567891234" );
211211
212- // Test round off cases
212+ /* Test round off cases. Note: These tests will not pass on Windows 32-bit builds.
213+ * Use the -m64 flag on Windows to get a 64-bit build.
214+ *
215+ * Note: The first test case does not generate the correct result on Windows
216+ * 64-bit builds. The current Windows result is included both for documentation
217+ * and to provide an alert if the correct result starts getting populated. Both
218+ * formatNumber and the underlying format call are included.
219+ */
213220 version (Windows )
214221 {
215- /* Round-off cases don't work properly on Windows. They truncate rather than
216- * round. May be a DMD specific Windows bug, not clear.
217- */
222+ // Incorrect
223+ assert (format( " %.*f " , 0 , 0.6 ) == " 0 " );
224+ assert (formatNumber( 0.6 , 0 ) == " 0 " );
218225 }
219226 else
220227 {
228+ assert (format(" %.*f" , 0 , 0.6 ) == " 1" );
221229 assert (formatNumber(0.6 , 0 ) == " 1" );
222- assert (formatNumber(0.6 , 1 ) == " 0.6" );
223- assert (formatNumber(0.06 , 0 ) == " 0" );
224- assert (formatNumber(0.06 , 1 ) == " 0.1" );
225- assert (formatNumber(0.06 , 2 ) == " 0.06" );
226- assert (formatNumber(0.06 , 3 ) == " 0.06" );
227- assert (formatNumber(9.49999 , 0 ) == " 9" );
228- assert (formatNumber(9.49999 , 1 ) == " 9.5" );
229- assert (formatNumber(9.6 , 0 ) == " 10" );
230- assert (formatNumber(9.6 , 1 ) == " 9.6" );
231- assert (formatNumber(99.99 , 0 ) == " 100" );
232- assert (formatNumber(99.99 , 1 ) == " 100" );
233- assert (formatNumber(99.99 , 2 ) == " 99.99" );
234- assert (formatNumber(9999.9996 , 3 ) == " 10000" );
235- assert (formatNumber(9999.9996 , 4 ) == " 9999.9996" );
236- assert (formatNumber(99999.99996 , 4 ) == " 100000" );
237- assert (formatNumber(99999.99996 , 5 ) == " 99999.99996" );
238- assert (formatNumber(999999.999996 , 5 ) == " 1000000" );
239- assert (formatNumber(999999.999996 , 6 ) == " 999999.999996" );
240230 }
241231
232+ assert (formatNumber(0.6 , 1 ) == " 0.6" );
233+ assert (formatNumber(0.06 , 0 ) == " 0" );
234+ assert (formatNumber(0.06 , 1 ) == " 0.1" );
235+ assert (formatNumber(0.06 , 2 ) == " 0.06" );
236+ assert (formatNumber(0.06 , 3 ) == " 0.06" );
237+ assert (formatNumber(9.49999 , 0 ) == " 9" );
238+ assert (formatNumber(9.49999 , 1 ) == " 9.5" );
239+ assert (formatNumber(9.6 , 0 ) == " 10" );
240+ assert (formatNumber(9.6 , 1 ) == " 9.6" );
241+ assert (formatNumber(99.99 , 0 ) == " 100" );
242+ assert (formatNumber(99.99 , 1 ) == " 100" );
243+ assert (formatNumber(99.99 , 2 ) == " 99.99" );
244+ assert (formatNumber(9999.9996 , 3 ) == " 10000" );
245+ assert (formatNumber(9999.9996 , 4 ) == " 9999.9996" );
246+ assert (formatNumber(99999.99996 , 4 ) == " 100000" );
247+ assert (formatNumber(99999.99996 , 5 ) == " 99999.99996" );
248+ assert (formatNumber(999999.999996 , 5 ) == " 1000000" );
249+ assert (formatNumber(999999.999996 , 6 ) == " 999999.999996" );
250+
242251 /* Turn off precision, the 'human readable' style.
243252 * Note: Remains o if both are zero (first test). If it becomes desirable to support
244253 * turning it off when for the precision equal zero case the simple extension is to
@@ -314,42 +323,51 @@ unittest // formatNumber unit tests
314323 assert (formatNumber(- 1234567891234.0 , 0 ) == " -1234567891234" );
315324 assert (formatNumber(- 1234567891234.0 , 1 ) == " -1234567891234" );
316325
317- // Test round off cases
326+ /* Test round off cases with negative numbers. Note: These tests will not pass
327+ * on Windows 32-bit builds. Use the -m64 flag on Windows to get a 64-bit build.
328+ *
329+ * Note: The first test case does not generate the correct result on Windows
330+ * 64-bit builds. The current Windows result is included both for documentation
331+ * and to provide an alert if the correct result starts getting populated. Both
332+ * formatNumber and the underlying format call are included.
333+ */
318334 version (Windows )
319335 {
320- /* Round-off cases don't work properly on Windows. They truncate rather than
321- * round. May be a DMD specific Windows bug, not clear.
322- */
336+ // Incorrect
337+ assert (format( " %.*f " , 0 , - 0.6 ) == " -0 " );
338+ assert (formatNumber( - 0.6 , 0 ) == " -0 " );
323339 }
324340 else
325341 {
342+ assert (format(" %.*f" , 0 , - 0.6 ) == " -1" );
326343 assert (formatNumber(- 0.6 , 0 ) == " -1" );
327- assert (formatNumber(- 0.6 , 1 ) == " -0.6" );
328- assert (formatNumber(- 0.06 , 0 ) == " -0" );
329- assert (formatNumber(- 0.06 , 1 ) == " -0.1" );
330- assert (formatNumber(- 0.06 , 2 ) == " -0.06" );
331- assert (formatNumber(- 0.06 , 3 ) == " -0.06" );
332- assert (formatNumber(- 9.49999 , 0 ) == " -9" );
333- assert (formatNumber(- 9.49999 , 1 ) == " -9.5" );
334- assert (formatNumber(- 9.6 , 0 ) == " -10" );
335- assert (formatNumber(- 9.6 , 1 ) == " -9.6" );
336- assert (formatNumber(- 99.99 , 0 ) == " -100" );
337- assert (formatNumber(- 99.99 , 1 ) == " -100" );
338- assert (formatNumber(- 99.99 , 2 ) == " -99.99" );
339- assert (formatNumber(- 9999.9996 , 3 ) == " -10000" );
340- assert (formatNumber(- 9999.9996 , 4 ) == " -9999.9996" );
341- assert (formatNumber(- 99999.99996 , 4 ) == " -100000" );
342- assert (formatNumber(- 99999.99996 , 5 ) == " -99999.99996" );
343- assert (formatNumber(- 999999.999996 , 5 ) == " -1000000" );
344- assert (formatNumber(- 999999.999996 , 6 ) == " -999999.999996" );
345-
346- assert (formatNumber! (double , 0 )(- 999.123412 , 0 ) == " -999" );
347- assert (formatNumber! (double , 0 )(- 999.123412 , 1 ) == " -1e+03" );
348- assert (formatNumber! (double , 0 )(- 999.123412 , 2 ) == " -1e+03" );
349- assert (formatNumber! (double , 0 )(- 999.123412 , 3 ) == " -999" );
350- assert (formatNumber! (double , 0 )(- 999.123412 , 4 ) == " -999.1" );
351344 }
352345
346+ assert (formatNumber(- 0.6 , 1 ) == " -0.6" );
347+ assert (formatNumber(- 0.06 , 0 ) == " -0" );
348+ assert (formatNumber(- 0.06 , 1 ) == " -0.1" );
349+ assert (formatNumber(- 0.06 , 2 ) == " -0.06" );
350+ assert (formatNumber(- 0.06 , 3 ) == " -0.06" );
351+ assert (formatNumber(- 9.49999 , 0 ) == " -9" );
352+ assert (formatNumber(- 9.49999 , 1 ) == " -9.5" );
353+ assert (formatNumber(- 9.6 , 0 ) == " -10" );
354+ assert (formatNumber(- 9.6 , 1 ) == " -9.6" );
355+ assert (formatNumber(- 99.99 , 0 ) == " -100" );
356+ assert (formatNumber(- 99.99 , 1 ) == " -100" );
357+ assert (formatNumber(- 99.99 , 2 ) == " -99.99" );
358+ assert (formatNumber(- 9999.9996 , 3 ) == " -10000" );
359+ assert (formatNumber(- 9999.9996 , 4 ) == " -9999.9996" );
360+ assert (formatNumber(- 99999.99996 , 4 ) == " -100000" );
361+ assert (formatNumber(- 99999.99996 , 5 ) == " -99999.99996" );
362+ assert (formatNumber(- 999999.999996 , 5 ) == " -1000000" );
363+ assert (formatNumber(- 999999.999996 , 6 ) == " -999999.999996" );
364+
365+ assert (formatNumber! (double , 0 )(- 999.123412 , 0 ) == " -999" );
366+ assert (formatNumber! (double , 0 )(- 999.123412 , 1 ) == " -1e+03" );
367+ assert (formatNumber! (double , 0 )(- 999.123412 , 2 ) == " -1e+03" );
368+ assert (formatNumber! (double , 0 )(- 999.123412 , 3 ) == " -999" );
369+ assert (formatNumber! (double , 0 )(- 999.123412 , 4 ) == " -999.1" );
370+
353371 // Default number printing
354372 assert (formatNumber(- 1.2 ) == " -1.2" );
355373 assert (formatNumber(- 12.3 ) == " -12.3" );
0 commit comments