Blame math/libm-test-support.h

Packit Service 82fcde
/* Support code for testing libm functions (common declarations).
Packit Service 82fcde
   Copyright (C) 1997-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef LIBM_TEST_SUPPORT_H
Packit Service 82fcde
#define LIBM_TEST_SUPPORT_H 1
Packit Service 82fcde
Packit Service 82fcde
#include <complex.h>
Packit Service 82fcde
#include <math.h>
Packit Service 82fcde
#include <float.h>
Packit Service 82fcde
#include <fenv.h>
Packit Service 82fcde
#include <limits.h>
Packit Service 82fcde
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <stdint.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <tininess.h>
Packit Service 82fcde
#include <math-tests.h>
Packit Service 82fcde
#include <nan-high-order-bit.h>
Packit Service 82fcde
Packit Service 82fcde
extern const int flag_test_errno;
Packit Service 82fcde
extern const int flag_test_exceptions;
Packit Service 82fcde
extern const int flag_test_finite;
Packit Service 82fcde
extern const int flag_test_inline;
Packit Service 82fcde
extern const int flag_test_mathvec;
Packit Service 82fcde
extern const int snan_tests_arg;
Packit Service 82fcde
extern const char test_msg[];
Packit Service 82fcde
extern const char qtype_str[];
Packit Service 82fcde
extern const char doc[];
Packit Service 82fcde
Packit Service 82fcde
/* Possible exceptions */
Packit Service 82fcde
#define NO_EXCEPTION			0x0
Packit Service 82fcde
#define INVALID_EXCEPTION		0x1
Packit Service 82fcde
#define DIVIDE_BY_ZERO_EXCEPTION	0x2
Packit Service 82fcde
#define OVERFLOW_EXCEPTION		0x4
Packit Service 82fcde
#define UNDERFLOW_EXCEPTION		0x8
Packit Service 82fcde
#define INEXACT_EXCEPTION		0x10
Packit Service 82fcde
/* The next flags signals that those exceptions are allowed but not required.   */
Packit Service 82fcde
#define INVALID_EXCEPTION_OK		0x20
Packit Service 82fcde
#define DIVIDE_BY_ZERO_EXCEPTION_OK	0x40
Packit Service 82fcde
#define OVERFLOW_EXCEPTION_OK		0x80
Packit Service 82fcde
#define UNDERFLOW_EXCEPTION_OK		0x100
Packit Service 82fcde
/* For "inexact" exceptions, the default is allowed but not required
Packit Service 82fcde
   unless INEXACT_EXCEPTION or NO_INEXACT_EXCEPTION is specified.  */
