diff options
author | Damien Doligez <damien.doligez-inria.fr> | 2013-05-30 12:27:18 +0000 |
---|---|---|
committer | Damien Doligez <damien.doligez-inria.fr> | 2013-05-30 12:27:18 +0000 |
commit | 87508f1d4b13203eddd8366e4ce26f39c1da07f3 (patch) | |
tree | 183d42191b7fc359aa72ea44e09e73a471add0d5 | |
parent | 32e05871159ba89ddee22511a9ea53c7644bca0c (diff) |
tests/lib-format: fix for Windows
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@13722 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | testsuite/tests/lib-format/tformat.ml | 98 |
1 files changed, 61 insertions, 37 deletions
diff --git a/testsuite/tests/lib-format/tformat.ml b/testsuite/tests/lib-format/tformat.ml index 4c0382b17..a627b47f4 100644 --- a/testsuite/tests/lib-format/tformat.ml +++ b/testsuite/tests/lib-format/tformat.ml @@ -200,9 +200,33 @@ try test (sprintf "%*.*f" 12 3 42.42 = " 42.420"); test (sprintf "%-0+ #12.3f" 42.42 = "+42.420 "); + (* Under Windows (mingw and maybe also MSVC), the stdlib uses three + digits for the exponent instead of the two used by Linux and BSD. + Check that the two strings are equal, except that there may be an + extra zero, and if there is one, there may be a missing space or + zero. All in the first string relative to the second. *) + let ( =* ) s1 s2 = + let ss1 = s1 ^ "$" in + let ss2 = s2 ^ "$" in + let rec loop i1 i2 extra missing = + if i1 = String.length ss1 && i2 = String.length ss2 then begin + if extra then true else not missing + end else if i1 = String.length ss1 || i2 = String.length ss2 then + false + else begin + match ss1.[i1], ss2.[i2] with + | x, y when x = y -> loop (i1+1) (i2+1) extra missing + | '0', _ when not extra -> loop (i1+1) i2 true missing + | _, (' '|'0') when not missing -> loop i1 (i2+1) extra true + | _, _ -> false + end + in + loop 0 0 false false + in + say "\nF\n%!"; test (sprintf "%F" 42.42 = "42.42"); - test (sprintf "%F" 42.42e42 = "4.242e+43"); + test (sprintf "%F" 42.42e42 =* "4.242e+43"); test (sprintf "%F" 42.00 = "42."); test (sprintf "%F" 0.042 = "0.042"); (* no padding, no precision @@ -213,44 +237,44 @@ try *) say "\ne\n%!"; - test (sprintf "%e" (-42.42) = "-4.242000e+01"); - test (sprintf "%-15e" (-42.42) = "-4.242000e+01 "); - test (sprintf "%015e" (-42.42) = "-004.242000e+01"); - test (sprintf "%+e" 42.42 = "+4.242000e+01"); - test (sprintf "% e" 42.42 = " 4.242000e+01"); - test (sprintf "%#e" 42.42 = "4.242000e+01"); - test (sprintf "%15e" 42.42 = " 4.242000e+01"); - test (sprintf "%*e" 14 42.42 = " 4.242000e+01"); - test (sprintf "%-0+ #14e" 42.42 = "+4.242000e+01 "); - test (sprintf "%.3e" (-42.42) = "-4.242e+01"); - test (sprintf "%-15.3e" (-42.42) = "-4.242e+01 "); - test (sprintf "%015.3e" (-42.42) = "-000004.242e+01"); - test (sprintf "%+.3e" 42.42 = "+4.242e+01"); - test (sprintf "% .3e" 42.42 = " 4.242e+01"); - test (sprintf "%#.3e" 42.42 = "4.242e+01"); - test (sprintf "%15.3e" 42.42 = " 4.242e+01"); - test (sprintf "%*.*e" 11 3 42.42 = " 4.242e+01"); - test (sprintf "%-0+ #14.3e" 42.42 = "+4.242e+01 "); + test (sprintf "%e" (-42.42) =* "-4.242000e+01"); + test (sprintf "%-15e" (-42.42) =* "-4.242000e+01 "); + test (sprintf "%015e" (-42.42) =* "-004.242000e+01"); + test (sprintf "%+e" 42.42 =* "+4.242000e+01"); + test (sprintf "% e" 42.42 =* " 4.242000e+01"); + test (sprintf "%#e" 42.42 =* "4.242000e+01"); + test (sprintf "%15e" 42.42 =* " 4.242000e+01"); + test (sprintf "%*e" 14 42.42 =* " 4.242000e+01"); + test (sprintf "%-0+ #14e" 42.42 =* "+4.242000e+01 "); + test (sprintf "%.3e" (-42.42) =* "-4.242e+01"); + test (sprintf "%-15.3e" (-42.42) =* "-4.242e+01 "); + test (sprintf "%015.3e" (-42.42) =* "-000004.242e+01"); + test (sprintf "%+.3e" 42.42 =* "+4.242e+01"); + test (sprintf "% .3e" 42.42 =* " 4.242e+01"); + test (sprintf "%#.3e" 42.42 =* "4.242e+01"); + test (sprintf "%15.3e" 42.42 =* " 4.242e+01"); + test (sprintf "%*.*e" 11 3 42.42 =* " 4.242e+01"); + test (sprintf "%-0+ #14.3e" 42.42 =* "+4.242e+01 "); say "\nE\n%!"; - test (sprintf "%E" (-42.42) = "-4.242000E+01"); - test (sprintf "%-15E" (-42.42) = "-4.242000E+01 "); - test (sprintf "%015E" (-42.42) = "-004.242000E+01"); - test (sprintf "%+E" 42.42 = "+4.242000E+01"); - test (sprintf "% E" 42.42 = " 4.242000E+01"); - test (sprintf "%#E" 42.42 = "4.242000E+01"); - test (sprintf "%15E" 42.42 = " 4.242000E+01"); - test (sprintf "%*E" 14 42.42 = " 4.242000E+01"); - test (sprintf "%-0+ #14E" 42.42 = "+4.242000E+01 "); - test (sprintf "%.3E" (-42.42) = "-4.242E+01"); - test (sprintf "%-15.3E" (-42.42) = "-4.242E+01 "); - test (sprintf "%015.3E" (-42.42) = "-000004.242E+01"); - test (sprintf "%+.3E" 42.42 = "+4.242E+01"); - test (sprintf "% .3E" 42.42 = " 4.242E+01"); - test (sprintf "%#.3E" 42.42 = "4.242E+01"); - test (sprintf "%15.3E" 42.42 = " 4.242E+01"); - test (sprintf "%*.*E" 11 3 42.42 = " 4.242E+01"); - test (sprintf "%-0+ #14.3E" 42.42 = "+4.242E+01 "); + test (sprintf "%E" (-42.42) =* "-4.242000E+01"); + test (sprintf "%-15E" (-42.42) =* "-4.242000E+01 "); + test (sprintf "%015E" (-42.42) =* "-004.242000E+01"); + test (sprintf "%+E" 42.42 =* "+4.242000E+01"); + test (sprintf "% E" 42.42 =* " 4.242000E+01"); + test (sprintf "%#E" 42.42 =* "4.242000E+01"); + test (sprintf "%15E" 42.42 =* " 4.242000E+01"); + test (sprintf "%*E" 14 42.42 =* " 4.242000E+01"); + test (sprintf "%-0+ #14E" 42.42 =* "+4.242000E+01 "); + test (sprintf "%.3E" (-42.42) =* "-4.242E+01"); + test (sprintf "%-15.3E" (-42.42) =* "-4.242E+01 "); + test (sprintf "%015.3E" (-42.42) =* "-000004.242E+01"); + test (sprintf "%+.3E" 42.42 =* "+4.242E+01"); + test (sprintf "% .3E" 42.42 =* " 4.242E+01"); + test (sprintf "%#.3E" 42.42 =* "4.242E+01"); + test (sprintf "%15.3E" 42.42 =* " 4.242E+01"); + test (sprintf "%*.*E" 11 3 42.42 =* " 4.242E+01"); + test (sprintf "%-0+ #14.3E" 42.42 =* "+4.242E+01 "); (* %g gives strange results that correspond to neither %f nor %e say "\ng\n%!"; |