mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	2004-03-24 Jakub Jelinek <jakub@redhat.com> * stdlib/strtod_l.c (INTERNAL (__STRTOF)): Clear the rest of retval, not just one limb if RETURN_LIMB_SIZE > 2. Fix shifting up if RETURN_LIMB_SIZE > 2. * stdio-common/printf_fp.c (__printf_fp): For IEEE quad long double on 32-bit architectures reserve 8 limbs instead of 4.
		
			
				
	
	
		
			108 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| README for libm-test math test suite
 | |
| ====================================
 | |
| 
 | |
| The libm-test math test suite tests a number of function points of
 | |
| math functions in the GNU C library.  The following sections contain a
 | |
| brief overview.  Please note that the test drivers and the Perl script
 | |
| "gen-libm-test.pl" have some options.  A full list of options is
 | |
| available with --help (for the test drivers) and -h for
 | |
| "gen-libm-test.pl".
 | |
| 
 | |
| 
 | |
| What is tested?
 | |
| ===============
 | |
| The tests just evaluate the functions at specified points and compare
 | |
| the results with precomputed values and the requirements of the ISO
 | |
| C99 standard.
 | |
| 
 | |
| Besides testing the special values mandated by IEEE 754 (infinities,
 | |
| NaNs and minus zero), some more or less random values are tested.
 | |
| 
 | |
| Files that are part of libm-test
 | |
| ================================
 | |
| 
 | |
| The main file is "libm-test.inc".  It is platform and floating point
 | |
| format independent.  The file must be preprocessed by the Perl script
 | |
| "gen-libm-test.pl".  The results are "libm-test.c" and a file
 | |
| "libm-test-ulps.h" with platform specific deltas.
 | |
| 
 | |
| The test drivers test-double.c, test-float.c, test-ldouble.c test the
 | |
| normal double, float and long double implementation of libm.  The test
 | |
| drivers with an i in it (test-idouble.c, test-ifloat.c,
 | |
| test-ildoubl.c) test the corresponding inline functions (where
 | |
| available - otherwise they also test the real functions in libm).
 | |
| 
 | |
| "gen-libm-test.pl" needs a platform specific files with ULPs (Units of
 | |
| Last Precision).  The file is called "libm-test-ulps" and lives in
 | |
| platform specific sysdep directory.
 | |
| 
 | |
| How can I generate "libm-test-ulps"?
 | |
| ====================================
 | |
| 
 | |
| The test drivers have an option "-u" to output an unsorted list of all
 | |
| epsilons that the functions have.  The output can be read in directly
 | |
| but it's better to pretty print it first.  "gen-libm-test.pl"  has an option
 | |
| to generate a pretty-printed and sorted new ULPs file from the output
 | |
| of the test drivers.
 | |
| 
 | |
| To generate a new "libm-test-ulps" file, first remove "ULPs" file in the
 | |
| current directory, then you can execute for example:
 | |
| test-double -u --ignore-max-ulp=yes
 | |
| This generates a file "ULPs" with all double ULPs in it, ignoring any
 | |
| previous calculated ULPs.
 | |
| Now generate the ULPs for all other formats, the tests will be appending
 | |
| the data to the "ULPs" file.  As final step run "gen-libm-test.pl" with the
 | |
| file as input and ask to generate a pretty printed output in the file "NewUlps":
 | |
|   gen-libm-test.pl -u ULPs -n
 | |
| 
 | |
| Now you can rename "NewUlps" to "libm-test-ulps" and move it into
 | |
| sysdeps.
 | |
| 
 | |
| Contents of libm-test-ulps
 | |
| ==========================
 | |
| Since libm-test-ulps can be generated automatically, just a few
 | |
| notes.  The file contains lines for single tests, like:
 | |
| Test "cos (pi/2) == 0":
 | |
| float:  1
 | |
| 
 | |
| and lines for maximal errors of single functions, like:
 | |
| Function "yn":
 | |
| idouble:  6.0000
 | |
| 
 | |
| The keywords are float, ifloat, double, idouble, ldouble and ildouble
 | |
| (the prefix i stands for inline).  You can also specify known
 | |
| failures, e.g.:
 | |
| 
 | |
| Test "cos (pi/2) == 0":
 | |
| float:  1
 | |
| float: fail
 | |
| 
 | |
| Adding tests to libm-test.inc
 | |
| =============================
 | |
| 
 | |
| The tests are evaluated by a set of special test macros.  The macros
 | |
| start with "TEST_" followed by a specification the input values, an
 | |
| underscore and a specification of the output values.  As an example,
 | |
| the test macro for a function with input of type FLOAT (FLOAT is
 | |
| either float, double, long double) and output of type FLOAT is
 | |
| "TEST_f_f".  The macro's parameter are the name of the function, the
 | |
| input parameter, output parameter and optionally one exception
 | |
| parameter.
 | |
| 
 | |
| The accepted parameter types are:
 | |
| - "f" for FLOAT
 | |
| - "b" for boolean - just tests if the output parameter evaluates to 0
 | |
|   or 1 (only for output).
 | |
| - "c" for complex.  This parameter needs two values, first the real,
 | |
|   then the imaginary part.
 | |
| - "i" for int.
 | |
| - "l" for long int.
 | |
| - "L" for long long int.
 | |
| - "F" for the address of a FLOAT (only as input parameter)
 | |
| - "I" for the address of an int (only as input parameter)
 | |
| 
 | |
| Some functions need special handling.  For example gamma sets the
 | |
| global variable signgam and frexp takes an argument to &int.  This
 | |
| special treatment is coded in "gen-libm-test.pl" and used while
 | |
| parsing "libm-test.inc".
 |