Packit Service 82fcde
#define NO_INEXACT_EXCEPTION		0x200
Packit Service 82fcde
/* Some special test flags, passed together with exceptions.  */
Packit Service 82fcde
#define IGNORE_ZERO_INF_SIGN		0x400
Packit Service 82fcde
#define TEST_NAN_SIGN			0x800
Packit Service 82fcde
#define TEST_NAN_PAYLOAD		0x1000
Packit Service 82fcde
#define NO_TEST_INLINE			0x2000
Packit Service 82fcde
#define XFAIL_TEST			0x4000
Packit Service 82fcde
/* Indicate errno settings required or disallowed.  */
Packit Service 82fcde
#define ERRNO_UNCHANGED			0x8000
Packit Service 82fcde
#define ERRNO_EDOM			0x10000
Packit Service 82fcde
#define ERRNO_ERANGE			0x20000
Packit Service 82fcde
/* Flags generated by gen-libm-test.pl, not entered here manually.  */
Packit Service 82fcde
#define IGNORE_RESULT			0x40000
Packit Service 82fcde
#define NON_FINITE			0x80000
Packit Service 82fcde
#define TEST_SNAN			0x100000
Packit Service 82fcde
#define NO_TEST_MATHVEC			0x200000
Packit Service 82fcde
Packit Service 82fcde
#define __CONCATX(a,b) __CONCAT(a,b)
Packit Service 82fcde
Packit Service 82fcde
#define TYPE_MIN __CONCATX (PREFIX, _MIN)
Packit Service 82fcde
#define TYPE_TRUE_MIN __CONCATX (PREFIX, _TRUE_MIN)
Packit Service 82fcde
#define TYPE_MAX __CONCATX (PREFIX, _MAX)
Packit Service 82fcde
#define MIN_EXP __CONCATX (PREFIX, _MIN_EXP)
Packit Service 82fcde
#define MAX_EXP __CONCATX (PREFIX, _MAX_EXP)
Packit Service 82fcde
#define MANT_DIG __CONCATX (PREFIX, _MANT_DIG)
Packit Service 82fcde
Packit Service 82fcde
#define ARG_TYPE_MIN __CONCATX (ARG_PREFIX, _MIN)
Packit Service 82fcde
#define ARG_TYPE_TRUE_MIN __CONCATX (ARG_PREFIX, _TRUE_MIN)
Packit Service 82fcde
#define ARG_TYPE_MAX __CONCATX (ARG_PREFIX, _MAX)
Packit Service 82fcde
#define ARG_MIN_EXP __CONCATX (ARG_PREFIX, _MIN_EXP)
Packit Service 82fcde
#define ARG_MAX_EXP __CONCATX (ARG_PREFIX, _MAX_EXP)
Packit Service 82fcde
#define ARG_MANT_DIG __CONCATX (ARG_PREFIX, _MANT_DIG)
Packit Service 82fcde
Packit Service 82fcde
/* Format specific test macros.  */
Packit Service 82fcde
#define TEST_COND_binary32 (MANT_DIG == 24	\
Packit Service 82fcde
			    && MIN_EXP == -125	\
Packit Service 82fcde
			    && MAX_EXP == 128)
Packit Service 82fcde
Packit Service 82fcde
#define TEST_COND_binary64 (MANT_DIG == 53	\
Packit Service 82fcde
			    && MIN_EXP == -1021	\
Packit Service 82fcde
			    && MAX_EXP == 1024)
Packit Service 82fcde
Packit Service 82fcde
#define TEST_COND_binary128 (MANT_DIG == 113		\
Packit Service 82fcde
			     && MIN_EXP == -16381	\
Packit Service 82fcde
			     && MAX_EXP == 16384)
Packit Service 82fcde
Packit Service 82fcde
#define TEST_COND_ibm128 (MANT_DIG == 106)
Packit Service 82fcde
Packit Service 82fcde
#define TEST_COND_arg_ibm128 (ARG_MANT_DIG == 106)
Packit Service 82fcde
Packit Service 82fcde
#define TEST_COND_intel96 (MANT_DIG == 64	\
Packit Service 82fcde
			   && MIN_EXP == -16381	\
Packit Service 82fcde
			   && MAX_EXP == 16384)
Packit Service 82fcde
Packit Service 82fcde
#define TEST_COND_m68k96 (MANT_DIG == 64	\
Packit Service 82fcde
			  && MIN_EXP == -16382	\
Packit Service 82fcde
			  && MAX_EXP == 16384)
Packit Service 82fcde
Packit Service 82fcde
/* The condition ibm128-libgcc is used instead of ibm128 to mark tests
Packit Service 82fcde
   where in principle the glibc code is OK but the tests fail because
Packit Service 82fcde
   of limitations of the libgcc support for that format (e.g. GCC bug
Packit Service 82fcde
   59666, in non-default rounding modes).  */
Packit Service 82fcde
#ifdef ARG_FLOAT
Packit Service 82fcde
# define TEST_COND_ibm128_libgcc (TEST_COND_ibm128 || TEST_COND_arg_ibm128)
Packit Service 82fcde
#else
Packit Service 82fcde
# define TEST_COND_ibm128_libgcc TEST_COND_ibm128
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Mark a test as expected to fail for ibm128-libgcc.  This is used
Packit Service 82fcde
   via XFAIL_ROUNDING_IBM128_LIBGCC, which gen-libm-test.pl transforms
Packit Service 82fcde
   appropriately for each rounding mode.  */
