160d7101085a33323664fc145e21a8a07057015e0robbiew/*
260d7101085a33323664fc145e21a8a07057015e0robbiew * Copyright (C) Bull S.A. 2001
360d7101085a33323664fc145e21a8a07057015e0robbiew * Copyright (c) International Business Machines  Corp., 2001
460d7101085a33323664fc145e21a8a07057015e0robbiew *
560d7101085a33323664fc145e21a8a07057015e0robbiew *   This program is free software;  you can redistribute it and/or modify
660d7101085a33323664fc145e21a8a07057015e0robbiew *   it under the terms of the GNU General Public License as published by
760d7101085a33323664fc145e21a8a07057015e0robbiew *   the Free Software Foundation; either version 2 of the License, or
860d7101085a33323664fc145e21a8a07057015e0robbiew *   (at your option) any later version.
960d7101085a33323664fc145e21a8a07057015e0robbiew *
1060d7101085a33323664fc145e21a8a07057015e0robbiew *   This program is distributed in the hope that it will be useful,
1160d7101085a33323664fc145e21a8a07057015e0robbiew *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
1260d7101085a33323664fc145e21a8a07057015e0robbiew *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1360d7101085a33323664fc145e21a8a07057015e0robbiew *   the GNU General Public License for more details.
1460d7101085a33323664fc145e21a8a07057015e0robbiew *
1560d7101085a33323664fc145e21a8a07057015e0robbiew *   You should have received a copy of the GNU General Public License
1660d7101085a33323664fc145e21a8a07057015e0robbiew *   along with this program;  if not, write to the Free Software
174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1860d7101085a33323664fc145e21a8a07057015e0robbiew */
1960d7101085a33323664fc145e21a8a07057015e0robbiew
2060d7101085a33323664fc145e21a8a07057015e0robbiew/******************************************************************************/
2160d7101085a33323664fc145e21a8a07057015e0robbiew/*                                                                            */
2260d7101085a33323664fc145e21a8a07057015e0robbiew/* Dec-03-2001  Created: Jacky Malcles & Jean Noel Cordenner                  */
2360d7101085a33323664fc145e21a8a07057015e0robbiew/*              These tests are adapted from AIX float PVT tests.             */
2460d7101085a33323664fc145e21a8a07057015e0robbiew/*                                                                            */
2560d7101085a33323664fc145e21a8a07057015e0robbiew/******************************************************************************/
26fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <float.h>
27fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <stdio.h>
28fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <stdlib.h>
29fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <string.h>
30fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <errno.h>
31fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <limits.h>
32fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <unistd.h>
33fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <fcntl.h>
34fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <errno.h>
35fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <sys/signal.h>
36fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger#include <math.h>
37fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger
38fc47348dda2b089321861f5a6c27534172661aa4Mike Frysingerint create_Result_file(void)
3960d7101085a33323664fc145e21a8a07057015e0robbiew{
4060d7101085a33323664fc145e21a8a07057015e0robbiew	int i, nbVal;
41fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	double tabR[20000], Inc;
4260d7101085a33323664fc145e21a8a07057015e0robbiew	char *F_name;
4360d7101085a33323664fc145e21a8a07057015e0robbiew	int fp;
4460d7101085a33323664fc145e21a8a07057015e0robbiew
4560d7101085a33323664fc145e21a8a07057015e0robbiew	F_name = "sqrt_out.ref";
462c28215423293e443469a07ae7011135d058b671Garrett Cooper	nbVal = 20000;
4760d7101085a33323664fc145e21a8a07057015e0robbiew
48fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	for (i = 0; i < nbVal; i++) {
4960d7101085a33323664fc145e21a8a07057015e0robbiew		Inc = exp(2);
50fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		tabR[i] = sqrt(Inc * i + Inc);
5160d7101085a33323664fc145e21a8a07057015e0robbiew	}
5260d7101085a33323664fc145e21a8a07057015e0robbiew
53fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	fp = open(F_name, O_RDWR | O_CREAT | O_TRUNC, 0777);
54fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	if (!fp) {
55fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		printf("error opening file");
5660d7101085a33323664fc145e21a8a07057015e0robbiew		close(fp);
5760d7101085a33323664fc145e21a8a07057015e0robbiew		return -1;
58fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	} else {
59fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		for (i = 0; i < nbVal; i++) {
60fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger			write(fp, &tabR[i], sizeof(double));
6160d7101085a33323664fc145e21a8a07057015e0robbiew		}
6260d7101085a33323664fc145e21a8a07057015e0robbiew
6360d7101085a33323664fc145e21a8a07057015e0robbiew		close(fp);
6460d7101085a33323664fc145e21a8a07057015e0robbiew		return 0;
6560d7101085a33323664fc145e21a8a07057015e0robbiew	}
6660d7101085a33323664fc145e21a8a07057015e0robbiew}
6760d7101085a33323664fc145e21a8a07057015e0robbiew
6860d7101085a33323664fc145e21a8a07057015e0robbiew/*********************************************************************
6960d7101085a33323664fc145e21a8a07057015e0robbiew *
7060d7101085a33323664fc145e21a8a07057015e0robbiew *	create input data file
7160d7101085a33323664fc145e21a8a07057015e0robbiew *
7260d7101085a33323664fc145e21a8a07057015e0robbiew */
7360d7101085a33323664fc145e21a8a07057015e0robbiew
74fc47348dda2b089321861f5a6c27534172661aa4Mike Frysingerint create_Data_file(void)
7560d7101085a33323664fc145e21a8a07057015e0robbiew{
7660d7101085a33323664fc145e21a8a07057015e0robbiew	int i, nbVal;
77fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	double tabD[20000], Inc;
7860d7101085a33323664fc145e21a8a07057015e0robbiew	char *F_name;
7960d7101085a33323664fc145e21a8a07057015e0robbiew	int fp;
8060d7101085a33323664fc145e21a8a07057015e0robbiew
8160d7101085a33323664fc145e21a8a07057015e0robbiew	F_name = "sqrt_inp.ref";
822c28215423293e443469a07ae7011135d058b671Garrett Cooper	nbVal = 20000;
8360d7101085a33323664fc145e21a8a07057015e0robbiew
8460d7101085a33323664fc145e21a8a07057015e0robbiew	Inc = exp(2);
8560d7101085a33323664fc145e21a8a07057015e0robbiew
86fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	for (i = 0; i < nbVal; i++) {
8760d7101085a33323664fc145e21a8a07057015e0robbiew		tabD[i] = (Inc * i) + Inc;
8860d7101085a33323664fc145e21a8a07057015e0robbiew	}
8960d7101085a33323664fc145e21a8a07057015e0robbiew
90fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	fp = open(F_name, O_RDWR | O_CREAT | O_TRUNC, 0777);
91fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	if (!fp) {
92fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		printf("error opening file");
93fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		close(fp);
94fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		return -1;
95fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	} else {
96fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		for (i = 0; i < nbVal; i++) {
97fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger			write(fp, &tabD[i], sizeof(double));
9860d7101085a33323664fc145e21a8a07057015e0robbiew		}
9960d7101085a33323664fc145e21a8a07057015e0robbiew		close(fp);
10060d7101085a33323664fc145e21a8a07057015e0robbiew		return 0;
10160d7101085a33323664fc145e21a8a07057015e0robbiew	}
10260d7101085a33323664fc145e21a8a07057015e0robbiew}
10360d7101085a33323664fc145e21a8a07057015e0robbiew
104fc47348dda2b089321861f5a6c27534172661aa4Mike Frysingerint main(int argc, char *argv[])
10560d7101085a33323664fc145e21a8a07057015e0robbiew{
106fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	if (argc > 1) {
107fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger		switch (atoi(argv[1])) {
10860d7101085a33323664fc145e21a8a07057015e0robbiew		case 1:
10960d7101085a33323664fc145e21a8a07057015e0robbiew			if (create_Data_file() == 0)
11060d7101085a33323664fc145e21a8a07057015e0robbiew				printf("Data file created\n");
11160d7101085a33323664fc145e21a8a07057015e0robbiew			else
112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				printf("problem during %s data file creation\n",
113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				       argv[0]);
11460d7101085a33323664fc145e21a8a07057015e0robbiew			break;
11560d7101085a33323664fc145e21a8a07057015e0robbiew
11660d7101085a33323664fc145e21a8a07057015e0robbiew		case 2:
11760d7101085a33323664fc145e21a8a07057015e0robbiew			if (create_Result_file() == 0)
11860d7101085a33323664fc145e21a8a07057015e0robbiew				printf("Result file created\n");
11960d7101085a33323664fc145e21a8a07057015e0robbiew			else
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				printf
121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    ("problem during %s result file creation\n",
122354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     argv[0]);
12360d7101085a33323664fc145e21a8a07057015e0robbiew			break;
12460d7101085a33323664fc145e21a8a07057015e0robbiew		default:
12560d7101085a33323664fc145e21a8a07057015e0robbiew			printf("Bad arglist code for: '%s'\n", argv[0]);
12660d7101085a33323664fc145e21a8a07057015e0robbiew			return -1;
12760d7101085a33323664fc145e21a8a07057015e0robbiew			break;
12860d7101085a33323664fc145e21a8a07057015e0robbiew		}
129fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	} else {
13060d7101085a33323664fc145e21a8a07057015e0robbiew		if (create_Data_file() != 0)
131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("problem during %s data file creation\n",
132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			       argv[0]);
13360d7101085a33323664fc145e21a8a07057015e0robbiew		if (create_Result_file() != 0)
134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("problem during %s result file creation\n",
135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			       argv[0]);
13660d7101085a33323664fc145e21a8a07057015e0robbiew	}
137ae45c71a1ee39a8ef47ea4ff8b1197613cefe276robbiew
138fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger	return 0;
139fc47348dda2b089321861f5a6c27534172661aa4Mike Frysinger}
140