(* TEST include testing; *) open Testing;; open Printf;; (* Padding floating point numbers. Testing * width specifications. *) let test0 () = sprintf "%.0f" 1.0 = "1" && sprintf "%.0f." 1.7 = "2." && sprintf "%.1f." 1.0 = "1.0." && (*sprintf "%0.1f." 12.0 = "12.0." &&*) (* >> '0' w/o padding *) sprintf "%3.1f." 12.0 = "12.0." && sprintf "%5.1f." 12.0 = " 12.0." && sprintf "%10.1f." 12.0 = " 12.0." && sprintf "%010.1f." 12.0 = "00000012.0." && sprintf "% 10.1f." 12.0 = " 12.0." && sprintf "%+10.1f." 12.0 = " +12.0." && sprintf "%+10.1f." (-12.0) = " -12.0." && sprintf "%010.5f." 12.0 = "0012.00000." && sprintf "%010.0f." 12.0 = "0000000012." && sprintf "% 10.0f." 12.0 = " 12." && (*sprintf "%0.1f." 12.0 = "12.0." &&*) (* >> '0' w/o padding *) sprintf "%10.1f." 1.001 = " 1.0." && sprintf "%05.1f." 1.001 = "001.0." ;; test (test0 ());; (* Padding integers (cf bug 3955). Testing * width specifications. *) let test1 () = sprintf "%d\n" 1 = "1\n" && sprintf "%05d\n" 1 = "00001\n" && sprintf "%*d\n" 5 1 = " 1\n" && sprintf "%0*d\n" 5 1 = "00001\n";; test (test1 ());; (* FIXME: when positional specification will be OK. *) let test2 () = true (* sprintf "%1$d\n" 5 1 = " 1\n" && sprintf "%01$d\n" 5 1 = "00001\n" *);; test (test2 ());; (* Testing meta format string printing. *) let test3 () = sprintf "%{toto %S titi.\n%}" "Bonjour %S." = "%s" && sprintf "%{Bonjour %S.%}" "toto %S titi.\n" = "%s" ;; test (test3 ());; (* Testing meta format string arguments. *) let test4 () = sprintf "%(%s%)" "Bonjour %s" "toto" = "Bonjour toto" && sprintf "%(%s%)" "Bonjour %s." "vous" = "Bonjour vous." && sprintf "%(%s%)" "Hello %s." "you" = "Hello you." ;; test (test4 ());; let test5 () = sprintf "%(toto %s titi.\n%)" "Bonjour %s." "vous" = "Bonjour vous." && sprintf "%(toto %s titi.\n%).\n" "Bonjour %s" "toto" = "Bonjour toto.\n" && sprintf "%(toto %s titi.\n%)%s\n" "Bonjour %s." "toto" " Ca va?" = "Bonjour toto. Ca va?\n" ;; test (test5 ());;