From 3ab9516300554c4875be95a397bbb1759fefae56 Mon Sep 17 00:00:00 2001 From: Gabriel Scherer Date: Mon, 12 May 2014 15:37:54 +0000 Subject: [PATCH] a testsuite to measure format behavior changes and the effectiveness of legacy mode git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@14819 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02 --- testsuite/tests/formats-transition/Makefile | 3 +++ .../deprecated_unsigned_printers.ml | 22 +++++++++++++++++++ .../deprecated_unsigned_printers.ml.reference | 7 ++++++ .../legacy_incompatible_flags.ml | 20 +++++++++++++++++ .../legacy_unfinished_modifiers.ml | 18 +++++++++++++++ .../legacy_unfinished_modifiers.ml.reference | 6 +++++ 6 files changed, 76 insertions(+) create mode 100644 testsuite/tests/formats-transition/Makefile create mode 100644 testsuite/tests/formats-transition/deprecated_unsigned_printers.ml create mode 100644 testsuite/tests/formats-transition/deprecated_unsigned_printers.ml.reference create mode 100644 testsuite/tests/formats-transition/legacy_incompatible_flags.ml create mode 100644 testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml create mode 100644 testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml.reference diff --git a/testsuite/tests/formats-transition/Makefile b/testsuite/tests/formats-transition/Makefile new file mode 100644 index 000000000000..9625a3fbc38a --- /dev/null +++ b/testsuite/tests/formats-transition/Makefile @@ -0,0 +1,3 @@ +BASEDIR=../.. +include $(BASEDIR)/makefiles/Makefile.toplevel +include $(BASEDIR)/makefiles/Makefile.common diff --git a/testsuite/tests/formats-transition/deprecated_unsigned_printers.ml b/testsuite/tests/formats-transition/deprecated_unsigned_printers.ml new file mode 100644 index 000000000000..3127d773afe2 --- /dev/null +++ b/testsuite/tests/formats-transition/deprecated_unsigned_printers.ml @@ -0,0 +1,22 @@ +(* %n, %l, %N and %L have a scanf-specific semantics, but are supposed + to be interpreted by Printf and Format as %u, despite this + interpretation being mildly deprecated *) + +let test format = (Printf.sprintf format (-3) : string) +;; + +let () = Printf.printf "%%n: %B\n" + (test "%n" = test "%u") +;; + +let () = Printf.printf "%%l: %B\n" + (test "%l" = test "%u") +;; + +let () = Printf.printf "%%N: %B\n" + (test "%N" = test "%u") +;; + +let () = Printf.printf "%%L: %B\n" + (test "%L" = test "%u") +;; diff --git a/testsuite/tests/formats-transition/deprecated_unsigned_printers.ml.reference b/testsuite/tests/formats-transition/deprecated_unsigned_printers.ml.reference new file mode 100644 index 000000000000..0afeaa2be146 --- /dev/null +++ b/testsuite/tests/formats-transition/deprecated_unsigned_printers.ml.reference @@ -0,0 +1,7 @@ + +# * * val test : (int -> string, unit, string) format -> string = +# %n: true +# %l: true +# %N: true +# %L: true +# diff --git a/testsuite/tests/formats-transition/legacy_incompatible_flags.ml b/testsuite/tests/formats-transition/legacy_incompatible_flags.ml new file mode 100644 index 000000000000..53cf5c26c734 --- /dev/null +++ b/testsuite/tests/formats-transition/legacy_incompatible_flags.ml @@ -0,0 +1,20 @@ +(* the legacy parser ignores flags on formatters on which they make no + sense *) + +let () = Printf.printf "%+s\n" "toto" +;; +let () = Printf.printf "%#s\n" "toto" +;; +let () = Printf.printf "% s\n" "toto" +;; +let () = Printf.printf "%03s\n" "toto" +;; +let () = Printf.printf "%03S\n" "toto" +;; +let () = Printf.printf "%.3s\n" "toto" +;; + +(* it still fails on flags used with ignored formats (%_d, etc.), + but it's unclear how to test that in a backward-compatible way, + if we accept that the error message may have changed +*) diff --git a/testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml b/testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml new file mode 100644 index 000000000000..16eca40c175b --- /dev/null +++ b/testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml @@ -0,0 +1,18 @@ +(* test whether padding modifiers are accepted without any padding + size + + the precision modifier is accepted without precision setting, but it + defaults to 0, which is not the same thing as not having precision: + %.0f 3.5 => 3 + %.f 3.5 => 3 + %f 3.5 => 3.5 +*) + +let () = Printf.printf "%0d\n" 3 +;; +let () = Printf.printf "%-d\n" 3 +;; +let () = Printf.printf "%.d\n" 3 +;; +let () = Printf.printf "%.f\n" 3. +;; diff --git a/testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml.reference b/testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml.reference new file mode 100644 index 000000000000..81c05c0dd5e0 --- /dev/null +++ b/testsuite/tests/formats-transition/legacy_unfinished_modifiers.ml.reference @@ -0,0 +1,6 @@ + +# * * * * * * * * 3 +# 3 +# 3 +# 3 +#