summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>2013-05-30 12:27:18 +0000
committerDamien Doligez <damien.doligez-inria.fr>2013-05-30 12:27:18 +0000
commit87508f1d4b13203eddd8366e4ce26f39c1da07f3 (patch)
tree183d42191b7fc359aa72ea44e09e73a471add0d5
parent32e05871159ba89ddee22511a9ea53c7644bca0c (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.ml98
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%!";