* Poke * On Mon, Dec 9, 2024, 5:18 PM Pete Dietl <petedi...@gmail.com> wrote:
> I could also use some help with autotools and the Perl test scripts < > I am a novice at both :) > > > Here is a bit of test code I came up with. Do you think this is > necessary and or the right approach for testing with extreme values of > double and long long? > > From 4a6e84061fbf2180cf4efec45a215dd8af6481b1 Mon Sep 17 00:00:00 2001 > From: Pete Dietl <petedi...@gmail.com> > Date: Mon, 9 Dec 2024 17:06:55 -0800 > Subject: [PATCH] arith_tests > > --- > configure.ac | 34 ++++++++++++++++++++++++++++++ > tests/config-flags.pm.in | 24 +++++++++++---------- > tests/scripts/functions/add | 42 +++++++++++++++++++++++++++++++++++++ > 3 files changed, 89 insertions(+), 11 deletions(-) > create mode 100644 tests/scripts/functions/add > > diff --git a/configure.ac b/configure.ac > index d9abc0d2..7b27dc21 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -555,6 +555,40 @@ AC_CONFIG_FILES([build.cfg tests/config-flags.pm \ > # Put build.sh in the build directory so it's easy to find > AC_CONFIG_LINKS([build.sh:build.sh]) > > +AC_MSG_CHECKING([for LLONG_MAX and LLONG_MIN values]) > +AC_LINK_IFELSE( > + [AC_LANG_PROGRAM( > +[[ > +#include <limits.h> > +#include <stdio.h> > +]], > +[[ > +#ifdef LLONG_MAX > + printf("%lld\n%lld\n", (long long)LLONG_MAX, (long long)LLONG_MIN); > + return 0; > +#else > + return 1; > +#endif > +]] > + )], > + [ # Linking succeeded > + AC_MSG_RESULT([yes]) > + LLVALS=`./conftest` > + rm -f conftest conftest.c > + LONG_LONG_INT_MAX=`echo "$LLVALS" | sed -n '1p'` > + LONG_LONG_INT_MIN=`echo "$LLVALS" | sed -n '2p'` > + ], > + [ # Linking failed > + AC_MSG_RESULT([no]) > + LONG_LONG_INT_MAX="" > + LONG_LONG_INT_MIN="" > + ], > +AC_MSG_ERROR([This must succeed]) > +) > + > +AC_SUBST([LONG_LONG_INT_MAX], [$LONG_LONG_INT_MAX]) > +AC_SUBST([LONG_LONG_INT_MIN], [$LONG_LONG_INT_MIN]) > + > # OK, do it! > > AC_OUTPUT > diff --git a/tests/config-flags.pm.in b/tests/config-flags.pm.in > index 90cd9801..8e2a80f7 100644 > --- a/tests/config-flags.pm.in > +++ b/tests/config-flags.pm.in > @@ -4,17 +4,19 @@ > # during the tests. > > %CONFIG_FLAGS = ( > - AM_LDFLAGS => '@AM_LDFLAGS@', > - AR => '@AR@', > - CC => '@CC@', > - CFLAGS => '@CFLAGS@', > - CPP => '@CPP@', > - CPPFLAGS => '@CPPFLAGS@', > - GUILE_CFLAGS => '@GUILE_CFLAGS@', > - GUILE_LIBS => '@GUILE_LIBS@', > - LDFLAGS => '@LDFLAGS@', > - LIBS => '@LIBS@', > - USE_SYSTEM_GLOB => '@USE_SYSTEM_GLOB@' > + AM_LDFLAGS => '@AM_LDFLAGS@', > + AR => '@AR@', > + CC => '@CC@', > + CFLAGS => '@CFLAGS@', > + CPP => '@CPP@', > + CPPFLAGS => '@CPPFLAGS@', > + GUILE_CFLAGS => '@GUILE_CFLAGS@', > + GUILE_LIBS => '@GUILE_LIBS@', > + LDFLAGS => '@LDFLAGS@', > + LIBS => '@LIBS@', > + USE_SYSTEM_GLOB => '@USE_SYSTEM_GLOB@', > + LONG_LONG_INT_MAX => '@LONG_LONG_INT_MAX@', > + LONG_LONG_INT_MIN => '@LONG_LONG_INT_MIN@' > ); > > 1; > diff --git a/tests/scripts/functions/add b/tests/scripts/functions/add > new file mode 100644 > index 00000000..3c5576f2 > --- /dev/null > +++ b/tests/scripts/functions/add > @@ -0,0 +1,42 @@ > +# > -*-perl-*- > + > +use Math::BigInt; > + > +$description = "Test the add function.\n"; > + > +$details = "Try various uses of add and ensure they all give the correct > +results.\n"; > + > + > +$llong_max = get_config('LONG_LONG_INT_MAX'); > +$llong_min = get_config('LONG_LONG_INT_MIN'); > + > +run_make_test('# Identity > +.RECIPEPREFIX = > > +all: > +> @echo 0_1 $(add 0) > +> @echo 0_2 $(add 1) > +> @echo 0_3 $(add -4) > +> @echo 0_4 $(add ' . $llong_min . ') > +> @echo 0_5 $(add ' . $llong_max . ') > +', '', '0_1 0 > +0_2 1 > +0_3 -4 > +0_4 ' . $llong_min . ' > +0_5 ' . $llong_max . ' > +'); > + > +run_make_test('# Positive addition > +.RECIPEPREFIX = > > +all: > +> @echo 0_1 $(add 0,1) > +> @echo 0_2 $(add 1,0) > +> @echo 0_3 $(add 1, 2, 3,4) > +> @echo 0_4 $(add ' . $llong_min . ',1) > +', '', '0_1 1 > +0_2 1 > +0_3 10 > +0_4 ' . Math::BigInt->new($llong_min)->badd(1)->bstr() . ' > +'); > + > +1; > -- > 2.43.0 > > > On Mon, Dec 9, 2024 at 12:50 PM Paul Smith <psm...@gnu.org> wrote: > > > > On Mon, 2024-12-09 at 01:49 -0800, Pete Dietl wrote: > > > Mon, 9 Dec 2024 10:37:14 +0100, Jouke Witteveen wrote: > > > > What I remember from the original thread is that we first needed a > > > > good proposal. I'm afraid the existence of the implementation > > > > suggested now sidesteps the discussion on what functionality is > > > > actually desirable. > > > > > > Yeah I'm totally open to discussing a proposal further. I just felt > > > like having some working prototype implemented would be useful. > > > > In my opinion the patch is a proposal. If we decide it's best to do > > something completely different, then that's what we'll do. No doubt > > whatever we decide the user interface should be, at least big chunks of > > this code can be re-used anyway. Hopefully this won't be a shock to > > Pete :) > > > > I agree that the big open question from the previous discussion was, > > multiple individual functions versus one function that accepts a "math > > string". And if the latter, what is the syntax of that string. I > > liked the idea of a single function, as it seems simpler to use, but > > certainly it requires more decisions and discussion. > > > > > > I don't see the advantage in creating this special case. If someone > > > > wants the negation of a value, wouldn't they just write "-$V" instead > > > > of "$(sub $V)"? > > > > > > This feels similar to many concerns raised in the original thread > > > four years ago. In this particular case, "-$V" could result in two > > > consecutive minus signs, which is probably not what we want. > > > > I'm not sure why not, as long as the code handles it (I don't think > > this code does, admittedly). Can't you just consider --5 to be the > > same as -(-5), or 5, which is the same thing that $(sub -5) gives (I > > think)? > > > > > personally I still think arithmetic operators may be too much feature > > > creep altogether. > > > > I think I don't agree. For one thing we already have the concept of > > "numbers", because we provide the $(words ...) and, maybe less > > convincingly, $(word ...) functions. It's just that we can't really do > > much with them yet. > > > > I get the instinct to keep the language "clean" but in the end, people > > want to write build tools more than they want a clean language :). > > Being able to do basic math without having to shell out (not portable) > > or link with Guile or write some C code for a loadable module, doesn't > > seem like we're going out too far on the ledge. > > >