344344 @test pyfmt (" .1e" , 0.0006 ) == " 6.0e-04"
345345end
346346
347+ # This testset is currently non-compliant to Python's format_spec
348+ # Trailing insignificant zeros should be removed, however it is not done in
349+ # the current implementation.
350+ # FIXME : Make g/G compliant with Python's behavior
351+ @testset " Format general (g/G)" begin
352+ # Default precision (6 significant digits)
353+ @test pyfmt (" g" , 123.456789 ) == " 123.457"
354+ @test pyfmt (" g" , 1.234567e-5 ) == " 1.23457e-05"
355+
356+ # Switch between fixed and scientific depending on precision
357+ # and exponent -> Issue #91 (Format.jl)
358+ @test pyfmt (" .3g" , 0.0012345 ) == " 0.00123"
359+ @test pyfmt (" .3g" , 1234567.0 ) == " 1.23e+06"
360+ @test pyfmt (" .2g" , 0.000012345 ) == " 1.2e-05"
361+ @test pyfmt (" .2g" , 1e-4 ) == " 0.00010"
362+ @test pyfmt (" g" , 1e5 ) == " 100000"
363+ @test pyfmt (" g" , 1e6 ) == " 1.00000e+06"
364+
365+ # Trailing zero and decimal point trimming
366+ @test pyfmt (" .6g" , 1200.0 ) == " 1200.00"
367+ @test pyfmt (" .4g" , 12.0 ) == " 12.00"
368+
369+ # Alternate form '#' keeps trailing zeros and decimal point
370+ @test pyfmt (" #.4g" , 12.0 ) == " 12.00"
371+ @test pyfmt (" #.3g" , 1.0e-5 ) == " 1.00e-05"
372+
373+ # Width, alignment, and zero-padding
374+ @test pyfmt (" >8.3g" , 13.89 ) == " 13.9"
375+ @test pyfmt (" ⋆<8.3g" , 13.89 ) == " 13.9⋆⋆⋆⋆"
376+ @test pyfmt (" ⋆^8.3g" , 13.89 ) == " ⋆⋆13.9⋆⋆"
377+ @test pyfmt (" 010.3g" , 13.89 ) == " 00000013.9"
378+ @test pyfmt (" 010.3g" , - 13.89 ) == " -0000013.9"
379+ @test pyfmt (" +010.3g" , 13.89 ) == " +0000013.9"
380+
381+ # Rounding across powers of ten
382+ @test pyfmt (" .3g" , 9.999 ) == " 10.0"
383+ @test pyfmt (" .3g" , 9.999e9 ) == " 1.00e+10"
384+ @test pyfmt (" .3g" , - 9.999e-5 ) == " -0.000100"
385+ @test pyfmt (" .3g" , - 9.999e-6 ) == " -1.00e-05"
386+
387+ # 'G' behaves like 'g' but uses 'E'
388+ @test pyfmt (" .3G" , 1234567.0 ) == " 1.23E+06"
389+ @test pyfmt (" .3G" , 0.000012345 ) == " 1.23E-05"
390+ @test pyfmt (" G" , 12.0 ) == " 12.0000"
391+ @test pyfmt (" #.4G" , 12.0 ) == " 12.00"
392+ @test pyfmt (" G" , 1e6 ) == " 1.00000E+06"
393+
394+ # Zeros, from regression of (04baaf3)
395+ @test pyfmt (" g" , 0.0 ) == " 0.00000"
396+ @test pyfmt (" g" , - 0.0 ) == " -0.00000"
397+ end
398+
347399@testset " Format percentage (%)" begin
348400 @test pyfmt (" 8.2%" , 0.123456 ) == " 12.35%"
349401 @test pyfmt (" <8.2%" , 0.123456 ) == " 12.35% "
@@ -355,18 +407,24 @@ end
355407
356408 @test pyfmt (" f" , NaN ) == " NaN"
357409 @test pyfmt (" e" , NaN ) == " NaN"
410+ @test pyfmt (" g" , NaN ) == " NaN"
358411 @test pyfmt (" f" , NaN32 ) == " NaN"
359412 @test pyfmt (" e" , NaN32 ) == " NaN"
413+ @test pyfmt (" g" , NaN32 ) == " NaN"
360414
361415 @test pyfmt (" f" , Inf ) == " Inf"
362416 @test pyfmt (" e" , Inf ) == " Inf"
417+ @test pyfmt (" g" , Inf ) == " Inf"
363418 @test pyfmt (" f" , Inf32 ) == " Inf"
364419 @test pyfmt (" e" , Inf32 ) == " Inf"
420+ @test pyfmt (" g" , Inf32 ) == " Inf"
365421
366422 @test pyfmt (" f" , - Inf ) == " -Inf"
367423 @test pyfmt (" e" , - Inf ) == " -Inf"
424+ @test pyfmt (" g" , - Inf ) == " -Inf"
368425 @test pyfmt (" f" , - Inf32 ) == " -Inf"
369426 @test pyfmt (" e" , - Inf32 ) == " -Inf"
427+ @test pyfmt (" g" , - Inf32 ) == " -Inf"
370428
371429 @test pyfmt (" <5f" , Inf ) == " Inf "
372430 @test pyfmt (" ^5f" , Inf ) == " Inf "
0 commit comments