Packit Service 82fcde
#define XFAIL_IBM128_LIBGCC (TEST_COND_ibm128_libgcc ? XFAIL_TEST : 0)
Packit Service 82fcde
Packit Service 82fcde
/* On some architectures, glibc can be built with compilers that do
Packit Service 82fcde
   not have suitable built-in functions for setting the payload of a
Packit Service 82fcde
   _Float128 NaN.  */
Packit Service 82fcde
#if ((defined __x86_64__ || defined __i386__ || defined __ia64__)	\
Packit Service 82fcde
     && !__GNUC_PREREQ (7, 0))
Packit Service 82fcde
# define XFAIL_FLOAT128_PAYLOAD (TEST_COND_binary128 ? XFAIL_TEST : 0)
Packit Service 82fcde
#else
Packit Service 82fcde
# define XFAIL_FLOAT128_PAYLOAD 0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Number of bits in NaN payload.  */
Packit Service 82fcde
#if TEST_COND_ibm128
Packit Service 82fcde
# define PAYLOAD_DIG (DBL_MANT_DIG - 2)
Packit Service 82fcde
#else
Packit Service 82fcde
# define PAYLOAD_DIG (MANT_DIG - 2)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* For narrowing functions, whether the argument format can represent
Packit Service 82fcde
   all the given argument values.  */
Packit Service 82fcde
#define TEST_COND_arg_fmt(MAX_EXP, NUM_ONES, MIN_EXP, MAX_PREC) \
Packit Service 82fcde
  (((MAX_EXP) < ARG_MAX_EXP)					\
Packit Service 82fcde
   && (!TEST_COND_arg_ibm128					\
Packit Service 82fcde
       || (MAX_EXP) < ARG_MAX_EXP - 1				\
Packit Service 82fcde
       || (NUM_ONES) <= 53)					\
Packit Service 82fcde
   && (MIN_EXP) >= ARG_MIN_EXP - ARG_MANT_DIG			\
Packit Service 82fcde
   && (MAX_PREC) <= ARG_MANT_DIG)
Packit Service 82fcde
Packit Service 82fcde
/* Values underflowing on architectures detecting tininess before
Packit Service 82fcde
   rounding, but not on those detecting tininess after rounding.  */
Packit Service 82fcde
#define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING	(TININESS_AFTER_ROUNDING \
Packit Service 82fcde
						 ? 0			\
Packit Service 82fcde
						 : UNDERFLOW_EXCEPTION)
Packit Service 82fcde
Packit Service 82fcde
#if LONG_MAX == 0x7fffffff
Packit Service 82fcde
# define TEST_COND_long32	1
Packit Service 82fcde
# define TEST_COND_long64	0
Packit Service 82fcde
#else
Packit Service 82fcde
# define TEST_COND_long32	0
Packit Service 82fcde
# define TEST_COND_long64	1
Packit Service 82fcde
#endif
Packit Service 82fcde
#define TEST_COND_before_rounding	(!TININESS_AFTER_ROUNDING)
Packit Service 82fcde
#define TEST_COND_after_rounding	TININESS_AFTER_ROUNDING
Packit Service 82fcde
Packit Service 82fcde
int enable_test (int);
Packit Service 82fcde
void init_max_error (const char *, int, int);
Packit Service 82fcde
void print_max_error (const char *);
Packit Service 82fcde
void print_complex_max_error (const char *);
Packit Service 82fcde
void check_float (const char *, FLOAT, FLOAT, int);
Packit Service 82fcde
void check_complex (const char *, CFLOAT, CFLOAT, int);
Packit Service 82fcde
void check_int (const char *, int, int, int);
Packit Service 82fcde
void check_long (const char *, long int, long int, int);
Packit Service 82fcde
void check_bool (const char *, int, int, int);
Packit Service 82fcde
void check_longlong (const char *, long long int, long long int, int);
Packit Service 82fcde
void check_intmax_t (const char *, intmax_t, intmax_t, int);
Packit Service 82fcde
void check_uintmax_t (const char *, uintmax_t, uintmax_t, int);
Packit Service 82fcde
void libm_test_init (int, char **);
Packit Service 82fcde
int libm_test_finish (void);
Packit Service 82fcde
Packit Service 82fcde
#endif /* LIBM_TEST_SUPPORT_H.  */