]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
modula2 testsuite: new libc unit test
authorGaius Mulley <gaiusmod2@gmail.com>
Sun, 25 Aug 2024 09:14:49 +0000 (10:14 +0100)
committerGaius Mulley <gaiusmod2@gmail.com>
Sun, 25 Aug 2024 09:14:49 +0000 (10:14 +0100)
This patch provides a simple unit test for snprintf and atof against
the libc definition module.

gcc/testsuite/ChangeLog:

* gm2/calling-c/libc/run/pass/calling-c-libc-run-pass.exp: New test.
* gm2/calling-c/libc/run/pass/testlibcstr.mod: New test.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
gcc/testsuite/gm2/calling-c/libc/run/pass/calling-c-libc-run-pass.exp [new file with mode: 0644]
gcc/testsuite/gm2/calling-c/libc/run/pass/testlibcstr.mod [new file with mode: 0644]

diff --git a/gcc/testsuite/gm2/calling-c/libc/run/pass/calling-c-libc-run-pass.exp b/gcc/testsuite/gm2/calling-c/libc/run/pass/calling-c-libc-run-pass.exp
new file mode 100644 (file)
index 0000000..a7973d9
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2024 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# This file was written by Gaius Mulley (gaiusmod2@gmail.com)
+# for GNU Modula-2.
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+# load support procs
+load_lib gm2-torture.exp
+
+gm2_init_pim "${srcdir}/gm2/cslling-c/libc/run/pass"
+
+foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] {
+    # If we're only testing specific files and this isn't one of them, skip it.
+    if ![runtest_file_p $runtests $testcase] then {
+       continue
+    }
+
+    gm2-torture-execute $testcase "" "pass"
+}
diff --git a/gcc/testsuite/gm2/calling-c/libc/run/pass/testlibcstr.mod b/gcc/testsuite/gm2/calling-c/libc/run/pass/testlibcstr.mod
new file mode 100644 (file)
index 0000000..9d90d75
--- /dev/null
@@ -0,0 +1,39 @@
+MODULE testlibcstr ;
+
+FROM SYSTEM IMPORT ADDRESS, ADR ;
+FROM Storage IMPORT ALLOCATE, DEALLOCATE ;
+FROM libc IMPORT strtod, atof, printf, exit, snprintf ;
+FROM DynamicStrings IMPORT String,
+                           InitString, InitStringCharStar, Equal, Slice,
+                           KillString ;
+
+(*
+   runtest -
+*)
+
+PROCEDURE runtest ;
+CONST
+   BufSpace = 100 ;
+VAR
+   s: String ;
+   r: REAL ;
+   a: ADDRESS ;
+BEGIN
+   r := atof (ADR ("3.14159")) ;
+   ALLOCATE (a, BufSpace) ;
+   snprintf (a, BufSpace, "%f", r) ;
+   s := InitStringCharStar (a) ;
+   IF NOT Equal (InitString ("3.14159"), Slice (s, 0, 7))
+   THEN
+      printf ("failed to convert 3.14159 to a REAL or string\n") ;
+      exit (1)
+   END ;
+   DEALLOCATE (a, BufSpace) ;
+   s := KillString (s)
+END runtest ;
+
+
+BEGIN
+   runtest ;
+   printf ("all tests passed!\n")
+END testlibcstr.