summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2015-12-17 06:55:25 +0000
committerngie <ngie@FreeBSD.org>2015-12-17 06:55:25 +0000
commit490921132f201193a73d81699cb455aa2ae87357 (patch)
tree447ebf673b9e1d362dbcf1b55fd34fa0de86d693 /tools
parent3fed53d02350ae9cbd7b2786b72b83d2e292b8d1 (diff)
parenta7e4d91c2357d6f2c732cccc35fd4ddda5f2d58e (diff)
downloadFreeBSD-src-490921132f201193a73d81699cb455aa2ae87357.zip
FreeBSD-src-490921132f201193a73d81699cb455aa2ae87357.tar.gz
MFhead @ r292396
Diffstat (limited to 'tools')
-rw-r--r--tools/build/mk/OptionalObsoleteFiles.inc5
-rw-r--r--tools/regression/lib/libc/nss/Makefile12
-rw-r--r--tools/regression/lib/libc/nss/README203
-rw-r--r--tools/regression/lib/libc/nss/mach93
-rw-r--r--tools/regression/lib/libc/nss/test-getaddr.c539
-rw-r--r--tools/regression/lib/libc/nss/test-getaddr.t33
-rw-r--r--tools/regression/lib/libc/nss/test-getgr.c534
-rw-r--r--tools/regression/lib/libc/nss/test-getgr.t29
-rw-r--r--tools/regression/lib/libc/nss/test-gethostby.c1105
-rw-r--r--tools/regression/lib/libc/nss/test-gethostby.t113
-rw-r--r--tools/regression/lib/libc/nss/test-getproto.c536
-rw-r--r--tools/regression/lib/libc/nss/test-getproto.t29
-rw-r--r--tools/regression/lib/libc/nss/test-getpw.c489
-rw-r--r--tools/regression/lib/libc/nss/test-getpw.t29
-rw-r--r--tools/regression/lib/libc/nss/test-getrpc.c535
-rw-r--r--tools/regression/lib/libc/nss/test-getrpc.t29
-rw-r--r--tools/regression/lib/libc/nss/test-getserv.c551
-rw-r--r--tools/regression/lib/libc/nss/test-getserv.t29
-rw-r--r--tools/regression/lib/libc/nss/test-getusershell.c235
-rw-r--r--tools/regression/lib/libc/nss/test-getusershell.t22
-rw-r--r--tools/regression/lib/libc/nss/testutil.h332
-rw-r--r--tools/regression/lib/libc/resolv/Makefile14
-rw-r--r--tools/regression/lib/libc/resolv/mach93
-rw-r--r--tools/regression/lib/libc/resolv/resolv.c326
-rw-r--r--tools/regression/lib/libc/resolv/resolv.t24
-rw-r--r--tools/regression/lib/msun/Makefile8
-rw-r--r--tools/regression/lib/msun/test-cexp.c322
-rw-r--r--tools/regression/lib/msun/test-cexp.t10
-rw-r--r--tools/regression/lib/msun/test-conj.c139
-rw-r--r--tools/regression/lib/msun/test-conj.t10
-rw-r--r--tools/regression/lib/msun/test-csqrt.c295
-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.c280
-rw-r--r--tools/regression/lib/msun/test-trig.t10
53 files changed, 8 insertions, 9472 deletions
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
index 0e9c955..779f596 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -4254,6 +4254,11 @@ OLD_DIRS+=usr/include/c++/v1
# to be filled in
#.endif
+.if ${MK_LLDB} == no
+OLD_FILES+=usr/bin/lldb
+OLD_FILES+=usr/share/man/man1/lldb.1.gz
+.endif
+
.if ${MK_LOCALES} == no
OLD_FILES+=usr/share/locale/af_ZA.ISO8859-1/LC_COLLATE
OLD_FILES+=usr/share/locale/af_ZA.ISO8859-1/LC_CTYPE
diff --git a/tools/regression/lib/libc/nss/Makefile b/tools/regression/lib/libc/nss/Makefile
deleted file mode 100644
index 8c8a514..0000000
--- a/tools/regression/lib/libc/nss/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-# $FreeBSD$
-
-TESTS= test-getaddr test-getgr test-gethostby test-getpw test-getproto\
- test-getrpc test-getserv test-getusershell
-CFLAGS+= -g -Wall
-
-.PHONY: tests
-tests: ${TESTS}
-
-.PHONY: clean
-clean:
- -rm -f ${TESTS}
diff --git a/tools/regression/lib/libc/nss/README b/tools/regression/lib/libc/nss/README
deleted file mode 100644
index bf32913..0000000
--- a/tools/regression/lib/libc/nss/README
+++ /dev/null
@@ -1,203 +0,0 @@
-$FreeBSD$
-
-A brief how-to
---------------
-
-Each nsswitch regression test does 2 kinds of actions:
-1. It runs a series of queries and tests the correctness of results.
- There are 2 basic criteria which are used for that:
- - numbers must be in the correct range
- - certain pointers should not be NULL
-
-2. It makes a snapshot of the results of all queries that were made.
- The idea of snapshots is to test that nsswitch-related function
- calls behave equally (i.e. return same results for the same queries)
- between system upgrades. When the test is executed and the snapshot is
- already created, the test will compare the result of each query with
- the appropriate result from the snapshot and will signal if they
- differ.
-
-In order for nsswitch tests to be as useful as possible you should use
-them in the following way:
-
-Step 1 (before upgrading your system).
-Build the tests with "make" command and execute them with "prove -v"
-command. If there are errors during the execution, then appropriate
-nsswitch functions should be checked. Note, that errors on this state
-can happen only if the particular function return incorrect data.
-
-After the stage 1 a number of "snapshot_[test name]" files will appear
-in your test folder.
-
-Step 2 (after upgrading you system).
-Rebuild the tests with "make clean; make" command and execute them
-again with "prove -v" (check that "snapshot_[test name]" files
-are in the same folder with tests). On this stage regression tests
-will catch not only the correctness errors, but will also determine
-the changes in nsswitch functions behaviour.
-
-In case of the test failure you will get the following message:
-
-To get more details about the error you should do the following:
-Step 1. Run the test alone with debug output enabled.
-Step 2. Mail the snapshot file and the debug test output to the
-freebsd-current@ mailing list.
-
-Example testing session for getpwXXX() family of functions
-----------------------------------------------------------
-1. make
-
-2. prove -v ./test-getpw.t
-
- test-getpw....1..8
- ok 1 - getpwnam()
- ok 2 - getpwuid()
- ok 3 - getpwent()
- ok 4 - getpwent() 2-pass
- ok 5 - building snapshot, if needed
- ok 6 - getpwnam() snapshot
- ok 7 - getpwuid() snapshot
- ok 8 - getpwent() snapshot
- ok
- All tests successful.
- Files=1, Tests=8, 1 wallclock secs ( 0.00 cusr + 0.20 csys = 0.20 CPU)
-
-
-3. Upgrading the system.
-
-4. make clean; make
-
-5. prove -v ./test-getpw.t (suppose that something has gone wrong)
-
- test-getpw....1..8
- ok 1 - getpwnam()
- ok 2 - getpwuid()
- ok 3 - getpwent()
- ok 4 - getpwent() 2-pass
- ok 5 - building snapshot, if needed
- not ok 6 - getpwnam() snapshot
- ok 7 - getpwuid() snapshot
- not ok 8 - getpwent() snapshot
- FAILED tests 6, 8
- Failed 2/8 tests, 75.00% okay
- Failed 1/1 test scripts, 0.00% okay. 2/8 subtests failed, 75.00% okay.
-
-6. We see that test number 6 failed. According to get-getpw.t, this test
- is executed like this:
- do_test 6 'getpwnam() snapshot' '-n -s snapshot_pwd'
-
- To determine why the test has failed, we need to run it in debug mode -
- it means adding "-d" to the options list.
-
-7. ./test-getpw -dn -s snapshot_pwd
- ...
- testing getpwnam() with the following data:
- toor:*:0:0:0::ne-again Superuser:/root::0:4831
- testing correctness with the following data:
- toor:*:0:0:0::Bourne-again Superuser:/root::0:4831
- correct
- not ok
-
-8. Here we can see that the data from snapshot (first "toor" line) and
- the data received from the getpwnam() call (second "toor" line) are
- different. It is the reason why the test has failed. If you can't
- (or don't want) to investigate the problem by yourself, mail
- the test debug output and the snapshot file to the developers list.
-
-Notes on using standalone nsswitch tests
-----------------------------------------
-
-All nsswitch tests have [-d] optional command line argument which enables
-debug output. The debug output can be extremely helpful to determine the
-cause of test failure.
-
-In all nsswitch tests -s <file> command line argument specifies the
-snapshot file. If this file doesn't exist, it would be built during
-test execution. If it already exists then it will be used to check
-the results of particular function calls. This argument is mostly
-optional, but some tests (test-getaddr and test-getusershell) force
-it to be specified.
-
-test-gethostby and test-getaddr require the list of hostnames, that should
-be queried during the test. This list must be specified via -f <file>
-command line argument. Each hostname should occupy exactly one line
-in the file.
-
-Detailed tests description
---------------------------
-
-./test-getaddr - tests the getaddrinfo() function.
- Usage: test-getaddr [-d] [-46] [-s <file>] -f <file>
- -d - enable debug output
- -4 - force IPv4 usage
- -6 - force IPv6 usage
- -s - build/use specified snapshot file
- -f - use specified hostnames list for testing
-
-./test-getgr
- Usage: test-getgr -nge2 [-d] [-s <file>]
- -d - enable debug output
- -n - test getgrnam(3)
- -g - test getgrgid(3)
- -e - test getgrent(3)
- -2 - test getgrent(3) in 2-pass mode
- -s - build/use specified snapshot file
-
-./test-gethostby
- Usage: test-gethostby -na2i [-o] [-d] [-m46] [-s <file>] -f <file>
- -n - test gethostbyname2(3)
- -a - test gethostbyaddr(3)
- -2 - test gethostbyname2(3) results to be equal with getaddrinfo(3)
- results for the similar query
- -i - test gethostbyaddr(3) results to be equal with getnameinfo(3)
- results for the similar query
- -o - use getipnodebyname(3)/getipnodebyaddr(3) for testing instead of
- gethostbyname2(3)/gethostbyaddr(3)
- -d - enable debug output
- -m - force IPv4-to-IPv6 mapping
- -4 - force IPv4 usage
- -6 - force IPv6 usage
- -s - build/use specified snapshot file
- -f - use specified hostnames list for testing
-
-./test-getproto
- Usage: test-getproto -nve2 [-d] [-s <file>]
- -d - enable debug output
- -n - test getprotobyname(3)
- -v - test getprotobynumber(3)
- -e - test getprotoent(3)
- -2 - test getprotoent(3) in 2-pass mode
- -s - build/use specified snapshot file
-
-./test-getpw
- Usage: test-getpw -nue2 [-d] [-s <file>]
- -d - enable debug output
- -n - test getpwnam(3)
- -u - test getpwuid(3)
- -e - test getpwent(3)
- -2 - test getpwent(3) in 2-pass mode
- -s - build/use snapshot file
-
-./test-getrpc
- Usage: test-getrpc -nve2 [-d] [-s <file>]
- -d - enable debug output
- -n - test getrpcbyname(3)
- -v - test getrpcbynumber(3)
- -e - test getrpcent(3)
- -2 - test getrpcent(3) in 2-pass mode
- -s - build/use specified snapshot file
-
-./test-getserv
- Usage: test-getserv -npe2 [-d] [-s <file>]
- -d - enable debug output
- -n - test getservbyname(3)
- -p - test getservbyport(3)
- -e - test getservent(3)
- -2 - test getservent(3) in 2-pass mode
- -s - build/use specified snapshot file
-
-./test-getusershell
- Usage: test-getusershell [-d] -s <file>
- -d - enable debug output
- -s - build/use specified snapshot file
-
diff --git a/tools/regression/lib/libc/nss/mach b/tools/regression/lib/libc/nss/mach
deleted file mode 100644
index ab7ce24..0000000
--- a/tools/regression/lib/libc/nss/mach
+++ /dev/null
@@ -1,93 +0,0 @@
-# $FreeBSD$
-localhost
-above.warped.net
-anoncvs.cirr.com
-anoncvs.isc.netbsd.org
-anoncvs.leo.org
-anoncvs.netbsd.lt
-anoncvs.netbsd.ro
-anoncvs.netbsd.se
-antioche.antioche.eu.org
-boulder.tele.dk
-centaurus.4web.cz
-chur.math.ntnu.no
-console.netbsd.org
-cvs.fi.netbsd.org
-cvs.mikrolahti.fi
-cvs.netbsd.org
-cvsup-netbsd.leo.org
-cvsup.netbsd.se
-cvsup.pasta.cs.uit.no
-ftp.bitcon.no
-ftp.chg.ru
-ftp.duth.gr
-ftp.estpak.ee
-ftp.fsn.hu
-ftp.funet.fi
-ftp.grondar.za
-ftp.leo.org
-ftp.netbsd.lt
-ftp.netbsd.org
-ftp.nluug.nl
-ftp.plig.org
-ftp.uni-erlangen.de
-ftp.xgate.co.kr
-gd.tuwien.ac.at
-gort.ludd.luth.se
-grappa.unix-ag.uni-kl.de
-info.wins.uva.nl
-irc.warped.net
-knug.youn.co.kr
-lala.iri.co.jp
-mail.jp.netbsd.org
-mail.kr.netbsd.org
-mail.netbsd.org
-melanoma.cs.rmit.edu.au
-mirror.aarnet.edu.au
-mirror.netbsd.com.br
-mirror03.inet.tele.dk
-moon.vub.ac.be
-nbwww.sergei.cc
-net.bsd.cz
-netbsd.3miasto.net
-netbsd.4ka.mipt.ru
-netbsd.apk.od.ua
-netbsd.csie.nctu.edu.tw
-netbsd.enderunix.org
-netbsd.ftp.fu-berlin.de
-netbsd.netlead.com.au
-netbsd.nsysu.edu.tw
-netbsd.pair.com
-netbsd.stevens-tech.edu
-netbsd.triada.bg
-netbsd.unix.net.nz
-netbsd.unixtech.be
-netbsd.vejas.lt
-netbsd.wagener-consulting.lu
-netbsd.zarco.org
-netbsdiso.interoute.net.uk
-netbsdwww.bitcon.no
-netbsdwww.cordef.com.pl
-netbsdwww.cs.rmit.edu.au
-netbsdwww.interoute.net.uk
-news.gw.com
-ns.netbsd.org
-pigu.iri.co.jp
-pluto.cdpa.nsysu.edu.tw
-projects.slowass.net
-server6.pasta.cs.uit.no
-skeleton.phys.spbu.ru
-snoopy.allbsd.org
-spike.allbsd.org
-sundry.netbsd.org
-tanya.sergei.cc
-web-a.fi.gw.com
-web-a.us.gw.com
-web.netbsd.mirror.arhea.net
-www.en.netbsd.de
-www.netbsd.cl
-www.netbsd.nl
-www.netbsd.org
-www.netbsd.ro
-zathras.netbsd.org
-zeppo.rediris.es
diff --git a/tools/regression/lib/libc/nss/test-getaddr.c b/tools/regression/lib/libc/nss/test-getaddr.c
deleted file mode 100644
index f0729ec..0000000
--- a/tools/regression/lib/libc/nss/test-getaddr.c
+++ /dev/null
@@ -1,539 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <arpa/inet.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <assert.h>
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETADDRINFO,
- TEST_BUILD_SNAPSHOT
-};
-
-static int debug = 0;
-static struct addrinfo hints;
-static enum test_methods method = TEST_GETADDRINFO;
-
-DECLARE_TEST_DATA(addrinfo)
-DECLARE_TEST_FILE_SNAPSHOT(addrinfo)
-DECLARE_2PASS_TEST(addrinfo)
-
-static void clone_addrinfo(struct addrinfo *, struct addrinfo const *);
-static int compare_addrinfo(struct addrinfo *, struct addrinfo *, void *);
-static void dump_addrinfo(struct addrinfo *);
-static void free_addrinfo(struct addrinfo *);
-
-static void sdump_addrinfo(struct addrinfo *, char *, size_t);
-
-IMPLEMENT_TEST_DATA(addrinfo)
-IMPLEMENT_TEST_FILE_SNAPSHOT(addrinfo)
-IMPLEMENT_2PASS_TEST(addrinfo)
-
-static void
-clone_addrinfo(struct addrinfo *dest, struct addrinfo const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- memcpy(dest, src, sizeof(struct addrinfo));
- if (src->ai_canonname != NULL)
- dest->ai_canonname = strdup(src->ai_canonname);
-
- if (src->ai_addr != NULL) {
- dest->ai_addr = (struct sockaddr *)malloc(src->ai_addrlen);
- assert(dest->ai_addr != NULL);
- memcpy(dest->ai_addr, src->ai_addr, src->ai_addrlen);
- }
-
- if (src->ai_next != NULL) {
- dest->ai_next = (struct addrinfo *)malloc(
- sizeof(struct addrinfo));
- assert(dest->ai_next != NULL);
- clone_addrinfo(dest->ai_next, src->ai_next);
- }
-}
-
-static int
-compare_addrinfo_(struct addrinfo *ai1, struct addrinfo *ai2)
-{
- if ((ai1 == NULL) || (ai2 == NULL))
- return (-1);
-
- if ((ai1->ai_flags != ai2->ai_flags) ||
- (ai1->ai_family != ai2->ai_family) ||
- (ai1->ai_socktype != ai2->ai_socktype) ||
- (ai1->ai_protocol != ai2->ai_protocol) ||
- (ai1->ai_addrlen != ai2->ai_addrlen) ||
- (((ai1->ai_addr == NULL) || (ai2->ai_addr == NULL)) &&
- (ai1->ai_addr != ai2->ai_addr)) ||
- (((ai1->ai_canonname == NULL) || (ai2->ai_canonname == NULL)) &&
- (ai1->ai_canonname != ai2->ai_canonname)))
- return (-1);
-
- if ((ai1->ai_canonname != NULL) &&
- (strcmp(ai1->ai_canonname, ai2->ai_canonname) != 0))
- return (-1);
-
- if ((ai1->ai_addr != NULL) &&
- (memcmp(ai1->ai_addr, ai2->ai_addr, ai1->ai_addrlen) != 0))
- return (-1);
-
- if ((ai1->ai_next == NULL) && (ai2->ai_next == NULL))
- return (0);
- else
- return (compare_addrinfo_(ai1->ai_next, ai2->ai_next));
-}
-
-static int
-compare_addrinfo(struct addrinfo *ai1, struct addrinfo *ai2, void *mdata)
-{
- int rv;
-
- if (debug) {
- printf("testing equality of 2 addrinfo structures\n");
- }
-
- rv = compare_addrinfo_(ai1, ai2);
-
- if (debug) {
- if (rv == 0)
- printf("equal\n");
- else {
- dump_addrinfo(ai1);
- dump_addrinfo(ai2);
- printf("not equal\n");
- }
- }
-
- return (rv);
-}
-
-void
-free_addrinfo(struct addrinfo *ai)
-{
- if (ai == NULL)
- return;
-
- free(ai->ai_addr);
- free(ai->ai_canonname);
- free_addrinfo(ai->ai_next);
-}
-
-void
-sdump_addrinfo(struct addrinfo *ai, char *buffer, size_t buflen)
-{
- int written, i;
-
- written = snprintf(buffer, buflen, "%d %d %d %d %d ",
- ai->ai_flags, ai->ai_family, ai->ai_socktype, ai->ai_protocol,
- ai->ai_addrlen);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- written = snprintf(buffer, buflen, "%s ",
- ai->ai_canonname == NULL ? "(null)" : ai->ai_canonname);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (ai->ai_addr == NULL) {
- written = snprintf(buffer, buflen, "(null)");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
- } else {
- for (i = 0; i < ai->ai_addrlen; ++i ) {
- written = snprintf(buffer, buflen,
- i + 1 != ai->ai_addrlen ? "%d." : "%d",
- ((unsigned char *)ai->ai_addr)[i]);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
- }
-
- if (ai->ai_next != NULL) {
- written = snprintf(buffer, buflen, ":");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- sdump_addrinfo(ai->ai_next, buffer, buflen);
- }
-}
-
-void
-dump_addrinfo(struct addrinfo *result)
-{
- if (result != NULL) {
- char buffer[2048];
- sdump_addrinfo(result, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-addrinfo_read_snapshot_addr(char *addr, unsigned char *result, size_t len)
-{
- char *s, *ps, *ts;
-
- ps = addr;
- while ( (s = strsep(&ps, ".")) != NULL) {
- if (len == 0)
- return (-1);
-
- *result = (unsigned char)strtol(s, &ts, 10);
- ++result;
- if (*ts != '\0')
- return (-1);
-
- --len;
- }
- if (len != 0)
- return (-1);
- else
- return (0);
-}
-
-static int
-addrinfo_read_snapshot_ai(struct addrinfo *ai, char *line)
-{
- char *s, *ps, *ts;
- int i, rv, *pi;
-
- rv = 0;
- i = 0;
- ps = line;
- memset(ai, 0, sizeof(struct addrinfo));
- while ( (s = strsep(&ps, " ")) != NULL) {
- switch (i) {
- case 0:
- case 1:
- case 2:
- case 3:
- pi = &ai->ai_flags + i;
- *pi = (int)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- case 4:
- ai->ai_addrlen = (socklen_t)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- case 5:
- if (strcmp(s, "(null)") != 0) {
- ai->ai_canonname = strdup(s);
- assert(ai->ai_canonname != NULL);
- }
- break;
- case 6:
- if (strcmp(s, "(null)") != 0) {
- ai->ai_addr = (struct sockaddr *)malloc(
- ai->ai_addrlen);
- assert(ai->ai_addr != NULL);
- memset(ai->ai_addr, 0, ai->ai_addrlen);
- rv = addrinfo_read_snapshot_addr(s,
- (unsigned char *)ai->ai_addr,
- ai->ai_addrlen);
-
- if (rv != 0)
- goto fin;
- }
- break;
- default:
- /* NOTE: should not be reachable */
- rv = -1;
- goto fin;
- };
-
- ++i;
- }
-
-fin:
- if ((i != 7) || (rv != 0)) {
- free_addrinfo(ai);
- memset(ai, 0, sizeof(struct addrinfo));
- return (-1);
- }
-
- return (0);
-}
-
-static int
-addrinfo_read_snapshot_func(struct addrinfo *ai, char *line)
-{
- struct addrinfo *ai2;
- char *s, *ps;
- int i, rv;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- rv = 0;
- i = 0;
- ps = line;
-
- s = strsep(&ps, ":");
- if (s == NULL)
- return (-1);
-
- rv = addrinfo_read_snapshot_ai(ai, s);
- if (rv != 0)
- return (-1);
-
- ai2 = ai;
- while ( (s = strsep(&ps, ":")) != NULL) {
- ai2->ai_next = (struct addrinfo *)malloc(
- sizeof(struct addrinfo));
- assert(ai2->ai_next != NULL);
- memset(ai2->ai_next, 0, sizeof(struct addrinfo));
-
- rv = addrinfo_read_snapshot_ai(ai2->ai_next, s);
- if (rv != 0) {
- free_addrinfo(ai);
- return (-1);
- }
-
- ai2 = ai2->ai_next;
- }
-
- return (0);
-}
-
-static int
-addrinfo_test_correctness(struct addrinfo *ai, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_addrinfo(ai);
- }
-
- if (ai == NULL)
- goto errfin;
-
- if (!((ai->ai_family >= 0) && (ai->ai_family < AF_MAX)))
- goto errfin;
-
- if ((ai->ai_socktype != 0) && (ai->ai_socktype != SOCK_STREAM) &&
- (ai->ai_socktype != SOCK_DGRAM) && (ai->ai_socktype != SOCK_RAW))
- goto errfin;
-
- if ((ai->ai_protocol != 0) && (ai->ai_protocol != IPPROTO_UDP) &&
- (ai->ai_protocol != IPPROTO_TCP))
- goto errfin;
-
- if ((ai->ai_flags & ~(AI_CANONNAME | AI_NUMERICHOST | AI_PASSIVE)) != 0)
- goto errfin;
-
- if ((ai->ai_addrlen != ai->ai_addr->sa_len) ||
- (ai->ai_family != ai->ai_addr->sa_family))
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-static int
-addrinfo_read_hostlist_func(struct addrinfo *ai, char *line)
-{
- struct addrinfo *result;
- int rv;
-
- if (debug)
- printf("resolving %s: ", line);
- rv = getaddrinfo(line, NULL, &hints, &result);
- if (rv == 0) {
- if (debug)
- printf("found\n");
-
- rv = addrinfo_test_correctness(result, NULL);
- if (rv != 0) {
- freeaddrinfo(result);
- return (rv);
- }
-
- clone_addrinfo(ai, result);
- freeaddrinfo(result);
- } else {
- if (debug)
- printf("not found\n");
-
- memset(ai, 0, sizeof(struct addrinfo));
- }
- return (0);
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s [-d] [-46] [-s <file]> -f <file>\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct addrinfo_test_data td, td_snap;
- char *snapshot_file, *hostlist_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- hostlist_file = NULL;
- memset(&hints, 0, sizeof(struct addrinfo));
- hints.ai_family = PF_UNSPEC;
- hints.ai_flags = AI_CANONNAME;
- while ((c = getopt(argc, argv, "46dns:f:")) != -1)
- switch (c) {
- case '4':
- hints.ai_family = PF_INET;
- break;
- case '6':
- hints.ai_family = PF_INET6;
- break;
- case 'd':
- debug = 1;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- method = TEST_BUILD_SNAPSHOT;
- break;
- case 'f':
- hostlist_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- TEST_DATA_INIT(addrinfo, &td, clone_addrinfo, free_addrinfo);
- TEST_DATA_INIT(addrinfo, &td_snap, clone_addrinfo, free_addrinfo);
-
- if (hostlist_file == NULL)
- usage();
-
- if (access(hostlist_file, R_OK) != 0) {
- if (debug)
- printf("can't access the hostlist file %s\n",
- hostlist_file);
-
- usage();
- }
-
- if (debug)
- printf("building host lists from %s\n", hostlist_file);
-
- rv = TEST_SNAPSHOT_FILE_READ(addrinfo, hostlist_file, &td,
- addrinfo_read_hostlist_func);
- if (rv != 0)
- goto fin;
-
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the snapshot file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- rv = TEST_SNAPSHOT_FILE_READ(addrinfo, snapshot_file,
- &td_snap, addrinfo_read_snapshot_func);
- if (rv != 0) {
- if (debug)
- printf("error reading snapshot file\n");
- goto fin;
- }
- }
- }
-
- switch (method) {
- case TEST_GETADDRINFO:
- if (snapshot_file != NULL)
- rv = DO_2PASS_TEST(addrinfo, &td, &td_snap,
- compare_addrinfo, NULL);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL) {
- rv = TEST_SNAPSHOT_FILE_WRITE(addrinfo, snapshot_file, &td,
- sdump_addrinfo);
- }
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(addrinfo, &td_snap);
- TEST_DATA_DESTROY(addrinfo, &td);
- free(hostlist_file);
- free(snapshot_file);
- return (rv);
-
-}
-
diff --git a/tools/regression/lib/libc/nss/test-getaddr.t b/tools/regression/lib/libc/nss/test-getaddr.t
deleted file mode 100644
index b3020f0..0000000
--- a/tools/regression/lib/libc/nss/test-getaddr.t
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..6
-#Tests with hints.ai_family is set to PF_UNSPEC
-do_test 1 'getaddrinfo() (PF_UNSPEC)' '-f mach'
-do_test 2 'getaddrinfo() snapshot (PF_UNSPEC)' '-f mach -s snapshot_ai'
-
-#Tests with hints.ai_family is set to PF_INET
-do_test 3 'getaddrinfo() (PF_INET)' '-f mach'
-do_test 4 'getaddrinfo() snapshot (PF_INET)' '-4 -f mach -s snapshot_ai4'
-
-#Tests with hints.ai_family is set to PF_INET6
-do_test 5 'getaddrinfo() (PF_INET6)' '-f mach'
-do_test 6 'getaddrinfo() snapshot (PF_INET6)' '-6 -f mach -s snapshot_ai6'
-
diff --git a/tools/regression/lib/libc/nss/test-getgr.c b/tools/regression/lib/libc/nss/test-getgr.c
deleted file mode 100644
index 0ccebae..0000000
--- a/tools/regression/lib/libc/nss/test-getgr.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <arpa/inet.h>
-#include <assert.h>
-#include <errno.h>
-#include <grp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETGRENT,
- TEST_GETGRNAM,
- TEST_GETGRGID,
- TEST_GETGRENT_2PASS,
- TEST_BUILD_SNAPSHOT
-};
-
-static int debug = 0;
-static enum test_methods method = TEST_BUILD_SNAPSHOT;
-
-DECLARE_TEST_DATA(group)
-DECLARE_TEST_FILE_SNAPSHOT(group)
-DECLARE_1PASS_TEST(group)
-DECLARE_2PASS_TEST(group)
-
-static void clone_group(struct group *, struct group const *);
-static int compare_group(struct group *, struct group *, void *);
-static void dump_group(struct group *);
-static void free_group(struct group *);
-
-static void sdump_group(struct group *, char *, size_t);
-static int group_read_snapshot_func(struct group *, char *);
-
-static int group_check_ambiguity(struct group_test_data *,
- struct group *);
-static int group_fill_test_data(struct group_test_data *);
-static int group_test_correctness(struct group *, void *);
-static int group_test_getgrnam(struct group *, void *);
-static int group_test_getgrgid(struct group *, void *);
-static int group_test_getgrent(struct group *, void *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(group)
-IMPLEMENT_TEST_FILE_SNAPSHOT(group)
-IMPLEMENT_1PASS_TEST(group)
-IMPLEMENT_2PASS_TEST(group)
-
-static void
-clone_group(struct group *dest, struct group const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- char **cp;
- int members_num;
-
- memset(dest, 0, sizeof(struct group));
-
- if (src->gr_name != NULL) {
- dest->gr_name = strdup(src->gr_name);
- assert(dest->gr_name != NULL);
- }
-
- if (src->gr_passwd != NULL) {
- dest->gr_passwd = strdup(src->gr_passwd);
- assert(dest->gr_passwd != NULL);
- }
- dest->gr_gid = src->gr_gid;
-
- if (src->gr_mem != NULL) {
- members_num = 0;
- for (cp = src->gr_mem; *cp; ++cp)
- ++members_num;
-
- dest->gr_mem = (char **)malloc(
- (members_num + 1) * (sizeof(char *)));
- assert(dest->gr_mem != NULL);
- memset(dest->gr_mem, 0, (members_num+1) * (sizeof(char *)));
-
- for (cp = src->gr_mem; *cp; ++cp) {
- dest->gr_mem[cp - src->gr_mem] = strdup(*cp);
- assert(dest->gr_mem[cp - src->gr_mem] != NULL);
- }
- }
-}
-
-static void
-free_group(struct group *grp)
-{
- char **cp;
-
- assert(grp != NULL);
-
- free(grp->gr_name);
- free(grp->gr_passwd);
-
- for (cp = grp->gr_mem; *cp; ++cp)
- free(*cp);
- free(grp->gr_mem);
-}
-
-static int
-compare_group(struct group *grp1, struct group *grp2, void *mdata)
-{
- char **c1, **c2;
-
- if (grp1 == grp2)
- return (0);
-
- if ((grp1 == NULL) || (grp2 == NULL))
- goto errfin;
-
- if ((strcmp(grp1->gr_name, grp2->gr_name) != 0) ||
- (strcmp(grp1->gr_passwd, grp2->gr_passwd) != 0) ||
- (grp1->gr_gid != grp2->gr_gid))
- goto errfin;
-
- c1 = grp1->gr_mem;
- c2 = grp2->gr_mem;
-
- if ((grp1->gr_mem == NULL) || (grp2->gr_mem == NULL))
- goto errfin;
-
- for (;*c1 && *c2; ++c1, ++c2)
- if (strcmp(*c1, *c2) != 0)
- goto errfin;
-
- if ((*c1 != '\0') || (*c2 != '\0'))
- goto errfin;
-
- return 0;
-
-errfin:
- if ((debug) && (mdata == NULL)) {
- printf("following structures are not equal:\n");
- dump_group(grp1);
- dump_group(grp2);
- }
-
- return (-1);
-}
-
-static void
-sdump_group(struct group *grp, char *buffer, size_t buflen)
-{
- char **cp;
- int written;
-
- written = snprintf(buffer, buflen, "%s %s %d",
- grp->gr_name, grp->gr_passwd, grp->gr_gid);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (grp->gr_mem != NULL) {
- if (*(grp->gr_mem) != '\0') {
- for (cp = grp->gr_mem; *cp; ++cp) {
- written = snprintf(buffer, buflen, " %s",*cp);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
- } else
- snprintf(buffer, buflen, " nomem");
- } else
- snprintf(buffer, buflen, " (null)");
-}
-
-static int
-group_read_snapshot_func(struct group *grp, char *line)
-{
- StringList *sl;
- char *s, *ps, *ts;
- int i;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- i = 0;
- sl = NULL;
- ps = line;
- memset(grp, 0, sizeof(struct group));
- while ( (s = strsep(&ps, " ")) != NULL) {
- switch (i) {
- case 0:
- grp->gr_name = strdup(s);
- assert(grp->gr_name != NULL);
- break;
-
- case 1:
- grp->gr_passwd = strdup(s);
- assert(grp->gr_passwd != NULL);
- break;
-
- case 2:
- grp->gr_gid = (gid_t)strtol(s, &ts, 10);
- if (*ts != '\0') {
- free(grp->gr_name);
- free(grp->gr_passwd);
- return (-1);
- }
- break;
-
- default:
- if (sl == NULL) {
- if (strcmp(s, "(null)") == 0)
- return (0);
-
- sl = sl_init();
- assert(sl != NULL);
-
- if (strcmp(s, "nomem") != 0) {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- } else {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- break;
- };
- ++i;
- }
-
- if (i < 3) {
- free(grp->gr_name);
- free(grp->gr_passwd);
- memset(grp, 0, sizeof(struct group));
- return (-1);
- }
-
- sl_add(sl, NULL);
- grp->gr_mem = sl->sl_str;
-
- /* NOTE: is it a dirty hack or not? */
- free(sl);
- return (0);
-}
-
-static void
-dump_group(struct group *result)
-{
- if (result != NULL) {
- char buffer[1024];
- sdump_group(result, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-group_fill_test_data(struct group_test_data *td)
-{
- struct group *grp;
-
- setgroupent(1);
- while ((grp = getgrent()) != NULL) {
- if (group_test_correctness(grp, NULL) == 0)
- TEST_DATA_APPEND(group, td, grp);
- else
- return (-1);
- }
- endgrent();
-
- return (0);
-}
-
-static int
-group_test_correctness(struct group *grp, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_group(grp);
- }
-
- if (grp == NULL)
- goto errfin;
-
- if (grp->gr_name == NULL)
- goto errfin;
-
- if (grp->gr_passwd == NULL)
- goto errfin;
-
- if (grp->gr_mem == NULL)
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-/* group_check_ambiguity() is needed here because when doing the getgrent()
- * calls sequence, records from different nsswitch sources can be different,
- * though having the same pw_name/pw_uid */
-static int
-group_check_ambiguity(struct group_test_data *td, struct group *pwd)
-{
-
- return (TEST_DATA_FIND(group, td, pwd, compare_group,
- NULL) != NULL ? 0 : -1);
-}
-
-static int
-group_test_getgrnam(struct group *grp_model, void *mdata)
-{
- struct group *grp;
-
- if (debug) {
- printf("testing getgrnam() with the following data:\n");
- dump_group(grp_model);
- }
-
- grp = getgrnam(grp_model->gr_name);
- if (group_test_correctness(grp, NULL) != 0)
- goto errfin;
-
- if ((compare_group(grp, grp_model, NULL) != 0) &&
- (group_check_ambiguity((struct group_test_data *)mdata, grp)
- !=0))
- goto errfin;
-
- if (debug)
- printf("ok\n");
- return (0);
-
-errfin:
- if (debug)
- printf("not ok\n");
-
- return (-1);
-}
-
-static int
-group_test_getgrgid(struct group *grp_model, void *mdata)
-{
- struct group *grp;
-
- if (debug) {
- printf("testing getgrgid() with the following data...\n");
- dump_group(grp_model);
- }
-
- grp = getgrgid(grp_model->gr_gid);
- if ((group_test_correctness(grp, NULL) != 0) ||
- ((compare_group(grp, grp_model, NULL) != 0) &&
- (group_check_ambiguity((struct group_test_data *)mdata, grp)
- != 0))) {
- if (debug)
- printf("not ok\n");
- return (-1);
- } else {
- if (debug)
- printf("ok\n");
- return (0);
- }
-}
-
-static int
-group_test_getgrent(struct group *grp, void *mdata)
-{
- /* Only correctness can be checked when doing 1-pass test for
- * getgrent(). */
- return (group_test_correctness(grp, NULL));
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s -nge2 [-d] [-s <file>]\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct group_test_data td, td_snap, td_2pass;
- char *snapshot_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- while ((c = getopt(argc, argv, "nge2ds:")) != -1)
- switch (c) {
- case 'd':
- debug++;
- break;
- case 'n':
- method = TEST_GETGRNAM;
- break;
- case 'g':
- method = TEST_GETGRGID;
- break;
- case 'e':
- method = TEST_GETGRENT;
- break;
- case '2':
- method = TEST_GETGRENT_2PASS;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- TEST_DATA_INIT(group, &td, clone_group, free_group);
- TEST_DATA_INIT(group, &td_snap, clone_group, free_group);
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- if (method == TEST_BUILD_SNAPSHOT) {
- rv = 0;
- goto fin;
- }
-
- TEST_SNAPSHOT_FILE_READ(group, snapshot_file,
- &td_snap, group_read_snapshot_func);
- }
- }
-
- rv = group_fill_test_data(&td);
- if (rv == -1)
- return (-1);
- switch (method) {
- case TEST_GETGRNAM:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(group, &td,
- group_test_getgrnam, (void *)&td);
- else
- rv = DO_1PASS_TEST(group, &td_snap,
- group_test_getgrnam, (void *)&td_snap);
- break;
- case TEST_GETGRGID:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(group, &td,
- group_test_getgrgid, (void *)&td);
- else
- rv = DO_1PASS_TEST(group, &td_snap,
- group_test_getgrgid, (void *)&td_snap);
- break;
- case TEST_GETGRENT:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(group, &td, group_test_getgrent,
- (void *)&td);
- else
- rv = DO_2PASS_TEST(group, &td, &td_snap,
- compare_group, NULL);
- break;
- case TEST_GETGRENT_2PASS:
- TEST_DATA_INIT(group, &td_2pass, clone_group, free_group);
- rv = group_fill_test_data(&td_2pass);
- if (rv != -1)
- rv = DO_2PASS_TEST(group, &td, &td_2pass,
- compare_group, NULL);
- TEST_DATA_DESTROY(group, &td_2pass);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL)
- rv = TEST_SNAPSHOT_FILE_WRITE(group, snapshot_file, &td,
- sdump_group);
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(group, &td_snap);
- TEST_DATA_DESTROY(group, &td);
- free(snapshot_file);
- return (rv);
-}
diff --git a/tools/regression/lib/libc/nss/test-getgr.t b/tools/regression/lib/libc/nss/test-getgr.t
deleted file mode 100644
index e2cf8e5..0000000
--- a/tools/regression/lib/libc/nss/test-getgr.t
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..8
-do_test 1 'getgrnam()' '-n'
-do_test 2 'getgrgid()' '-g'
-do_test 3 'getgrent()' '-e'
-do_test 4 'getgrent() 2-pass' '-2'
-do_test 5 'building snapshot, if needed' '-s snapshot_grp'
-do_test 6 'getgrnam() snapshot' '-n -s snapshot_grp'
-do_test 7 'getgrgid() snapshot' '-g -s snapshot_grp'
-do_test 8 'getgrent() snapshot' '-e -s snapshot_grp'
diff --git a/tools/regression/lib/libc/nss/test-gethostby.c b/tools/regression/lib/libc/nss/test-gethostby.c
deleted file mode 100644
index 9e7bdf5..0000000
--- a/tools/regression/lib/libc/nss/test-gethostby.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <arpa/inet.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <assert.h>
-#include <errno.h>
-#include <netdb.h>
-#include <resolv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-#include <unistd.h>
-#include "testutil.h"
-
-#ifndef min
-#define min(a,b) (((a)<(b))?(a):(b))
-#endif
-
-enum test_methods {
- TEST_GETHOSTBYNAME2,
- TEST_GETHOSTBYADDR,
- TEST_GETHOSTBYNAME2_GETADDRINFO,
- TEST_GETHOSTBYADDR_GETNAMEINFO,
- TEST_BUILD_SNAPSHOT,
- TEST_BUILD_ADDR_SNAPSHOT
-};
-
-static int use_ipnode_functions = 0;
-static int use_ipv6_mapping = 0;
-static int ipnode_flags = 0;
-static int debug = 0;
-static int af_type = AF_INET;
-static enum test_methods method = TEST_BUILD_SNAPSHOT;
-
-DECLARE_TEST_DATA(hostent)
-DECLARE_TEST_FILE_SNAPSHOT(hostent)
-DECLARE_1PASS_TEST(hostent)
-DECLARE_2PASS_TEST(hostent)
-
-/* These stubs will use gethostby***() or getipnodeby***() functions,
- * depending on the use_ipnode_functions global variable value */
-static struct hostent *__gethostbyname2(const char *, int);
-static struct hostent *__gethostbyaddr(const void *, socklen_t, int);
-static void __freehostent(struct hostent *);
-
-static void clone_hostent(struct hostent *, struct hostent const *);
-static int compare_hostent(struct hostent *, struct hostent *, void *);
-static void dump_hostent(struct hostent *);
-static void free_hostent(struct hostent *);
-
-static int is_hostent_equal(struct hostent *, struct addrinfo *);
-
-static void sdump_hostent(struct hostent *, char *, size_t);
-static int hostent_read_hostlist_func(struct hostent *, char *);
-static int hostent_read_snapshot_addr(char *, unsigned char *, size_t);
-static int hostent_read_snapshot_func(struct hostent *, char *);
-
-static int hostent_test_correctness(struct hostent *, void *);
-static int hostent_test_gethostbyaddr(struct hostent *, void *);
-static int hostent_test_getaddrinfo_eq(struct hostent *, void *);
-static int hostent_test_getnameinfo_eq(struct hostent *, void *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(hostent)
-IMPLEMENT_TEST_FILE_SNAPSHOT(hostent)
-IMPLEMENT_1PASS_TEST(hostent)
-IMPLEMENT_2PASS_TEST(hostent)
-
-static struct hostent *
-__gethostbyname2(const char *name, int af)
-{
- struct hostent *he;
- int error;
-
- if (use_ipnode_functions == 0)
- he = gethostbyname2(name, af);
- else {
- error = 0;
- he = getipnodebyname(name, af, ipnode_flags, &error);
- if (he == NULL)
- errno = error;
- }
-
- return (he);
-}
-
-static struct hostent *
-__gethostbyaddr(const void *addr, socklen_t len, int af)
-{
- struct hostent *he;
- int error;
-
- if (use_ipnode_functions == 0)
- he = gethostbyaddr(addr, len, af);
- else {
- error = 0;
- he = getipnodebyaddr(addr, len, af, &error);
- if (he == NULL)
- errno = error;
- }
-
- return (he);
-}
-
-static void
-__freehostent(struct hostent *he)
-{
- /* NOTE: checking for he != NULL - just in case */
- if ((use_ipnode_functions != 0) && (he != NULL))
- freehostent(he);
-}
-
-static void
-clone_hostent(struct hostent *dest, struct hostent const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- char **cp;
- int aliases_num;
- int addrs_num;
- size_t offset;
-
- memset(dest, 0, sizeof(struct hostent));
-
- if (src->h_name != NULL) {
- dest->h_name = strdup(src->h_name);
- assert(dest->h_name != NULL);
- }
-
- dest->h_addrtype = src->h_addrtype;
- dest->h_length = src->h_length;
-
- if (src->h_aliases != NULL) {
- aliases_num = 0;
- for (cp = src->h_aliases; *cp; ++cp)
- ++aliases_num;
-
- dest->h_aliases = (char **)malloc((aliases_num + 1) *
- (sizeof(char *)));
- assert(dest->h_aliases != NULL);
- memset(dest->h_aliases, 0, (aliases_num + 1) *
- (sizeof(char *)));
-
- for (cp = src->h_aliases; *cp; ++cp) {
- dest->h_aliases[cp - src->h_aliases] = strdup(*cp);
- assert(dest->h_aliases[cp - src->h_aliases] != NULL);
- }
- }
-
- if (src->h_addr_list != NULL) {
- addrs_num = 0;
- for (cp = src->h_addr_list; *cp; ++cp)
- ++addrs_num;
-
- dest->h_addr_list = (char **)malloc((addrs_num + 1) *
- (sizeof(char *)));
- assert(dest->h_addr_list != NULL);
- memset(dest->h_addr_list, 0, (addrs_num + 1) *
- (sizeof(char *)));
-
- for (cp = src->h_addr_list; *cp; ++cp) {
- offset = cp - src->h_addr_list;
- dest->h_addr_list[offset] =
- (char *)malloc(src->h_length);
- assert(dest->h_addr_list[offset] != NULL);
- memcpy(dest->h_addr_list[offset],
- src->h_addr_list[offset], src->h_length);
- }
- }
-}
-
-static void
-free_hostent(struct hostent *ht)
-{
- char **cp;
-
- assert(ht != NULL);
-
- free(ht->h_name);
-
- if (ht->h_aliases != NULL) {
- for (cp = ht->h_aliases; *cp; ++cp)
- free(*cp);
- free(ht->h_aliases);
- }
-
- if (ht->h_addr_list != NULL) {
- for (cp = ht->h_addr_list; *cp; ++cp)
- free(*cp);
- free(ht->h_addr_list);
- }
-}
-
-static int
-compare_hostent(struct hostent *ht1, struct hostent *ht2, void *mdata)
-{
- char **c1, **c2, **ct, **cb;
- int b;
-
- if (ht1 == ht2)
- return 0;
-
- if ((ht1 == NULL) || (ht2 == NULL))
- goto errfin;
-
- if ((ht1->h_name == NULL) || (ht2->h_name == NULL))
- goto errfin;
-
- if ((ht1->h_addrtype != ht2->h_addrtype) ||
- (ht1->h_length != ht2->h_length) ||
- (strcmp(ht1->h_name, ht2->h_name) != 0))
- goto errfin;
-
- c1 = ht1->h_aliases;
- c2 = ht2->h_aliases;
-
- if (((ht1->h_aliases == NULL) || (ht2->h_aliases == NULL)) &&
- (ht1->h_aliases != ht2->h_aliases))
- goto errfin;
-
- if ((c1 != NULL) && (c2 != NULL)) {
- cb = c1;
- for (;*c1; ++c1) {
- b = 0;
- for (ct = c2; *ct; ++ct) {
- if (strcmp(*c1, *ct) == 0) {
- b = 1;
- break;
- }
- }
- if (b == 0) {
- if (debug)
- printf("h1 aliases item can't be "\
- "found in h2 aliases\n");
- goto errfin;
- }
- }
-
- c1 = cb;
- for (;*c2; ++c2) {
- b = 0;
- for (ct = c1; *ct; ++ct) {
- if (strcmp(*c2, *ct) == 0) {
- b = 1;
- break;
- }
- }
- if (b == 0) {
- if (debug)
- printf("h2 aliases item can't be "\
- " found in h1 aliases\n");
- goto errfin;
- }
- }
- }
-
- c1 = ht1->h_addr_list;
- c2 = ht2->h_addr_list;
-
- if (((ht1->h_addr_list == NULL) || (ht2->h_addr_list== NULL)) &&
- (ht1->h_addr_list != ht2->h_addr_list))
- goto errfin;
-
- if ((c1 != NULL) && (c2 != NULL)) {
- cb = c1;
- for (;*c1; ++c1) {
- b = 0;
- for (ct = c2; *ct; ++ct) {
- if (memcmp(*c1, *ct, ht1->h_length) == 0) {
- b = 1;
- break;
- }
- }
- if (b == 0) {
- if (debug)
- printf("h1 addresses item can't be "\
- "found in h2 addresses\n");
- goto errfin;
- }
- }
-
- c1 = cb;
- for (;*c2; ++c2) {
- b = 0;
- for (ct = c1; *ct; ++ct) {
- if (memcmp(*c2, *ct, ht1->h_length) == 0) {
- b = 1;
- break;
- }
- }
- if (b == 0) {
- if (debug)
- printf("h2 addresses item can't be "\
- "found in h1 addresses\n");
- goto errfin;
- }
- }
- }
-
- return 0;
-
-errfin:
- if ((debug) && (mdata == NULL)) {
- printf("following structures are not equal:\n");
- dump_hostent(ht1);
- dump_hostent(ht2);
- }
-
- return (-1);
-}
-
-static int
-check_addrinfo_for_name(struct addrinfo *ai, char const *name)
-{
- struct addrinfo *ai2;
-
- for (ai2 = ai; ai2 != NULL; ai2 = ai2->ai_next) {
- if (strcmp(ai2->ai_canonname, name) == 0)
- return (0);
- }
-
- return (-1);
-}
-
-static int
-check_addrinfo_for_addr(struct addrinfo *ai, char const *addr,
- socklen_t addrlen, int af)
-{
- struct addrinfo *ai2;
-
- for (ai2 = ai; ai2 != NULL; ai2 = ai2->ai_next) {
- if (af != ai2->ai_family)
- continue;
-
- switch (af) {
- case AF_INET:
- if (memcmp(addr,
- (void *)&((struct sockaddr_in *)ai2->ai_addr)->sin_addr,
- min(addrlen, ai2->ai_addrlen)) == 0)
- return (0);
- break;
- case AF_INET6:
- if (memcmp(addr,
- (void *)&((struct sockaddr_in6 *)ai2->ai_addr)->sin6_addr,
- min(addrlen, ai2->ai_addrlen)) == 0)
- return (0);
- break;
- default:
- break;
- }
- }
-
- return (-1);
-}
-
-static int
-is_hostent_equal(struct hostent *he, struct addrinfo *ai)
-{
- char **cp;
- int rv;
-
- if (debug)
- printf("checking equality of he and ai\n");
-
- rv = check_addrinfo_for_name(ai, he->h_name);
- if (rv != 0) {
- if (debug)
- printf("not equal - he->h_name couldn't be found\n");
-
- return (rv);
- }
-
- for (cp = he->h_addr_list; *cp; ++cp) {
- rv = check_addrinfo_for_addr(ai, *cp, he->h_length,
- he->h_addrtype);
- if (rv != 0) {
- if (debug)
- printf("not equal - one of he->h_addr_list couldn't be found\n");
-
- return (rv);
- }
- }
-
- if (debug)
- printf("equal\n");
-
- return (0);
-}
-
-static void
-sdump_hostent(struct hostent *ht, char *buffer, size_t buflen)
-{
- char **cp;
- size_t i;
- int written;
-
- written = snprintf(buffer, buflen, "%s %d %d",
- ht->h_name, ht->h_addrtype, ht->h_length);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (ht->h_aliases != NULL) {
- if (*(ht->h_aliases) != NULL) {
- for (cp = ht->h_aliases; *cp; ++cp) {
- written = snprintf(buffer, buflen, " %s",*cp);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
- } else {
- written = snprintf(buffer, buflen, " noaliases");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
- }
- } else {
- written = snprintf(buffer, buflen, " (null)");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
- }
-
- written = snprintf(buffer, buflen, " : ");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (ht->h_addr_list != NULL) {
- if (*(ht->h_addr_list) != NULL) {
- for (cp = ht->h_addr_list; *cp; ++cp) {
- for (i = 0; i < ht->h_length; ++i ) {
- written = snprintf(buffer, buflen,
- i + 1 != ht->h_length ? "%d." : "%d",
- (unsigned char)(*cp)[i]);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
-
- if (*(cp + 1) ) {
- written = snprintf(buffer, buflen, " ");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
- }
- }
- } else {
- written = snprintf(buffer, buflen, " noaddrs");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
- }
- } else {
- written = snprintf(buffer, buflen, " (null)");
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
- }
-}
-
-static int
-hostent_read_hostlist_func(struct hostent *he, char *line)
-{
- struct hostent *result;
- int rv;
-
- if (debug)
- printf("resolving %s: ", line);
- result = __gethostbyname2(line, af_type);
- if (result != NULL) {
- if (debug)
- printf("found\n");
-
- rv = hostent_test_correctness(result, NULL);
- if (rv != 0) {
- __freehostent(result);
- return (rv);
- }
-
- clone_hostent(he, result);
- __freehostent(result);
- } else {
- if (debug)
- printf("not found\n");
-
- memset(he, 0, sizeof(struct hostent));
- he->h_name = strdup(line);
- assert(he->h_name != NULL);
- }
- return (0);
-}
-
-static int
-hostent_read_snapshot_addr(char *addr, unsigned char *result, size_t len)
-{
- char *s, *ps, *ts;
-
- ps = addr;
- while ( (s = strsep(&ps, ".")) != NULL) {
- if (len == 0)
- return (-1);
-
- *result = (unsigned char)strtol(s, &ts, 10);
- ++result;
- if (*ts != '\0')
- return (-1);
-
- --len;
- }
- if (len != 0)
- return (-1);
- else
- return (0);
-}
-
-static int
-hostent_read_snapshot_func(struct hostent *ht, char *line)
-{
- StringList *sl1, *sl2;
- char *s, *ps, *ts;
- int i, rv;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- rv = 0;
- i = 0;
- sl1 = sl2 = NULL;
- ps = line;
- memset(ht, 0, sizeof(struct hostent));
- while ( (s = strsep(&ps, " ")) != NULL) {
- switch (i) {
- case 0:
- ht->h_name = strdup(s);
- assert(ht->h_name != NULL);
- break;
-
- case 1:
- ht->h_addrtype = (int)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
-
- case 2:
- ht->h_length = (int)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
-
- case 3:
- if (sl1 == NULL) {
- if (strcmp(s, "(null)") == 0)
- return (0);
-
- sl1 = sl_init();
- assert(sl1 != NULL);
-
- if (strcmp(s, "noaliases") != 0) {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl1, ts);
- }
- } else {
- if (strcmp(s, ":") == 0)
- ++i;
- else {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl1, ts);
- }
- }
- break;
-
- case 4:
- if (sl2 == NULL) {
- if (strcmp(s, "(null)") == 0)
- return (0);
-
- sl2 = sl_init();
- assert(sl2 != NULL);
-
- if (strcmp(s, "noaddrs") != 0) {
- ts = (char *)malloc(ht->h_length);
- assert(ts != NULL);
- memset(ts, 0, ht->h_length);
- rv = hostent_read_snapshot_addr(s,\
- (unsigned char *)ts, ht->h_length);
- sl_add(sl2, ts);
- if (rv != 0)
- goto fin;
- }
- } else {
- ts = (char *)malloc(ht->h_length);
- assert(ts != NULL);
- memset(ts, 0, ht->h_length);
- rv = hostent_read_snapshot_addr(s,\
- (unsigned char *)ts, ht->h_length);
- sl_add(sl2, ts);
- if (rv != 0)
- goto fin;
- }
- break;
- default:
- break;
- };
-
- if ((i != 3) && (i != 4))
- ++i;
- }
-
-fin:
- if (sl1 != NULL) {
- sl_add(sl1, NULL);
- ht->h_aliases = sl1->sl_str;
- }
- if (sl2 != NULL) {
- sl_add(sl2, NULL);
- ht->h_addr_list = sl2->sl_str;
- }
-
- if ((i != 4) || (rv != 0)) {
- free_hostent(ht);
- memset(ht, 0, sizeof(struct hostent));
- return (-1);
- }
-
- /* NOTE: is it a dirty hack or not? */
- free(sl1);
- free(sl2);
- return (0);
-}
-
-static void
-dump_hostent(struct hostent *result)
-{
- if (result != NULL) {
- char buffer[1024];
- sdump_hostent(result, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-hostent_test_correctness(struct hostent *ht, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_hostent(ht);
- }
-
- if (ht == NULL)
- goto errfin;
-
- if (ht->h_name == NULL)
- goto errfin;
-
- if (!((ht->h_addrtype >= 0) && (ht->h_addrtype < AF_MAX)))
- goto errfin;
-
- if ((ht->h_length != sizeof(struct in_addr)) &&
- (ht->h_length != sizeof(struct in6_addr)))
- goto errfin;
-
- if (ht->h_aliases == NULL)
- goto errfin;
-
- if (ht->h_addr_list == NULL)
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-static int
-hostent_test_gethostbyaddr(struct hostent *he, void *mdata)
-{
- struct hostent *result;
- struct hostent_test_data *addr_test_data;
- int rv;
-
- addr_test_data = (struct hostent_test_data *)mdata;
-
- /* We should omit unresolved hostents */
- if (he->h_addr_list != NULL) {
- char **cp;
- for (cp = he->h_addr_list; *cp; ++cp) {
- if (debug)
- printf("doing reverse lookup for %s\n", he->h_name);
-
- result = __gethostbyaddr(*cp, he->h_length,
- he->h_addrtype);
- if (result == NULL) {
- if (debug)
- printf("warning: reverse lookup failed\n");
-
- continue;
- }
- rv = hostent_test_correctness(result, NULL);
- if (rv != 0) {
- __freehostent(result);
- return (rv);
- }
-
- if (addr_test_data != NULL)
- TEST_DATA_APPEND(hostent, addr_test_data, result);
-
- __freehostent(result);
- }
- }
-
- return (0);
-}
-
-static int
-hostent_test_getaddrinfo_eq(struct hostent *he, void *mdata)
-{
- struct addrinfo *ai, hints;
- int rv;
-
- ai = NULL;
- memset(&hints, 0, sizeof(struct addrinfo));
- hints.ai_family = af_type;
- hints.ai_flags = AI_CANONNAME;
-
- if (debug)
- printf("using getaddrinfo() to resolve %s\n", he->h_name);
-
- /* struct hostent *he was not resolved */
- if (he->h_addr_list == NULL) {
- /* We can be sure that he->h_name is not NULL */
- rv = getaddrinfo(he->h_name, NULL, &hints, &ai);
- if (rv == 0) {
- if (debug)
- printf("not ok - shouldn't have been resolved\n");
- return (-1);
- }
- } else {
- rv = getaddrinfo(he->h_name, NULL, &hints, &ai);
- if (rv != 0) {
- if (debug)
- printf("not ok - should have beed resolved\n");
- return (-1);
- }
-
- rv = is_hostent_equal(he, ai);
- if (rv != 0) {
- if (debug)
- printf("not ok - addrinfo and hostent are not equal\n");
- return (-1);
- }
-
- }
-
- return (0);
-}
-
-static int
-hostent_test_getnameinfo_eq(struct hostent *he, void *mdata)
-{
- char buffer[NI_MAXHOST];
- struct sockaddr_in sin;
- struct sockaddr_in6 sin6;
- struct sockaddr *saddr;
- struct hostent *result;
- int rv;
-
- if (he->h_addr_list != NULL) {
- char **cp;
- for (cp = he->h_addr_list; *cp; ++cp) {
- if (debug)
- printf("doing reverse lookup for %s\n", he->h_name);
-
- result = __gethostbyaddr(*cp, he->h_length,
- he->h_addrtype);
- if (result != NULL) {
- rv = hostent_test_correctness(result, NULL);
- if (rv != 0) {
- __freehostent(result);
- return (rv);
- }
- } else {
- if (debug)
- printf("reverse lookup failed\n");
- }
-
- switch (he->h_addrtype) {
- case AF_INET:
- memset(&sin, 0, sizeof(struct sockaddr_in));
- sin.sin_len = sizeof(struct sockaddr_in);
- sin.sin_family = AF_INET;
- memcpy(&sin.sin_addr, *cp, he->h_length);
-
- saddr = (struct sockaddr *)&sin;
- break;
- case AF_INET6:
- memset(&sin6, 0, sizeof(struct sockaddr_in6));
- sin6.sin6_len = sizeof(struct sockaddr_in6);
- sin6.sin6_family = AF_INET6;
- memcpy(&sin6.sin6_addr, *cp, he->h_length);
-
- saddr = (struct sockaddr *)&sin6;
- break;
- default:
- if (debug)
- printf("warning: %d family is unsupported\n",
- he->h_addrtype);
- continue;
- }
-
- assert(saddr != NULL);
- rv = getnameinfo(saddr, saddr->sa_len, buffer,
- sizeof(buffer), NULL, 0, NI_NAMEREQD);
-
- if ((rv != 0) && (result != NULL)) {
- if (debug)
- printf("not ok - getnameinfo() didn't make the reverse lookup, when it should have (%s)\n",
- gai_strerror(rv));
- return (rv);
- }
-
- if ((rv == 0) && (result == NULL)) {
- if (debug)
- printf("not ok - getnameinfo() made the reverse lookup, when it shouldn't have\n");
- return (rv);
- }
-
- if ((rv != 0) && (result == NULL)) {
- if (debug)
- printf("ok - both getnameinfo() and ***byaddr() failed\n");
-
- continue;
- }
-
- if (debug)
- printf("comparing %s with %s\n", result->h_name,
- buffer);
-
- rv = strcmp(result->h_name, buffer);
- __freehostent(result);
-
- if (rv != 0) {
- if (debug)
- printf("not ok - getnameinfo() and ***byaddr() results are not equal\n");
- return (rv);
- } else {
- if (debug)
- printf("ok - getnameinfo() and ***byaddr() results are equal\n");
- }
- }
- }
-
- return (0);
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s -na2i [-o] [-d] [-46] [-mAcM] [-C] [-s <file>] -f <file>\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct hostent_test_data td, td_addr, td_snap;
- char *snapshot_file, *hostlist_file;
- res_state statp;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- hostlist_file = NULL;
- while ((c = getopt(argc, argv, "nad2iod46mAcMs:f:")) != -1)
- switch (c) {
- case '4':
- af_type = AF_INET;
- break;
- case '6':
- af_type = AF_INET6;
- break;
- case 'M':
- af_type = AF_INET6;
- use_ipv6_mapping = 1;
- ipnode_flags |= AI_V4MAPPED_CFG;
- break;
- case 'm':
- af_type = AF_INET6;
- use_ipv6_mapping = 1;
- ipnode_flags |= AI_V4MAPPED;
- break;
- case 'c':
- ipnode_flags |= AI_ADDRCONFIG;
- break;
- case 'A':
- ipnode_flags |= AI_ALL;
- break;
- case 'o':
- use_ipnode_functions = 1;
- break;
- case 'd':
- debug = 1;
- break;
- case 'n':
- method = TEST_GETHOSTBYNAME2;
- break;
- case 'a':
- method = TEST_GETHOSTBYADDR;
- break;
- case '2':
- method = TEST_GETHOSTBYNAME2_GETADDRINFO;
- break;
- case 'i':
- method = TEST_GETHOSTBYADDR_GETNAMEINFO;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- case 'f':
- hostlist_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- if (use_ipnode_functions == 0) {
- statp = __res_state();
- if ((statp == NULL) || ((statp->options & RES_INIT) == 0 &&
- res_ninit(statp) == -1)) {
- if (debug)
- printf("error: can't init res_state\n");
-
- free(snapshot_file);
- free(hostlist_file);
- return (-1);
- }
-
- if (use_ipv6_mapping == 0)
- statp->options &= ~RES_USE_INET6;
- else
- statp->options |= RES_USE_INET6;
- }
-
- TEST_DATA_INIT(hostent, &td, clone_hostent, free_hostent);
- TEST_DATA_INIT(hostent, &td_addr, clone_hostent, free_hostent);
- TEST_DATA_INIT(hostent, &td_snap, clone_hostent, free_hostent);
-
- if (hostlist_file == NULL)
- usage();
-
- if (access(hostlist_file, R_OK) != 0) {
- if (debug)
- printf("can't access the hostlist file %s\n",
- hostlist_file);
-
- usage();
- }
-
- if (debug)
- printf("building host lists from %s\n", hostlist_file);
-
- rv = TEST_SNAPSHOT_FILE_READ(hostent, hostlist_file, &td,
- hostent_read_hostlist_func);
- if (rv != 0)
- goto fin;
-
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT) {
- if (method != TEST_GETHOSTBYADDR)
- method = TEST_BUILD_SNAPSHOT;
- else
- method = TEST_BUILD_ADDR_SNAPSHOT;
- } else {
- if (debug)
- printf("can't access the snapshot file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- rv = TEST_SNAPSHOT_FILE_READ(hostent, snapshot_file,
- &td_snap, hostent_read_snapshot_func);
- if (rv != 0) {
- if (debug)
- printf("error reading snapshot file\n");
- goto fin;
- }
- }
- }
-
- switch (method) {
- case TEST_GETHOSTBYNAME2:
- if (snapshot_file != NULL)
- rv = DO_2PASS_TEST(hostent, &td, &td_snap,
- compare_hostent, NULL);
- break;
- case TEST_GETHOSTBYADDR:
- rv = DO_1PASS_TEST(hostent, &td,
- hostent_test_gethostbyaddr, (void *)&td_addr);
-
- if (snapshot_file != NULL)
- rv = DO_2PASS_TEST(hostent, &td_addr, &td_snap,
- compare_hostent, NULL);
- break;
- case TEST_GETHOSTBYNAME2_GETADDRINFO:
- rv = DO_1PASS_TEST(hostent, &td,
- hostent_test_getaddrinfo_eq, NULL);
- break;
- case TEST_GETHOSTBYADDR_GETNAMEINFO:
- rv = DO_1PASS_TEST(hostent, &td,
- hostent_test_getnameinfo_eq, NULL);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL) {
- rv = TEST_SNAPSHOT_FILE_WRITE(hostent, snapshot_file, &td,
- sdump_hostent);
- }
- break;
- case TEST_BUILD_ADDR_SNAPSHOT:
- if (snapshot_file != NULL) {
- rv = DO_1PASS_TEST(hostent, &td,
- hostent_test_gethostbyaddr, (void *)&td_addr);
-
- rv = TEST_SNAPSHOT_FILE_WRITE(hostent, snapshot_file,
- &td_addr, sdump_hostent);
- }
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(hostent, &td_snap);
- TEST_DATA_DESTROY(hostent, &td_addr);
- TEST_DATA_DESTROY(hostent, &td);
- free(hostlist_file);
- free(snapshot_file);
-
- return (rv);
-}
-
diff --git a/tools/regression/lib/libc/nss/test-gethostby.t b/tools/regression/lib/libc/nss/test-gethostby.t
deleted file mode 100644
index 42bed00..0000000
--- a/tools/regression/lib/libc/nss/test-gethostby.t
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..46
-#Tests for gethostby***() functions
-#IPv4-driven testing
-do_test 1 'gethostbyname2() (IPv4)' '-4 -n -f mach'
-do_test 2 'gethostbyaddr() (IPv4)' '-4 -a -f mach'
-do_test 3 'gethostbyname2()-getaddrinfo() (IPv4)' '-4 -2 -f mach'
-do_test 4 'gethostbyaddr()-getnameinfo() (IPv4)' '-4 -i -f mach'
-do_test 5 'gethostbyname2() snapshot (IPv4)'\
- '-4 -n -s snapshot_htname4 -f mach'
-do_test 6 'gethostbyaddr() snapshot (IPv4)'\
- '-4 -a -s snapshot_htaddr4 -f mach'
-
-#IPv6-driven testing
-do_test 7 'gethostbyname2() (IPv6)' '-6 -n -f mach'
-do_test 8 'gethostbyaddr() (IPv6)' '-6 -a -f mach'
-do_test 9 'gethostbyname2()-getaddrinfo() (IPv6)' '-6 -2 -f mach'
-do_test 10 'gethostbyaddr()-getnameinfo() (IPv6)' '-6 -i -f mach'
-do_test 11 'gethostbyname2() snapshot (IPv6)'\
- '-6 -n -s snapshot_htname6 -f mach'
-do_test 12 'gethostbyaddr() snapshot (IPv6)'\
- '-6 -a -s snapshot_htaddr6 -f mach'
-
-#Mapped IPv6-driven testing (getaddrinfo() equality test is useless here)
-do_test 13 'gethostbyname2() (IPv6 mapped)' '-m -n -f mach'
-do_test 14 'gethostbyaddr() (IPv6 mapped)' '-m -a -f mach'
-do_test 15 'gethostbyname2() snapshot (IPv6 mapped)'\
- '-m -n -s snapshot_htname6map -f mach'
-do_test 16 'gethostbyaddr() snapshot (IPv6 mapped)'\
- '-m -a -s snapshot_htaddr6map -f mach'
-
-#Tests for getipnodeby***() functions
-#IPv4-driven testing, flags are 0
-do_test 17 'getipnodebyname() (IPv4)' '-o -4 -n -f mach'
-do_test 18 'getipnodebyaddr() (IPv4)' '-o -4 -a -f mach'
-do_test 19 'getipnodebyname()-getaddrinfo() (IPv4)' '-o -4 -2 -f mach'
-do_test 20 'getipnodebyaddr()-getnameinfo() (IPv4)' '-o -4 -i -f mach'
-do_test 21 'getipnodebyname() snapshot (IPv4)'\
- '-o -4 -n -s snapshot_ipnodename4 -f mach'
-do_test 22 'getipnodebyname() snapshot (IPv4)'\
- '-o -4 -a -s snapshot_ipnodeaddr4 -f mach'
-
-#IPv6-driven testing, flags are 0
-do_test 23 'getipnodebyname() (IPv6)' '-o -6 -n -f mach'
-do_test 24 'getipnodebyaddr() (IPv6)' '-o -6 -a -f mach'
-do_test 25 'getipnodebyname()-getaddrinfo() (IPv6)' '-o -6 -2 -f mach'
-do_test 26 'getipnodebyaddr()-getnameinfo() (IPv6)' '-o -6 -i -f mach'
-do_test 27 'getipnodebyname() snapshot (IPv6)'\
- '-o -6 -n -s snapshot_ipnodename6 -f mach'
-do_test 28 'getipnodebyaddr() snapshot (IPv6)'\
- '-o -6 -a -s snapshot_ipnodeaddr6 -f mach'
-
-#Mapped IPv6-driven testing, flags are AI_V4MAPPED
-do_test 29 'getipnodebyname() (IPv6, AI_V4MAPPED)' '-o -m -n -f mach'
-do_test 30 'getipnodebyaddr() (IPv6, AI_V4MAPPED)' '-o -m -a -f mach'
-do_test 31 'getipnodebyname() snapshot (IPv6, AI_V4MAPPED)'\
- '-o -m -n -s snapshot_ipnodename6_AI_V4MAPPED -f mach'
-do_test 32 'getipnodebyaddr() snapshot (IPv6, AI_V4MAPPED)'\
- '-o -m -a -s snapshot_ipnodeaddr6_AI_V4MAPPED -f mach'
-
-#Mapped IPv6-driven testing, flags are AI_V4MAPPED_CFG
-do_test 33 'getipnodebyname() (IPv6, AI_V4MAPPED_CFG)' '-o -M -n -f mach'
-do_test 34 'getipnodebyaddr() (IPv6, AI_V4MAPPED_CFG)' '-o -M -a -f mach'
-do_test 35 'getipnodebyname() snapshot (IPv6, AI_V4MAPPED_CFG)'\
- '-o -M -n -s snapshot_ipnodename6_AI_V4MAPPED_CFG -f mach'
-do_test 36 'getipnodebyaddr() snapshot (IPv6, AI_V4MAPPED_CFG)'\
- '-o -M -a -s snapshot_ipnodeaddr6_AI_V4MAPPED_CFG -f mach'
-
-#Mapped IPv6-driven testing, flags are AI_V4MAPPED_CFG | AI_ALL
-do_test 37 'getipnodebyname() (IPv6, AI_V4MAPPED_CFG | AI_ALL)'\
- '-o -MA -n -f mach'
-do_test 38 'getipnodebyaddr() (IPv6, AI_V4MAPPED_CFG | AI_ALL)'\
- '-o -MA -a -f mach'
-do_test 39 'getipnodebyname() snapshot (IPv6, AI_V4MAPPED_CFG | AI_ALL)'\
- '-o -MA -n -s snapshot_ipnodename6_AI_V4MAPPED_CFG_AI_ALL -f mach'
-do_test 40 'getipnodebyaddr() snapshot (IPv6, AI_V4MAPPED_CFG | AI_ALL)'\
- '-o -MA -a -s snapshot_ipnodeaddr6_AI_V4MAPPED_CFG_AI_ALL -f mach'
-
-#Mapped IPv6-driven testing, flags are AI_V4MAPPED_CFG | AI_ADDRCONFIG
-do_test 41 'getipnodebyname() (IPv6, AI_V4MAPPED_CFG | AI_ADDRCONFIG)'\
- '-o -Mc -n -f mach'
-do_test 42 'getipnodebyname() snapshot (IPv6, AI_V4MAPPED_CFG | AI_ADDRCONFIG)'\
- '-o -Mc -n -s snapshot_ipnodename6_AI_V4MAPPED_CFG_AI_ADDRCONFIG -f mach'
-
-#IPv4-driven testing, flags are AI_ADDRCONFIG
-do_test 43 'getipnodebyname() (IPv4, AI_ADDRCONFIG)' '-o -4c -n -f mach'
-do_test 44 'getipnodebyname() snapshot (IPv4, AI_ADDRCONFIG)'\
- '-o -4c -n -s snapshot_ipnodename4_AI_ADDRCONFIG -f mach'
-
-#IPv6-driven testing, flags are AI_ADDRCONFIG
-do_test 45 'getipnodebyname() (IPv6, AI_ADDRCONFIG)' '-o -6c -n -f mach'
-do_test 46 'getipnodebyname() snapshot (IPv6, AI_ADDRCONFIG)'\
- '-o -6c -n -s snapshot_ipnodename6_AI_ADDRCONFIG -f mach'
-
diff --git a/tools/regression/lib/libc/nss/test-getproto.c b/tools/regression/lib/libc/nss/test-getproto.c
deleted file mode 100644
index a3ba271..0000000
--- a/tools/regression/lib/libc/nss/test-getproto.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <arpa/inet.h>
-#include <assert.h>
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETPROTOENT,
- TEST_GETPROTOBYNAME,
- TEST_GETPROTOBYNUMBER,
- TEST_GETPROTOENT_2PASS,
- TEST_BUILD_SNAPSHOT
-};
-
-static int debug = 0;
-static enum test_methods method = TEST_BUILD_SNAPSHOT;
-
-DECLARE_TEST_DATA(protoent)
-DECLARE_TEST_FILE_SNAPSHOT(protoent)
-DECLARE_1PASS_TEST(protoent)
-DECLARE_2PASS_TEST(protoent)
-
-static void clone_protoent(struct protoent *, struct protoent const *);
-static int compare_protoent(struct protoent *, struct protoent *, void *);
-static void dump_protoent(struct protoent *);
-static void free_protoent(struct protoent *);
-
-static void sdump_protoent(struct protoent *, char *, size_t);
-static int protoent_read_snapshot_func(struct protoent *, char *);
-
-static int protoent_check_ambiguity(struct protoent_test_data *,
- struct protoent *);
-static int protoent_fill_test_data(struct protoent_test_data *);
-static int protoent_test_correctness(struct protoent *, void *);
-static int protoent_test_getprotobyname(struct protoent *, void *);
-static int protoent_test_getprotobynumber(struct protoent *, void *);
-static int protoent_test_getprotoent(struct protoent *, void *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(protoent)
-IMPLEMENT_TEST_FILE_SNAPSHOT(protoent)
-IMPLEMENT_1PASS_TEST(protoent)
-IMPLEMENT_2PASS_TEST(protoent)
-
-static void
-clone_protoent(struct protoent *dest, struct protoent const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- char **cp;
- int aliases_num;
-
- memset(dest, 0, sizeof(struct protoent));
-
- if (src->p_name != NULL) {
- dest->p_name = strdup(src->p_name);
- assert(dest->p_name != NULL);
- }
-
- dest->p_proto = src->p_proto;
-
- if (src->p_aliases != NULL) {
- aliases_num = 0;
- for (cp = src->p_aliases; *cp; ++cp)
- ++aliases_num;
-
- dest->p_aliases = (char **)malloc((aliases_num+1) * (sizeof(char *)));
- assert(dest->p_aliases != NULL);
- memset(dest->p_aliases, 0, (aliases_num+1) * (sizeof(char *)));
-
- for (cp = src->p_aliases; *cp; ++cp) {
- dest->p_aliases[cp - src->p_aliases] = strdup(*cp);
- assert(dest->p_aliases[cp - src->p_aliases] != NULL);
- }
- }
-}
-
-static void
-free_protoent(struct protoent *pe)
-{
- char **cp;
-
- assert(pe != NULL);
-
- free(pe->p_name);
-
- for (cp = pe->p_aliases; *cp; ++cp)
- free(*cp);
- free(pe->p_aliases);
-}
-
-static int
-compare_protoent(struct protoent *pe1, struct protoent *pe2, void *mdata)
-{
- char **c1, **c2;
-
- if (pe1 == pe2)
- return 0;
-
- if ((pe1 == NULL) || (pe2 == NULL))
- goto errfin;
-
- if ((strcmp(pe1->p_name, pe2->p_name) != 0) ||
- (pe1->p_proto != pe2->p_proto))
- goto errfin;
-
- c1 = pe1->p_aliases;
- c2 = pe2->p_aliases;
-
- if ((pe1->p_aliases == NULL) || (pe2->p_aliases == NULL))
- goto errfin;
-
- for (;*c1 && *c2; ++c1, ++c2)
- if (strcmp(*c1, *c2) != 0)
- goto errfin;
-
- if ((*c1 != '\0') || (*c2 != '\0'))
- goto errfin;
-
- return 0;
-
-errfin:
- if ((debug) && (mdata == NULL)) {
- printf("following structures are not equal:\n");
- dump_protoent(pe1);
- dump_protoent(pe2);
- }
-
- return (-1);
-}
-
-static void
-sdump_protoent(struct protoent *pe, char *buffer, size_t buflen)
-{
- char **cp;
- int written;
-
- written = snprintf(buffer, buflen, "%s %d",
- pe->p_name, pe->p_proto);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (pe->p_aliases != NULL) {
- if (*(pe->p_aliases) != '\0') {
- for (cp = pe->p_aliases; *cp; ++cp) {
- written = snprintf(buffer, buflen, " %s",*cp);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
- } else
- snprintf(buffer, buflen, " noaliases");
- } else
- snprintf(buffer, buflen, " (null)");
-}
-
-static int
-protoent_read_snapshot_func(struct protoent *pe, char *line)
-{
- StringList *sl;
- char *s, *ps, *ts;
- int i;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- i = 0;
- sl = NULL;
- ps = line;
- memset(pe, 0, sizeof(struct protoent));
- while ( (s = strsep(&ps, " ")) != NULL) {
- switch (i) {
- case 0:
- pe->p_name = strdup(s);
- assert(pe->p_name != NULL);
- break;
-
- case 1:
- pe->p_proto = (int)strtol(s, &ts, 10);
- if (*ts != '\0') {
- free(pe->p_name);
- return (-1);
- }
- break;
-
- default:
- if (sl == NULL) {
- if (strcmp(s, "(null)") == 0)
- return (0);
-
- sl = sl_init();
- assert(sl != NULL);
-
- if (strcmp(s, "noaliases") != 0) {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- } else {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- break;
- };
- ++i;
- }
-
- if (i < 3) {
- free(pe->p_name);
- memset(pe, 0, sizeof(struct protoent));
- return (-1);
- }
-
- sl_add(sl, NULL);
- pe->p_aliases = sl->sl_str;
-
- /* NOTE: is it a dirty hack or not? */
- free(sl);
- return (0);
-}
-
-static void
-dump_protoent(struct protoent *result)
-{
- if (result != NULL) {
- char buffer[1024];
- sdump_protoent(result, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-protoent_fill_test_data(struct protoent_test_data *td)
-{
- struct protoent *pe;
-
- setprotoent(1);
- while ((pe = getprotoent()) != NULL) {
- if (protoent_test_correctness(pe, NULL) == 0)
- TEST_DATA_APPEND(protoent, td, pe);
- else
- return (-1);
- }
- endprotoent();
-
- return (0);
-}
-
-static int
-protoent_test_correctness(struct protoent *pe, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_protoent(pe);
- }
-
- if (pe == NULL)
- goto errfin;
-
- if (pe->p_name == NULL)
- goto errfin;
-
- if (pe->p_proto < 0)
- goto errfin;
-
- if (pe->p_aliases == NULL)
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-/* protoent_check_ambiguity() is needed when one port+proto is associated with
- * more than one peice (these cases are usually marked as PROBLEM in
- * /etc/peices. This functions is needed also when one peice+proto is
- * associated with several ports. We have to check all the protoent structures
- * to make sure that pe really exists and correct */
-static int
-protoent_check_ambiguity(struct protoent_test_data *td, struct protoent *pe)
-{
-
- return (TEST_DATA_FIND(protoent, td, pe, compare_protoent,
- NULL) != NULL ? 0 : -1);
-}
-
-static int
-protoent_test_getprotobyname(struct protoent *pe_model, void *mdata)
-{
- char **alias;
- struct protoent *pe;
-
- if (debug) {
- printf("testing getprotobyname() with the following data:\n");
- dump_protoent(pe_model);
- }
-
- pe = getprotobyname(pe_model->p_name);
- if (protoent_test_correctness(pe, NULL) != 0)
- goto errfin;
-
- if ((compare_protoent(pe, pe_model, NULL) != 0) &&
- (protoent_check_ambiguity((struct protoent_test_data *)mdata, pe)
- !=0))
- goto errfin;
-
- for (alias = pe_model->p_aliases; *alias; ++alias) {
- pe = getprotobyname(*alias);
-
- if (protoent_test_correctness(pe, NULL) != 0)
- goto errfin;
-
- if ((compare_protoent(pe, pe_model, NULL) != 0) &&
- (protoent_check_ambiguity(
- (struct protoent_test_data *)mdata, pe) != 0))
- goto errfin;
- }
-
- if (debug)
- printf("ok\n");
- return (0);
-
-errfin:
- if (debug)
- printf("not ok\n");
-
- return (-1);
-}
-
-static int
-protoent_test_getprotobynumber(struct protoent *pe_model, void *mdata)
-{
- struct protoent *pe;
-
- if (debug) {
- printf("testing getprotobyport() with the following data...\n");
- dump_protoent(pe_model);
- }
-
- pe = getprotobynumber(pe_model->p_proto);
- if ((protoent_test_correctness(pe, NULL) != 0) ||
- ((compare_protoent(pe, pe_model, NULL) != 0) &&
- (protoent_check_ambiguity((struct protoent_test_data *)mdata, pe)
- != 0))) {
- if (debug)
- printf("not ok\n");
- return (-1);
- } else {
- if (debug)
- printf("ok\n");
- return (0);
- }
-}
-
-static int
-protoent_test_getprotoent(struct protoent *pe, void *mdata)
-{
- /* Only correctness can be checked when doing 1-pass test for
- * getprotoent(). */
- return (protoent_test_correctness(pe, NULL));
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s -nve2 [-d] [-s <file>]\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct protoent_test_data td, td_snap, td_2pass;
- char *snapshot_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- while ((c = getopt(argc, argv, "nve2ds:")) != -1)
- switch (c) {
- case 'd':
- debug++;
- break;
- case 'n':
- method = TEST_GETPROTOBYNAME;
- break;
- case 'v':
- method = TEST_GETPROTOBYNUMBER;
- break;
- case 'e':
- method = TEST_GETPROTOENT;
- break;
- case '2':
- method = TEST_GETPROTOENT_2PASS;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- TEST_DATA_INIT(protoent, &td, clone_protoent, free_protoent);
- TEST_DATA_INIT(protoent, &td_snap, clone_protoent, free_protoent);
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- if (method == TEST_BUILD_SNAPSHOT) {
- rv = 0;
- goto fin;
- }
-
- TEST_SNAPSHOT_FILE_READ(protoent, snapshot_file,
- &td_snap, protoent_read_snapshot_func);
- }
- }
-
- rv = protoent_fill_test_data(&td);
- if (rv == -1)
- return (-1);
- switch (method) {
- case TEST_GETPROTOBYNAME:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(protoent, &td,
- protoent_test_getprotobyname, (void *)&td);
- else
- rv = DO_1PASS_TEST(protoent, &td_snap,
- protoent_test_getprotobyname, (void *)&td_snap);
- break;
- case TEST_GETPROTOBYNUMBER:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(protoent, &td,
- protoent_test_getprotobynumber, (void *)&td);
- else
- rv = DO_1PASS_TEST(protoent, &td_snap,
- protoent_test_getprotobynumber, (void *)&td_snap);
- break;
- case TEST_GETPROTOENT:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(protoent, &td,
- protoent_test_getprotoent, (void *)&td);
- else
- rv = DO_2PASS_TEST(protoent, &td, &td_snap,
- compare_protoent, NULL);
- break;
- case TEST_GETPROTOENT_2PASS:
- TEST_DATA_INIT(protoent, &td_2pass, clone_protoent,
- free_protoent);
- rv = protoent_fill_test_data(&td_2pass);
- if (rv != -1)
- rv = DO_2PASS_TEST(protoent, &td, &td_2pass,
- compare_protoent, NULL);
- TEST_DATA_DESTROY(protoent, &td_2pass);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL)
- rv = TEST_SNAPSHOT_FILE_WRITE(protoent, snapshot_file, &td,
- sdump_protoent);
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(protoent, &td_snap);
- TEST_DATA_DESTROY(protoent, &td);
- free(snapshot_file);
- return (rv);
-}
diff --git a/tools/regression/lib/libc/nss/test-getproto.t b/tools/regression/lib/libc/nss/test-getproto.t
deleted file mode 100644
index f582d31..0000000
--- a/tools/regression/lib/libc/nss/test-getproto.t
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..8
-do_test 1 'getprotobyname()' '-n'
-do_test 2 'getprotobynumber()' '-v'
-do_test 3 'getprotoent()' '-e'
-do_test 4 'getprotoent() 2-pass' '-2'
-do_test 5 'building snapshot, if needed' '-s snapshot_proto'
-do_test 6 'getprotobyname() snapshot' '-n -s snapshot_proto'
-do_test 7 'getprotobynumber() snapshot' '-v -s snapshot_proto'
-do_test 8 'getprotoent() snapshot' '-e -s snapshot_proto'
diff --git a/tools/regression/lib/libc/nss/test-getpw.c b/tools/regression/lib/libc/nss/test-getpw.c
deleted file mode 100644
index a0b348d..0000000
--- a/tools/regression/lib/libc/nss/test-getpw.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETPWENT,
- TEST_GETPWNAM,
- TEST_GETPWUID,
- TEST_GETPWENT_2PASS,
- TEST_BUILD_SNAPSHOT
-};
-
-static int debug = 0;
-static enum test_methods method = TEST_BUILD_SNAPSHOT;
-
-DECLARE_TEST_DATA(passwd)
-DECLARE_TEST_FILE_SNAPSHOT(passwd)
-DECLARE_1PASS_TEST(passwd)
-DECLARE_2PASS_TEST(passwd)
-
-static void clone_passwd(struct passwd *, struct passwd const *);
-static int compare_passwd(struct passwd *, struct passwd *, void *);
-static void free_passwd(struct passwd *);
-
-static void sdump_passwd(struct passwd *, char *, size_t);
-static void dump_passwd(struct passwd *);
-
-static int passwd_read_snapshot_func(struct passwd *, char *);
-
-static int passwd_check_ambiguity(struct passwd_test_data *, struct passwd *);
-static int passwd_fill_test_data(struct passwd_test_data *);
-static int passwd_test_correctness(struct passwd *, void *);
-static int passwd_test_getpwnam(struct passwd *, void *);
-static int passwd_test_getpwuid(struct passwd *, void *);
-static int passwd_test_getpwent(struct passwd *, void *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(passwd)
-IMPLEMENT_TEST_FILE_SNAPSHOT(passwd)
-IMPLEMENT_1PASS_TEST(passwd)
-IMPLEMENT_2PASS_TEST(passwd)
-
-static void
-clone_passwd(struct passwd *dest, struct passwd const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- memcpy(dest, src, sizeof(struct passwd));
- if (src->pw_name != NULL)
- dest->pw_name = strdup(src->pw_name);
- if (src->pw_passwd != NULL)
- dest->pw_passwd = strdup(src->pw_passwd);
- if (src->pw_class != NULL)
- dest->pw_class = strdup(src->pw_class);
- if (src->pw_gecos != NULL)
- dest->pw_gecos = strdup(src->pw_gecos);
- if (src->pw_dir != NULL)
- dest->pw_dir = strdup(src->pw_dir);
- if (src->pw_shell != NULL)
- dest->pw_shell = strdup(dest->pw_shell);
-}
-
-static int
-compare_passwd(struct passwd *pwd1, struct passwd *pwd2, void *mdata)
-{
- assert(pwd1 != NULL);
- assert(pwd2 != NULL);
-
- if (pwd1 == pwd2)
- return (0);
-
- if ((pwd1->pw_uid != pwd2->pw_uid) ||
- (pwd1->pw_gid != pwd2->pw_gid) ||
- (pwd1->pw_change != pwd2->pw_change) ||
- (pwd1->pw_expire != pwd2->pw_expire) ||
- (pwd1->pw_fields != pwd2->pw_fields) ||
- (strcmp(pwd1->pw_name, pwd2->pw_name) != 0) ||
- (strcmp(pwd1->pw_passwd, pwd2->pw_passwd) != 0) ||
- (strcmp(pwd1->pw_class, pwd2->pw_class) != 0) ||
- (strcmp(pwd1->pw_gecos, pwd2->pw_gecos) != 0) ||
- (strcmp(pwd1->pw_dir, pwd2->pw_dir) != 0) ||
- (strcmp(pwd1->pw_shell, pwd2->pw_shell) != 0)
- )
- return (-1);
- else
- return (0);
-}
-
-static void
-free_passwd(struct passwd *pwd)
-{
- free(pwd->pw_name);
- free(pwd->pw_passwd);
- free(pwd->pw_class);
- free(pwd->pw_gecos);
- free(pwd->pw_dir);
- free(pwd->pw_shell);
-}
-
-static void
-sdump_passwd(struct passwd *pwd, char *buffer, size_t buflen)
-{
- snprintf(buffer, buflen, "%s:%s:%d:%d:%d:%s:%s:%s:%s:%d:%d",
- pwd->pw_name, pwd->pw_passwd, pwd->pw_uid, pwd->pw_gid,
- pwd->pw_change, pwd->pw_class, pwd->pw_gecos, pwd->pw_dir,
- pwd->pw_shell, pwd->pw_expire, pwd->pw_fields);
-}
-
-static void
-dump_passwd(struct passwd *pwd)
-{
- if (pwd != NULL) {
- char buffer[2048];
- sdump_passwd(pwd, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-passwd_read_snapshot_func(struct passwd *pwd, char *line)
-{
- char *s, *ps, *ts;
- int i;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- i = 0;
- ps = line;
- memset(pwd, 0, sizeof(struct passwd));
- while ( (s = strsep(&ps, ":")) != NULL) {
- switch (i) {
- case 0:
- pwd->pw_name = strdup(s);
- assert(pwd->pw_name != NULL);
- break;
- case 1:
- pwd->pw_passwd = strdup(s);
- assert(pwd->pw_passwd != NULL);
- break;
- case 2:
- pwd->pw_uid = (uid_t)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- case 3:
- pwd->pw_gid = (gid_t)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- case 4:
- pwd->pw_change = (time_t)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- case 5:
- pwd->pw_class = strdup(s);
- assert(pwd->pw_class != NULL);
- break;
- case 6:
- pwd->pw_gecos = strdup(s);
- assert(pwd->pw_gecos != NULL);
- break;
- case 7:
- pwd->pw_dir = strdup(s);
- assert(pwd->pw_dir != NULL);
- break;
- case 8:
- pwd->pw_shell = strdup(s);
- assert(pwd->pw_shell != NULL);
- break;
- case 9:
- pwd->pw_expire = (time_t)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- case 10:
- pwd->pw_fields = (int)strtol(s, &ts, 10);
- if (*ts != '\0')
- goto fin;
- break;
- default:
- break;
- };
- ++i;
- }
-
-fin:
- if (i != 11) {
- free_passwd(pwd);
- memset(pwd, 0, sizeof(struct passwd));
- return (-1);
- }
-
- return (0);
-}
-
-static int
-passwd_fill_test_data(struct passwd_test_data *td)
-{
- struct passwd *pwd;
-
- setpassent(1);
- while ((pwd = getpwent()) != NULL) {
- if (passwd_test_correctness(pwd, NULL) == 0)
- TEST_DATA_APPEND(passwd, td, pwd);
- else
- return (-1);
- }
- endpwent();
-
- return (0);
-}
-
-static int
-passwd_test_correctness(struct passwd *pwd, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_passwd(pwd);
- }
-
- if (pwd == NULL)
- return (-1);
-
- if (pwd->pw_name == NULL)
- goto errfin;
-
- if (pwd->pw_passwd == NULL)
- goto errfin;
-
- if (pwd->pw_class == NULL)
- goto errfin;
-
- if (pwd->pw_gecos == NULL)
- goto errfin;
-
- if (pwd->pw_dir == NULL)
- goto errfin;
-
- if (pwd->pw_shell == NULL)
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-/* passwd_check_ambiguity() is needed here because when doing the getpwent()
- * calls sequence, records from different nsswitch sources can be different,
- * though having the same pw_name/pw_uid */
-static int
-passwd_check_ambiguity(struct passwd_test_data *td, struct passwd *pwd)
-{
-
- return (TEST_DATA_FIND(passwd, td, pwd, compare_passwd,
- NULL) != NULL ? 0 : -1);
-}
-
-static int
-passwd_test_getpwnam(struct passwd *pwd_model, void *mdata)
-{
- struct passwd *pwd;
-
- if (debug) {
- printf("testing getpwnam() with the following data:\n");
- dump_passwd(pwd_model);
- }
-
- pwd = getpwnam(pwd_model->pw_name);
- if (passwd_test_correctness(pwd, NULL) != 0)
- goto errfin;
-
- if ((compare_passwd(pwd, pwd_model, NULL) != 0) &&
- (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd)
- !=0))
- goto errfin;
-
- if (debug)
- printf("ok\n");
- return (0);
-
-errfin:
- if (debug)
- printf("not ok\n");
-
- return (-1);
-}
-
-static int
-passwd_test_getpwuid(struct passwd *pwd_model, void *mdata)
-{
- struct passwd *pwd;
-
- if (debug) {
- printf("testing getpwuid() with the following data...\n");
- dump_passwd(pwd_model);
- }
-
- pwd = getpwuid(pwd_model->pw_uid);
- if ((passwd_test_correctness(pwd, NULL) != 0) ||
- ((compare_passwd(pwd, pwd_model, NULL) != 0) &&
- (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd)
- != 0))) {
- if (debug)
- printf("not ok\n");
- return (-1);
- } else {
- if (debug)
- printf("ok\n");
- return (0);
- }
-}
-
-static int
-passwd_test_getpwent(struct passwd *pwd, void *mdata)
-{
- /* Only correctness can be checked when doing 1-pass test for
- * getpwent(). */
- return (passwd_test_correctness(pwd, NULL));
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s -nue2 [-d] [-s <file>]\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct passwd_test_data td, td_snap, td_2pass;
- char *snapshot_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- while ((c = getopt(argc, argv, "nue2ds:")) != -1)
- switch (c) {
- case 'd':
- debug++;
- break;
- case 'n':
- method = TEST_GETPWNAM;
- break;
- case 'u':
- method = TEST_GETPWUID;
- break;
- case 'e':
- method = TEST_GETPWENT;
- break;
- case '2':
- method = TEST_GETPWENT_2PASS;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- TEST_DATA_INIT(passwd, &td, clone_passwd, free_passwd);
- TEST_DATA_INIT(passwd, &td_snap, clone_passwd, free_passwd);
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- if (method == TEST_BUILD_SNAPSHOT) {
- rv = 0;
- goto fin;
- }
-
- TEST_SNAPSHOT_FILE_READ(passwd, snapshot_file,
- &td_snap, passwd_read_snapshot_func);
- }
- }
-
- rv = passwd_fill_test_data(&td);
- if (rv == -1)
- return (-1);
-
- switch (method) {
- case TEST_GETPWNAM:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(passwd, &td,
- passwd_test_getpwnam, (void *)&td);
- else
- rv = DO_1PASS_TEST(passwd, &td_snap,
- passwd_test_getpwnam, (void *)&td_snap);
- break;
- case TEST_GETPWUID:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(passwd, &td,
- passwd_test_getpwuid, (void *)&td);
- else
- rv = DO_1PASS_TEST(passwd, &td_snap,
- passwd_test_getpwuid, (void *)&td_snap);
- break;
- case TEST_GETPWENT:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(passwd, &td, passwd_test_getpwent,
- (void *)&td);
- else
- rv = DO_2PASS_TEST(passwd, &td, &td_snap,
- compare_passwd, NULL);
- break;
- case TEST_GETPWENT_2PASS:
- TEST_DATA_INIT(passwd, &td_2pass, clone_passwd, free_passwd);
- rv = passwd_fill_test_data(&td_2pass);
- if (rv != -1)
- rv = DO_2PASS_TEST(passwd, &td, &td_2pass,
- compare_passwd, NULL);
- TEST_DATA_DESTROY(passwd, &td_2pass);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL)
- rv = TEST_SNAPSHOT_FILE_WRITE(passwd, snapshot_file, &td,
- sdump_passwd);
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(passwd, &td_snap);
- TEST_DATA_DESTROY(passwd, &td);
- free(snapshot_file);
- return (rv);
-}
diff --git a/tools/regression/lib/libc/nss/test-getpw.t b/tools/regression/lib/libc/nss/test-getpw.t
deleted file mode 100644
index 5172177..0000000
--- a/tools/regression/lib/libc/nss/test-getpw.t
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..8
-do_test 1 'getpwnam()' '-n'
-do_test 2 'getpwuid()' '-u'
-do_test 3 'getpwent()' '-e'
-do_test 4 'getpwent() 2-pass' '-2'
-do_test 5 'building snapshot, if needed' '-s snapshot_pwd'
-do_test 6 'getpwnam() snapshot' '-n -s snapshot_pwd'
-do_test 7 'getpwuid() snapshot' '-u -s snapshot_pwd'
-do_test 8 'getpwent() snapshot' '-e -s snapshot_pwd'
diff --git a/tools/regression/lib/libc/nss/test-getrpc.c b/tools/regression/lib/libc/nss/test-getrpc.c
deleted file mode 100644
index 707186e..0000000
--- a/tools/regression/lib/libc/nss/test-getrpc.c
+++ /dev/null
@@ -1,535 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <arpa/inet.h>
-#include <rpc/rpc.h>
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETRPCENT,
- TEST_GETRPCBYNAME,
- TEST_GETRPCBYNUMBER,
- TEST_GETRPCENT_2PASS,
- TEST_BUILD_SNAPSHOT
-};
-
-static int debug = 0;
-static enum test_methods method = TEST_BUILD_SNAPSHOT;
-
-DECLARE_TEST_DATA(rpcent)
-DECLARE_TEST_FILE_SNAPSHOT(rpcent)
-DECLARE_1PASS_TEST(rpcent)
-DECLARE_2PASS_TEST(rpcent)
-
-static void clone_rpcent(struct rpcent *, struct rpcent const *);
-static int compare_rpcent(struct rpcent *, struct rpcent *, void *);
-static void dump_rpcent(struct rpcent *);
-static void free_rpcent(struct rpcent *);
-
-static void sdump_rpcent(struct rpcent *, char *, size_t);
-static int rpcent_read_snapshot_func(struct rpcent *, char *);
-
-static int rpcent_check_ambiguity(struct rpcent_test_data *,
- struct rpcent *);
-static int rpcent_fill_test_data(struct rpcent_test_data *);
-static int rpcent_test_correctness(struct rpcent *, void *);
-static int rpcent_test_getrpcbyname(struct rpcent *, void *);
-static int rpcent_test_getrpcbynumber(struct rpcent *, void *);
-static int rpcent_test_getrpcent(struct rpcent *, void *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(rpcent)
-IMPLEMENT_TEST_FILE_SNAPSHOT(rpcent)
-IMPLEMENT_1PASS_TEST(rpcent)
-IMPLEMENT_2PASS_TEST(rpcent)
-
-static void
-clone_rpcent(struct rpcent *dest, struct rpcent const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- char **cp;
- int aliases_num;
-
- memset(dest, 0, sizeof(struct rpcent));
-
- if (src->r_name != NULL) {
- dest->r_name = strdup(src->r_name);
- assert(dest->r_name != NULL);
- }
-
- dest->r_number = src->r_number;
-
- if (src->r_aliases != NULL) {
- aliases_num = 0;
- for (cp = src->r_aliases; *cp; ++cp)
- ++aliases_num;
-
- dest->r_aliases = (char **)malloc((aliases_num+1) * (sizeof(char *)));
- assert(dest->r_aliases != NULL);
- memset(dest->r_aliases, 0, (aliases_num+1) * (sizeof(char *)));
-
- for (cp = src->r_aliases; *cp; ++cp) {
- dest->r_aliases[cp - src->r_aliases] = strdup(*cp);
- assert(dest->r_aliases[cp - src->r_aliases] != NULL);
- }
- }
-}
-
-static void
-free_rpcent(struct rpcent *rpc)
-{
- char **cp;
-
- assert(rpc != NULL);
-
- free(rpc->r_name);
-
- for (cp = rpc->r_aliases; *cp; ++cp)
- free(*cp);
- free(rpc->r_aliases);
-}
-
-static int
-compare_rpcent(struct rpcent *rpc1, struct rpcent *rpc2, void *mdata)
-{
- char **c1, **c2;
-
- if (rpc1 == rpc2)
- return 0;
-
- if ((rpc1 == NULL) || (rpc2 == NULL))
- goto errfin;
-
- if ((strcmp(rpc1->r_name, rpc2->r_name) != 0) ||
- (rpc1->r_number != rpc2->r_number))
- goto errfin;
-
- c1 = rpc1->r_aliases;
- c2 = rpc2->r_aliases;
-
- if ((rpc1->r_aliases == NULL) || (rpc2->r_aliases == NULL))
- goto errfin;
-
- for (;*c1 && *c2; ++c1, ++c2)
- if (strcmp(*c1, *c2) != 0)
- goto errfin;
-
- if ((*c1 != '\0') || (*c2 != '\0'))
- goto errfin;
-
- return 0;
-
-errfin:
- if ((debug) && (mdata == NULL)) {
- printf("following structures are not equal:\n");
- dump_rpcent(rpc1);
- dump_rpcent(rpc2);
- }
-
- return (-1);
-}
-
-static void
-sdump_rpcent(struct rpcent *rpc, char *buffer, size_t buflen)
-{
- char **cp;
- int written;
-
- written = snprintf(buffer, buflen, "%s %d",
- rpc->r_name, rpc->r_number);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (rpc->r_aliases != NULL) {
- if (*(rpc->r_aliases) != '\0') {
- for (cp = rpc->r_aliases; *cp; ++cp) {
- written = snprintf(buffer, buflen, " %s",*cp);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
- } else
- snprintf(buffer, buflen, " noaliases");
- } else
- snprintf(buffer, buflen, " (null)");
-}
-
-static int
-rpcent_read_snapshot_func(struct rpcent *rpc, char *line)
-{
- StringList *sl;
- char *s, *ps, *ts;
- int i;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- i = 0;
- sl = NULL;
- ps = line;
- memset(rpc, 0, sizeof(struct rpcent));
- while ( (s = strsep(&ps, " ")) != NULL) {
- switch (i) {
- case 0:
- rpc->r_name = strdup(s);
- assert(rpc->r_name != NULL);
- break;
-
- case 1:
- rpc->r_number = (int)strtol(s, &ts, 10);
- if (*ts != '\0') {
- free(rpc->r_name);
- return (-1);
- }
- break;
-
- default:
- if (sl == NULL) {
- if (strcmp(s, "(null)") == 0)
- return (0);
-
- sl = sl_init();
- assert(sl != NULL);
-
- if (strcmp(s, "noaliases") != 0) {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- } else {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- break;
- };
- ++i;
- }
-
- if (i < 3) {
- free(rpc->r_name);
- memset(rpc, 0, sizeof(struct rpcent));
- return (-1);
- }
-
- sl_add(sl, NULL);
- rpc->r_aliases = sl->sl_str;
-
- /* NOTE: is it a dirty hack or not? */
- free(sl);
- return (0);
-}
-
-static void
-dump_rpcent(struct rpcent *result)
-{
- if (result != NULL) {
- char buffer[1024];
- sdump_rpcent(result, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-rpcent_fill_test_data(struct rpcent_test_data *td)
-{
- struct rpcent *rpc;
-
- setrpcent(1);
- while ((rpc = getrpcent()) != NULL) {
- if (rpcent_test_correctness(rpc, NULL) == 0)
- TEST_DATA_APPEND(rpcent, td, rpc);
- else
- return (-1);
- }
- endrpcent();
-
- return (0);
-}
-
-static int
-rpcent_test_correctness(struct rpcent *rpc, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_rpcent(rpc);
- }
-
- if (rpc == NULL)
- goto errfin;
-
- if (rpc->r_name == NULL)
- goto errfin;
-
- if (rpc->r_number < 0)
- goto errfin;
-
- if (rpc->r_aliases == NULL)
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-/* rpcent_check_ambiguity() is needed when one port+rpc is associated with
- * more than one peice (these cases are usually marked as PROBLEM in
- * /etc/peices. This functions is needed also when one peice+rpc is
- * associated with several ports. We have to check all the rpcent structures
- * to make sure that rpc really exists and correct */
-static int
-rpcent_check_ambiguity(struct rpcent_test_data *td, struct rpcent *rpc)
-{
-
- return (TEST_DATA_FIND(rpcent, td, rpc, compare_rpcent,
- NULL) != NULL ? 0 : -1);
-}
-
-static int
-rpcent_test_getrpcbyname(struct rpcent *rpc_model, void *mdata)
-{
- char **alias;
- struct rpcent *rpc;
-
- if (debug) {
- printf("testing getrpcbyname() with the following data:\n");
- dump_rpcent(rpc_model);
- }
-
- rpc = getrpcbyname(rpc_model->r_name);
- if (rpcent_test_correctness(rpc, NULL) != 0)
- goto errfin;
-
- if ((compare_rpcent(rpc, rpc_model, NULL) != 0) &&
- (rpcent_check_ambiguity((struct rpcent_test_data *)mdata, rpc)
- !=0))
- goto errfin;
-
- for (alias = rpc_model->r_aliases; *alias; ++alias) {
- rpc = getrpcbyname(*alias);
-
- if (rpcent_test_correctness(rpc, NULL) != 0)
- goto errfin;
-
- if ((compare_rpcent(rpc, rpc_model, NULL) != 0) &&
- (rpcent_check_ambiguity(
- (struct rpcent_test_data *)mdata, rpc) != 0))
- goto errfin;
- }
-
- if (debug)
- printf("ok\n");
- return (0);
-
-errfin:
- if (debug)
- printf("not ok\n");
-
- return (-1);
-}
-
-static int
-rpcent_test_getrpcbynumber(struct rpcent *rpc_model, void *mdata)
-{
- struct rpcent *rpc;
-
- if (debug) {
- printf("testing getrpcbyport() with the following data...\n");
- dump_rpcent(rpc_model);
- }
-
- rpc = getrpcbynumber(rpc_model->r_number);
- if ((rpcent_test_correctness(rpc, NULL) != 0) ||
- ((compare_rpcent(rpc, rpc_model, NULL) != 0) &&
- (rpcent_check_ambiguity((struct rpcent_test_data *)mdata, rpc)
- != 0))) {
- if (debug)
- printf("not ok\n");
- return (-1);
- } else {
- if (debug)
- printf("ok\n");
- return (0);
- }
-}
-
-static int
-rpcent_test_getrpcent(struct rpcent *rpc, void *mdata)
-{
- /* Only correctness can be checked when doing 1-pass test for
- * getrpcent(). */
- return (rpcent_test_correctness(rpc, NULL));
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s -nve2 [-d] [-s <file>]\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct rpcent_test_data td, td_snap, td_2pass;
- char *snapshot_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- while ((c = getopt(argc, argv, "nve2ds:")) != -1)
- switch (c) {
- case 'd':
- debug++;
- break;
- case 'n':
- method = TEST_GETRPCBYNAME;
- break;
- case 'v':
- method = TEST_GETRPCBYNUMBER;
- break;
- case 'e':
- method = TEST_GETRPCENT;
- break;
- case '2':
- method = TEST_GETRPCENT_2PASS;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- TEST_DATA_INIT(rpcent, &td, clone_rpcent, free_rpcent);
- TEST_DATA_INIT(rpcent, &td_snap, clone_rpcent, free_rpcent);
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- if (method == TEST_BUILD_SNAPSHOT) {
- rv = 0;
- goto fin;
- }
-
- TEST_SNAPSHOT_FILE_READ(rpcent, snapshot_file,
- &td_snap, rpcent_read_snapshot_func);
- }
- }
-
- rv = rpcent_fill_test_data(&td);
- if (rv == -1)
- return (-1);
- switch (method) {
- case TEST_GETRPCBYNAME:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(rpcent, &td,
- rpcent_test_getrpcbyname, (void *)&td);
- else
- rv = DO_1PASS_TEST(rpcent, &td_snap,
- rpcent_test_getrpcbyname, (void *)&td_snap);
- break;
- case TEST_GETRPCBYNUMBER:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(rpcent, &td,
- rpcent_test_getrpcbynumber, (void *)&td);
- else
- rv = DO_1PASS_TEST(rpcent, &td_snap,
- rpcent_test_getrpcbynumber, (void *)&td_snap);
- break;
- case TEST_GETRPCENT:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(rpcent, &td, rpcent_test_getrpcent,
- (void *)&td);
- else
- rv = DO_2PASS_TEST(rpcent, &td, &td_snap,
- compare_rpcent, NULL);
- break;
- case TEST_GETRPCENT_2PASS:
- TEST_DATA_INIT(rpcent, &td_2pass, clone_rpcent, free_rpcent);
- rv = rpcent_fill_test_data(&td_2pass);
- if (rv != -1)
- rv = DO_2PASS_TEST(rpcent, &td, &td_2pass,
- compare_rpcent, NULL);
- TEST_DATA_DESTROY(rpcent, &td_2pass);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL)
- rv = TEST_SNAPSHOT_FILE_WRITE(rpcent, snapshot_file, &td,
- sdump_rpcent);
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(rpcent, &td_snap);
- TEST_DATA_DESTROY(rpcent, &td);
- free(snapshot_file);
- return (rv);
-}
diff --git a/tools/regression/lib/libc/nss/test-getrpc.t b/tools/regression/lib/libc/nss/test-getrpc.t
deleted file mode 100644
index 831a086..0000000
--- a/tools/regression/lib/libc/nss/test-getrpc.t
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..8
-do_test 1 'getrpcbyname()' '-n'
-do_test 2 'getrpcbynumber()' '-v'
-do_test 3 'getrpcent()' '-e'
-do_test 4 'getrpcent() 2-pass' '-2'
-do_test 5 'building snapshot, if needed' '-s snapshot_rpc'
-do_test 6 'getrpcbyname() snapshot' '-n -s snapshot_rpc'
-do_test 7 'getrpcbynumber() snapshot' '-v -s snapshot_rpc'
-do_test 8 'getrpcent() snapshot' '-e -s snapshot_rpc'
diff --git a/tools/regression/lib/libc/nss/test-getserv.c b/tools/regression/lib/libc/nss/test-getserv.c
deleted file mode 100644
index 31e4700..0000000
--- a/tools/regression/lib/libc/nss/test-getserv.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <arpa/inet.h>
-#include <assert.h>
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stringlist.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETSERVENT,
- TEST_GETSERVBYNAME,
- TEST_GETSERVBYPORT,
- TEST_GETSERVENT_2PASS,
- TEST_BUILD_SNAPSHOT
-};
-
-static int debug = 0;
-static enum test_methods method = TEST_BUILD_SNAPSHOT;
-
-DECLARE_TEST_DATA(servent)
-DECLARE_TEST_FILE_SNAPSHOT(servent)
-DECLARE_1PASS_TEST(servent)
-DECLARE_2PASS_TEST(servent)
-
-static void clone_servent(struct servent *, struct servent const *);
-static int compare_servent(struct servent *, struct servent *, void *);
-static void dump_servent(struct servent *);
-static void free_servent(struct servent *);
-
-static void sdump_servent(struct servent *, char *, size_t);
-static int servent_read_snapshot_func(struct servent *, char *);
-
-static int servent_check_ambiguity(struct servent_test_data *,
- struct servent *);
-static int servent_fill_test_data(struct servent_test_data *);
-static int servent_test_correctness(struct servent *, void *);
-static int servent_test_getservbyname(struct servent *, void *);
-static int servent_test_getservbyport(struct servent *, void *);
-static int servent_test_getservent(struct servent *, void *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(servent)
-IMPLEMENT_TEST_FILE_SNAPSHOT(servent)
-IMPLEMENT_1PASS_TEST(servent)
-IMPLEMENT_2PASS_TEST(servent)
-
-static void
-clone_servent(struct servent *dest, struct servent const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- char **cp;
- int aliases_num;
-
- memset(dest, 0, sizeof(struct servent));
-
- if (src->s_name != NULL) {
- dest->s_name = strdup(src->s_name);
- assert(dest->s_name != NULL);
- }
-
- if (src->s_proto != NULL) {
- dest->s_proto = strdup(src->s_proto);
- assert(dest->s_proto != NULL);
- }
- dest->s_port = src->s_port;
-
- if (src->s_aliases != NULL) {
- aliases_num = 0;
- for (cp = src->s_aliases; *cp; ++cp)
- ++aliases_num;
-
- dest->s_aliases = (char **)malloc((aliases_num+1) * (sizeof(char *)));
- assert(dest->s_aliases != NULL);
- memset(dest->s_aliases, 0, (aliases_num+1) * (sizeof(char *)));
-
- for (cp = src->s_aliases; *cp; ++cp) {
- dest->s_aliases[cp - src->s_aliases] = strdup(*cp);
- assert(dest->s_aliases[cp - src->s_aliases] != NULL);
- }
- }
-}
-
-static void
-free_servent(struct servent *serv)
-{
- char **cp;
-
- assert(serv != NULL);
-
- free(serv->s_name);
- free(serv->s_proto);
-
- for (cp = serv->s_aliases; *cp; ++cp)
- free(*cp);
- free(serv->s_aliases);
-}
-
-static int
-compare_servent(struct servent *serv1, struct servent *serv2, void *mdata)
-{
- char **c1, **c2;
-
- if (serv1 == serv2)
- return 0;
-
- if ((serv1 == NULL) || (serv2 == NULL))
- goto errfin;
-
- if ((strcmp(serv1->s_name, serv2->s_name) != 0) ||
- (strcmp(serv1->s_proto, serv2->s_proto) != 0) ||
- (serv1->s_port != serv2->s_port))
- goto errfin;
-
- c1 = serv1->s_aliases;
- c2 = serv2->s_aliases;
-
- if ((serv1->s_aliases == NULL) || (serv2->s_aliases == NULL))
- goto errfin;
-
- for (;*c1 && *c2; ++c1, ++c2)
- if (strcmp(*c1, *c2) != 0)
- goto errfin;
-
- if ((*c1 != '\0') || (*c2 != '\0'))
- goto errfin;
-
- return 0;
-
-errfin:
- if ((debug) && (mdata == NULL)) {
- printf("following structures are not equal:\n");
- dump_servent(serv1);
- dump_servent(serv2);
- }
-
- return (-1);
-}
-
-static void
-sdump_servent(struct servent *serv, char *buffer, size_t buflen)
-{
- char **cp;
- int written;
-
- written = snprintf(buffer, buflen, "%s %d %s",
- serv->s_name, ntohs(serv->s_port), serv->s_proto);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (serv->s_aliases != NULL) {
- if (*(serv->s_aliases) != '\0') {
- for (cp = serv->s_aliases; *cp; ++cp) {
- written = snprintf(buffer, buflen, " %s",*cp);
- buffer += written;
- if (written > buflen)
- return;
- buflen -= written;
-
- if (buflen == 0)
- return;
- }
- } else
- snprintf(buffer, buflen, " noaliases");
- } else
- snprintf(buffer, buflen, " (null)");
-}
-
-static int
-servent_read_snapshot_func(struct servent *serv, char *line)
-{
- StringList *sl;
- char *s, *ps, *ts;
- int i;
-
- if (debug)
- printf("1 line read from snapshot:\n%s\n", line);
-
- i = 0;
- sl = NULL;
- ps = line;
- memset(serv, 0, sizeof(struct servent));
- while ( (s = strsep(&ps, " ")) != NULL) {
- switch (i) {
- case 0:
- serv->s_name = strdup(s);
- assert(serv->s_name != NULL);
- break;
-
- case 1:
- serv->s_port = htons(
- (int)strtol(s, &ts, 10));
- if (*ts != '\0') {
- free(serv->s_name);
- return (-1);
- }
- break;
-
- case 2:
- serv->s_proto = strdup(s);
- assert(serv->s_proto != NULL);
- break;
-
- default:
- if (sl == NULL) {
- if (strcmp(s, "(null)") == 0)
- return (0);
-
- sl = sl_init();
- assert(sl != NULL);
-
- if (strcmp(s, "noaliases") != 0) {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- } else {
- ts = strdup(s);
- assert(ts != NULL);
- sl_add(sl, ts);
- }
- break;
- };
- ++i;
- }
-
- if (i < 3) {
- free(serv->s_name);
- free(serv->s_proto);
- memset(serv, 0, sizeof(struct servent));
- return (-1);
- }
-
- sl_add(sl, NULL);
- serv->s_aliases = sl->sl_str;
-
- /* NOTE: is it a dirty hack or not? */
- free(sl);
- return (0);
-}
-
-static void
-dump_servent(struct servent *result)
-{
- if (result != NULL) {
- char buffer[1024];
- sdump_servent(result, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-servent_fill_test_data(struct servent_test_data *td)
-{
- struct servent *serv;
-
- setservent(1);
- while ((serv = getservent()) != NULL) {
- if (servent_test_correctness(serv, NULL) == 0)
- TEST_DATA_APPEND(servent, td, serv);
- else
- return (-1);
- }
- endservent();
-
- return (0);
-}
-
-static int
-servent_test_correctness(struct servent *serv, void *mdata)
-{
- if (debug) {
- printf("testing correctness with the following data:\n");
- dump_servent(serv);
- }
-
- if (serv == NULL)
- goto errfin;
-
- if (serv->s_name == NULL)
- goto errfin;
-
- if (serv->s_proto == NULL)
- goto errfin;
-
- if (ntohs(serv->s_port < 0))
- goto errfin;
-
- if (serv->s_aliases == NULL)
- goto errfin;
-
- if (debug)
- printf("correct\n");
-
- return (0);
-errfin:
- if (debug)
- printf("incorrect\n");
-
- return (-1);
-}
-
-/* servent_check_ambiguity() is needed when one port+proto is associated with
- * more than one service (these cases are usually marked as PROBLEM in
- * /etc/services. This functions is needed also when one service+proto is
- * associated with several ports. We have to check all the servent structures
- * to make sure that serv really exists and correct */
-static int
-servent_check_ambiguity(struct servent_test_data *td, struct servent *serv)
-{
-
- return (TEST_DATA_FIND(servent, td, serv, compare_servent,
- NULL) != NULL ? 0 : -1);
-}
-
-static int
-servent_test_getservbyname(struct servent *serv_model, void *mdata)
-{
- char **alias;
- struct servent *serv;
-
- if (debug) {
- printf("testing getservbyname() with the following data:\n");
- dump_servent(serv_model);
- }
-
- serv = getservbyname(serv_model->s_name, serv_model->s_proto);
- if (servent_test_correctness(serv, NULL) != 0)
- goto errfin;
-
- if ((compare_servent(serv, serv_model, NULL) != 0) &&
- (servent_check_ambiguity((struct servent_test_data *)mdata, serv)
- !=0))
- goto errfin;
-
- for (alias = serv_model->s_aliases; *alias; ++alias) {
- serv = getservbyname(*alias, serv_model->s_proto);
-
- if (servent_test_correctness(serv, NULL) != 0)
- goto errfin;
-
- if ((compare_servent(serv, serv_model, NULL) != 0) &&
- (servent_check_ambiguity(
- (struct servent_test_data *)mdata, serv) != 0))
- goto errfin;
- }
-
- if (debug)
- printf("ok\n");
- return (0);
-
-errfin:
- if (debug)
- printf("not ok\n");
-
- return (-1);
-}
-
-static int
-servent_test_getservbyport(struct servent *serv_model, void *mdata)
-{
- struct servent *serv;
-
- if (debug) {
- printf("testing getservbyport() with the following data...\n");
- dump_servent(serv_model);
- }
-
- serv = getservbyport(serv_model->s_port, serv_model->s_proto);
- if ((servent_test_correctness(serv, NULL) != 0) ||
- ((compare_servent(serv, serv_model, NULL) != 0) &&
- (servent_check_ambiguity((struct servent_test_data *)mdata, serv)
- != 0))) {
- if (debug)
- printf("not ok\n");
- return (-1);
- } else {
- if (debug)
- printf("ok\n");
- return (0);
- }
-}
-
-static int
-servent_test_getservent(struct servent *serv, void *mdata)
-{
- /* Only correctness can be checked when doing 1-pass test for
- * getservent(). */
- return (servent_test_correctness(serv, NULL));
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s -npe2 [-d] [-s <file>]\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct servent_test_data td, td_snap, td_2pass;
- char *snapshot_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- snapshot_file = NULL;
- while ((c = getopt(argc, argv, "npe2ds:")) != -1)
- switch (c) {
- case 'd':
- debug++;
- break;
- case 'n':
- method = TEST_GETSERVBYNAME;
- break;
- case 'p':
- method = TEST_GETSERVBYPORT;
- break;
- case 'e':
- method = TEST_GETSERVENT;
- break;
- case '2':
- method = TEST_GETSERVENT_2PASS;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- default:
- usage();
- }
-
- TEST_DATA_INIT(servent, &td, clone_servent, free_servent);
- TEST_DATA_INIT(servent, &td_snap, clone_servent, free_servent);
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- if (method == TEST_BUILD_SNAPSHOT) {
- rv = 0;
- goto fin;
- }
-
- TEST_SNAPSHOT_FILE_READ(servent, snapshot_file,
- &td_snap, servent_read_snapshot_func);
- }
- }
-
- rv = servent_fill_test_data(&td);
- if (rv == -1)
- return (-1);
- switch (method) {
- case TEST_GETSERVBYNAME:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(servent, &td,
- servent_test_getservbyname, (void *)&td);
- else
- rv = DO_1PASS_TEST(servent, &td_snap,
- servent_test_getservbyname, (void *)&td_snap);
- break;
- case TEST_GETSERVBYPORT:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(servent, &td,
- servent_test_getservbyport, (void *)&td);
- else
- rv = DO_1PASS_TEST(servent, &td_snap,
- servent_test_getservbyport, (void *)&td_snap);
- break;
- case TEST_GETSERVENT:
- if (snapshot_file == NULL)
- rv = DO_1PASS_TEST(servent, &td, servent_test_getservent,
- (void *)&td);
- else
- rv = DO_2PASS_TEST(servent, &td, &td_snap,
- compare_servent, NULL);
- break;
- case TEST_GETSERVENT_2PASS:
- TEST_DATA_INIT(servent, &td_2pass, clone_servent, free_servent);
- rv = servent_fill_test_data(&td_2pass);
- if (rv != -1)
- rv = DO_2PASS_TEST(servent, &td, &td_2pass,
- compare_servent, NULL);
- TEST_DATA_DESTROY(servent, &td_2pass);
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL)
- rv = TEST_SNAPSHOT_FILE_WRITE(servent, snapshot_file, &td,
- sdump_servent);
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(servent, &td_snap);
- TEST_DATA_DESTROY(servent, &td);
- free(snapshot_file);
- return (rv);
-}
diff --git a/tools/regression/lib/libc/nss/test-getserv.t b/tools/regression/lib/libc/nss/test-getserv.t
deleted file mode 100644
index 60a6c50..0000000
--- a/tools/regression/lib/libc/nss/test-getserv.t
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..8
-do_test 1 'getservbyname()' '-n'
-do_test 2 'getservbyport()' '-p'
-do_test 3 'getservent()' '-e'
-do_test 4 'getservent() 2-pass' '-2'
-do_test 5 'building snapshot, if needed' '-s snapshot_serv'
-do_test 6 'getservbyname() snapshot' '-n -s snapshot_serv'
-do_test 7 'getservbyport() snapshot' '-p -s snapshot_serv'
-do_test 8 'getservent() snapshot' '-e -s snapshot_serv'
diff --git a/tools/regression/lib/libc/nss/test-getusershell.c b/tools/regression/lib/libc/nss/test-getusershell.c
deleted file mode 100644
index b7b835f..0000000
--- a/tools/regression/lib/libc/nss/test-getusershell.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@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.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "testutil.h"
-
-enum test_methods {
- TEST_GETUSERSHELL,
- TEST_BUILD_SNAPSHOT
-};
-
-struct usershell {
- char *path;
-};
-
-static int debug = 0;
-static enum test_methods method = TEST_GETUSERSHELL;
-
-DECLARE_TEST_DATA(usershell)
-DECLARE_TEST_FILE_SNAPSHOT(usershell)
-DECLARE_2PASS_TEST(usershell)
-
-static void clone_usershell(struct usershell *, struct usershell const *);
-static int compare_usershell(struct usershell *, struct usershell *, void *);
-static void free_usershell(struct usershell *);
-
-static void sdump_usershell(struct usershell *, char *, size_t);
-static void dump_usershell(struct usershell *);
-
-static int usershell_read_snapshot_func(struct usershell *, char *);
-
-static void usage(void) __attribute__((__noreturn__));
-
-IMPLEMENT_TEST_DATA(usershell)
-IMPLEMENT_TEST_FILE_SNAPSHOT(usershell)
-IMPLEMENT_2PASS_TEST(usershell)
-
-static void
-clone_usershell(struct usershell *dest, struct usershell const *src)
-{
- assert(dest != NULL);
- assert(src != NULL);
-
- if (src->path != NULL) {
- dest->path = strdup(src->path);
- assert(dest->path != NULL);
- }
-}
-
-static int
-compare_usershell(struct usershell *us1, struct usershell *us2, void *mdata)
-{
- int rv;
-
- assert(us1 != NULL);
- assert(us2 != NULL);
-
- dump_usershell(us1);
- dump_usershell(us2);
-
- if (us1 == us2)
- return (0);
-
- rv = strcmp(us1->path, us2->path);
- if (rv != 0) {
- printf("following structures are not equal:\n");
- dump_usershell(us1);
- dump_usershell(us2);
- }
-
- return (rv);
-}
-
-static void
-free_usershell(struct usershell *us)
-{
- free(us->path);
-}
-
-static void
-sdump_usershell(struct usershell *us, char *buffer, size_t buflen)
-{
- snprintf(buffer, buflen, "%s", us->path);
-}
-
-static void
-dump_usershell(struct usershell *us)
-{
- if (us != NULL) {
- char buffer[2048];
- sdump_usershell(us, buffer, sizeof(buffer));
- printf("%s\n", buffer);
- } else
- printf("(null)\n");
-}
-
-static int
-usershell_read_snapshot_func(struct usershell *us, char *line)
-{
- us->path = strdup(line);
- assert(us->path != NULL);
-
- return (0);
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s [-d] -s <file>\n",
- getprogname());
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- struct usershell_test_data td, td_snap;
- struct usershell ushell;
- char *snapshot_file;
- int rv;
- int c;
-
- if (argc < 2)
- usage();
-
- rv = 0;
- snapshot_file = NULL;
- while ((c = getopt(argc, argv, "ds:")) != -1) {
- switch (c) {
- case 'd':
- debug = 1;
- break;
- case 's':
- snapshot_file = strdup(optarg);
- break;
- default:
- usage();
- }
- }
-
- TEST_DATA_INIT(usershell, &td, clone_usershell, free_usershell);
- TEST_DATA_INIT(usershell, &td_snap, clone_usershell, free_usershell);
-
- setusershell();
- while ((ushell.path = getusershell()) != NULL) {
- if (debug) {
- printf("usershell found:\n");
- dump_usershell(&ushell);
- }
- TEST_DATA_APPEND(usershell, &td, &ushell);
- }
- endusershell();
-
-
- if (snapshot_file != NULL) {
- if (access(snapshot_file, W_OK | R_OK) != 0) {
- if (errno == ENOENT)
- method = TEST_BUILD_SNAPSHOT;
- else {
- if (debug)
- printf("can't access the snapshot file %s\n",
- snapshot_file);
-
- rv = -1;
- goto fin;
- }
- } else {
- rv = TEST_SNAPSHOT_FILE_READ(usershell, snapshot_file,
- &td_snap, usershell_read_snapshot_func);
- if (rv != 0) {
- if (debug)
- printf("error reading snapshot file\n");
- goto fin;
- }
- }
- }
-
- switch (method) {
- case TEST_GETUSERSHELL:
- if (snapshot_file != NULL) {
- rv = DO_2PASS_TEST(usershell, &td, &td_snap,
- compare_usershell, NULL);
- }
- break;
- case TEST_BUILD_SNAPSHOT:
- if (snapshot_file != NULL) {
- rv = TEST_SNAPSHOT_FILE_WRITE(usershell, snapshot_file, &td,
- sdump_usershell);
- }
- break;
- default:
- rv = 0;
- break;
- };
-
-fin:
- TEST_DATA_DESTROY(usershell, &td_snap);
- TEST_DATA_DESTROY(usershell, &td);
- free(snapshot_file);
- return (rv);
-
-}
diff --git a/tools/regression/lib/libc/nss/test-getusershell.t b/tools/regression/lib/libc/nss/test-getusershell.t
deleted file mode 100644
index 16a392a..0000000
--- a/tools/regression/lib/libc/nss/test-getusershell.t
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..1
-do_test 1 'getusershell() snapshot' '-s snapshot_usershell'
diff --git a/tools/regression/lib/libc/nss/testutil.h b/tools/regression/lib/libc/nss/testutil.h
deleted file mode 100644
index 711c49f..0000000
--- a/tools/regression/lib/libc/nss/testutil.h
+++ /dev/null
@@ -1,332 +0,0 @@
-/*-
- * Copyright (c) 2006 Michael Bushkov <bushman@freebsd.org>
- *
- * 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 <sys/queue.h>
-
-#define DECLARE_TEST_DATA(ent) \
-struct ent##_entry { \
- struct ent data; \
- STAILQ_ENTRY(ent##_entry) entries; \
-}; \
- \
-struct ent##_test_data { \
- void (*clone_func)(struct ent *, struct ent const *); \
- void (*free_func)(struct ent *); \
- \
- STAILQ_HEAD(ent_head, ent##_entry) snapshot_data; \
-}; \
- \
-void __##ent##_test_data_init(struct ent##_test_data *, \
- void (*)(struct ent *, struct ent const *), \
- void (*freef)(struct ent *)); \
-void __##ent##_test_data_destroy(struct ent##_test_data *); \
- \
-void __##ent##_test_data_append(struct ent##_test_data *, struct ent *data);\
-int __##ent##_test_data_foreach(struct ent##_test_data *, \
- int (*)(struct ent *, void *), void *); \
-int __##ent##_test_data_compare(struct ent##_test_data *, \
- struct ent##_test_data *, int (*)(struct ent *, struct ent *, \
- void *), void *); \
-struct ent *__##ent##_test_data_find(struct ent##_test_data *, struct ent *,\
- int (*)(struct ent *, struct ent *, void *), void *); \
-void __##ent##_test_data_clear(struct ent##_test_data *);
-
-#define TEST_DATA_INIT(ent, td, clonef, freef)\
- __##ent##_test_data_init(td, clonef, freef)
-#define TEST_DATA_DESTROY(ent, td) __##ent##_test_data_destroy(td)
-#define TEST_DATA_APPEND(ent, td, d) __##ent##_test_data_append(td, d)
-#define TEST_DATA_FOREACH(ent, td, f, mdata)\
- __##ent##_test_data_foreach(td, f, mdata)
-#define TEST_DATA_COMPARE(ent, td1, td2, fcmp, mdata)\
- __##ent##_test_data_compare(td1, td2, fcmp, mdata);
-#define TEST_DATA_FIND(ent, td, d, fcmp, mdata)\
- __##ent##_test_data_find(td, d, fcmp, mdata)
-#define TEST_DATA_CLEAR(ent, td) __##ent##_test_data_clear(td)
-
-#define IMPLEMENT_TEST_DATA(ent) \
-void \
-__##ent##_test_data_init(struct ent##_test_data *td, \
- void (*clonef)(struct ent *, struct ent const *), \
- void (*freef)(struct ent *)) \
-{ \
- assert(td != NULL); \
- assert(clonef != NULL); \
- assert(freef != NULL); \
- \
- memset(td, 0, sizeof(*td)); \
- td->clone_func = clonef; \
- td->free_func = freef; \
- STAILQ_INIT(&td->snapshot_data); \
-} \
- \
-void \
-__##ent##_test_data_destroy(struct ent##_test_data *td) \
-{ \
- __##ent##_test_data_clear(td); \
-} \
- \
-void \
-__##ent##_test_data_append(struct ent##_test_data *td, struct ent *app_data)\
-{ \
- struct ent##_entry *e; \
- \
- assert(td != NULL); \
- assert(app_data != NULL); \
- \
- e = (struct ent##_entry *)malloc(sizeof(struct ent##_entry)); \
- assert(e != NULL); \
- memset(e, 0, sizeof(struct ent##_entry)); \
- \
- td->clone_func(&e->data, app_data); \
- STAILQ_INSERT_TAIL(&td->snapshot_data, e, entries); \
-} \
- \
-int \
-__##ent##_test_data_foreach(struct ent##_test_data *td, \
- int (*forf)(struct ent *, void *), void *mdata) \
-{ \
- struct ent##_entry *e; \
- int rv; \
- \
- assert(td != NULL); \
- assert(forf != NULL); \
- \
- rv = 0; \
- STAILQ_FOREACH(e, &td->snapshot_data, entries) { \
- rv = forf(&e->data, mdata); \
- if (rv != 0) \
- break; \
- } \
- \
- return (rv); \
-} \
- \
-int \
-__##ent##_test_data_compare(struct ent##_test_data *td1, struct ent##_test_data *td2,\
- int (*cmp_func)(struct ent *, struct ent *, void *), void *mdata)\
-{ \
- struct ent##_entry *e1, *e2; \
- int rv; \
- \
- assert(td1 != NULL); \
- assert(td2 != NULL); \
- assert(cmp_func != NULL); \
- \
- e1 = STAILQ_FIRST(&td1->snapshot_data); \
- e2 = STAILQ_FIRST(&td2->snapshot_data); \
- \
- rv = 0; \
- do { \
- if ((e1 == NULL) || (e2 == NULL)) { \
- if (e1 == e2) \
- return (0); \
- else \
- return (-1); \
- } \
- \
- rv = cmp_func(&e1->data, &e2->data, mdata); \
- e1 = STAILQ_NEXT(e1, entries); \
- e2 = STAILQ_NEXT(e2, entries); \
- } while (rv == 0); \
- \
- return (rv); \
-} \
- \
-struct ent * \
-__##ent##_test_data_find(struct ent##_test_data *td, struct ent *data, \
- int (*cmp)(struct ent *, struct ent *, void *), void *mdata) \
-{ \
- struct ent##_entry *e; \
- struct ent *result; \
- \
- assert(td != NULL); \
- assert(cmp != NULL); \
- \
- result = NULL; \
- STAILQ_FOREACH(e, &td->snapshot_data, entries) { \
- if (cmp(&e->data, data, mdata) == 0) { \
- result = &e->data; \
- break; \
- } \
- } \
- \
- return (result); \
-} \
- \
- \
-void \
-__##ent##_test_data_clear(struct ent##_test_data *td) \
-{ \
- struct ent##_entry *e; \
- assert(td != NULL); \
- \
- while (!STAILQ_EMPTY(&td->snapshot_data)) { \
- e = STAILQ_FIRST(&td->snapshot_data); \
- STAILQ_REMOVE_HEAD(&td->snapshot_data, entries); \
- \
- td->free_func(&e->data); \
- free(e); \
- } \
-}
-
-#define DECLARE_TEST_FILE_SNAPSHOT(ent) \
-struct ent##_snp_param { \
- FILE *fp; \
- void (*sdump_func)(struct ent *, char *, size_t); \
-}; \
- \
-int __##ent##_snapshot_write_func(struct ent *, void *); \
-int __##ent##_snapshot_write(char const *, struct ent##_test_data *, \
- void (*)(struct ent *, char *, size_t)); \
-int __##ent##_snapshot_read(char const *, struct ent##_test_data *, \
- int (*)(struct ent *, char *));
-
-#define TEST_SNAPSHOT_FILE_WRITE(ent, fname, td, f) \
- __##ent##_snapshot_write(fname, td, f)
-#define TEST_SNAPSHOT_FILE_READ(ent, fname, td, f) \
- __##ent##_snapshot_read(fname, td, f)
-
-#define IMPLEMENT_TEST_FILE_SNAPSHOT(ent) \
-int \
-__##ent##_snapshot_write_func(struct ent *data, void *mdata) \
-{ \
- char buffer[1024]; \
- struct ent##_snp_param *param; \
- \
- assert(data != NULL); \
- \
- param = (struct ent##_snp_param *)mdata; \
- param->sdump_func(data, buffer, sizeof(buffer)); \
- fputs(buffer, param->fp); \
- fputc('\n', param->fp); \
- \
- return (0); \
-} \
- \
-int \
-__##ent##_snapshot_write(char const *fname, struct ent##_test_data *td, \
- void (*sdump_func)(struct ent *, char *, size_t)) \
-{ \
- struct ent##_snp_param param; \
- \
- assert(fname != NULL); \
- assert(td != NULL); \
- \
- param.fp = fopen(fname, "w"); \
- if (param.fp == NULL) \
- return (-1); \
- \
- param.sdump_func = sdump_func; \
- __##ent##_test_data_foreach(td, __##ent##_snapshot_write_func, &param);\
- fclose(param.fp); \
- \
- return (0); \
-} \
- \
-int \
-__##ent##_snapshot_read(char const *fname, struct ent##_test_data *td, \
- int (*read_func)(struct ent *, char *)) \
-{ \
- char buffer[1024]; \
- struct ent data; \
- char *s; \
- FILE *fi; \
- size_t len; \
- int rv; \
- \
- assert(fname != NULL); \
- assert(td != NULL); \
- \
- fi = fopen(fname, "r"); \
- if (fi == NULL) \
- return (-1); \
- \
- rv = 0; \
- memset(buffer, 0, sizeof(buffer)); \
- while (!feof(fi)) { \
- s = fgets(buffer, sizeof(buffer), fi); \
- if (s != NULL && s[0] != '#') { \
- len = strlen(s); \
- if (len == 0) \
- continue; \
- if (buffer[len - 1] == '\n') \
- buffer[len -1] = '\0'; \
- \
- rv = read_func(&data, s); \
- if (rv == 0) { \
- __##ent##_test_data_append(td, &data); \
- td->free_func(&data); \
- } else \
- goto fin; \
- } \
- } \
- \
-fin: \
- fclose(fi); \
- return (rv); \
-}
-
-#define DECLARE_1PASS_TEST(ent) \
-int __##ent##_1pass_test(struct ent##_test_data *, \
- int (*)(struct ent *, void *), \
- void *);
-
-#define DO_1PASS_TEST(ent, td, f, mdata) \
- __##ent##_1pass_test(td, f, mdata)
-
-#define IMPLEMENT_1PASS_TEST(ent) \
-int \
-__##ent##_1pass_test(struct ent##_test_data *td, \
- int (*tf)(struct ent *, void *), \
- void *mdata) \
-{ \
- int rv; \
- rv = __##ent##_test_data_foreach(td, tf, mdata); \
- \
- return (rv); \
-}
-
-#define DECLARE_2PASS_TEST(ent) \
-int __##ent##_2pass_test(struct ent##_test_data *, \
- struct ent##_test_data *, \
- int (*)(struct ent *, struct ent *, void *), void *);
-
-#define DO_2PASS_TEST(ent, td1, td2, f, mdata) \
- __##ent##_2pass_test(td1, td2, f, mdata)
-
-#define IMPLEMENT_2PASS_TEST(ent) \
-int \
-__##ent##_2pass_test(struct ent##_test_data *td1, \
- struct ent##_test_data *td2, \
- int (*cmp_func)(struct ent *, struct ent *, void *), \
- void *cmp_mdata) \
-{ \
- int rv; \
- \
- rv = __##ent##_test_data_compare(td1, td2, cmp_func, cmp_mdata); \
- return (rv); \
-}
diff --git a/tools/regression/lib/libc/resolv/Makefile b/tools/regression/lib/libc/resolv/Makefile
deleted file mode 100644
index 18a71bc..0000000
--- a/tools/regression/lib/libc/resolv/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# $NetBSD: Makefile,v 1.1 2004/05/13 19:17:12 christos Exp $
-# $FreeBSD$
-
-PROG= resolv
-MAN=
-
-# Note: this test relies on being dynamically linked. You will get a
-# spurious PASS for a statically linked test.
-LIBADD+= pthread
-
-regress: ${PROG}
- ./${PROG} -r ${.CURDIR}/mach
-
-.include <bsd.prog.mk>
diff --git a/tools/regression/lib/libc/resolv/mach b/tools/regression/lib/libc/resolv/mach
deleted file mode 100644
index ab7ce24..0000000
--- a/tools/regression/lib/libc/resolv/mach
+++ /dev/null
@@ -1,93 +0,0 @@
-# $FreeBSD$
-localhost
-above.warped.net
-anoncvs.cirr.com
-anoncvs.isc.netbsd.org
-anoncvs.leo.org
-anoncvs.netbsd.lt
-anoncvs.netbsd.ro
-anoncvs.netbsd.se
-antioche.antioche.eu.org
-boulder.tele.dk
-centaurus.4web.cz
-chur.math.ntnu.no
-console.netbsd.org
-cvs.fi.netbsd.org
-cvs.mikrolahti.fi
-cvs.netbsd.org
-cvsup-netbsd.leo.org
-cvsup.netbsd.se
-cvsup.pasta.cs.uit.no
-ftp.bitcon.no
-ftp.chg.ru
-ftp.duth.gr
-ftp.estpak.ee
-ftp.fsn.hu
-ftp.funet.fi
-ftp.grondar.za
-ftp.leo.org
-ftp.netbsd.lt
-ftp.netbsd.org
-ftp.nluug.nl
-ftp.plig.org
-ftp.uni-erlangen.de
-ftp.xgate.co.kr
-gd.tuwien.ac.at
-gort.ludd.luth.se
-grappa.unix-ag.uni-kl.de
-info.wins.uva.nl
-irc.warped.net
-knug.youn.co.kr
-lala.iri.co.jp
-mail.jp.netbsd.org
-mail.kr.netbsd.org
-mail.netbsd.org
-melanoma.cs.rmit.edu.au
-mirror.aarnet.edu.au
-mirror.netbsd.com.br
-mirror03.inet.tele.dk
-moon.vub.ac.be
-nbwww.sergei.cc
-net.bsd.cz
-netbsd.3miasto.net
-netbsd.4ka.mipt.ru
-netbsd.apk.od.ua
-netbsd.csie.nctu.edu.tw
-netbsd.enderunix.org
-netbsd.ftp.fu-berlin.de
-netbsd.netlead.com.au
-netbsd.nsysu.edu.tw
-netbsd.pair.com
-netbsd.stevens-tech.edu
-netbsd.triada.bg
-netbsd.unix.net.nz
-netbsd.unixtech.be
-netbsd.vejas.lt
-netbsd.wagener-consulting.lu
-netbsd.zarco.org
-netbsdiso.interoute.net.uk
-netbsdwww.bitcon.no
-netbsdwww.cordef.com.pl
-netbsdwww.cs.rmit.edu.au
-netbsdwww.interoute.net.uk
-news.gw.com
-ns.netbsd.org
-pigu.iri.co.jp
-pluto.cdpa.nsysu.edu.tw
-projects.slowass.net
-server6.pasta.cs.uit.no
-skeleton.phys.spbu.ru
-snoopy.allbsd.org
-spike.allbsd.org
-sundry.netbsd.org
-tanya.sergei.cc
-web-a.fi.gw.com
-web-a.us.gw.com
-web.netbsd.mirror.arhea.net
-www.en.netbsd.de
-www.netbsd.cl
-www.netbsd.nl
-www.netbsd.org
-www.netbsd.ro
-zathras.netbsd.org
-zeppo.rediris.es
diff --git a/tools/regression/lib/libc/resolv/resolv.c b/tools/regression/lib/libc/resolv/resolv.c
deleted file mode 100644
index 2ec3eeb..0000000
--- a/tools/regression/lib/libc/resolv/resolv.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/* $NetBSD: resolv.c,v 1.6 2004/05/23 16:59:11 christos Exp $ */
-
-/*-
- * Copyright (c) 2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Christos Zoulas.
- *
- * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 <sys/cdefs.h>
-__RCSID("$NetBSD: resolv.c,v 1.6 2004/05/23 16:59:11 christos Exp $");
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <netdb.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <err.h>
-#include <string.h>
-#include <stringlist.h>
-
-#define NTHREADS 10
-#define NHOSTS 100
-#define WS " \t\n\r"
-
-enum method {
- METHOD_GETADDRINFO,
- METHOD_GETHOSTBY,
- METHOD_GETIPNODEBY
-};
-
-static StringList *hosts = NULL;
-static int debug = 0;
-static enum method method = METHOD_GETADDRINFO;
-static int reverse = 0;
-static int *ask = NULL;
-static int *got = NULL;
-
-static void usage(void) __attribute__((__noreturn__));
-static void load(const char *);
-static void resolvone(int);
-static void *resolvloop(void *);
-static void run(int *);
-
-static pthread_mutex_t stats = PTHREAD_MUTEX_INITIALIZER;
-
-static void
-usage(void)
-{
- (void)fprintf(stderr,
- "Usage: %s [-AdHIr] [-h <nhosts>] [-n <nthreads>] <file> ...\n",
- getprogname());
- exit(1);
-}
-
-static void
-load(const char *fname)
-{
- FILE *fp;
- size_t len;
- char *line;
-
- if ((fp = fopen(fname, "r")) == NULL)
- err(1, "Cannot open `%s'", fname);
- while ((line = fgetln(fp, &len)) != NULL) {
- char c = line[len];
- char *ptr;
- line[len] = '\0';
- for (ptr = strtok(line, WS); ptr; ptr = strtok(NULL, WS)) {
- if (ptr == '\0' || ptr[0] == '#')
- continue;
- sl_add(hosts, strdup(ptr));
- }
- line[len] = c;
- }
-
- (void)fclose(fp);
-}
-
-static int
-resolv_getaddrinfo(pthread_t self, char *host, int port)
-{
- char portstr[6], buf[1024], hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
- struct addrinfo hints, *res;
- int error, len;
-
- snprintf(portstr, sizeof(portstr), "%d", port);
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC;
- hints.ai_flags = AI_PASSIVE;
- hints.ai_socktype = SOCK_STREAM;
- error = getaddrinfo(host, portstr, &hints, &res);
- if (debug) {
- len = snprintf(buf, sizeof(buf), "%p: host %s %s\n",
- self, host, error ? "not found" : "ok");
- (void)write(STDOUT_FILENO, buf, len);
- }
- if (error == 0 && reverse) {
- memset(hbuf, 0, sizeof(hbuf));
- memset(pbuf, 0, sizeof(pbuf));
- getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf),
- pbuf, sizeof(pbuf), 0);
- if (debug) {
- len = snprintf(buf, sizeof(buf),
- "%p: reverse %s %s\n", self, hbuf, pbuf);
- (void)write(STDOUT_FILENO, buf, len);
- }
- }
- if (error == 0)
- freeaddrinfo(res);
- return error;
-}
-
-static int
-resolv_gethostby(pthread_t self, char *host)
-{
- char buf[1024];
- struct hostent *hp, *hp2;
- int len;
-
- hp = gethostbyname(host);
- if (debug) {
- len = snprintf(buf, sizeof(buf), "%p: host %s %s\n",
- self, host, (hp == NULL) ? "not found" : "ok");
- (void)write(STDOUT_FILENO, buf, len);
- }
- if (hp && reverse) {
- memcpy(buf, hp->h_addr, hp->h_length);
- hp2 = gethostbyaddr(buf, hp->h_length, hp->h_addrtype);
- if (hp2 && debug) {
- len = snprintf(buf, sizeof(buf),
- "%p: reverse %s\n", self, hp2->h_name);
- (void)write(STDOUT_FILENO, buf, len);
- }
- }
- return hp ? 0 : -1;
-}
-
-static int
-resolv_getipnodeby(pthread_t self, char *host)
-{
- char buf[1024];
- struct hostent *hp, *hp2;
- int len, h_error;
-
- hp = getipnodebyname(host, AF_INET, 0, &h_error);
- if (debug) {
- len = snprintf(buf, sizeof(buf), "%p: host %s %s\n",
- self, host, (hp == NULL) ? "not found" : "ok");
- (void)write(STDOUT_FILENO, buf, len);
- }
- if (hp && reverse) {
- memcpy(buf, hp->h_addr, hp->h_length);
- hp2 = getipnodebyaddr(buf, hp->h_length, hp->h_addrtype,
- &h_error);
- if (hp2 && debug) {
- len = snprintf(buf, sizeof(buf),
- "%p: reverse %s\n", self, hp2->h_name);
- (void)write(STDOUT_FILENO, buf, len);
- }
- if (hp2)
- freehostent(hp2);
- }
- if (hp)
- freehostent(hp);
- return hp ? 0 : -1;
-}
-
-static void
-resolvone(int n)
-{
- char buf[1024];
- pthread_t self = pthread_self();
- size_t i = (random() & 0x0fffffff) % hosts->sl_cur;
- char *host = hosts->sl_str[i];
- struct addrinfo hints, *res;
- int error, len;
-
- if (debug) {
- len = snprintf(buf, sizeof(buf), "%p: %d resolving %s %d\n",
- self, n, host, (int)i);
- (void)write(STDOUT_FILENO, buf, len);
- }
- switch (method) {
- case METHOD_GETADDRINFO:
- error = resolv_getaddrinfo(self, host, i);
- break;
- case METHOD_GETHOSTBY:
- error = resolv_gethostby(self, host);
- break;
- case METHOD_GETIPNODEBY:
- error = resolv_getipnodeby(self, host);
- break;
- default:
- break;
- }
- pthread_mutex_lock(&stats);
- ask[i]++;
- got[i] += error == 0;
- pthread_mutex_unlock(&stats);
-}
-
-static void *
-resolvloop(void *p)
-{
- int *nhosts = (int *)p;
- if (*nhosts == 0)
- return NULL;
- do
- resolvone(*nhosts);
- while (--(*nhosts));
- return NULL;
-}
-
-static void
-run(int *nhosts)
-{
- pthread_t self = pthread_self();
- if (pthread_create(&self, NULL, resolvloop, nhosts) != 0)
- err(1, "pthread_create");
-}
-
-int
-main(int argc, char *argv[])
-{
- int nthreads = NTHREADS;
- int nhosts = NHOSTS;
- int i, c, done, *nleft;
- hosts = sl_init();
-
- srandom(1234);
-
- while ((c = getopt(argc, argv, "Adh:HIn:r")) != -1)
- switch (c) {
- case 'A':
- method = METHOD_GETADDRINFO;
- break;
- case 'd':
- debug++;
- break;
- case 'h':
- nhosts = atoi(optarg);
- break;
- case 'H':
- method = METHOD_GETHOSTBY;
- break;
- case 'I':
- method = METHOD_GETIPNODEBY;
- break;
- case 'n':
- nthreads = atoi(optarg);
- break;
- case 'r':
- reverse++;
- break;
- default:
- usage();
- }
-
- for (i = optind; i < argc; i++)
- load(argv[i]);
-
- if (hosts->sl_cur == 0)
- usage();
-
- if ((nleft = malloc(nthreads * sizeof(int))) == NULL)
- err(1, "malloc");
- if ((ask = calloc(hosts->sl_cur, sizeof(int))) == NULL)
- err(1, "calloc");
- if ((got = calloc(hosts->sl_cur, sizeof(int))) == NULL)
- err(1, "calloc");
-
-
- for (i = 0; i < nthreads; i++) {
- nleft[i] = nhosts;
- run(&nleft[i]);
- }
-
- for (done = 0; !done;) {
- done = 1;
- for (i = 0; i < nthreads; i++) {
- if (nleft[i] != 0) {
- done = 0;
- break;
- }
- }
- sleep(1);
- }
- c = 0;
- for (i = 0; i < hosts->sl_cur; i++) {
- if (ask[i] != got[i] && got[i] != 0) {
- warnx("Error: host %s ask %d got %d\n",
- hosts->sl_str[i], ask[i], got[i]);
- c++;
- }
- }
- free(nleft);
- free(ask);
- free(got);
- sl_free(hosts, 1);
- return c;
-}
diff --git a/tools/regression/lib/libc/resolv/resolv.t b/tools/regression/lib/libc/resolv/resolv.t
deleted file mode 100644
index 278ba06..0000000
--- a/tools/regression/lib/libc/resolv/resolv.t
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-do_test() {
- number=$1
- comment=$2
- opt=$3
- if ./$executable $opt; then
- echo "ok $number - $comment"
- else
- echo "not ok $number - $comment"
- fi
-}
-
-cd `dirname $0`
-
-executable=`basename $0 .t`
-
-make $executable 2>&1 > /dev/null
-
-echo 1..3
-do_test 1 'getaddrinfo()' '-r mach'
-do_test 2 'gethostbyname()' '-rH mach'
-do_test 3 'getipnodebyname()' '-rI mach'
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.c b/tools/regression/lib/msun/test-cexp.c
deleted file mode 100644
index 6be71ad..0000000
--- a/tools/regression/lib/msun/test-cexp.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*-
- * Copyright (c) 2008-2011 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 cexp*().
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-
-#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. In some cases,
- * whether cexp() raises an invalid exception is unspecified.
- *
- * 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, z, result, exceptmask, excepts, checksign) do { \
- volatile long double complex _d = z; \
- 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. */
-#define test_tol(func, z, result, tol) do { \
- volatile long double complex _d = z; \
- assert(cfpequal_tol((func)(_d), (result), (tol), \
- FPE_ABS_ZERO | CS_BOTH)); \
-} while (0)
-
-/* Test all the functions that compute cexp(x). */
-#define testall(x, result, exceptmask, excepts, checksign) do { \
- test(cexp, x, result, exceptmask, excepts, checksign); \
- test(cexpf, x, result, exceptmask, excepts, checksign); \
-} while (0)
-
-/*
- * Test all the functions that compute cexp(x), within a given tolerance.
- * The tolerance is specified in ulps.
- */
-#define testall_tol(x, result, tol) do { \
- test_tol(cexp, x, result, tol * DBL_ULP()); \
- test_tol(cexpf, x, result, tol * FLT_ULP()); \
-} while (0)
-
-/* Various finite non-zero numbers to test. */
-static const float finites[] =
-{ -42.0e20, -1.0, -1.0e-10, -0.0, 0.0, 1.0e-10, 1.0, 42.0e20 };
-
-
-/* Tests for 0 */
-void
-test_zero(void)
-{
-
- /* cexp(0) = 1, no exceptions raised */
- testall(0.0, 1.0, ALL_STD_EXCEPT, 0, 1);
- testall(-0.0, 1.0, ALL_STD_EXCEPT, 0, 1);
- testall(CMPLXL(0.0, -0.0), CMPLXL(1.0, -0.0), ALL_STD_EXCEPT, 0, 1);
- testall(CMPLXL(-0.0, -0.0), CMPLXL(1.0, -0.0), ALL_STD_EXCEPT, 0, 1);
-}
-
-/*
- * Tests for NaN. The signs of the results are indeterminate unless the
- * imaginary part is 0.
- */
-void
-test_nan()
-{
- int i;
-
- /* cexp(x + NaNi) = NaN + NaNi and optionally raises invalid */
- /* cexp(NaN + yi) = NaN + NaNi and optionally raises invalid (|y|>0) */
- for (i = 0; i < nitems(finites); i++) {
- printf("# Run %d..\n", i);
- testall(CMPLXL(finites[i], NAN), CMPLXL(NAN, NAN),
- ALL_STD_EXCEPT & ~FE_INVALID, 0, 0);
- if (finites[i] == 0.0)
- continue;
- /* XXX FE_INEXACT shouldn't be raised here */
- testall(CMPLXL(NAN, finites[i]), CMPLXL(NAN, NAN),
- ALL_STD_EXCEPT & ~(FE_INVALID | FE_INEXACT), 0, 0);
- }
-
- /* cexp(NaN +- 0i) = NaN +- 0i */
- testall(CMPLXL(NAN, 0.0), CMPLXL(NAN, 0.0), ALL_STD_EXCEPT, 0, 1);
- testall(CMPLXL(NAN, -0.0), CMPLXL(NAN, -0.0), ALL_STD_EXCEPT, 0, 1);
-
- /* cexp(inf + NaN i) = inf + nan i */
- testall(CMPLXL(INFINITY, NAN), CMPLXL(INFINITY, NAN),
- ALL_STD_EXCEPT, 0, 0);
- /* cexp(-inf + NaN i) = 0 */
- testall(CMPLXL(-INFINITY, NAN), CMPLXL(0.0, 0.0),
- ALL_STD_EXCEPT, 0, 0);
- /* cexp(NaN + NaN i) = NaN + NaN i */
- testall(CMPLXL(NAN, NAN), CMPLXL(NAN, NAN),
- ALL_STD_EXCEPT, 0, 0);
-}
-
-void
-test_inf(void)
-{
- int i;
-
- /* cexp(x + inf i) = NaN + NaNi and raises invalid */
- for (i = 0; i < nitems(finites); i++) {
- printf("# Run %d..\n", i);
- testall(CMPLXL(finites[i], INFINITY), CMPLXL(NAN, NAN),
- ALL_STD_EXCEPT, FE_INVALID, 1);
- }
- /* cexp(-inf + yi) = 0 * (cos(y) + sin(y)i) */
- /* XXX shouldn't raise an inexact exception */
- testall(CMPLXL(-INFINITY, M_PI_4), CMPLXL(0.0, 0.0),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(-INFINITY, 3 * M_PI_4), CMPLXL(-0.0, 0.0),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(-INFINITY, 5 * M_PI_4), CMPLXL(-0.0, -0.0),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(-INFINITY, 7 * M_PI_4), CMPLXL(0.0, -0.0),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(-INFINITY, 0.0), CMPLXL(0.0, 0.0),
- ALL_STD_EXCEPT, 0, 1);
- testall(CMPLXL(-INFINITY, -0.0), CMPLXL(0.0, -0.0),
- ALL_STD_EXCEPT, 0, 1);
- /* cexp(inf + yi) = inf * (cos(y) + sin(y)i) (except y=0) */
- /* XXX shouldn't raise an inexact exception */
- testall(CMPLXL(INFINITY, M_PI_4), CMPLXL(INFINITY, INFINITY),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(INFINITY, 3 * M_PI_4), CMPLXL(-INFINITY, INFINITY),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(INFINITY, 5 * M_PI_4), CMPLXL(-INFINITY, -INFINITY),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- testall(CMPLXL(INFINITY, 7 * M_PI_4), CMPLXL(INFINITY, -INFINITY),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- /* cexp(inf + 0i) = inf + 0i */
- testall(CMPLXL(INFINITY, 0.0), CMPLXL(INFINITY, 0.0),
- ALL_STD_EXCEPT, 0, 1);
- testall(CMPLXL(INFINITY, -0.0), CMPLXL(INFINITY, -0.0),
- ALL_STD_EXCEPT, 0, 1);
-}
-
-void
-test_reals(void)
-{
- int i;
-
- for (i = 0; i < nitems(finites); i++) {
- /* XXX could check exceptions more meticulously */
- printf("# Run %d..\n", i);
- test(cexp, CMPLXL(finites[i], 0.0),
- CMPLXL(exp(finites[i]), 0.0),
- FE_INVALID | FE_DIVBYZERO, 0, 1);
- test(cexp, CMPLXL(finites[i], -0.0),
- CMPLXL(exp(finites[i]), -0.0),
- FE_INVALID | FE_DIVBYZERO, 0, 1);
- test(cexpf, CMPLXL(finites[i], 0.0),
- CMPLXL(expf(finites[i]), 0.0),
- FE_INVALID | FE_DIVBYZERO, 0, 1);
- test(cexpf, CMPLXL(finites[i], -0.0),
- CMPLXL(expf(finites[i]), -0.0),
- FE_INVALID | FE_DIVBYZERO, 0, 1);
- }
-}
-
-void
-test_imaginaries(void)
-{
- int i;
-
- for (i = 0; i < nitems(finites); i++) {
- printf("# Run %d..\n", i);
- test(cexp, CMPLXL(0.0, finites[i]),
- CMPLXL(cos(finites[i]), sin(finites[i])),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- test(cexp, CMPLXL(-0.0, finites[i]),
- CMPLXL(cos(finites[i]), sin(finites[i])),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- test(cexpf, CMPLXL(0.0, finites[i]),
- CMPLXL(cosf(finites[i]), sinf(finites[i])),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- test(cexpf, CMPLXL(-0.0, finites[i]),
- CMPLXL(cosf(finites[i]), sinf(finites[i])),
- ALL_STD_EXCEPT & ~FE_INEXACT, 0, 1);
- }
-}
-
-void
-test_small(void)
-{
- static const double tests[] = {
- /* csqrt(a + bI) = x + yI */
- /* a b x y */
- 1.0, M_PI_4, M_SQRT2 * 0.5 * M_E, M_SQRT2 * 0.5 * M_E,
- -1.0, M_PI_4, M_SQRT2 * 0.5 / M_E, M_SQRT2 * 0.5 / M_E,
- 2.0, M_PI_2, 0.0, M_E * M_E,
- M_LN2, M_PI, -2.0, 0.0,
- };
- double a, b;
- double x, y;
- int i;
-
- for (i = 0; i < nitems(tests); i += 4) {
- printf("# Run %d..\n", i);
- a = tests[i];
- b = tests[i + 1];
- x = tests[i + 2];
- y = tests[i + 3];
- test_tol(cexp, CMPLXL(a, b), CMPLXL(x, y), 3 * DBL_ULP());
-
- /* float doesn't have enough precision to pass these tests */
- if (x == 0 || y == 0)
- continue;
- test_tol(cexpf, CMPLXL(a, b), CMPLXL(x, y), 1 * FLT_ULP());
- }
-}
-
-/* Test inputs with a real part r that would overflow exp(r). */
-void
-test_large(void)
-{
-
- test_tol(cexp, CMPLXL(709.79, 0x1p-1074),
- CMPLXL(INFINITY, 8.94674309915433533273e-16), DBL_ULP());
- test_tol(cexp, CMPLXL(1000, 0x1p-1074),
- CMPLXL(INFINITY, 9.73344457300016401328e+110), DBL_ULP());
- test_tol(cexp, CMPLXL(1400, 0x1p-1074),
- CMPLXL(INFINITY, 5.08228858149196559681e+284), DBL_ULP());
- test_tol(cexp, CMPLXL(900, 0x1.23456789abcdep-1020),
- CMPLXL(INFINITY, 7.42156649354218408074e+83), DBL_ULP());
- test_tol(cexp, CMPLXL(1300, 0x1.23456789abcdep-1020),
- CMPLXL(INFINITY, 3.87514844965996756704e+257), DBL_ULP());
-
- test_tol(cexpf, CMPLXL(88.73, 0x1p-149),
- CMPLXL(INFINITY, 4.80265603e-07), 2 * FLT_ULP());
- test_tol(cexpf, CMPLXL(90, 0x1p-149),
- CMPLXL(INFINITY, 1.7101492622e-06f), 2 * FLT_ULP());
- test_tol(cexpf, CMPLXL(192, 0x1p-149),
- CMPLXL(INFINITY, 3.396809344e+38f), 2 * FLT_ULP());
- test_tol(cexpf, CMPLXL(120, 0x1.234568p-120),
- CMPLXL(INFINITY, 1.1163382522e+16f), 2 * FLT_ULP());
- test_tol(cexpf, CMPLXL(170, 0x1.234568p-120),
- CMPLXL(INFINITY, 5.7878851079e+37f), 2 * FLT_ULP());
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..7\n");
-
- test_zero();
- printf("ok 1 - cexp zero\n");
-
- test_nan();
- printf("ok 2 - cexp nan\n");
-
- test_inf();
- printf("ok 3 - cexp inf\n");
-
-#if defined(__i386__)
- printf("not ok 4 - cexp reals # TODO: PR # 191676 fails assertion on i386\n");
-#else
- test_reals();
- printf("ok 4 - cexp reals\n");
-#endif
-
- test_imaginaries();
- printf("ok 5 - cexp imaginaries\n");
-
- test_small();
- printf("ok 6 - cexp small\n");
-
- test_large();
- printf("ok 7 - cexp large\n");
-
- return (0);
-}
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.c b/tools/regression/lib/msun/test-conj.c
deleted file mode 100644
index 7426f9e..0000000
--- a/tools/regression/lib/msun/test-conj.c
+++ /dev/null
@@ -1,139 +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 conj{,f,l}()
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <assert.h>
-#include <complex.h>
-#include <fenv.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "test-utils.h"
-
-#pragma STDC CX_LIMITED_RANGE OFF
-
-/* Make sure gcc doesn't use builtin versions of these or honor __pure2. */
-static float complex (*libconjf)(float complex) = conjf;
-static double complex (*libconj)(double complex) = conj;
-static long double complex (*libconjl)(long double complex) = conjl;
-static float (*libcrealf)(float complex) = crealf;
-static double (*libcreal)(double complex) = creal;
-static long double (*libcreall)(long double complex) = creall;
-static float (*libcimagf)(float complex) = cimagf;
-static double (*libcimag)(double complex) = cimag;
-static long double (*libcimagl)(long double complex) = cimagl;
-
-static const double tests[] = {
- /* a + bI */
- 0.0, 0.0,
- 0.0, 1.0,
- 1.0, 0.0,
- -1.0, 0.0,
- 1.0, -0.0,
- 0.0, -1.0,
- 2.0, 4.0,
- 0.0, INFINITY,
- 0.0, -INFINITY,
- INFINITY, 0.0,
- NAN, 1.0,
- 1.0, NAN,
- NAN, NAN,
- -INFINITY, INFINITY,
-};
-
-int
-main(int argc, char *argv[])
-{
- static const int ntests = sizeof(tests) / sizeof(tests[0]) / 2;
- complex float in;
- complex long double expected;
- int i;
-
- printf("1..%d\n", ntests * 3);
-
- for (i = 0; i < ntests; i++) {
- __real__ expected = __real__ in = tests[2 * i];
- __imag__ in = tests[2 * i + 1];
- __imag__ expected = -cimag(in);
-
- assert(fpequal(libcrealf(in), __real__ in));
- assert(fpequal(libcreal(in), __real__ in));
- assert(fpequal(libcreall(in), __real__ in));
- assert(fpequal(libcimagf(in), __imag__ in));
- assert(fpequal(libcimag(in), __imag__ in));
- assert(fpequal(libcimagl(in), __imag__ in));
-
- feclearexcept(FE_ALL_EXCEPT);
- if (!cfpequal(libconjf(in), expected)) {
- printf("not ok %d\t# conjf(%#.2g + %#.2gI): "
- "wrong value\n",
- 3 * i + 1, creal(in), cimag(in));
- } else if (fetestexcept(FE_ALL_EXCEPT)) {
- printf("not ok %d\t# conjf(%#.2g + %#.2gI): "
- "threw an exception\n",
- 3 * i + 1, creal(in), cimag(in));
- } else {
- printf("ok %d\t\t# conjf(%#.2g + %#.2gI)\n",
- 3 * i + 1, creal(in), cimag(in));
- }
-
- feclearexcept(FE_ALL_EXCEPT);
- if (!cfpequal(libconj(in), expected)) {
- printf("not ok %d\t# conj(%#.2g + %#.2gI): "
- "wrong value\n",
- 3 * i + 2, creal(in), cimag(in));
- } else if (fetestexcept(FE_ALL_EXCEPT)) {
- printf("not ok %d\t# conj(%#.2g + %#.2gI): "
- "threw an exception\n",
- 3 * i + 2, creal(in), cimag(in));
- } else {
- printf("ok %d\t\t# conj(%#.2g + %#.2gI)\n",
- 3 * i + 2, creal(in), cimag(in));
- }
-
- feclearexcept(FE_ALL_EXCEPT);
- if (!cfpequal(libconjl(in), expected)) {
- printf("not ok %d\t# conjl(%#.2g + %#.2gI): "
- "wrong value\n",
- 3 * i + 3, creal(in), cimag(in));
- } else if (fetestexcept(FE_ALL_EXCEPT)) {
- printf("not ok %d\t# conjl(%#.2g + %#.2gI): "
- "threw an exception\n",
- 3 * i + 3, creal(in), cimag(in));
- } else {
- printf("ok %d\t\t# conjl(%#.2g + %#.2gI)\n",
- 3 * i + 3, creal(in), cimag(in));
- }
- }
-
- return (0);
-}
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.c b/tools/regression/lib/msun/test-csqrt.c
deleted file mode 100644
index aa119d1..0000000
--- a/tools/regression/lib/msun/test-csqrt.c
+++ /dev/null
@@ -1,295 +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.
- */
-
-/*
- * Tests for csqrt{,f}()
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-
-#include <assert.h>
-#include <complex.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-
-#include "test-utils.h"
-
-/*
- * This is a test hook that can point to csqrtl(), _csqrt(), or to _csqrtf().
- * The latter two convert to float or double, respectively, and test csqrtf()
- * and csqrt() with the same arguments.
- */
-long double complex (*t_csqrt)(long double complex);
-
-static long double complex
-_csqrtf(long double complex d)
-{
-
- return (csqrtf((float complex)d));
-}
-
-static long double complex
-_csqrt(long double complex d)
-{
-
- return (csqrt((double complex)d));
-}
-
-#pragma STDC CX_LIMITED_RANGE OFF
-
-/*
- * Compare d1 and d2 using special rules: NaN == NaN and +0 != -0.
- * Fail an assertion if they differ.
- */
-static void
-assert_equal(long double complex d1, long double complex d2)
-{
-
- assert(cfpequal(d1, d2));
-}
-
-/*
- * Test csqrt for some finite arguments where the answer is exact.
- * (We do not test if it produces correctly rounded answers when the
- * result is inexact, nor do we check whether it throws spurious
- * exceptions.)
- */
-static void
-test_finite()
-{
- static const double tests[] = {
- /* csqrt(a + bI) = x + yI */
- /* a b x y */
- 0, 8, 2, 2,
- 0, -8, 2, -2,
- 4, 0, 2, 0,
- -4, 0, 0, 2,
- 3, 4, 2, 1,
- 3, -4, 2, -1,
- -3, 4, 1, 2,
- -3, -4, 1, -2,
- 5, 12, 3, 2,
- 7, 24, 4, 3,
- 9, 40, 5, 4,
- 11, 60, 6, 5,
- 13, 84, 7, 6,
- 33, 56, 7, 4,
- 39, 80, 8, 5,
- 65, 72, 9, 4,
- 987, 9916, 74, 67,
- 5289, 6640, 83, 40,
- 460766389075.0, 16762287900.0, 678910, 12345
- };
- /*
- * We also test some multiples of the above arguments. This
- * array defines which multiples we use. Note that these have
- * to be small enough to not cause overflow for float precision
- * with all of the constants in the above table.
- */
- static const double mults[] = {
- 1,
- 2,
- 3,
- 13,
- 16,
- 0x1.p30,
- 0x1.p-30,
- };
-
- double a, b;
- double x, y;
- int i, j;
-
- for (i = 0; i < nitems(tests); i += 4) {
- for (j = 0; j < nitems(mults); j++) {
- a = tests[i] * mults[j] * mults[j];
- b = tests[i + 1] * mults[j] * mults[j];
- x = tests[i + 2] * mults[j];
- y = tests[i + 3] * mults[j];
- assert(t_csqrt(CMPLXL(a, b)) == CMPLXL(x, y));
- }
- }
-
-}
-
-/*
- * Test the handling of +/- 0.
- */
-static void
-test_zeros()
-{
-
- assert_equal(t_csqrt(CMPLXL(0.0, 0.0)), CMPLXL(0.0, 0.0));
- assert_equal(t_csqrt(CMPLXL(-0.0, 0.0)), CMPLXL(0.0, 0.0));
- assert_equal(t_csqrt(CMPLXL(0.0, -0.0)), CMPLXL(0.0, -0.0));
- assert_equal(t_csqrt(CMPLXL(-0.0, -0.0)), CMPLXL(0.0, -0.0));
-}
-
-/*
- * Test the handling of infinities when the other argument is not NaN.
- */
-static void
-test_infinities()
-{
- static const double vals[] = {
- 0.0,
- -0.0,
- 42.0,
- -42.0,
- INFINITY,
- -INFINITY,
- };
-
- int i;
-
- for (i = 0; i < nitems(vals); i++) {
- if (isfinite(vals[i])) {
- assert_equal(t_csqrt(CMPLXL(-INFINITY, vals[i])),
- CMPLXL(0.0, copysignl(INFINITY, vals[i])));
- assert_equal(t_csqrt(CMPLXL(INFINITY, vals[i])),
- CMPLXL(INFINITY, copysignl(0.0, vals[i])));
- }
- assert_equal(t_csqrt(CMPLXL(vals[i], INFINITY)),
- CMPLXL(INFINITY, INFINITY));
- assert_equal(t_csqrt(CMPLXL(vals[i], -INFINITY)),
- CMPLXL(INFINITY, -INFINITY));
- }
-}
-
-/*
- * Test the handling of NaNs.
- */
-static void
-test_nans()
-{
-
- assert(creall(t_csqrt(CMPLXL(INFINITY, NAN))) == INFINITY);
- assert(isnan(cimagl(t_csqrt(CMPLXL(INFINITY, NAN)))));
-
- assert(isnan(creall(t_csqrt(CMPLXL(-INFINITY, NAN)))));
- assert(isinf(cimagl(t_csqrt(CMPLXL(-INFINITY, NAN)))));
-
- assert_equal(t_csqrt(CMPLXL(NAN, INFINITY)),
- CMPLXL(INFINITY, INFINITY));
- assert_equal(t_csqrt(CMPLXL(NAN, -INFINITY)),
- CMPLXL(INFINITY, -INFINITY));
-
- assert_equal(t_csqrt(CMPLXL(0.0, NAN)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(-0.0, NAN)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(42.0, NAN)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(-42.0, NAN)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(NAN, 0.0)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(NAN, -0.0)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(NAN, 42.0)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(NAN, -42.0)), CMPLXL(NAN, NAN));
- assert_equal(t_csqrt(CMPLXL(NAN, NAN)), CMPLXL(NAN, NAN));
-}
-
-/*
- * Test whether csqrt(a + bi) works for inputs that are large enough to
- * cause overflow in hypot(a, b) + a. In this case we are using
- * csqrt(115 + 252*I) == 14 + 9*I
- * scaled up to near MAX_EXP.
- */
-static void
-test_overflow(int maxexp)
-{
- long double a, b;
- long double complex result;
-
- a = ldexpl(115 * 0x1p-8, maxexp);
- b = ldexpl(252 * 0x1p-8, maxexp);
- result = t_csqrt(CMPLXL(a, b));
- assert(creall(result) == ldexpl(14 * 0x1p-4, maxexp / 2));
- assert(cimagl(result) == ldexpl(9 * 0x1p-4, maxexp / 2));
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..15\n");
-
- /* Test csqrt() */
- t_csqrt = _csqrt;
-
- test_finite();
- printf("ok 1 - csqrt\n");
-
- test_zeros();
- printf("ok 2 - csqrt\n");
-
- test_infinities();
- printf("ok 3 - csqrt\n");
-
- test_nans();
- printf("ok 4 - csqrt\n");
-
- test_overflow(DBL_MAX_EXP);
- printf("ok 5 - csqrt\n");
-
- /* Now test csqrtf() */
- t_csqrt = _csqrtf;
-
- test_finite();
- printf("ok 6 - csqrt\n");
-
- test_zeros();
- printf("ok 7 - csqrt\n");
-
- test_infinities();
- printf("ok 8 - csqrt\n");
-
- test_nans();
- printf("ok 9 - csqrt\n");
-
- test_overflow(FLT_MAX_EXP);
- printf("ok 10 - csqrt\n");
-
- /* Now test csqrtl() */
- t_csqrt = csqrtl;
-
- test_finite();
- printf("ok 11 - csqrt\n");
-
- test_zeros();
- printf("ok 12 - csqrt\n");
-
- test_infinities();
- printf("ok 13 - csqrt\n");
-
- test_nans();
- printf("ok 14 - csqrt\n");
-
- test_overflow(LDBL_MAX_EXP);
- printf("ok 15 - csqrt\n");
-
- return (0);
-}
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 78b1119..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 (fabs(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(fabs(nums[i])),
- (nums[i] < 0) ? pi : 0), 1);
- testall_tol(cacos, z,
- CMPLXL((nums[i] < 0) ? pi : 0,
- -acosh(fabs(nums[i]))), 1);
- testall_tol(casin, z,
- CMPLXL(copysign(pi / 2, nums[i]),
- acosh(fabs(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.c b/tools/regression/lib/msun/test-trig.c
deleted file mode 100644
index 1dcce1f..0000000
--- a/tools/regression/lib/msun/test-trig.c
+++ /dev/null
@@ -1,280 +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 corner cases in trigonometric functions. Some accuracy tests
- * are included as well, but these are very basic sanity checks, not
- * intended to be comprehensive.
- *
- * The program for generating representable numbers near multiples of pi is
- * available at http://www.cs.berkeley.edu/~wkahan/testpi/ .
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-
-#include <assert.h>
-#include <fenv.h>
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-
-#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
- * 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(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 testall(prefix, x, result, exceptmask, excepts) do { \
- test(prefix, x, (double)result, exceptmask, excepts); \
- test(prefix##f, x, (float)result, exceptmask, excepts); \
- test(prefix##l, x, result, exceptmask, excepts); \
-} while (0)
-
-#define testdf(prefix, x, result, exceptmask, excepts) do { \
- test(prefix, x, (double)result, exceptmask, excepts); \
- test(prefix##f, x, (float)result, exceptmask, excepts); \
-} while (0)
-
-/*
- * Test special cases in sin(), cos(), and tan().
- */
-static void
-run_special_tests(void)
-{
-
- /* Values at 0 should be exact. */
- testall(tan, 0.0, 0.0, ALL_STD_EXCEPT, 0);
- testall(tan, -0.0, -0.0, ALL_STD_EXCEPT, 0);
- testall(cos, 0.0, 1.0, ALL_STD_EXCEPT, 0);
- testall(cos, -0.0, 1.0, ALL_STD_EXCEPT, 0);
- testall(sin, 0.0, 0.0, ALL_STD_EXCEPT, 0);
- testall(sin, -0.0, -0.0, ALL_STD_EXCEPT, 0);
-
- /* func(+-Inf) == NaN */
- testall(tan, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall(sin, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall(cos, INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall(tan, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall(sin, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
- testall(cos, -INFINITY, NAN, ALL_STD_EXCEPT, FE_INVALID);
-
- /* func(NaN) == NaN */
- testall(tan, NAN, NAN, ALL_STD_EXCEPT, 0);
- testall(sin, NAN, NAN, ALL_STD_EXCEPT, 0);
- testall(cos, NAN, NAN, ALL_STD_EXCEPT, 0);
-}
-
-/*
- * Tests to ensure argument reduction for large arguments is accurate.
- */
-static void
-run_reduction_tests(void)
-{
- /* floats very close to odd multiples of pi */
- static const float f_pi_odd[] = {
- 85563208.0f,
- 43998769152.0f,
- 9.2763667655669323e+25f,
- 1.5458357838905804e+29f,
- };
- /* doubles very close to odd multiples of pi */
- static const double d_pi_odd[] = {
- 3.1415926535897931,
- 91.106186954104004,
- 642615.9188844458,
- 3397346.5699258847,
- 6134899525417045.0,
- 3.0213551960457761e+43,
- 1.2646209897993783e+295,
- 6.2083625380677099e+307,
- };
- /* long doubles very close to odd multiples of pi */
-#if LDBL_MANT_DIG == 64
- static const long double ld_pi_odd[] = {
- 1.1891886960373841596e+101L,
- 1.07999475322710967206e+2087L,
- 6.522151627890431836e+2147L,
- 8.9368974898260328229e+2484L,
- 9.2961044110572205863e+2555L,
- 4.90208421886578286e+3189L,
- 1.5275546401232615884e+3317L,
- 1.7227465626338900093e+3565L,
- 2.4160090594000745334e+3808L,
- 9.8477555741888350649e+4314L,
- 1.6061597222105160737e+4326L,
- };
-#elif LDBL_MANT_DIG == 113
- static const long double ld_pi_odd[] = {
- /* XXX */
- };
-#endif
-
- int i;
-
- for (i = 0; i < nitems(f_pi_odd); i++) {
- assert(fabs(sinf(f_pi_odd[i])) < FLT_EPSILON);
- assert(cosf(f_pi_odd[i]) == -1.0);
- assert(fabs(tan(f_pi_odd[i])) < FLT_EPSILON);
-
- assert(fabs(sinf(-f_pi_odd[i])) < FLT_EPSILON);
- assert(cosf(-f_pi_odd[i]) == -1.0);
- assert(fabs(tanf(-f_pi_odd[i])) < FLT_EPSILON);
-
- assert(fabs(sinf(f_pi_odd[i] * 2)) < FLT_EPSILON);
- assert(cosf(f_pi_odd[i] * 2) == 1.0);
- assert(fabs(tanf(f_pi_odd[i] * 2)) < FLT_EPSILON);
-
- assert(fabs(sinf(-f_pi_odd[i] * 2)) < FLT_EPSILON);
- assert(cosf(-f_pi_odd[i] * 2) == 1.0);
- assert(fabs(tanf(-f_pi_odd[i] * 2)) < FLT_EPSILON);
- }
-
- for (i = 0; i < nitems(d_pi_odd); i++) {
- assert(fabs(sin(d_pi_odd[i])) < 2 * DBL_EPSILON);
- assert(cos(d_pi_odd[i]) == -1.0);
- assert(fabs(tan(d_pi_odd[i])) < 2 * DBL_EPSILON);
-
- assert(fabs(sin(-d_pi_odd[i])) < 2 * DBL_EPSILON);
- assert(cos(-d_pi_odd[i]) == -1.0);
- assert(fabs(tan(-d_pi_odd[i])) < 2 * DBL_EPSILON);
-
- assert(fabs(sin(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
- assert(cos(d_pi_odd[i] * 2) == 1.0);
- assert(fabs(tan(d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
-
- assert(fabs(sin(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
- assert(cos(-d_pi_odd[i] * 2) == 1.0);
- assert(fabs(tan(-d_pi_odd[i] * 2)) < 2 * DBL_EPSILON);
- }
-
-#if LDBL_MANT_DIG > 53
- for (i = 0; i < nitems(ld_pi_odd); i++) {
- assert(fabsl(sinl(ld_pi_odd[i])) < LDBL_EPSILON);
- assert(cosl(ld_pi_odd[i]) == -1.0);
- assert(fabsl(tanl(ld_pi_odd[i])) < LDBL_EPSILON);
-
- assert(fabsl(sinl(-ld_pi_odd[i])) < LDBL_EPSILON);
- assert(cosl(-ld_pi_odd[i]) == -1.0);
- assert(fabsl(tanl(-ld_pi_odd[i])) < LDBL_EPSILON);
-
- assert(fabsl(sinl(ld_pi_odd[i] * 2)) < LDBL_EPSILON);
- assert(cosl(ld_pi_odd[i] * 2) == 1.0);
- assert(fabsl(tanl(ld_pi_odd[i] * 2)) < LDBL_EPSILON);
-
- assert(fabsl(sinl(-ld_pi_odd[i] * 2)) < LDBL_EPSILON);
- assert(cosl(-ld_pi_odd[i] * 2) == 1.0);
- assert(fabsl(tanl(-ld_pi_odd[i] * 2)) < LDBL_EPSILON);
- }
-#endif
-}
-
-/*
- * Tests the accuracy of these functions over the primary range.
- */
-static void
-run_accuracy_tests(void)
-{
-
- /* For small args, sin(x) = tan(x) = x, and cos(x) = 1. */
- testall(sin, 0xd.50ee515fe4aea16p-114L, 0xd.50ee515fe4aea16p-114L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testall(tan, 0xd.50ee515fe4aea16p-114L, 0xd.50ee515fe4aea16p-114L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testall(cos, 0xd.50ee515fe4aea16p-114L, 1.0,
- ALL_STD_EXCEPT, FE_INEXACT);
-
- /*
- * These tests should pass for f32, d64, and ld80 as long as
- * the error is <= 0.75 ulp (round to nearest)
- */
-#if LDBL_MANT_DIG <= 64
-#define testacc testall
-#else
-#define testacc testdf
-#endif
- testacc(sin, 0.17255452780841205174L, 0.17169949801444412683L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testacc(sin, -0.75431944555904520893L, -0.68479288156557286353L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testacc(cos, 0.70556358769838947292L, 0.76124620693117771850L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testacc(cos, -0.34061437849088045332L, 0.94254960031831729956L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testacc(tan, -0.15862817413325692897L, -0.15997221861309522115L,
- ALL_STD_EXCEPT, FE_INEXACT);
- testacc(tan, 0.38374784931303813530L, 0.40376500259976759951L,
- ALL_STD_EXCEPT, FE_INEXACT);
-
- /*
- * XXX missing:
- * - tests for ld128
- * - tests for other rounding modes (probably won't pass for now)
- * - tests for large numbers that get reduced to hi+lo with lo!=0
- */
-}
-
-int
-main(int argc, char *argv[])
-{
-
- printf("1..3\n");
-
- run_special_tests();
- printf("ok 1 - trig\n");
-
-#ifndef __i386__
- run_reduction_tests();
-#endif
- printf("ok 2 - trig\n");
-
-#ifndef __i386__
- run_accuracy_tests();
-#endif
- printf("ok 3 - trig\n");
-
- return (0);
-}
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