summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2016-01-06 20:21:40 +0000
committerngie <ngie@FreeBSD.org>2016-01-06 20:21:40 +0000
commitd42686c8e06e5c0ff53de7112114f4d98755baa6 (patch)
tree99daa019cfcfe018bc200e270d3c2cecf5cb0d3d /tools
parent03aed74e9c37f31301d107b9678a5e10a1f1dd9e (diff)
downloadFreeBSD-src-d42686c8e06e5c0ff53de7112114f4d98755baa6.zip
FreeBSD-src-d42686c8e06e5c0ff53de7112114f4d98755baa6.tar.gz
MFC r292328:
Integrate a number of testcases from tools/regression/lib/msun into the FreeBSD test suite There's no functional change with these testcases; they're purposely being left in TAP format for the time being Other testcases which crash on amd64/i386 as-is have not been integrated yet (they need to be retested on a later version of CURRENT, as I haven't used i386 in some time)
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/lib/msun/Makefile8
-rw-r--r--tools/regression/lib/msun/test-cexp.t10
-rw-r--r--tools/regression/lib/msun/test-conj.t10
-rw-r--r--tools/regression/lib/msun/test-csqrt.t10
-rw-r--r--tools/regression/lib/msun/test-fenv.c576
-rw-r--r--tools/regression/lib/msun/test-fenv.t10
-rw-r--r--tools/regression/lib/msun/test-fmaxmin.c136
-rw-r--r--tools/regression/lib/msun/test-fmaxmin.t10
-rw-r--r--tools/regression/lib/msun/test-ilogb.c83
-rw-r--r--tools/regression/lib/msun/test-ilogb.t10
-rw-r--r--tools/regression/lib/msun/test-invctrig.c367
-rw-r--r--tools/regression/lib/msun/test-logarithm.c286
-rw-r--r--tools/regression/lib/msun/test-logarithm.t10
-rw-r--r--tools/regression/lib/msun/test-lrint.c149
-rw-r--r--tools/regression/lib/msun/test-lrint.t10
-rw-r--r--tools/regression/lib/msun/test-nan.c122
-rw-r--r--tools/regression/lib/msun/test-nan.t10
-rw-r--r--tools/regression/lib/msun/test-nearbyint.c176
-rw-r--r--tools/regression/lib/msun/test-nearbyint.t10
-rw-r--r--tools/regression/lib/msun/test-next.c265
-rw-r--r--tools/regression/lib/msun/test-next.t10
-rw-r--r--tools/regression/lib/msun/test-rem.c207
-rw-r--r--tools/regression/lib/msun/test-rem.t10
-rw-r--r--tools/regression/lib/msun/test-trig.t10
24 files changed, 3 insertions, 2502 deletions
diff --git a/tools/regression/lib/msun/Makefile b/tools/regression/lib/msun/Makefile
index dbf582f..8b301cb 100644
--- a/tools/regression/lib/msun/Makefile
+++ b/tools/regression/lib/msun/Makefile
@@ -1,10 +1,8 @@
# $FreeBSD$
-TESTS= test-cexp test-conj test-csqrt test-ctrig \
- test-exponential test-fenv test-fma \
- test-fmaxmin test-ilogb test-invtrig test-invctrig \
- test-logarithm test-lrint \
- test-lround test-nan test-nearbyint test-next test-rem test-trig
+TESTS= test-ctrig \
+ test-exponential test-fma \
+ test-lround test-nearbyint test-next test-rem test-trig
CFLAGS+= -O0 -lm -Wno-unknown-pragmas
.PHONY: tests
diff --git a/tools/regression/lib/msun/test-cexp.t b/tools/regression/lib/msun/test-cexp.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-cexp.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-conj.t b/tools/regression/lib/msun/test-conj.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-conj.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-csqrt.t b/tools/regression/lib/msun/test-csqrt.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-csqrt.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-fenv.c b/tools/regression/lib/msun/test-fenv.c
deleted file mode 100644
index 0ea6e42..0000000
--- a/tools/regression/lib/msun/test-fenv.c
+++ /dev/null
@@ -1,576 +0,0 @@
-/*-
- * Copyright (c) 2004 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test the correctness and C99-compliance of various fenv.h features.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <assert.h>
-#include <err.h>
-#include <fenv.h>
-#include <float.h>
-#include <math.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-/*
- * Implementations are permitted to define additional exception flags
- * not specified in the standard, so it is not necessarily true that
- * FE_ALL_EXCEPT == ALL_STD_EXCEPT.
- */
-#define ALL_STD_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \
- FE_OVERFLOW | FE_UNDERFLOW)
-
-#define NEXCEPTS (sizeof(std_excepts) / sizeof(std_excepts[0]))
-
-static const int std_excepts[] = {
- FE_INVALID,
- FE_DIVBYZERO,
- FE_OVERFLOW,
- FE_UNDERFLOW,
- FE_INEXACT,
-};
-
-/* init_exceptsets() initializes this to the power set of std_excepts[] */
-static int std_except_sets[1 << NEXCEPTS];
-
-static void init_exceptsets(void);
-
-static void test_dfl_env(void);
-static void test_fegsetenv(void);
-static void test_fegsetexceptflag(void);
-static void test_masking(void);
-static void test_fegsetround(void);
-static void test_feholdupdate(void);
-static void test_feraiseexcept(void);
-static void test_fetestclearexcept(void);
-
-static int getround(void);
-static void raiseexcept(int excepts);
-static void trap_handler(int sig);
-
-#pragma STDC FENV_ACCESS ON
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..8\n");
- init_exceptsets();
- test_dfl_env();
- printf("ok 1 - fenv\n");
- test_fetestclearexcept();
- printf("ok 2 - fenv\n");
- test_fegsetexceptflag();
- printf("ok 3 - fenv\n");
- test_feraiseexcept();
- printf("ok 4 - fenv\n");
- test_fegsetround();
- printf("ok 5 - fenv\n");
- test_fegsetenv();
- printf("ok 6 - fenv\n");
- test_masking();
- printf("ok 7 - fenv\n");
- test_feholdupdate();
- printf("ok 8 - fenv\n");
-
- return (0);
-}
-
-/*
- * Initialize std_except_sets[] to the power set of std_excepts[]
- */
-void
-init_exceptsets(void)
-{
- int i, j, sr;
-
- for (i = 0; i < 1 << NEXCEPTS; i++) {
- for (sr = i, j = 0; sr != 0; sr >>= 1, j++)
- std_except_sets[i] |= std_excepts[j] & ((~sr & 1) - 1);
- }
-}
-
-/*
- * This tests checks the default FP environment, so it must be first.
- * The memcmp() test below may be too much to ask for, since there
- * could be multiple machine-specific default environments.
- */
-static void
-test_dfl_env(void)
-{
-#ifndef NO_STRICT_DFL_ENV
- fenv_t env;
-
- fegetenv(&env);
-
-#ifdef __amd64__
- /*
- * Compare the fields that the AMD [1] and Intel [2] specs say will be
- * set once fnstenv returns.
- *
- * Not all amd64 capable processors implement the fnstenv instruction
- * by zero'ing out the env.__x87.__other field (example: AMD Opteron
- * 6308). The AMD64/x64 specs aren't explicit on what the
- * env.__x87.__other field will contain after fnstenv is executed, so
- * the values in env.__x87.__other could be filled with arbitrary
- * data depending on how the CPU implements fnstenv.
- *
- * 1. http://support.amd.com/TechDocs/26569_APM_v5.pdf
- * 2. http://www.intel.com/Assets/en_US/PDF/manual/253666.pdf
- */
- assert(memcmp(&env.__mxcsr, &FE_DFL_ENV->__mxcsr,
- sizeof(env.__mxcsr)) == 0);
- assert(memcmp(&env.__x87.__control, &FE_DFL_ENV->__x87.__control,
- sizeof(env.__x87.__control)) == 0);
- assert(memcmp(&env.__x87.__status, &FE_DFL_ENV->__x87.__status,
- sizeof(env.__x87.__status)) == 0);
- assert(memcmp(&env.__x87.__tag, &FE_DFL_ENV->__x87.__tag,
- sizeof(env.__x87.__tag)) == 0);
-#else
- assert(memcmp(&env, FE_DFL_ENV, sizeof(env)) == 0);
-#endif
-
-#endif
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
-}
-
-/*
- * Test fetestexcept() and feclearexcept().
- */
-static void
-test_fetestclearexcept(void)
-{
- int excepts, i;
-
- for (i = 0; i < 1 << NEXCEPTS; i++)
- assert(fetestexcept(std_except_sets[i]) == 0);
- for (i = 0; i < 1 << NEXCEPTS; i++) {
- excepts = std_except_sets[i];
-
- /* FE_ALL_EXCEPT might be special-cased, as on i386. */
- raiseexcept(excepts);
- assert(fetestexcept(excepts) == excepts);
- assert(feclearexcept(FE_ALL_EXCEPT) == 0);
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
-
- raiseexcept(excepts);
- assert(fetestexcept(excepts) == excepts);
- if ((excepts & (FE_UNDERFLOW | FE_OVERFLOW)) != 0) {
- excepts |= FE_INEXACT;
- assert((fetestexcept(ALL_STD_EXCEPT) | FE_INEXACT) ==
- excepts);
- } else {
- assert(fetestexcept(ALL_STD_EXCEPT) == excepts);
- }
- assert(feclearexcept(excepts) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
- }
-}
-
-/*
- * Test fegetexceptflag() and fesetexceptflag().
- *
- * Prerequisites: fetestexcept(), feclearexcept()
- */
-static void
-test_fegsetexceptflag(void)
-{
- fexcept_t flag;
- int excepts, i;
-
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
- for (i = 0; i < 1 << NEXCEPTS; i++) {
- excepts = std_except_sets[i];
-
- assert(fegetexceptflag(&flag, excepts) == 0);
- raiseexcept(ALL_STD_EXCEPT);
- assert(fesetexceptflag(&flag, excepts) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) ==
- (ALL_STD_EXCEPT ^ excepts));
-
- assert(fegetexceptflag(&flag, FE_ALL_EXCEPT) == 0);
- assert(feclearexcept(FE_ALL_EXCEPT) == 0);
- assert(fesetexceptflag(&flag, excepts) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
- assert(fesetexceptflag(&flag, ALL_STD_EXCEPT ^ excepts) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) ==
- (ALL_STD_EXCEPT ^ excepts));
-
- assert(feclearexcept(FE_ALL_EXCEPT) == 0);
- }
-}
-
-/*
- * Test feraiseexcept().
- *
- * Prerequisites: fetestexcept(), feclearexcept()
- */
-static void
-test_feraiseexcept(void)
-{
- int excepts, i;
-
- for (i = 0; i < 1 << NEXCEPTS; i++) {
- excepts = std_except_sets[i];
-
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
- assert(feraiseexcept(excepts) == 0);
- if ((excepts & (FE_UNDERFLOW | FE_OVERFLOW)) != 0) {
- excepts |= FE_INEXACT;
- assert((fetestexcept(ALL_STD_EXCEPT) | FE_INEXACT) ==
- excepts);
- } else {
- assert(fetestexcept(ALL_STD_EXCEPT) == excepts);
- }
- assert(feclearexcept(FE_ALL_EXCEPT) == 0);
- }
- assert(feraiseexcept(FE_INVALID | FE_DIVBYZERO) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) == (FE_INVALID | FE_DIVBYZERO));
- assert(feraiseexcept(FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) == ALL_STD_EXCEPT);
- assert(feclearexcept(FE_ALL_EXCEPT) == 0);
-}
-
-/*
- * Test fegetround() and fesetround().
- */
-static void
-test_fegsetround(void)
-{
-
- assert(fegetround() == FE_TONEAREST);
- assert(getround() == FE_TONEAREST);
- assert(FLT_ROUNDS == 1);
-
- assert(fesetround(FE_DOWNWARD) == 0);
- assert(fegetround() == FE_DOWNWARD);
- assert(getround() == FE_DOWNWARD);
- assert(FLT_ROUNDS == 3);
-
- assert(fesetround(FE_UPWARD) == 0);
- assert(getround() == FE_UPWARD);
- assert(fegetround() == FE_UPWARD);
- assert(FLT_ROUNDS == 2);
-
- assert(fesetround(FE_TOWARDZERO) == 0);
- assert(getround() == FE_TOWARDZERO);
- assert(fegetround() == FE_TOWARDZERO);
- assert(FLT_ROUNDS == 0);
-
- assert(fesetround(FE_TONEAREST) == 0);
- assert(getround() == FE_TONEAREST);
- assert(FLT_ROUNDS == 1);
-
- assert(feclearexcept(FE_ALL_EXCEPT) == 0);
-}
-
-/*
- * Test fegetenv() and fesetenv().
- *
- * Prerequisites: fetestexcept(), feclearexcept(), fegetround(), fesetround()
- */
-static void
-test_fegsetenv(void)
-{
- fenv_t env1, env2;
- int excepts, i;
-
- for (i = 0; i < 1 << NEXCEPTS; i++) {
- excepts = std_except_sets[i];
-
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
- assert(fegetround() == FE_TONEAREST);
- assert(fegetenv(&env1) == 0);
-
- /*
- * fe[gs]etenv() should be able to save and restore
- * exception flags without the spurious inexact
- * exceptions that afflict raiseexcept().
- */
- raiseexcept(excepts);
- if ((excepts & (FE_UNDERFLOW | FE_OVERFLOW)) != 0 &&
- (excepts & FE_INEXACT) == 0)
- assert(feclearexcept(FE_INEXACT) == 0);
-
- fesetround(FE_DOWNWARD);
- assert(fegetenv(&env2) == 0);
- assert(fesetenv(&env1) == 0);
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
- assert(fegetround() == FE_TONEAREST);
-
- assert(fesetenv(&env2) == 0);
- assert(fetestexcept(FE_ALL_EXCEPT) == excepts);
- assert(fegetround() == FE_DOWNWARD);
- assert(fesetenv(&env1) == 0);
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
- assert(fegetround() == FE_TONEAREST);
- }
-}
-
-/*
- * Test fegetexcept(), fedisableexcept(), and feenableexcept().
- *
- * Prerequisites: fetestexcept(), feraiseexcept()
- */
-static void
-test_masking(void)
-{
- struct sigaction act;
- int except, i, pass, raise, status;
-
- assert((fegetexcept() & ALL_STD_EXCEPT) == 0);
- assert((feenableexcept(FE_INVALID|FE_OVERFLOW) & ALL_STD_EXCEPT) == 0);
- assert((feenableexcept(FE_UNDERFLOW) & ALL_STD_EXCEPT) ==
- (FE_INVALID | FE_OVERFLOW));
- assert((fedisableexcept(FE_OVERFLOW) & ALL_STD_EXCEPT) ==
- (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW));
- assert((fegetexcept() & ALL_STD_EXCEPT) == (FE_INVALID | FE_UNDERFLOW));
- assert((fedisableexcept(FE_ALL_EXCEPT) & ALL_STD_EXCEPT) ==
- (FE_INVALID | FE_UNDERFLOW));
- assert((fegetexcept() & ALL_STD_EXCEPT) == 0);
-
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- act.sa_handler = trap_handler;
- for (pass = 0; pass < 2; pass++) {
- for (i = 0; i < NEXCEPTS; i++) {
- except = std_excepts[i];
- /* over/underflow may also raise inexact */
- if (except == FE_INEXACT)
- raise = FE_DIVBYZERO | FE_INVALID;
- else
- raise = ALL_STD_EXCEPT ^ except;
-
- /*
- * We need to fork a child process because
- * there isn't a portable way to recover from
- * a floating-point exception.
- */
- switch(fork()) {
- case 0: /* child */
- assert((fegetexcept() & ALL_STD_EXCEPT) == 0);
- assert((feenableexcept(except)
- & ALL_STD_EXCEPT) == 0);
- assert(fegetexcept() == except);
- raiseexcept(raise);
- assert(feraiseexcept(raise) == 0);
- assert(fetestexcept(ALL_STD_EXCEPT) == raise);
-
- assert(sigaction(SIGFPE, &act, NULL) == 0);
- switch (pass) {
- case 0:
- raiseexcept(except);
- case 1:
- feraiseexcept(except);
- default:
- assert(0);
- }
- assert(0);
- default: /* parent */
- assert(wait(&status) > 0);
- /*
- * Avoid assert() here so that it's possible
- * to examine a failed child's core dump.
- */
- if (!WIFEXITED(status))
- errx(1, "child aborted\n");
- assert(WEXITSTATUS(status) == 0);
- break;
- case -1: /* error */
- assert(0);
- }
- }
- }
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
-}
-
-/*
- * Test feholdexcept() and feupdateenv().
- *
- * Prerequisites: fetestexcept(), fegetround(), fesetround(),
- * fedisableexcept(), feenableexcept()
- */
-static void
-test_feholdupdate(void)
-{
- fenv_t env;
-
- struct sigaction act;
- int except, i, pass, status, raise;
-
- sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- act.sa_handler = trap_handler;
- for (pass = 0; pass < 2; pass++) {
- for (i = 0; i < NEXCEPTS; i++) {
- except = std_excepts[i];
- /* over/underflow may also raise inexact */
- if (except == FE_INEXACT)
- raise = FE_DIVBYZERO | FE_INVALID;
- else
- raise = ALL_STD_EXCEPT ^ except;
-
- /*
- * We need to fork a child process because
- * there isn't a portable way to recover from
- * a floating-point exception.
- */
- switch(fork()) {
- case 0: /* child */
- /*
- * We don't want to cause a fatal exception in
- * the child until the second pass, so we can
- * check other properties of feupdateenv().
- */
- if (pass == 1)
- assert((feenableexcept(except) &
- ALL_STD_EXCEPT) == 0);
- raiseexcept(raise);
- assert(fesetround(FE_DOWNWARD) == 0);
- assert(feholdexcept(&env) == 0);
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
- raiseexcept(except);
- assert(fesetround(FE_UPWARD) == 0);
-
- if (pass == 1)
- assert(sigaction(SIGFPE, &act, NULL) ==
- 0);
- assert(feupdateenv(&env) == 0);
- assert(fegetround() == FE_DOWNWARD);
- assert(fetestexcept(ALL_STD_EXCEPT) ==
- (except | raise));
-
- assert(pass == 0);
- _exit(0);
- default: /* parent */
- assert(wait(&status) > 0);
- /*
- * Avoid assert() here so that it's possible
- * to examine a failed child's core dump.
- */
- if (!WIFEXITED(status))
- errx(1, "child aborted\n");
- assert(WEXITSTATUS(status) == 0);
- break;
- case -1: /* error */
- assert(0);
- }
- }
- }
- assert(fetestexcept(FE_ALL_EXCEPT) == 0);
-}
-
-/*
- * Raise a floating-point exception without relying on the standard
- * library routines, which we are trying to test.
- *
- * XXX We can't raise an {over,under}flow without also raising an
- * inexact exception.
- */
-static void
-raiseexcept(int excepts)
-{
- volatile double d;
-
- /*
- * With a compiler that supports the FENV_ACCESS pragma
- * properly, simple expressions like '0.0 / 0.0' should
- * be sufficient to generate traps. Unfortunately, we
- * need to bring a volatile variable into the equation
- * to prevent incorrect optimizations.
- */
- if (excepts & FE_INVALID) {
- d = 0.0;
- d = 0.0 / d;
- }
- if (excepts & FE_DIVBYZERO) {
- d = 0.0;
- d = 1.0 / d;
- }
- if (excepts & FE_OVERFLOW) {
- d = DBL_MAX;
- d *= 2.0;
- }
- if (excepts & FE_UNDERFLOW) {
- d = DBL_MIN;
- d /= DBL_MAX;
- }
- if (excepts & FE_INEXACT) {
- d = DBL_MIN;
- d += 1.0;
- }
-
- /*
- * On the x86 (and some other architectures?) the FPU and
- * integer units are decoupled. We need to execute an FWAIT
- * or a floating-point instruction to get synchronous exceptions.
- */
- d = 1.0;
- d += 1.0;
-}
-
-/*
- * Determine the current rounding mode without relying on the fenv
- * routines. This function may raise an inexact exception.
- */
-static int
-getround(void)
-{
- volatile double d;
-
- /*
- * This test works just as well with 0.0 - 0.0, except on ia64
- * where 0.0 - 0.0 gives the wrong sign when rounding downwards.
- */
- d = 1.0;
- d -= 1.0;
- if (copysign(1.0, d) < 0.0)
- return (FE_DOWNWARD);
-
- d = 1.0;
- if (d + (DBL_EPSILON * 3.0 / 4.0) == 1.0)
- return (FE_TOWARDZERO);
- if (d + (DBL_EPSILON * 1.0 / 4.0) > 1.0)
- return (FE_UPWARD);
-
- return (FE_TONEAREST);
-}
-
-static void
-trap_handler(int sig)
-{
-
- assert(sig == SIGFPE);
- _exit(0);
-}
diff --git a/tools/regression/lib/msun/test-fenv.t b/tools/regression/lib/msun/test-fenv.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-fenv.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-fmaxmin.c b/tools/regression/lib/msun/test-fmaxmin.c
deleted file mode 100644
index 7ddcc87..0000000
--- a/tools/regression/lib/msun/test-fmaxmin.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*-
- * Copyright (c) 2008 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Tests for fmax{,f,l}() and fmin{,f,l}.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <fenv.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "test-utils.h"
-
-#pragma STDC FENV_ACCESS ON
-
-/*
- * Test whether func(x, y) has the expected result, and make sure no
- * exceptions are raised.
- */
-#define TEST(func, type, x, y, expected) do { \
- type __x = (x); /* convert before we clear exceptions */ \
- type __y = (y); \
- feclearexcept(ALL_STD_EXCEPT); \
- long double __result = func((__x), (__y)); \
- if (fetestexcept(ALL_STD_EXCEPT)) { \
- fprintf(stderr, #func "(%.20Lg, %.20Lg) raised 0x%x\n", \
- (x), (y), fetestexcept(FE_ALL_EXCEPT)); \
- ok = 0; \
- } \
- if (!fpequal(__result, (expected))) { \
- fprintf(stderr, #func "(%.20Lg, %.20Lg) = %.20Lg, " \
- "expected %.20Lg\n", (x), (y), __result, (expected)); \
- ok = 0; \
- } \
-} while (0)
-
-int
-testall_r(long double big, long double small)
-{
- int ok;
-
- long double expected_max = isnan(big) ? small : big;
- long double expected_min = isnan(small) ? big : small;
- ok = 1;
-
- TEST(fmaxf, float, big, small, expected_max);
- TEST(fmaxf, float, small, big, expected_max);
- TEST(fmax, double, big, small, expected_max);
- TEST(fmax, double, small, big, expected_max);
- TEST(fmaxl, long double, big, small, expected_max);
- TEST(fmaxl, long double, small, big, expected_max);
- TEST(fminf, float, big, small, expected_min);
- TEST(fminf, float, small, big, expected_min);
- TEST(fmin, double, big, small, expected_min);
- TEST(fmin, double, small, big, expected_min);
- TEST(fminl, long double, big, small, expected_min);
- TEST(fminl, long double, small, big, expected_min);
-
- return (ok);
-}
-
-/*
- * Test all the functions: fmaxf, fmax, fmaxl, fminf, fmin, and fminl,
- * in all rounding modes and with the arguments in different orders.
- * The input 'big' must be >= 'small'.
- */
-void
-testall(int testnum, long double big, long double small)
-{
- static const int rmodes[] = {
- FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO
- };
- int i;
-
- for (i = 0; i < 4; i++) {
- fesetround(rmodes[i]);
- if (!testall_r(big, small)) {
- fprintf(stderr, "FAILURE in rounding mode %d\n",
- rmodes[i]);
- break;
- }
- }
- printf("%sok %d - big = %.20Lg, small = %.20Lg\n",
- (i == 4) ? "" : "not ", testnum, big, small);
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..12\n");
-
- testall(1, 1.0, 0.0);
- testall(2, 42.0, nextafterf(42.0, -INFINITY));
- testall(3, nextafterf(42.0, INFINITY), 42.0);
- testall(4, -5.0, -5.0);
- testall(5, -3.0, -4.0);
- testall(6, 1.0, NAN);
- testall(7, INFINITY, NAN);
- testall(8, INFINITY, 1.0);
- testall(9, -3.0, -INFINITY);
- testall(10, 3.0, -INFINITY);
- testall(11, NAN, NAN);
-
- /* This test isn't strictly required to work by C99. */
- testall(12, 0.0, -0.0);
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-fmaxmin.t b/tools/regression/lib/msun/test-fmaxmin.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-fmaxmin.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-ilogb.c b/tools/regression/lib/msun/test-ilogb.c
deleted file mode 100644
index a1440c4..0000000
--- a/tools/regression/lib/msun/test-ilogb.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*-
- * Copyright (c) 2004 Stefan Farfeleder
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#include <assert.h>
-#include <float.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int
-main(void)
-{
- char buf[128], *end;
- double d;
- float f;
- long double ld;
- int e, i;
-
- printf("1..3\n");
- assert(ilogb(0) == FP_ILOGB0);
- assert(ilogb(NAN) == FP_ILOGBNAN);
- assert(ilogb(INFINITY) == INT_MAX);
- for (e = DBL_MIN_EXP - DBL_MANT_DIG; e < DBL_MAX_EXP; e++) {
- snprintf(buf, sizeof(buf), "0x1.p%d", e);
- d = strtod(buf, &end);
- assert(*end == '\0');
- i = ilogb(d);
- assert(i == e);
- }
- printf("ok 1 - ilogb\n");
-
- assert(ilogbf(0) == FP_ILOGB0);
- assert(ilogbf(NAN) == FP_ILOGBNAN);
- assert(ilogbf(INFINITY) == INT_MAX);
- for (e = FLT_MIN_EXP - FLT_MANT_DIG; e < FLT_MAX_EXP; e++) {
- snprintf(buf, sizeof(buf), "0x1.p%d", e);
- f = strtof(buf, &end);
- assert(*end == '\0');
- i = ilogbf(f);
- assert(i == e);
- }
- printf("ok 2 - ilogbf\n");
-
- assert(ilogbl(0) == FP_ILOGB0);
- assert(ilogbl(NAN) == FP_ILOGBNAN);
- assert(ilogbl(INFINITY) == INT_MAX);
- for (e = LDBL_MIN_EXP - LDBL_MANT_DIG; e < LDBL_MAX_EXP; e++) {
- snprintf(buf, sizeof(buf), "0x1.p%d", e);
- ld = strtold(buf, &end);
- assert(*end == '\0');
- i = ilogbl(ld);
- assert(i == e);
- }
- printf("ok 3 - ilogbl\n");
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-ilogb.t b/tools/regression/lib/msun/test-ilogb.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-ilogb.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-invctrig.c b/tools/regression/lib/msun/test-invctrig.c
deleted file mode 100644
index 34e78a1..0000000
--- a/tools/regression/lib/msun/test-invctrig.c
+++ /dev/null
@@ -1,367 +0,0 @@
-/*-
- * Copyright (c) 2008-2013 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Tests for casin[h](), cacos[h](), and catan[h]().
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <complex.h>
-#include <fenv.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "test-utils.h"
-
-#pragma STDC FENV_ACCESS ON
-#pragma STDC CX_LIMITED_RANGE OFF
-
-/*
- * Test that a function returns the correct value and sets the
- * exception flags correctly. The exceptmask specifies which
- * exceptions we should check. We need to be lenient for several
- * reasons, but mainly because on some architectures it's impossible
- * to raise FE_OVERFLOW without raising FE_INEXACT.
- *
- * These are macros instead of functions so that assert provides more
- * meaningful error messages.
- *
- * XXX The volatile here is to avoid gcc's bogus constant folding and work
- * around the lack of support for the FENV_ACCESS pragma.
- */
-#define test_p(func, z, result, exceptmask, excepts, checksign) do { \
- volatile long double complex _d = z; \
- debug(" testing %s(%Lg + %Lg I) == %Lg + %Lg I\n", #func, \
- creall(_d), cimagl(_d), creall(result), cimagl(result)); \
- assert(feclearexcept(FE_ALL_EXCEPT) == 0); \
- assert(cfpequal_cs((func)(_d), (result), (checksign))); \
- assert(((void)(func), fetestexcept(exceptmask) == (excepts))); \
-} while (0)
-
-/*
- * Test within a given tolerance. The tolerance indicates relative error
- * in ulps.
- */
-#define test_p_tol(func, z, result, tol) do { \
- volatile long double complex _d = z; \
- debug(" testing %s(%Lg + %Lg I) ~= %Lg + %Lg I\n", #func, \
- creall(_d), cimagl(_d), creall(result), cimagl(result)); \
- assert(cfpequal_tol((func)(_d), (result), (tol), CS_BOTH)); \
-} while (0)
-
-/* These wrappers apply the identities f(conj(z)) = conj(f(z)). */
-#define test(func, z, result, exceptmask, excepts, checksign) do { \
- test_p(func, z, result, exceptmask, excepts, checksign); \
- test_p(func, conjl(z), conjl(result), exceptmask, excepts, checksign); \
-} while (0)
-#define test_tol(func, z, result, tol) do { \
- test_p_tol(func, z, result, tol); \
- test_p_tol(func, conjl(z), conjl(result), tol); \
-} while (0)
-
-/* Test the given function in all precisions. */
-#define testall(func, x, result, exceptmask, excepts, checksign) do { \
- test(func, x, result, exceptmask, excepts, checksign); \
- test(func##f, x, result, exceptmask, excepts, checksign); \
-} while (0)
-#define testall_odd(func, x, result, exceptmask, excepts, checksign) do { \
- testall(func, x, result, exceptmask, excepts, checksign); \
- testall(func, -(x), -result, exceptmask, excepts, checksign); \
-} while (0)
-#define testall_even(func, x, result, exceptmask, excepts, checksign) do { \
- testall(func, x, result, exceptmask, excepts, checksign); \
- testall(func, -(x), result, exceptmask, excepts, checksign); \
-} while (0)
-
-/*
- * Test the given function in all precisions, within a given tolerance.
- * The tolerance is specified in ulps.
- */
-#define testall_tol(func, x, result, tol) do { \
- test_tol(func, x, result, (tol) * DBL_ULP()); \
- test_tol(func##f, x, result, (tol) * FLT_ULP()); \
-} while (0)
-#define testall_odd_tol(func, x, result, tol) do { \
- testall_tol(func, x, result, tol); \
- testall_tol(func, -(x), -result, tol); \
-} while (0)
-#define testall_even_tol(func, x, result, tol) do { \
- testall_tol(func, x, result, tol); \
- testall_tol(func, -(x), result, tol); \
-} while (0)
-
-static const long double
-pi = 3.14159265358979323846264338327950280L,
-c3pi = 9.42477796076937971538793014983850839L;
-
-
-/* Tests for 0 */
-void
-test_zero(void)
-{
- long double complex zero = CMPLXL(0.0, 0.0);
-
- testall_tol(cacosh, zero, CMPLXL(0.0, pi / 2), 1);
- testall_tol(cacosh, -zero, CMPLXL(0.0, -pi / 2), 1);
- testall_tol(cacos, zero, CMPLXL(pi / 2, -0.0), 1);
- testall_tol(cacos, -zero, CMPLXL(pi / 2, 0.0), 1);
-
- testall_odd(casinh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
- testall_odd(casin, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
-
- testall_odd(catanh, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
- testall_odd(catan, zero, zero, ALL_STD_EXCEPT, 0, CS_BOTH);
-}
-
-/*
- * Tests for NaN inputs.
- */
-void
-test_nan()
-{
- long double complex nan_nan = CMPLXL(NAN, NAN);
- long double complex z;
-
- /*
- * IN CACOSH CACOS CASINH CATANH
- * NaN,NaN NaN,NaN NaN,NaN NaN,NaN NaN,NaN
- * finite,NaN NaN,NaN* NaN,NaN* NaN,NaN* NaN,NaN*
- * NaN,finite NaN,NaN* NaN,NaN* NaN,NaN* NaN,NaN*
- * NaN,Inf Inf,NaN NaN,-Inf ?Inf,NaN ?0,pi/2
- * +-Inf,NaN Inf,NaN NaN,?Inf +-Inf,NaN +-0,NaN
- * +-0,NaN NaN,NaN* pi/2,NaN NaN,NaN* +-0,NaN
- * NaN,0 NaN,NaN* NaN,NaN* NaN,0 NaN,NaN*
- *
- * * = raise invalid
- */
- z = nan_nan;
- testall(cacosh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
- testall(cacos, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
- testall(casinh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
- testall(casin, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
- testall(catanh, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
- testall(catan, z, nan_nan, ALL_STD_EXCEPT, 0, 0);
-
- z = CMPLXL(0.5, NAN);
- testall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(cacos, z, nan_nan, OPT_INVALID, 0, 0);
- testall(casinh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(casin, z, nan_nan, OPT_INVALID, 0, 0);
- testall(catanh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(catan, z, nan_nan, OPT_INVALID, 0, 0);
-
- z = CMPLXL(NAN, 0.5);
- testall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(cacos, z, nan_nan, OPT_INVALID, 0, 0);
- testall(casinh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(casin, z, nan_nan, OPT_INVALID, 0, 0);
- testall(catanh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(catan, z, nan_nan, OPT_INVALID, 0, 0);
-
- z = CMPLXL(NAN, INFINITY);
- testall(cacosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
- testall(cacosh, -z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
- testall(cacos, z, CMPLXL(NAN, -INFINITY), ALL_STD_EXCEPT, 0, CS_IMAG);
- testall(casinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0, 0);
- testall(casin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, CS_IMAG);
- testall_tol(catanh, z, CMPLXL(0.0, pi / 2), 1);
- testall(catan, z, CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, CS_IMAG);
-
- z = CMPLXL(INFINITY, NAN);
- testall_even(cacosh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,
- CS_REAL);
- testall_even(cacos, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);
- testall_odd(casinh, z, CMPLXL(INFINITY, NAN), ALL_STD_EXCEPT, 0,
- CS_REAL);
- testall_odd(casin, z, CMPLXL(NAN, INFINITY), ALL_STD_EXCEPT, 0, 0);
- testall_odd(catanh, z, CMPLXL(0.0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
- testall_odd_tol(catan, z, CMPLXL(pi / 2, 0.0), 1);
-
- z = CMPLXL(0.0, NAN);
- /* XXX We allow a spurious inexact exception here. */
- testall_even(cacosh, z, nan_nan, OPT_INVALID & ~FE_INEXACT, 0, 0);
- testall_even_tol(cacos, z, CMPLXL(pi / 2, NAN), 1);
- testall_odd(casinh, z, nan_nan, OPT_INVALID, 0, 0);
- testall_odd(casin, z, CMPLXL(0.0, NAN), ALL_STD_EXCEPT, 0, CS_REAL);
- testall_odd(catanh, z, CMPLXL(0.0, NAN), OPT_INVALID, 0, CS_REAL);
- testall_odd(catan, z, nan_nan, OPT_INVALID, 0, 0);
-
- z = CMPLXL(NAN, 0.0);
- testall(cacosh, z, nan_nan, OPT_INVALID, 0, 0);
- testall(cacos, z, nan_nan, OPT_INVALID, 0, 0);
- testall(casinh, z, CMPLXL(NAN, 0), ALL_STD_EXCEPT, 0, CS_IMAG);
- testall(casin, z, nan_nan, OPT_INVALID, 0, 0);
- testall(catanh, z, nan_nan, OPT_INVALID, 0, CS_IMAG);
- testall(catan, z, CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, 0);
-}
-
-void
-test_inf(void)
-{
- long double complex z;
-
- /*
- * IN CACOSH CACOS CASINH CATANH
- * Inf,Inf Inf,pi/4 pi/4,-Inf Inf,pi/4 0,pi/2
- * -Inf,Inf Inf,3pi/4 3pi/4,-Inf --- ---
- * Inf,finite Inf,0 0,-Inf Inf,0 0,pi/2
- * -Inf,finite Inf,pi pi,-Inf --- ---
- * finite,Inf Inf,pi/2 pi/2,-Inf Inf,pi/2 0,pi/2
- */
- z = CMPLXL(INFINITY, INFINITY);
- testall_tol(cacosh, z, CMPLXL(INFINITY, pi / 4), 1);
- testall_tol(cacosh, -z, CMPLXL(INFINITY, -c3pi / 4), 1);
- testall_tol(cacos, z, CMPLXL(pi / 4, -INFINITY), 1);
- testall_tol(cacos, -z, CMPLXL(c3pi / 4, INFINITY), 1);
- testall_odd_tol(casinh, z, CMPLXL(INFINITY, pi / 4), 1);
- testall_odd_tol(casin, z, CMPLXL(pi / 4, INFINITY), 1);
- testall_odd_tol(catanh, z, CMPLXL(0, pi / 2), 1);
- testall_odd_tol(catan, z, CMPLXL(pi / 2, 0), 1);
-
- z = CMPLXL(INFINITY, 0.5);
- /* XXX We allow a spurious inexact exception here. */
- testall(cacosh, z, CMPLXL(INFINITY, 0), OPT_INEXACT, 0, CS_BOTH);
- testall_tol(cacosh, -z, CMPLXL(INFINITY, -pi), 1);
- testall(cacos, z, CMPLXL(0, -INFINITY), OPT_INEXACT, 0, CS_BOTH);
- testall_tol(cacos, -z, CMPLXL(pi, INFINITY), 1);
- testall_odd(casinh, z, CMPLXL(INFINITY, 0), OPT_INEXACT, 0, CS_BOTH);
- testall_odd_tol(casin, z, CMPLXL(pi / 2, INFINITY), 1);
- testall_odd_tol(catanh, z, CMPLXL(0, pi / 2), 1);
- testall_odd_tol(catan, z, CMPLXL(pi / 2, 0), 1);
-
- z = CMPLXL(0.5, INFINITY);
- testall_tol(cacosh, z, CMPLXL(INFINITY, pi / 2), 1);
- testall_tol(cacosh, -z, CMPLXL(INFINITY, -pi / 2), 1);
- testall_tol(cacos, z, CMPLXL(pi / 2, -INFINITY), 1);
- testall_tol(cacos, -z, CMPLXL(pi / 2, INFINITY), 1);
- testall_odd_tol(casinh, z, CMPLXL(INFINITY, pi / 2), 1);
- /* XXX We allow a spurious inexact exception here. */
- testall_odd(casin, z, CMPLXL(0.0, INFINITY), OPT_INEXACT, 0, CS_BOTH);
- testall_odd_tol(catanh, z, CMPLXL(0, pi / 2), 1);
- testall_odd_tol(catan, z, CMPLXL(pi / 2, 0), 1);
-}
-
-/* Tests along the real and imaginary axes. */
-void
-test_axes(void)
-{
- static const long double nums[] = {
- -2, -1, -0.5, 0.5, 1, 2
- };
- long double complex z;
- int i;
-
- for (i = 0; i < sizeof(nums) / sizeof(nums[0]); i++) {
- /* Real axis */
- z = CMPLXL(nums[i], 0.0);
- if (fabsl(nums[i]) <= 1) {
- testall_tol(cacosh, z, CMPLXL(0.0, acos(nums[i])), 1);
- testall_tol(cacos, z, CMPLXL(acosl(nums[i]), -0.0), 1);
- testall_tol(casin, z, CMPLXL(asinl(nums[i]), 0.0), 1);
- testall_tol(catanh, z, CMPLXL(atanh(nums[i]), 0.0), 1);
- } else {
- testall_tol(cacosh, z,
- CMPLXL(acosh(fabsl(nums[i])),
- (nums[i] < 0) ? pi : 0), 1);
- testall_tol(cacos, z,
- CMPLXL((nums[i] < 0) ? pi : 0,
- -acosh(fabsl(nums[i]))), 1);
- testall_tol(casin, z,
- CMPLXL(copysign(pi / 2, nums[i]),
- acosh(fabsl(nums[i]))), 1);
- testall_tol(catanh, z,
- CMPLXL(atanh(1 / nums[i]), pi / 2), 1);
- }
- testall_tol(casinh, z, CMPLXL(asinh(nums[i]), 0.0), 1);
- testall_tol(catan, z, CMPLXL(atan(nums[i]), 0), 1);
-
- /* TODO: Test the imaginary axis. */
- }
-}
-
-void
-test_small(void)
-{
- /*
- * z = 0.75 + i 0.25
- * acos(z) = Pi/4 - i ln(2)/2
- * asin(z) = Pi/4 + i ln(2)/2
- * atan(z) = atan(4)/2 + i ln(17/9)/4
- */
- complex long double z;
- complex long double acos_z;
- complex long double asin_z;
- complex long double atan_z;
-
- z = CMPLXL(0.75L, 0.25L);
- acos_z = CMPLXL(pi / 4, -0.34657359027997265470861606072908828L);
- asin_z = CMPLXL(pi / 4, 0.34657359027997265470861606072908828L);
- atan_z = CMPLXL(0.66290883183401623252961960521423782L,
- 0.15899719167999917436476103600701878L);
-
- testall_tol(cacos, z, acos_z, 2);
- testall_odd_tol(casin, z, asin_z, 2);
- testall_odd_tol(catan, z, atan_z, 2);
-}
-
-/* Test inputs that might cause overflow in a sloppy implementation. */
-void
-test_large(void)
-{
-
- /* TODO: Write these tests */
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..6\n");
-
- test_zero();
- printf("ok 1 - invctrig zero\n");
-
- test_nan();
- printf("ok 2 - invctrig nan\n");
-
- test_inf();
- printf("ok 3 - invctrig inf\n");
-
- test_axes();
- printf("ok 4 - invctrig axes\n");
-
- test_small();
- printf("ok 5 - invctrig small\n");
-
- test_large();
- printf("ok 6 - invctrig large\n");
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-logarithm.c b/tools/regression/lib/msun/test-logarithm.c
deleted file mode 100644
index 18b9ebe..0000000
--- a/tools/regression/lib/msun/test-logarithm.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/*-
- * Copyright (c) 2008-2010 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Tests for corner cases in log*().
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <fenv.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-
-#ifdef __i386__
-#include <ieeefp.h>
-#endif
-
-#include "test-utils.h"
-
-#pragma STDC FENV_ACCESS ON
-
-/*
- * Test that a function returns the correct value and sets the
- * exception flags correctly. The exceptmask specifies which
- * exceptions we should check. We need to be lenient for several
- * reasoons, but mainly because on some architectures it's impossible
- * to raise FE_OVERFLOW without raising FE_INEXACT.
- *
- * These are macros instead of functions so that assert provides more
- * meaningful error messages.
- *
- * XXX The volatile here is to avoid gcc's bogus constant folding and work
- * around the lack of support for the FENV_ACCESS pragma.
- */
-#define test(func, x, result, exceptmask, excepts) do { \
- volatile long double _d = x; \
- assert(feclearexcept(FE_ALL_EXCEPT) == 0); \
- assert(fpequal((func)(_d), (result))); \
- assert(((void)(func), fetestexcept(exceptmask) == (excepts))); \
-} while (0)
-
-#define test(func, x, result, exceptmask, excepts) do { \
- volatile long double _d = x; \
- assert(feclearexcept(FE_ALL_EXCEPT) == 0); \
- assert(fpequal((func)(_d), (result))); \
- assert(((void)(func), fetestexcept(exceptmask) == (excepts))); \
-} while (0)
-
-#define test_tol(func, z, result, tol) do { \
- volatile long double _d = z; \
- debug(" testing %6s(%15La) ~= % .36Le\n", #func, _d, result); \
- assert(fpequal_tol((func)(_d), (result), (tol), CS_BOTH)); \
-} while (0)
-
-/* Test all the functions that compute log(x). */
-#define testall0(x, result, exceptmask, excepts) do { \
- test(log, x, result, exceptmask, excepts); \
- test(logf, x, result, exceptmask, excepts); \
- test(logl, x, result, exceptmask, excepts); \
- test(log2, x, result, exceptmask, excepts); \
- test(log2f, x, result, exceptmask, excepts); \
- test(log2l, x, result, exceptmask, excepts); \
- test(log10, x, result, exceptmask, excepts); \
- test(log10f, x, result, exceptmask, excepts); \
- test(log10l, x, result, exceptmask, excepts); \
-} while (0)
-
-/* Test all the functions that compute log(1+x). */
-#define testall1(x, result, exceptmask, excepts) do { \
- test(log1p, x, result, exceptmask, excepts); \
- test(log1pf, x, result, exceptmask, excepts); \
- test(log1pl, x, result, exceptmask, excepts); \
-} while (0)
-
-void
-run_generic_tests(void)
-{
-
- /* log(1) == 0, no exceptions raised */
- testall0(1.0, 0.0, ALL_STD_EXCEPT, 0);
- testall1(0.0, 0.0, ALL_STD_EXCEPT, 0);
- testall1(-0.0, -0.0, ALL_STD_EXCEPT, 0);
-
- /* log(NaN) == NaN, no exceptions raised */
- testall0(NAN, NAN, ALL_STD_EXCEPT, 0);
- testall1(NAN, NAN, ALL_STD_EXCEPT, 0);
-
- /* log(Inf) == Inf, no exceptions raised */
- testall0(INFINITY, INFINITY, ALL_STD_EXCEPT, 0);
- testall1(INFINITY, INFINITY, ALL_STD_EXCEPT, 0);
-
- /* log(x) == NaN for x < 0, invalid exception raised */
- testall0(-INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall1(-INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall0(-1.0, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall1(-1.5, NAN, ALL_STD_EXCEPT, FE_INVALID);
-
- /* log(0) == -Inf, divide-by-zero exception */
- testall0(0.0, -INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_DIVBYZERO);
- testall0(-0.0, -INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_DIVBYZERO);
- testall1(-1.0, -INFINITY, ALL_STD_EXCEPT & ~FE_INEXACT, FE_DIVBYZERO);
-}
-
-void
-run_log2_tests(void)
-{
- int i;
-
- /*
- * We should insist that log2() return exactly the correct
- * result and not raise an inexact exception for powers of 2.
- */
- feclearexcept(FE_ALL_EXCEPT);
- for (i = FLT_MIN_EXP - FLT_MANT_DIG; i < FLT_MAX_EXP; i++) {
- assert(log2f(ldexpf(1.0, i)) == i);
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
- }
- for (i = DBL_MIN_EXP - DBL_MANT_DIG; i < DBL_MAX_EXP; i++) {
- assert(log2(ldexp(1.0, i)) == i);
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
- }
- for (i = LDBL_MIN_EXP - LDBL_MANT_DIG; i < LDBL_MAX_EXP; i++) {
- assert(log2l(ldexpl(1.0, i)) == i);
-#if 0
- /* XXX This test does not pass yet. */
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
-#endif
- }
-}
-
-void
-run_roundingmode_tests(void)
-{
-
- /*
- * Corner cases in other rounding modes.
- */
- fesetround(FE_DOWNWARD);
- /* These are still positive per IEEE 754R */
-#if 0
- testall0(1.0, 0.0, ALL_STD_EXCEPT, 0);
-#else
- /* logl, log2l, and log10l don't pass yet. */
- test(log, 1.0, 0.0, ALL_STD_EXCEPT, 0);
- test(logf, 1.0, 0.0, ALL_STD_EXCEPT, 0);
- test(log2, 1.0, 0.0, ALL_STD_EXCEPT, 0);
- test(log2f, 1.0, 0.0, ALL_STD_EXCEPT, 0);
- test(log10, 1.0, 0.0, ALL_STD_EXCEPT, 0);
- test(log10f, 1.0, 0.0, ALL_STD_EXCEPT, 0);
-#endif
- testall1(0.0, 0.0, ALL_STD_EXCEPT, 0);
- fesetround(FE_TOWARDZERO);
- testall0(1.0, 0.0, ALL_STD_EXCEPT, 0);
- testall1(0.0, 0.0, ALL_STD_EXCEPT, 0);
-
- fesetround(FE_UPWARD);
- testall0(1.0, 0.0, ALL_STD_EXCEPT, 0);
- testall1(0.0, 0.0, ALL_STD_EXCEPT, 0);
- /* log1p(-0.0) == -0.0 even when rounding upwards */
- testall1(-0.0, -0.0, ALL_STD_EXCEPT, 0);
-
- fesetround(FE_TONEAREST);
-}
-
-void
-run_accuracy_tests(void)
-{
- static const struct {
- float x;
- long double log2x;
- long double logex;
- long double log10x;
- } tests[] = {
- { 0x1p-120 + 0x1p-140,
- -1.19999998624139449158861798943319717e2L,
- -8.31776607135195754708796206665656732e1L,
- -3.61235990655024477716980559136055915e1L,
- },
- { 1.0 - 0x1p-20,
- -1.37586186296463416424364914705656460e-6L,
- -9.53674771153890007250243736279163253e-7L,
- -4.14175690642480911859354110516159131e-7L, },
- { 1.0 + 0x1p-20,
- 1.37586055084113820105668028340371476e-6L,
- 9.53673861659188233908415514963336144e-7L,
- 4.14175295653950611453333571759200697e-7L },
- { 19.75,
- 4.30378074817710292442728634194115348e0L,
- 2.98315349134713087533848129856505779e0L,
- 1.29556709996247903756734359702926363e0L },
- { 19.75 * 0x1p100,
- 1.043037807481771029244272863419411534e2L,
- 7.229787154734166181706169344438271459e1L,
- 3.139856666636059855894123306947856631e1L },
- };
- int i;
-
- for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
- test_tol(log2, tests[i].x, tests[i].log2x, DBL_ULP());
- test_tol(log2f, tests[i].x, tests[i].log2x, FLT_ULP());
- test_tol(log2l, tests[i].x, tests[i].log2x, LDBL_ULP());
- test_tol(log, tests[i].x, tests[i].logex, DBL_ULP());
- test_tol(logf, tests[i].x, tests[i].logex, FLT_ULP());
- test_tol(logl, tests[i].x, tests[i].logex, LDBL_ULP());
- test_tol(log10, tests[i].x, tests[i].log10x, DBL_ULP());
- test_tol(log10f, tests[i].x, tests[i].log10x, FLT_ULP());
- test_tol(log10l, tests[i].x, tests[i].log10x, LDBL_ULP());
- if (tests[i].x >= 0.5) {
- test_tol(log1p, tests[i].x - 1, tests[i].logex,
- DBL_ULP());
- test_tol(log1pf, tests[i].x - 1, tests[i].logex,
- FLT_ULP());
- test_tol(log1pl, tests[i].x - 1, tests[i].logex,
- LDBL_ULP());
- }
- }
-}
-
-void
-run_log1p_accuracy_tests(void)
-{
-
- test_tol(log1pf, 0x0.333333p0F,
- 1.82321546859847114303367992804596800640e-1L, FLT_ULP());
- test_tol(log1p, 0x0.3333333333333p0,
- 1.82321556793954589204283870982629267635e-1L, DBL_ULP());
- test_tol(log1pl, 0x0.33333333333333332p0L,
- 1.82321556793954626202683007050468762914e-1L, LDBL_ULP());
-
- test_tol(log1pf, -0x0.333333p0F,
- -2.23143536413048672940940199918017467652e-1L, FLT_ULP());
- test_tol(log1p, -0x0.3333333333333p0,
- -2.23143551314209700255143859052009022937e-1L, DBL_ULP());
- test_tol(log1pl, -0x0.33333333333333332p0L,
- -2.23143551314209755752742563153765697950e-1L, LDBL_ULP());
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..5\n");
-
- run_generic_tests();
- printf("ok 1 - logarithm\n");
-
- run_log2_tests();
- printf("ok 2 - logarithm\n");
-
- run_roundingmode_tests();
- printf("ok 3 - logarithm\n");
-
- run_accuracy_tests();
- printf("ok 4 - logarithm\n");
-
- run_log1p_accuracy_tests();
- printf("ok 5 - logarithm\n");
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-logarithm.t b/tools/regression/lib/msun/test-logarithm.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-logarithm.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-lrint.c b/tools/regression/lib/msun/test-lrint.c
deleted file mode 100644
index ba099aa..0000000
--- a/tools/regression/lib/msun/test-lrint.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*-
- * Copyright (c) 2005-2008 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test for lrint(), lrintf(), llrint(), and llrintf().
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <fenv.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-
-#ifdef __i386__
-#include <ieeefp.h>
-#endif
-
-/*
- * XXX The volatile here is to avoid gcc's bogus constant folding and work
- * around the lack of support for the FENV_ACCESS pragma.
- */
-#define test(func, x, result, excepts) do { \
- volatile double _d = x; \
- assert(feclearexcept(FE_ALL_EXCEPT) == 0); \
- assert((func)(_d) == (result) || fetestexcept(FE_INVALID)); \
- assert(fetestexcept(FE_ALL_EXCEPT) == (excepts)); \
-} while (0)
-
-#define testall(x, result, excepts) do { \
- test(lrint, x, result, excepts); \
- test(lrintf, x, result, excepts); \
- test(lrintl, x, result, excepts); \
- test(llrint, x, result, excepts); \
- test(llrintf, x, result, excepts); \
- test(llrintl, x, result, excepts); \
-} while (0)
-
-#define IGNORE 0
-
-#pragma STDC FENV_ACCESS ON
-
-void
-run_tests(void)
-{
-
- assert(fesetround(FE_DOWNWARD) == 0);
- testall(0.75, 0, FE_INEXACT);
- testall(-0.5, -1, FE_INEXACT);
-
- assert(fesetround(FE_TONEAREST) == 0);
- testall(0.0, 0, 0);
- testall(0.25, 0, FE_INEXACT);
- testall(0.5, 0, FE_INEXACT);
- testall(-2.5, -2, FE_INEXACT);
- testall(1.0, 1, 0);
- testall(0x12345000p0, 0x12345000, 0);
- testall(0x1234.fp0, 0x1235, FE_INEXACT);
- testall(INFINITY, IGNORE, FE_INVALID);
- testall(NAN, IGNORE, FE_INVALID);
-
-#if (LONG_MAX == 0x7fffffffl)
- assert(fesetround(FE_UPWARD) == 0);
- test(lrint, 0x7fffffff.8p0, IGNORE, FE_INVALID);
- test(lrint, -0x80000000.4p0, -0x80000000l, FE_INEXACT);
-
- assert(fesetround(FE_DOWNWARD) == 0);
- test(lrint, -0x80000000.8p0, IGNORE, FE_INVALID);
- test(lrint, 0x80000000.0p0, IGNORE, FE_INVALID);
- test(lrint, 0x7fffffff.4p0, 0x7fffffffl, FE_INEXACT);
- test(lrintf, 0x80000000.0p0f, IGNORE, FE_INVALID);
- test(lrintf, 0x7fffff80.0p0f, 0x7fffff80l, 0);
-
- assert(fesetround(FE_TOWARDZERO) == 0);
- test(lrint, 0x7fffffff.8p0, 0x7fffffffl, FE_INEXACT);
- test(lrint, -0x80000000.8p0, -0x80000000l, FE_INEXACT);
- test(lrint, 0x80000000.0p0, IGNORE, FE_INVALID);
- test(lrintf, 0x80000000.0p0f, IGNORE, FE_INVALID);
- test(lrintf, 0x7fffff80.0p0f, 0x7fffff80l, 0);
-#elif (LONG_MAX == 0x7fffffffffffffffll)
- assert(fesetround(FE_TONEAREST) == 0);
- test(lrint, 0x8000000000000000.0p0, IGNORE, FE_INVALID);
- test(lrintf, 0x8000000000000000.0p0f, IGNORE, FE_INVALID);
- test(lrint, 0x7ffffffffffffc00.0p0, 0x7ffffffffffffc00l, 0);
- test(lrintf, 0x7fffff8000000000.0p0f, 0x7fffff8000000000l, 0);
- test(lrint, -0x8000000000000800.0p0, IGNORE, FE_INVALID);
- test(lrintf, -0x8000010000000000.0p0f, IGNORE, FE_INVALID);
- test(lrint, -0x8000000000000000.0p0, -0x8000000000000000l, 0);
- test(lrintf, -0x8000000000000000.0p0f, -0x8000000000000000l, 0);
-#else
-#error "Unsupported long size"
-#endif
-
-#if (LLONG_MAX == 0x7fffffffffffffffLL)
- assert(fesetround(FE_TONEAREST) == 0);
- test(llrint, 0x8000000000000000.0p0, IGNORE, FE_INVALID);
- test(llrintf, 0x8000000000000000.0p0f, IGNORE, FE_INVALID);
- test(llrint, 0x7ffffffffffffc00.0p0, 0x7ffffffffffffc00ll, 0);
- test(llrintf, 0x7fffff8000000000.0p0f, 0x7fffff8000000000ll, 0);
- test(llrint, -0x8000000000000800.0p0, IGNORE, FE_INVALID);
- test(llrintf, -0x8000010000000000.0p0f, IGNORE, FE_INVALID);
- test(llrint, -0x8000000000000000.0p0, -0x8000000000000000ll, 0);
- test(llrintf, -0x8000000000000000.0p0f, -0x8000000000000000ll, 0);
-#else
-#error "Unsupported long long size"
-#endif
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..1\n");
-
- run_tests();
-#ifdef __i386__
- fpsetprec(FP_PE);
- run_tests();
-#endif
-
- printf("ok 1 - lrint\n");
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-lrint.t b/tools/regression/lib/msun/test-lrint.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-lrint.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-nan.c b/tools/regression/lib/msun/test-nan.c
deleted file mode 100644
index c12926b..0000000
--- a/tools/regression/lib/msun/test-nan.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*-
- * Copyright (C) 2007 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test for nan(), nanf(), and nanl(). We also test that strtod("nan(...)")
- * and sscanf("nan(...)", ...) work identically.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <fenv.h>
-#include <float.h>
-#include <locale.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-void
-testnan(const char *nan_format)
-{
- char nan_str[128];
- char *end;
- long double ald[4];
- double ad[4];
- float af[4];
- int i;
-
- snprintf(nan_str, sizeof(nan_str), "nan(%s)", nan_format);
- for (i = 0; i < 4; i++) {
- /*
- * x86 has an 80-bit long double stored in 96 bits,
- * so we need to initialize the memory for the memcmp()
- * checks below to work.
- */
- bzero(&af[i], sizeof(float));
- bzero(&ad[i], sizeof(double));
- bzero(&ald[i], sizeof(long double));
-
- }
-
- af[0] = nanf(nan_format);
- assert(isnan(af[0]));
- af[1] = strtof(nan_str, &end);
- assert(end == nan_str + strlen(nan_str));
- assert(sscanf(nan_str, "%e", &af[2]) == 1);
- assert(memcmp(&af[0], &af[1], sizeof(float)) == 0);
- assert(memcmp(&af[1], &af[2], sizeof(float)) == 0);
- if (*nan_format == '\0') {
- /* nanf("") == strtof("nan") */
- af[3] = strtof("nan", NULL);
- assert(memcmp(&af[2], &af[3], sizeof(float)) == 0);
- }
-
- ad[0] = nan(nan_format);
- assert(isnan(ad[0]));
- ad[1] = strtod(nan_str, &end);
- assert(end == nan_str + strlen(nan_str));
- assert(sscanf(nan_str, "%le", &ad[2]) == 1);
- assert(memcmp(&ad[0], &ad[1], sizeof(double)) == 0);
- assert(memcmp(&ad[1], &ad[2], sizeof(double)) == 0);
- if (*nan_format == '\0') {
- /* nan("") == strtod("nan") */
- ad[3] = strtod("nan", NULL);
- assert(memcmp(&ad[2], &ad[3], sizeof(double)) == 0);
- }
-
- ald[0] = nanl(nan_format);
- assert(isnan(ald[0]));
- ald[1] = strtold(nan_str, &end);
- assert(end == nan_str + strlen(nan_str));
- assert(sscanf(nan_str, "%Le", &ald[2]) == 1);
- assert(memcmp(&ald[0], &ald[1], sizeof(long double)) == 0);
- assert(memcmp(&ald[1], &ald[2], sizeof(long double)) == 0);
- if (*nan_format == '\0') {
- /* nanl("") == strtold("nan") */
- ald[3] = strtold("nan", NULL);
- assert(memcmp(&ald[2], &ald[3], sizeof(long double)) == 0);
- }
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..1\n");
-
- /* Die if a signalling NaN is returned */
- feenableexcept(FE_INVALID);
-
- testnan("0x1234");
- testnan("");
-
- printf("ok 1 - nan\n");
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-nan.t b/tools/regression/lib/msun/test-nan.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-nan.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-nearbyint.c b/tools/regression/lib/msun/test-nearbyint.c
deleted file mode 100644
index 602ea2a..0000000
--- a/tools/regression/lib/msun/test-nearbyint.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*-
- * Copyright (c) 2010 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Tests for nearbyint{,f,l}()
- *
- * TODO:
- * - adapt tests for rint(3)
- * - tests for harder values (more mantissa bits than float)
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <fenv.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "test-utils.h"
-
-static int testnum;
-
-static const int rmodes[] = {
- FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO,
-};
-
-/* Make sure we're testing the library, not some broken compiler built-ins. */
-double (*libnearbyint)(double) = nearbyint;
-float (*libnearbyintf)(float) = nearbyintf;
-long double (*libnearbyintl)(long double) = nearbyintl;
-#define nearbyintf libnearbyintf
-#define nearbyint libnearbyint
-#define nearbyintl libnearbyintl
-
-static const struct {
- float in;
- float out[3]; /* one answer per rounding mode except towardzero */
-} tests[] = {
-/* input output (expected) */
- { 0.0, { 0.0, 0.0, 0.0 }},
- { 0.5, { 0.0, 0.0, 1.0 }},
- { M_PI, { 3.0, 3.0, 4.0 }},
- { 65536.5, { 65536, 65536, 65537 }},
- { INFINITY, { INFINITY, INFINITY, INFINITY }},
- { NAN, { NAN, NAN, NAN }},
-};
-
-static const int ntests = sizeof(tests) / sizeof(tests[0]);
-
-/* Get the appropriate result for the current rounding mode. */
-static float
-get_output(int testindex, int rmodeindex, int negative)
-{
- double out;
-
- if (negative) { /* swap downwards and upwards if input is negative */
- if (rmodeindex == 1)
- rmodeindex = 2;
- else if (rmodeindex == 2)
- rmodeindex = 1;
- }
- if (rmodeindex == 3) /* FE_TOWARDZERO uses the value for downwards */
- rmodeindex = 1;
- out = tests[testindex].out[rmodeindex];
- return (negative ? -out : out);
-}
-
-static void
-test_nearby(int testindex)
-{
- float in, out;
- int i;
-
- for (i = 0; i < sizeof(rmodes) / sizeof(rmodes[0]); i++) {
- fesetround(rmodes[i]);
- feclearexcept(ALL_STD_EXCEPT);
-
- in = tests[testindex].in;
- out = get_output(testindex, i, 0);
- assert(fpequal(out, libnearbyintf(in)));
- assert(fpequal(out, nearbyint(in)));
- assert(fpequal(out, nearbyintl(in)));
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
-
- in = -tests[testindex].in;
- out = get_output(testindex, i, 1);
- assert(fpequal(out, nearbyintf(in)));
- assert(fpequal(out, nearbyint(in)));
- assert(fpequal(out, nearbyintl(in)));
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
- }
-
- printf("ok %d\t\t# nearbyint(+%g)\n", testnum++, in);
-}
-
-static void
-test_modf(int testindex)
-{
- float in, out;
- float ipartf, ipart_expected;
- double ipart;
- long double ipartl;
- int i;
-
- for (i = 0; i < sizeof(rmodes) / sizeof(rmodes[0]); i++) {
- fesetround(rmodes[i]);
- feclearexcept(ALL_STD_EXCEPT);
-
- in = tests[testindex].in;
- ipart_expected = tests[testindex].out[1];
- out = copysignf(
- isinf(ipart_expected) ? 0.0 : in - ipart_expected, in);
- ipartl = ipart = ipartf = 42.0;
-
- assert(fpequal(out, modff(in, &ipartf)));
- assert(fpequal(ipart_expected, ipartf));
- assert(fpequal(out, modf(in, &ipart)));
- assert(fpequal(ipart_expected, ipart));
- assert(fpequal(out, modfl(in, &ipartl)));
- assert(fpequal(ipart_expected, ipartl));
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
-
- in = -in;
- ipart_expected = -ipart_expected;
- out = -out;
- ipartl = ipart = ipartf = 42.0;
- assert(fpequal(out, modff(in, &ipartf)));
- assert(fpequal(ipart_expected, ipartf));
- assert(fpequal(out, modf(in, &ipart)));
- assert(fpequal(ipart_expected, ipart));
- assert(fpequal(out, modfl(in, &ipartl)));
- assert(fpequal(ipart_expected, ipartl));
- assert(fetestexcept(ALL_STD_EXCEPT) == 0);
- }
-
- printf("ok %d\t\t# modf(+%g)\n", testnum++, in);
-}
-
-int
-main(int argc, char *argv[])
-{
- int i;
-
- printf("1..%d\n", ntests * 2);
- testnum = 1;
- for (i = 0; i < ntests; i++) {
- test_nearby(i);
- test_modf(i);
- }
-
- return (0);
-}
diff --git a/tools/regression/lib/msun/test-nearbyint.t b/tools/regression/lib/msun/test-nearbyint.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-nearbyint.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-next.c b/tools/regression/lib/msun/test-next.c
deleted file mode 100644
index d16fa77..0000000
--- a/tools/regression/lib/msun/test-next.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*-
- * Copyright (c) 2005 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test the correctness of nextafter{,f,l} and nexttoward{,f,l}.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <fenv.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef __i386__
-#include <ieeefp.h>
-#endif
-
-#include "test-utils.h"
-
-#define test(exp, ans, ex) do { \
- double __ans = (ans); \
- feclearexcept(ALL_STD_EXCEPT); \
- _testl(#exp, __LINE__, (exp), __ans, (ex)); \
-} while (0)
-#define testf(exp, ans, ex) do { \
- float __ans = (ans); \
- feclearexcept(ALL_STD_EXCEPT); \
- _testl(#exp, __LINE__, (exp), __ans, (ex)); \
-} while (0)
-#define testl(exp, ans, ex) do { \
- long double __ans = (ans); \
- feclearexcept(ALL_STD_EXCEPT); \
- _testl(#exp, __LINE__, (exp), __ans, (ex)); \
-} while (0)
-#define testboth(arg1, arg2, ans, ex, prec) do { \
- test##prec(nextafter##prec((arg1), (arg2)), (ans), (ex)); \
- test##prec(nexttoward##prec((arg1), (arg2)), (ans), (ex)); \
-} while (0)
-#define testall(arg1, arg2, ans, ex) do { \
- testboth((arg1), (arg2), (ans), (ex), ); \
- testboth((arg1), (arg2), (ans), (ex), f); \
- testboth((arg1), (arg2), (ans), (ex), l); \
-} while (0)
-
-static void _testl(const char *, int, long double, long double, int);
-static double idd(double);
-static float idf(float);
-
-int
-main(int argc, char *argv[])
-{
- static const int ex_under = FE_UNDERFLOW | FE_INEXACT; /* shorthand */
- static const int ex_over = FE_OVERFLOW | FE_INEXACT;
- long double ldbl_small, ldbl_eps, ldbl_max;
-
- printf("1..5\n");
-
-#ifdef __i386__
- fpsetprec(FP_PE);
-#endif
- /*
- * We can't use a compile-time constant here because gcc on
- * FreeBSD/i386 assumes long doubles are truncated to the
- * double format.
- */
- ldbl_small = ldexpl(1.0, LDBL_MIN_EXP - LDBL_MANT_DIG);
- ldbl_eps = LDBL_EPSILON;
- ldbl_max = ldexpl(1.0 - ldbl_eps / 2, LDBL_MAX_EXP);
-
- /*
- * Special cases involving zeroes.
- */
-#define ztest(prec) \
- test##prec(copysign##prec(1.0, nextafter##prec(0.0, -0.0)), -1.0, 0); \
- test##prec(copysign##prec(1.0, nextafter##prec(-0.0, 0.0)), 1.0, 0); \
- test##prec(copysign##prec(1.0, nexttoward##prec(0.0, -0.0)), -1.0, 0);\
- test##prec(copysign##prec(1.0, nexttoward##prec(-0.0, 0.0)), 1.0, 0)
-
- ztest();
- ztest(f);
- ztest(l);
-#undef ztest
-
-#define stest(next, eps, prec) \
- test##prec(next(-0.0, 42.0), eps, ex_under); \
- test##prec(next(0.0, -42.0), -eps, ex_under); \
- test##prec(next(0.0, INFINITY), eps, ex_under); \
- test##prec(next(-0.0, -INFINITY), -eps, ex_under)
-
- stest(nextafter, 0x1p-1074, );
- stest(nextafterf, 0x1p-149f, f);
- stest(nextafterl, ldbl_small, l);
- stest(nexttoward, 0x1p-1074, );
- stest(nexttowardf, 0x1p-149f, f);
- stest(nexttowardl, ldbl_small, l);
-#undef stest
-
- printf("ok 1 - next\n");
-
- /*
- * `x == y' and NaN tests
- */
- testall(42.0, 42.0, 42.0, 0);
- testall(-42.0, -42.0, -42.0, 0);
- testall(INFINITY, INFINITY, INFINITY, 0);
- testall(-INFINITY, -INFINITY, -INFINITY, 0);
- testall(NAN, 42.0, NAN, 0);
- testall(42.0, NAN, NAN, 0);
- testall(NAN, NAN, NAN, 0);
-
- printf("ok 2 - next\n");
-
- /*
- * Tests where x is an ordinary normalized number
- */
- testboth(1.0, 2.0, 1.0 + DBL_EPSILON, 0, );
- testboth(1.0, -INFINITY, 1.0 - DBL_EPSILON/2, 0, );
- testboth(1.0, 2.0, 1.0 + FLT_EPSILON, 0, f);
- testboth(1.0, -INFINITY, 1.0 - FLT_EPSILON/2, 0, f);
- testboth(1.0, 2.0, 1.0 + ldbl_eps, 0, l);
- testboth(1.0, -INFINITY, 1.0 - ldbl_eps/2, 0, l);
-
- testboth(-1.0, 2.0, -1.0 + DBL_EPSILON/2, 0, );
- testboth(-1.0, -INFINITY, -1.0 - DBL_EPSILON, 0, );
- testboth(-1.0, 2.0, -1.0 + FLT_EPSILON/2, 0, f);
- testboth(-1.0, -INFINITY, -1.0 - FLT_EPSILON, 0, f);
- testboth(-1.0, 2.0, -1.0 + ldbl_eps/2, 0, l);
- testboth(-1.0, -INFINITY, -1.0 - ldbl_eps, 0, l);
-
- /* Cases where nextafter(...) != nexttoward(...) */
- test(nexttoward(1.0, 1.0 + ldbl_eps), 1.0 + DBL_EPSILON, 0);
- testf(nexttowardf(1.0, 1.0 + ldbl_eps), 1.0 + FLT_EPSILON, 0);
- testl(nexttowardl(1.0, 1.0 + ldbl_eps), 1.0 + ldbl_eps, 0);
-
- printf("ok 3 - next\n");
-
- /*
- * Tests at word boundaries, normalization boundaries, etc.
- */
- testboth(0x1.87654ffffffffp+0, INFINITY, 0x1.87655p+0, 0, );
- testboth(0x1.87655p+0, -INFINITY, 0x1.87654ffffffffp+0, 0, );
- testboth(0x1.fffffffffffffp+0, INFINITY, 0x1p1, 0, );
- testboth(0x1p1, -INFINITY, 0x1.fffffffffffffp+0, 0, );
- testboth(0x0.fffffffffffffp-1022, INFINITY, 0x1p-1022, 0, );
- testboth(0x1p-1022, -INFINITY, 0x0.fffffffffffffp-1022, ex_under, );
-
- testboth(0x1.fffffep0f, INFINITY, 0x1p1, 0, f);
- testboth(0x1p1, -INFINITY, 0x1.fffffep0f, 0, f);
- testboth(0x0.fffffep-126f, INFINITY, 0x1p-126f, 0, f);
- testboth(0x1p-126f, -INFINITY, 0x0.fffffep-126f, ex_under, f);
-
-#if LDBL_MANT_DIG == 53
- testboth(0x1.87654ffffffffp+0L, INFINITY, 0x1.87655p+0L, 0, l);
- testboth(0x1.87655p+0L, -INFINITY, 0x1.87654ffffffffp+0L, 0, l);
- testboth(0x1.fffffffffffffp+0L, INFINITY, 0x1p1L, 0, l);
- testboth(0x1p1L, -INFINITY, 0x1.fffffffffffffp+0L, 0, l);
- testboth(0x0.fffffffffffffp-1022L, INFINITY, 0x1p-1022L, 0, l);
- testboth(0x1p-1022L, -INFINITY, 0x0.fffffffffffffp-1022L, ex_under, l);
-#elif LDBL_MANT_DIG == 64 && !defined(__i386)
- testboth(0x1.87654321fffffffep+0L, INFINITY, 0x1.87654322p+0L, 0, l);
- testboth(0x1.87654322p+0L, -INFINITY, 0x1.87654321fffffffep+0L, 0, l);
- testboth(0x1.fffffffffffffffep0L, INFINITY, 0x1p1L, 0, l);
- testboth(0x1p1L, -INFINITY, 0x1.fffffffffffffffep0L, 0, l);
- testboth(0x0.fffffffffffffffep-16382L, INFINITY, 0x1p-16382L, 0, l);
- testboth(0x1p-16382L, -INFINITY,
- 0x0.fffffffffffffffep-16382L, ex_under, l);
-#elif LDBL_MANT_DIG == 113
- testboth(0x1.876543210987ffffffffffffffffp+0L, INFINITY,
- 0x1.876543210988p+0, 0, l);
- testboth(0x1.876543210988p+0L, -INFINITY,
- 0x1.876543210987ffffffffffffffffp+0L, 0, l);
- testboth(0x1.ffffffffffffffffffffffffffffp0L, INFINITY, 0x1p1L, 0, l);
- testboth(0x1p1L, -INFINITY, 0x1.ffffffffffffffffffffffffffffp0L, 0, l);
- testboth(0x0.ffffffffffffffffffffffffffffp-16382L, INFINITY,
- 0x1p-16382L, 0, l);
- testboth(0x1p-16382L, -INFINITY,
- 0x0.ffffffffffffffffffffffffffffp-16382L, ex_under, l);
-#endif
-
- printf("ok 4 - next\n");
-
- /*
- * Overflow tests
- */
- test(idd(nextafter(DBL_MAX, INFINITY)), INFINITY, ex_over);
- test(idd(nextafter(INFINITY, 0.0)), DBL_MAX, 0);
- test(idd(nexttoward(DBL_MAX, DBL_MAX * 2.0L)), INFINITY, ex_over);
-#if LDBL_MANT_DIG > 53
- test(idd(nexttoward(INFINITY, DBL_MAX * 2.0L)), DBL_MAX, 0);
-#endif
-
- testf(idf(nextafterf(FLT_MAX, INFINITY)), INFINITY, ex_over);
- testf(idf(nextafterf(INFINITY, 0.0)), FLT_MAX, 0);
- testf(idf(nexttowardf(FLT_MAX, FLT_MAX * 2.0)), INFINITY, ex_over);
- testf(idf(nexttowardf(INFINITY, FLT_MAX * 2.0)), FLT_MAX, 0);
-
- testboth(ldbl_max, INFINITY, INFINITY, ex_over, l);
- testboth(INFINITY, 0.0, ldbl_max, 0, l);
-
- printf("ok 5 - next\n");
-
- return (0);
-}
-
-static void
-_testl(const char *exp, int line, long double actual, long double expected,
- int except)
-{
- int actual_except;
-
- actual_except = fetestexcept(ALL_STD_EXCEPT);
- if (!fpequal(actual, expected)) {
- fprintf(stderr, "%d: %s returned %La, expecting %La\n",
- line, exp, actual, expected);
- abort();
- }
- if (actual_except != except) {
- fprintf(stderr, "%d: %s raised 0x%x, expecting 0x%x\n",
- line, exp, actual_except, except);
- abort();
- }
-}
-
-/*
- * The idd() and idf() routines ensure that doubles and floats are
- * converted to their respective types instead of stored in the FPU
- * with extra precision.
- */
-static double
-idd(double x)
-{
- return (x);
-}
-
-static float
-idf(float x)
-{
- return (x);
-}
diff --git a/tools/regression/lib/msun/test-next.t b/tools/regression/lib/msun/test-next.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-next.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-rem.c b/tools/regression/lib/msun/test-rem.c
deleted file mode 100644
index 36e3476..0000000
--- a/tools/regression/lib/msun/test-rem.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*-
- * Copyright (c) 2005-2008 David Schultz <das@FreeBSD.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Test for remainder functions: remainder, remainderf, remainderl,
- * remquo, remquof, and remquol.
- * Missing tests: fmod, fmodf.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <strings.h>
-
-static void test_invalid(long double, long double);
-static void testl(long double, long double, long double, int);
-static void testd(double, double, double, int);
-static void testf(float, float, float, int);
-
-#define test(x, y, e_r, e_q) do { \
- testl(x, y, e_r, e_q); \
- testd(x, y, e_r, e_q); \
- testf(x, y, e_r, e_q); \
-} while (0)
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..3\n");
-
- test_invalid(0.0, 0.0);
- test_invalid(1.0, 0.0);
- test_invalid(INFINITY, 0.0);
- test_invalid(INFINITY, 1.0);
- test_invalid(-INFINITY, 1.0);
- test_invalid(NAN, 1.0);
- test_invalid(1.0, NAN);
-
- test(4, 4, 0, 1);
- test(0, 3.0, 0, 0);
- testd(0x1p-1074, 1, 0x1p-1074, 0);
- testf(0x1p-149, 1, 0x1p-149, 0);
- test(3.0, 4, -1, 1);
- test(3.0, -4, -1, -1);
- testd(275 * 1193040, 275, 0, 1193040);
- test(4.5 * 7.5, 4.5, -2.25, 8); /* we should get the even one */
- testf(0x1.9044f6p-1, 0x1.ce662ep-1, -0x1.f109cp-4, 1);
-#if LDBL_MANT_DIG > 53
- testl(-0x1.23456789abcdefp-2000L, 0x1.fedcba987654321p-2000L,
- 0x1.b72ea61d950c862p-2001L, -1);
-#endif
-
- printf("ok 1 - rem\n");
-
- /*
- * The actual quotient here is 864062210.50000003..., but
- * double-precision division gets -8.64062210.5, which rounds
- * the wrong way. This test ensures that remquo() is smart
- * enough to get the low-order bit right.
- */
- testd(-0x1.98260f22fc6dep-302, 0x1.fb3167c430a13p-332,
- 0x1.fb3165b82de72p-333, -864062211);
- /* Even harder cases with greater exponent separation */
- test(0x1.fp100, 0x1.ep-40, -0x1.cp-41, 143165577);
- testd(-0x1.abcdefp120, 0x1.87654321p-120,
- -0x1.69c78ec4p-121, -63816414);
-
- printf("ok 2 - rem\n");
-
- test(0x1.66666cp+120, 0x1p+71, 0.0, 1476395008);
- testd(-0x1.0000000000003p+0, 0x1.0000000000003p+0, -0.0, -1);
- testl(-0x1.0000000000003p+0, 0x1.0000000000003p+0, -0.0, -1);
- testd(-0x1.0000000000001p-749, 0x1.4p-1072, 0x1p-1074, -1288490189);
- testl(-0x1.0000000000001p-749, 0x1.4p-1072, 0x1p-1074, -1288490189);
-
- printf("ok 3 - rem\n");
-
- return (0);
-}
-
-static void
-test_invalid(long double x, long double y)
-{
- int q;
-
- q = 0xdeadbeef;
-
- assert(isnan(remainder(x, y)));
- assert(isnan(remquo(x, y, &q)));
-#ifdef STRICT
- assert(q == 0xdeadbeef);
-#endif
-
- assert(isnan(remainderf(x, y)));
- assert(isnan(remquof(x, y, &q)));
-#ifdef STRICT
- assert(q == 0xdeadbeef);
-#endif
-
- assert(isnan(remainderl(x, y)));
- assert(isnan(remquol(x, y, &q)));
-#ifdef STRICT
- assert(q == 0xdeadbeef);
-#endif
-}
-
-/* 0x012345 ==> 0x01ffff */
-static inline int
-mask(int x)
-{
- return ((unsigned)~0 >> (32 - fls(x)));
-}
-
-static void
-testl(long double x, long double y, long double expected_rem, int expected_quo)
-{
- int q;
- long double rem;
-
- q = random();
- rem = remainderl(x, y);
- assert(rem == expected_rem);
- assert(!signbit(rem) == !signbit(expected_rem));
- rem = remquol(x, y, &q);
- assert(rem == expected_rem);
- assert(!signbit(rem) == !signbit(expected_rem));
- assert((q ^ expected_quo) >= 0); /* sign(q) == sign(expected_quo) */
- assert((q & 0x7) == (expected_quo & 0x7));
- if (q != 0) {
- assert((q > 0) ^ !(expected_quo > 0));
- q = abs(q);
- assert(q == (abs(expected_quo) & mask(q)));
- }
-}
-
-static void
-testd(double x, double y, double expected_rem, int expected_quo)
-{
- int q;
- double rem;
-
- q = random();
- rem = remainder(x, y);
- assert(rem == expected_rem);
- assert(!signbit(rem) == !signbit(expected_rem));
- rem = remquo(x, y, &q);
- assert(rem == expected_rem);
- assert(!signbit(rem) == !signbit(expected_rem));
- assert((q ^ expected_quo) >= 0); /* sign(q) == sign(expected_quo) */
- assert((q & 0x7) == (expected_quo & 0x7));
- if (q != 0) {
- assert((q > 0) ^ !(expected_quo > 0));
- q = abs(q);
- assert(q == (abs(expected_quo) & mask(q)));
- }
-}
-
-static void
-testf(float x, float y, float expected_rem, int expected_quo)
-{
- int q;
- float rem;
-
- q = random();
- rem = remainderf(x, y);
- assert(rem == expected_rem);
- assert(!signbit(rem) == !signbit(expected_rem));
- rem = remquof(x, y, &q);
- assert(rem == expected_rem);
- assert(!signbit(rem) == !signbit(expected_rem));
- assert((q ^ expected_quo) >= 0); /* sign(q) == sign(expected_quo) */
- assert((q & 0x7) == (expected_quo & 0x7));
- if (q != 0) {
- assert((q > 0) ^ !(expected_quo > 0));
- q = abs(q);
- assert((q & mask(q)) == (abs(expected_quo) & mask(q)));
- }
-}
diff --git a/tools/regression/lib/msun/test-rem.t b/tools/regression/lib/msun/test-rem.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-rem.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
diff --git a/tools/regression/lib/msun/test-trig.t b/tools/regression/lib/msun/test-trig.t
deleted file mode 100644
index 8bdfd03..0000000
--- a/tools/regression/lib/msun/test-trig.t
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-exec ./$executable
OpenPOWER on IntegriCloud