From cdcb57035b4584fe754a6f9a8a18b47cc2b8fc27 Mon Sep 17 00:00:00 2001 From: tobiasu <> Date: Sat, 7 Jun 2014 01:47:02 +0000 Subject: Add basic regression test for modf() issue. encouraged by deraadt and miod --- src/regress/lib/libc/Makefile | 4 ++-- src/regress/lib/libc/modf/Makefile | 3 +++ src/regress/lib/libc/modf/modf_test.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/regress/lib/libc/modf/Makefile create mode 100644 src/regress/lib/libc/modf/modf_test.c (limited to 'src') diff --git a/src/regress/lib/libc/Makefile b/src/regress/lib/libc/Makefile index 3109c0c1fd..f138f16ffd 100644 --- a/src/regress/lib/libc/Makefile +++ b/src/regress/lib/libc/Makefile @@ -1,8 +1,8 @@ -# $OpenBSD: Makefile,v 1.38 2013/12/29 01:39:44 martynas Exp $ +# $OpenBSD: Makefile,v 1.39 2014/06/07 01:46:40 tobiasu Exp $ SUBDIR+= _setjmp alloca atexit basename cephes cxa-atexit db dirname env SUBDIR+= fmemopen fnmatch fpclassify getcap getopt_long glob -SUBDIR+= hsearch longjmp locale malloc mkstemp netdb open_memstream +SUBDIR+= hsearch longjmp locale malloc mkstemp modf netdb open_memstream SUBDIR+= orientation popen printf SUBDIR+= regex setjmp setjmp-signal sigreturn sigsetjmp sprintf SUBDIR+= stdio_threading stpncpy strerror strtod strtol strtonum diff --git a/src/regress/lib/libc/modf/Makefile b/src/regress/lib/libc/modf/Makefile new file mode 100644 index 0000000000..587c595f12 --- /dev/null +++ b/src/regress/lib/libc/modf/Makefile @@ -0,0 +1,3 @@ +PROG=modf_test + +.include diff --git a/src/regress/lib/libc/modf/modf_test.c b/src/regress/lib/libc/modf/modf_test.c new file mode 100644 index 0000000000..f732533635 --- /dev/null +++ b/src/regress/lib/libc/modf/modf_test.c @@ -0,0 +1,35 @@ +/* Public domain, 2014, Tobias Ulmer */ + +/* Test for bug introduced in 4.4BSD modf() on sparc */ + +#include + +#define BIGFLOAT (5e15) /* Number large enough to trigger the "big" case */ + +int +main(void) +{ + double f, i; + + f = modf(BIGFLOAT, &i); + if (i != BIGFLOAT) + return 1; + if (f != 0.0) + return 1; + + /* Repeat, maybe we were lucky */ + f = modf(BIGFLOAT, &i); + if (i != BIGFLOAT) + return 1; + if (f != 0.0) + return 1; + + /* With negative number, for good measure */ + f = modf(-BIGFLOAT, &i); + if (i != -BIGFLOAT) + return 1; + if (f != 0.0) + return 1; + + return 0; +} -- cgit v1.2.3-55-g6feb