16429Svs195195 /*
26429Svs195195 * CDDL HEADER START
36429Svs195195 *
46429Svs195195 * The contents of this file are subject to the terms of the
56429Svs195195 * Common Development and Distribution License (the "License").
66429Svs195195 * You may not use this file except in compliance with the License.
76429Svs195195 *
86429Svs195195 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96429Svs195195 * or http://www.opensolaris.org/os/licensing.
106429Svs195195 * See the License for the specific language governing permissions
116429Svs195195 * and limitations under the License.
126429Svs195195 *
136429Svs195195 * When distributing Covered Code, include this CDDL HEADER in each
146429Svs195195 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
156429Svs195195 * If applicable, add the following below this CDDL HEADER, with the
166429Svs195195 * fields enclosed by brackets "[]" replaced with your own identifying
176429Svs195195 * information: Portions Copyright [yyyy] [name of copyright owner]
186429Svs195195 *
196429Svs195195 * CDDL HEADER END
206429Svs195195 */
216429Svs195195
226429Svs195195 /*
236491Sia112686 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
246429Svs195195 * Use is subject to license terms.
256429Svs195195 */
266429Svs195195
276429Svs195195 #pragma ident "%Z%%M% %I% %E% SMI"
286429Svs195195
296429Svs195195 #ifdef __lint
306429Svs195195 #pragma error_messages(off, E_VALUE_TYPE)
316429Svs195195 #endif
326429Svs195195
336429Svs195195 #include <stdio.h>
346429Svs195195 #include <stdlib.h>
356429Svs195195 #include <signal.h>
366429Svs195195 #include <unistd.h>
376429Svs195195 #include <string.h>
386429Svs195195 #include <sys/types.h>
396429Svs195195 #include <sys/file.h>
406429Svs195195 #include <sys/fcntl.h>
416429Svs195195 #include <math.h>
426429Svs195195 #include <sys/dditypes.h>
436429Svs195195 #include <sys/ddidmareq.h>
446429Svs195195 #include <sys/ddi_impldefs.h>
456429Svs195195 #include <sys/processor.h>
466429Svs195195 #include <sys/pset.h>
476429Svs195195 #include <time.h>
486429Svs195195 #include <kstat.h>
496429Svs195195 #include <fp.h>
506429Svs195195 #include <fptest.h>
516429Svs195195 #include <fpstestmsg.h>
526429Svs195195 #include <externs.h>
536429Svs195195 #include <fps_ereport.h>
546429Svs195195 #include <fps_defines.h>
556429Svs195195
566429Svs195195 #define GetBoxStringLen SYS_NMLN
576429Svs195195 #define NANO_IN_MILI 1000000
586429Svs195195 #define MILI_IN_SEC 1000
596429Svs195195 #define str_v9 "sparcv9"
606429Svs195195 #define str_v9b "sparcv9+vis2"
616429Svs195195 #define testname "fptest"
626429Svs195195
636429Svs195195 static int fps_exec_time = 0;
646429Svs195195 static int fps_verbose_msg = 0;
656429Svs195195 static int fpu_cpu = -1;
666429Svs195195 static int test_group = 1;
676429Svs195195 static int stress_level = 1;
686429Svs195195 static int limit_group = 1;
696429Svs195195 static int proc_fr;
706429Svs195195 static int lowstresslapagroup_len;
716429Svs195195 static int lowstresslapagroup1000_len;
726429Svs195195 static int lowstresslapagroup1500_len;
736429Svs195195 static int lowstresslapagroup2000_len;
746429Svs195195 static int medstresslapagroup_len;
756429Svs195195 static int highstresslapagroup_len;
766429Svs195195 static struct LapaGroup *lowstresslapagroup;
776429Svs195195
786429Svs195195 static void exe_time(hrtime_t timeStart);
796429Svs195195 static void process_fpu_args(int argc, char *argv[]);
806429Svs195195 static int check_proc(int cpu_id);
816429Svs195195 static int do_lapack(int unit, struct fps_test_ereport *report);
826429Svs195195 static int dpmath(struct fps_test_ereport *report);
836429Svs195195 static int is_cpu_on(int unit);
846429Svs195195 static int spmath(struct fps_test_ereport *report);
856429Svs195195 static int start_testing(int unit,
866429Svs195195 struct fps_test_ereport *report);
876429Svs195195
886429Svs195195 /*
896429Svs195195 * main(int argc, char *argv[])
906429Svs195195 * is the main entry into the test.
916429Svs195195 */
926429Svs195195 int
main(int argc,char * argv[])936429Svs195195 main(int argc, char *argv[])
946429Svs195195 {
956429Svs195195 int test_ret;
966429Svs195195 int procb;
976429Svs195195 int proc_setb;
986863Sia112686 int ret = FPU_OK;
996429Svs195195 hrtime_t test_start;
1006429Svs195195 psetid_t opset = PS_NONE;
1016429Svs195195 processorid_t proc_used = PBIND_NONE;
1026429Svs195195 static struct fps_test_ereport ereport_data;
1036429Svs195195
1046429Svs195195 /* these are % ( modulo ) values */
1056429Svs195195 lowstresslapagroup1000_len =
1066429Svs195195 (sizeof (LowStressLapaGroup_1000) / sizeof (struct LapaGroup)) - 1;
1076429Svs195195 lowstresslapagroup1500_len =
1086429Svs195195 (sizeof (LowStressLapaGroup_1500) / sizeof (struct LapaGroup)) - 1;
1096429Svs195195 lowstresslapagroup2000_len =
1106429Svs195195 (sizeof (LowStressLapaGroup_2000) / sizeof (struct LapaGroup)) - 1;
1116429Svs195195 medstresslapagroup_len =
1126429Svs195195 (sizeof (MedStressLapaGroup) / sizeof (struct LapaGroup)) - 1;
1136429Svs195195 highstresslapagroup_len =
1146429Svs195195 (sizeof (HighStressLapaGroup) / sizeof (struct LapaGroup)) - 1;
1156429Svs195195
1166429Svs195195 /* default frequency values */
1176429Svs195195 proc_fr = 1000;
1186429Svs195195 lowstresslapagroup_len = lowstresslapagroup1000_len;
1196429Svs195195 lowstresslapagroup = LowStressLapaGroup_1000;
1206429Svs195195
1216429Svs195195 initialize_fps_test_struct(&ereport_data);
1226429Svs195195
1236429Svs195195 process_fpu_args(argc, argv);
1246429Svs195195
1256429Svs195195 fps_msg(fps_verbose_msg, gettext(FPSM_04), lowstresslapagroup_len,
1266429Svs195195 medstresslapagroup_len, highstresslapagroup_len);
1276429Svs195195
1286429Svs195195 #ifdef V9B
1296429Svs195195 fps_msg(fps_verbose_msg, gettext(FPSM_03), testname, "V9B");
1306429Svs195195 #else
1316429Svs195195 fps_msg(fps_verbose_msg, gettext(FPSM_03), testname, "V9");
1326429Svs195195 #endif
1336429Svs195195
1346429Svs195195 if (fpu_cpu < 0)
1356429Svs195195 return (FPU_INVALID_ARG);
1366429Svs195195
1376429Svs195195 test_start = gethrtime();
1386429Svs195195
1396429Svs195195 procb = processor_bind(P_PID, P_MYID, fpu_cpu, NULL);
1406429Svs195195
1416429Svs195195 if (procb) {
1426429Svs195195 if ((pset_assign(PS_QUERY,
1436429Svs195195 (processorid_t)fpu_cpu, &opset) == 0) &&
1446429Svs195195 (opset != PS_NONE)) {
1456429Svs195195 proc_setb = pset_bind(opset, P_PID, P_MYID, NULL);
1466429Svs195195 }
1476429Svs195195
1486429Svs195195 if (proc_setb) {
1496429Svs195195 return (FPU_BIND_FAIL);
1506429Svs195195 }
1516429Svs195195
1526429Svs195195 procb = processor_bind(P_PID, P_MYID, fpu_cpu, NULL);
1536429Svs195195
1546429Svs195195 if (procb) {
155*7186Skk158166 (void) pset_bind(PS_NONE, P_PID, P_MYID, NULL);
1566429Svs195195 return (FPU_BIND_FAIL);
1576429Svs195195 }
1586429Svs195195 }
1596429Svs195195
1606429Svs195195 /* start testing */
1616429Svs195195 ereport_data.cpu_id = fpu_cpu;
1626429Svs195195 test_ret = start_testing(fpu_cpu, &ereport_data);
1636429Svs195195
1646863Sia112686 /*
1656863Sia112686 * Testing is now done and a return code is selected.
1666863Sia112686 * FPU_OK: No problems found on FPU tested.
1676863Sia112686 *
1686863Sia112686 * FPU_BIND_FAIL: CPU currently bound to is not the
1696863Sia112686 * one started on. Attempt to file ereport if CPU
1706863Sia112686 * is supported, but don't include resource so
1716863Sia112686 * CPU isn't offlined.
1726863Sia112686 *
1736863Sia112686 * FPU_UNSUPPORT: Test wasn't run on a supported CPU.
1746863Sia112686 * Error was found, but no ereport will be filed since
1756863Sia112686 * CPU is unsupported and test values may not be valid.
1766863Sia112686 *
1776863Sia112686 * FPU_FOROFFLINE: Error found on FPU and ereport
1786863Sia112686 * payload successfully sent.
1796863Sia112686 *
1806863Sia112686 * FPU_EREPORT_INCOM: Error found on FPU, ereport payload
1816863Sia112686 * sent, but some nonessential information failed to add
1826863Sia112686 * to that payload. CPU will still be offlined.
1836863Sia112686 *
1846863Sia112686 * FPU_EREPORT_FAIL: Error found on FPU, but ereport payload
1856863Sia112686 * failed to transfer either due to lack of mandatory data
1866863Sia112686 * or unable to send on FPScrubber systevent channel.
1876863Sia112686 */
1886863Sia112686
1896429Svs195195 if (test_ret == FPU_FOROFFLINE) {
1906429Svs195195 /*
1916429Svs195195 * check bind and
1926429Svs195195 * check if on supported plaform
1936429Svs195195 */
194*7186Skk158166 (void) processor_bind(P_PID, P_MYID, PBIND_QUERY, &proc_used);
1956429Svs195195
1966429Svs195195 if (proc_used != (processorid_t)fpu_cpu ||
1976429Svs195195 proc_used == PBIND_NONE) {
1986429Svs195195 ret = FPU_BIND_FAIL;
1996429Svs195195 ereport_data.is_valid_cpu = 0;
2006429Svs195195 }
2016429Svs195195
2026429Svs195195 if (check_proc(fpu_cpu) != 0) {
2036429Svs195195 ret = FPU_UNSUPPORT;
2046429Svs195195 ereport_data.is_valid_cpu = 0;
2056429Svs195195 }
2066429Svs195195
2076429Svs195195 if (ret != FPU_UNSUPPORT) {
2086863Sia112686 test_ret = fps_generate_ereport_struct(&ereport_data);
2096863Sia112686 if (ret != FPU_BIND_FAIL) {
2106863Sia112686 ret = test_ret;
2116863Sia112686 }
2126429Svs195195 }
2136429Svs195195 }
2146429Svs195195
2156429Svs195195 if (fps_exec_time)
2166429Svs195195 exe_time(test_start);
2176429Svs195195
2186429Svs195195 return (ret);
2196429Svs195195 }
2206429Svs195195
2216429Svs195195 /*
2226429Svs195195 * exe_time(hrtime_t timeStart, int unit)
2236429Svs195195 * returns Execution time: H.M.S.Msec
2246429Svs195195 */
2256429Svs195195 static void
exe_time(hrtime_t time_start)2266429Svs195195 exe_time(hrtime_t time_start)
2276429Svs195195 {
2286429Svs195195 hrtime_t mili_now;
2296429Svs195195 hrtime_t mili_start;
2306429Svs195195 long hour;
2316429Svs195195 long minute;
2326429Svs195195 long second;
2336429Svs195195 long mili;
2346429Svs195195 long dif_mili;
2356429Svs195195 long mili_to_sec;
2366429Svs195195
2376429Svs195195 mili_start = time_start / NANO_IN_MILI;
2386429Svs195195 mili_now = gethrtime() / NANO_IN_MILI;
2396429Svs195195
2406429Svs195195 dif_mili = (long)(mili_now - mili_start);
2416429Svs195195 mili_to_sec = dif_mili / MILI_IN_SEC;
2426429Svs195195 hour = mili_to_sec / 3600;
2436429Svs195195 minute = (mili_to_sec - (hour * 3600)) / 60;
2446429Svs195195 second = (mili_to_sec - ((hour * 3600) + (minute * 60)));
2456429Svs195195 mili =
2466429Svs195195 (dif_mili - ((second * 1000) + (((hour * 3600) +
2476429Svs195195 (minute * 60)) * 1000)));
2486429Svs195195
249*7186Skk158166 (void) printf("Execution time: %ldH.%ldM.%ldS.%ldMsec\n", hour, minute,
2506429Svs195195 second, mili);
251*7186Skk158166 (void) fflush(NULL);
2526429Svs195195 }
2536429Svs195195
2546429Svs195195 /*
2556429Svs195195 * start_testing(int unit, int argc, char *argv[],
2566429Svs195195 * struct fps_test_ereport *report) performs each sub-test
2576429Svs195195 * sequentially and stores any failed test information in
2586429Svs195195 * report.
2596429Svs195195 */
2606429Svs195195 static int
start_testing(int unit,struct fps_test_ereport * report)2616429Svs195195 start_testing(int unit, struct fps_test_ereport *report)
2626429Svs195195 {
2636429Svs195195 int lim;
2646429Svs195195 int sdclimit;
2656429Svs195195
2666429Svs195195 if (report == NULL)
2676429Svs195195 return (-1);
2686429Svs195195
2696429Svs195195 /*
2706429Svs195195 * The non-lapack logic will be executed when -p 0 OR -p ALL
2716429Svs195195 */
2726429Svs195195 if ((0 == test_group) || (12345 == test_group)) {
2736429Svs195195 fps_msg(fps_verbose_msg, gettext(FPSM_01), unit, limit_group);
2746429Svs195195
2756429Svs195195 /* turn on signal handlers */
2766429Svs195195 (void) winitfp();
2776429Svs195195
2786429Svs195195 if (fpu_sysdiag(report) != 0) {
2796429Svs195195 return (FPU_FOROFFLINE);
2806429Svs195195 }
2816429Svs195195
2826429Svs195195 /* turn off signal handlers */
2836429Svs195195 (void) restore_signals();
2846429Svs195195
2856429Svs195195 if (spmath(report) != 0) {
2866429Svs195195 return (FPU_FOROFFLINE);
2876429Svs195195 }
2886429Svs195195
2896429Svs195195 if (dpmath(report) != 0) {
2906429Svs195195 return (FPU_FOROFFLINE);
2916429Svs195195 }
2926429Svs195195
2936429Svs195195 if (cbbcopy(report) != 0) {
2946429Svs195195 return (FPU_FOROFFLINE);
2956429Svs195195 }
2966429Svs195195
2976429Svs195195 sdclimit = 100;
2986429Svs195195
2996429Svs195195 if (limit_group == 2)
3006429Svs195195 sdclimit = 1000;
3016429Svs195195 if (limit_group == 3)
3026429Svs195195 sdclimit = 10000;
3036429Svs195195
3046429Svs195195 if (cheetah_sdc_test(sdclimit, report) != 0) {
3056429Svs195195 return (FPU_FOROFFLINE);
3066429Svs195195 }
3076429Svs195195
3086429Svs195195 lim = 100;
3096429Svs195195
3106429Svs195195 if (limit_group == 2)
3116429Svs195195 lim = 1000;
3126429Svs195195 if (limit_group == 3)
3136429Svs195195 lim = 100000;
3146429Svs195195
3156429Svs195195 if (fpu_fdivd(lim, report) != 0) {
3166429Svs195195 return (FPU_FOROFFLINE);
3176429Svs195195 }
3186429Svs195195
3196429Svs195195 if (fpu_fmuld(lim, report) != 0) {
3206429Svs195195 return (FPU_FOROFFLINE);
3216429Svs195195 }
3226429Svs195195
3236429Svs195195 if (fpu_fmulx(lim, report) != 0) {
3246429Svs195195 return (FPU_FOROFFLINE);
3256429Svs195195 }
3266429Svs195195
3276429Svs195195 #ifdef V9B
3286429Svs195195
3296429Svs195195 lim = 10;
3306429Svs195195
3316429Svs195195 if (limit_group == 2)
3326429Svs195195 lim = 100;
3336429Svs195195 if (limit_group == 3)
3346429Svs195195 lim = 1000;
3356429Svs195195
336*7186Skk158166 if (align_data(lim, report) != 0) {
3376429Svs195195 return (FPU_FOROFFLINE);
3386429Svs195195 }
3396429Svs195195
340*7186Skk158166 if (vis_test(report) != 0) {
3416429Svs195195 return (FPU_FOROFFLINE);
3426429Svs195195 }
3436429Svs195195
3446429Svs195195 #endif
3456429Svs195195
3466429Svs195195 if (test_group == 0)
3476429Svs195195 return (FPU_OK);
3486429Svs195195
3496429Svs195195 } /* end the non lapack area */
3506429Svs195195
3516429Svs195195 if (do_lapack(unit, report) != 0)
3526429Svs195195 return (FPU_FOROFFLINE);
3536429Svs195195
3546429Svs195195 return (FPU_OK);
3556429Svs195195 }
3566429Svs195195
3576429Svs195195 /*
3586429Svs195195 * do_lapack(struct fps_test_ereport *report) calls the lapack
3596429Svs195195 * tests and stores any error info into report.
3606429Svs195195 */
3616429Svs195195 static int
do_lapack(int unit,struct fps_test_ereport * report)3626429Svs195195 do_lapack(int unit, struct fps_test_ereport *report)
3636429Svs195195 {
3646429Svs195195 int lapa_group_index;
3656429Svs195195 int lapa_loop_stress;
3666429Svs195195 int lapa_stress;
3676429Svs195195 int lapa_loop;
3686429Svs195195 int high_lim;
3696429Svs195195 int low_lim;
3706429Svs195195
3716429Svs195195 fps_msg(fps_verbose_msg, gettext(FPSM_05), limit_group);
3726429Svs195195
3736429Svs195195 switch (limit_group) {
3746429Svs195195 case 1:
3756429Svs195195 lapa_group_index = test_group % lowstresslapagroup_len;
3766429Svs195195
3776429Svs195195 if (lapa_group_index <= 0)
3786429Svs195195 lapa_group_index = 1;
3796429Svs195195
3806429Svs195195 low_lim = lowstresslapagroup[lapa_group_index].limLow;
3816429Svs195195 high_lim = lowstresslapagroup[lapa_group_index].limHigh;
3826429Svs195195
3836429Svs195195 if (test_group == 12345) {
3846429Svs195195 low_lim = 1;
3856429Svs195195 high_lim =
3866429Svs195195 lowstresslapagroup[lowstresslapagroup_len - 1]
3876429Svs195195 .limHigh;
3886429Svs195195 }
3896429Svs195195
3906429Svs195195 break;
3916429Svs195195 case 2:
3926429Svs195195 lapa_group_index = test_group % medstresslapagroup_len;
3936429Svs195195
3946429Svs195195 if (lapa_group_index <= 0)
3956429Svs195195 lapa_group_index = 1;
3966429Svs195195
3976429Svs195195 low_lim = MedStressLapaGroup[lapa_group_index].limLow;
3986429Svs195195 high_lim = MedStressLapaGroup[lapa_group_index].limHigh;
3996429Svs195195
4006429Svs195195 if (test_group == 12345) {
4016429Svs195195 low_lim = 1;
4026429Svs195195 high_lim =
4036429Svs195195 MedStressLapaGroup[medstresslapagroup_len - 1]
4046429Svs195195 .limHigh;
4056429Svs195195 }
4066429Svs195195 break;
4076429Svs195195 case 3:
4086429Svs195195 lapa_group_index = test_group % highstresslapagroup_len;
4096429Svs195195
4106429Svs195195 if (lapa_group_index <= 0)
4116429Svs195195 lapa_group_index = 1;
4126429Svs195195
4136429Svs195195 low_lim = HighStressLapaGroup[lapa_group_index].limLow;
4146429Svs195195 high_lim = HighStressLapaGroup[lapa_group_index].limHigh;
4156429Svs195195
4166429Svs195195 if (test_group == 12345) {
4176429Svs195195 low_lim = 1;
4186429Svs195195 high_lim =
4196429Svs195195 HighStressLapaGroup[highstresslapagroup_len - 1]
4206429Svs195195 .limHigh;
4216429Svs195195 }
4226429Svs195195
4236429Svs195195 /* hidden arg -s X */
4246429Svs195195 if (stress_level > 4000) {
4256429Svs195195 low_lim = 1;
4266429Svs195195 high_lim = stress_level;
4276429Svs195195 }
4286429Svs195195 break;
4296429Svs195195 default:
4306429Svs195195 low_lim = 100;
4316429Svs195195 high_lim = 200;
4326429Svs195195 break;
4336429Svs195195 }
4346429Svs195195
4356429Svs195195 if (low_lim < 1)
4366429Svs195195 low_lim = 101;
4376429Svs195195
4386429Svs195195 if (high_lim > 10000)
4396429Svs195195 high_lim = 201;
4406429Svs195195
4416429Svs195195 for (lapa_stress = low_lim; lapa_stress <= high_lim;
4426429Svs195195 lapa_stress = lapa_stress + 1) {
4436429Svs195195 if (lapa_stress > 999) {
4446429Svs195195 for (lapa_loop = lapa_stress; lapa_loop <= high_lim;
4456429Svs195195 lapa_loop = lapa_loop + 1000) {
4466429Svs195195 lapa_loop_stress = lapa_loop;
4476429Svs195195
4486429Svs195195 if (lapa_loop_stress == 4000)
4496429Svs195195 lapa_loop_stress = 4016;
4506429Svs195195 if (lapa_loop_stress == 7000)
4516429Svs195195 lapa_loop_stress = 7016;
4526429Svs195195 if (lapa_loop_stress == 8000)
4536429Svs195195 lapa_loop_stress = 8034;
4546429Svs195195
4556429Svs195195 if (slinpack_test(lapa_loop_stress, unit,
4566429Svs195195 report, fps_verbose_msg))
4576429Svs195195 return (-4);
458*7186Skk158166 #ifndef __lint
4596429Svs195195 if (dlinpack_test(lapa_loop_stress, unit,
4606429Svs195195 report, fps_verbose_msg))
4616429Svs195195 return (-4);
462*7186Skk158166 #endif
4636429Svs195195 }
4646429Svs195195 break;
4656429Svs195195 }
4666429Svs195195
4676429Svs195195 if (slinpack_test(lapa_stress, unit, report, fps_verbose_msg))
4686429Svs195195 return (-4);
469*7186Skk158166 #ifndef __lint
4706429Svs195195 if (dlinpack_test(lapa_stress, unit, report, fps_verbose_msg))
4716429Svs195195 return (-4);
472*7186Skk158166 #endif
4736429Svs195195 }
4746429Svs195195
4756429Svs195195 return (0);
4766429Svs195195 }
4776429Svs195195
4786429Svs195195
4796429Svs195195 /*
4806429Svs195195 * spmath(int unit, struct fps_test_ereport *report)
4816429Svs195195 * peforms basic tests of the arithmetic operations:
4826429Svs195195 * +, -, *, and /. If any errors, they are stored in
4836429Svs195195 * report.
4846429Svs195195 */
4856429Svs195195 static int
spmath(struct fps_test_ereport * report)4866429Svs195195 spmath(struct fps_test_ereport *report)
4876429Svs195195 {
4886429Svs195195 char err_data[MAX_INFO_SIZE];
4896429Svs195195 float a;
4906429Svs195195 float ans;
4916429Svs195195 float b;
4926429Svs195195 float expect_ans;
4936429Svs195195 uint64_t expected;
4946429Svs195195 uint64_t observed;
4956429Svs195195
4966429Svs195195 a = 1.2345;
4976429Svs195195 b = 0.9876;
4986429Svs195195
4996429Svs195195 #ifndef __lint
5006429Svs195195 ans = a + b;
5016429Svs195195 #endif
5026429Svs195195 ans = a + b;
5036429Svs195195 expect_ans = 2.2221000;
5046429Svs195195 if (ans != expect_ans) {
5056429Svs195195 if (ans < (2.2221000 - SPMARGIN) ||
5066429Svs195195 ans > (2.2221000 + SPMARGIN)) {
507*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
5086429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
5096429Svs195195 expect_ans, ans);
5106429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
5116429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
5126429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
5136429Svs195195 report, 6112, &observed, &expected, 1,
5146429Svs195195 1, err_data);
5156429Svs195195
5166429Svs195195 return (-2);
5176429Svs195195 }
5186429Svs195195 }
5196429Svs195195
5206429Svs195195 ans = (a - b);
5216429Svs195195 expect_ans = 0.2469000;
5226429Svs195195 if (ans != expect_ans) {
5236429Svs195195 if (ans < (0.2469000 - SPMARGIN) ||
5246429Svs195195 ans > (0.2469000 + SPMARGIN)) {
525*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
5266429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
5276429Svs195195 expect_ans, ans);
5286429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
5296429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
5306429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
5316429Svs195195 report, 6113, &observed, &expected, 1,
5326429Svs195195 1, err_data);
5336429Svs195195
5346429Svs195195 return (-2);
5356429Svs195195 }
5366429Svs195195 }
5376429Svs195195
5386429Svs195195 ans = a * b;
5396429Svs195195 expect_ans = 1.2191923;
5406429Svs195195 if (ans != expect_ans) {
5416429Svs195195 if (ans < (1.2191923 - SPMARGIN) ||
5426429Svs195195 ans > (1.2191923 + SPMARGIN)) {
543*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
5446429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
5456429Svs195195 expect_ans, ans);
5466429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
5476429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
5486429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
5496429Svs195195 report, 6114, &observed, &expected, 1,
5506429Svs195195 1, err_data);
5516429Svs195195
5526429Svs195195 return (-2);
5536429Svs195195 }
5546429Svs195195 }
5556429Svs195195
5566429Svs195195 ans = a / b;
5576429Svs195195 expect_ans = 1.2500000;
5586429Svs195195 if (ans != expect_ans) {
5596429Svs195195 if (ans < (1.2500000 - SPMARGIN) ||
5606429Svs195195 ans > (1.2500000 + SPMARGIN)) {
561*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
5626429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
5636429Svs195195 expect_ans, ans);
5646429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
5656429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
5666429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
5676429Svs195195 report, 6115, &observed, &expected, 1,
5686429Svs195195 1, err_data);
5696429Svs195195
5706429Svs195195 return (-2);
5716429Svs195195 }
5726429Svs195195 }
5736429Svs195195
5746429Svs195195 ans = a + (a - b);
5756429Svs195195 expect_ans = 1.4814000;
5766429Svs195195 if (ans != expect_ans) {
5776429Svs195195 if (ans < (1.4814000 - SPMARGIN) ||
5786429Svs195195 ans > (1.4814000 + SPMARGIN)) {
579*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
5806429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
5816429Svs195195 expect_ans, ans);
5826429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
5836429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
5846429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
5856429Svs195195 report, 6116, &observed, &expected, 1,
5866429Svs195195 1, err_data);
5876429Svs195195
5886429Svs195195 return (-2);
5896429Svs195195 }
5906429Svs195195 }
5916429Svs195195
5926429Svs195195 ans = a - (a + b);
5936429Svs195195 expect_ans = -(0.9876000);
5946429Svs195195 if (ans != expect_ans) {
5956429Svs195195 if (ans < (-(0.9876000) - SPMARGIN) ||
5966429Svs195195 ans > (-(0.9876000) + SPMARGIN)) {
597*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
5986429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
5996429Svs195195 expect_ans, ans);
6006429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
6016429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
6026429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
6036429Svs195195 report, 6117, &observed, &expected, 1,
6046429Svs195195 1, err_data);
6056429Svs195195
6066429Svs195195 return (-2);
6076429Svs195195 }
6086429Svs195195 }
6096429Svs195195
6106429Svs195195 ans = a + (a * b);
6116429Svs195195 expect_ans = 2.4536924;
6126429Svs195195 if (ans != expect_ans) {
6136429Svs195195 if (ans < (2.4536924 - SPMARGIN) ||
6146429Svs195195 ans > (2.4536924 + SPMARGIN)) {
615*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
6166429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
6176429Svs195195 expect_ans, ans);
6186429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
6196429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
6206429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
6216429Svs195195 report, 6118, &observed, &expected, 1,
6226429Svs195195 1, err_data);
6236429Svs195195
6246429Svs195195 return (-2);
6256429Svs195195 }
6266429Svs195195 }
6276429Svs195195
6286429Svs195195 ans = a - (a * b);
6296429Svs195195 expect_ans = 0.0153078;
6306429Svs195195 if (ans != expect_ans) {
6316429Svs195195 if (ans < (0.0153078 - SPMARGIN) ||
6326429Svs195195 ans > (0.0153078 + SPMARGIN)) {
633*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
6346429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
6356429Svs195195 expect_ans, ans);
6366429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
6376429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
6386429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
6396429Svs195195 report, 6119, &observed, &expected, 1,
6406429Svs195195 1, err_data);
6416429Svs195195
6426429Svs195195 return (-2);
6436429Svs195195 }
6446429Svs195195 }
6456429Svs195195
6466429Svs195195 ans = a + (a / b);
6476429Svs195195 expect_ans = 2.4844999;
6486429Svs195195 if (ans != expect_ans) {
6496429Svs195195 if (ans < (2.4844999 - SPMARGIN) ||
6506429Svs195195 ans > (2.4844999 + SPMARGIN)) {
651*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
6526429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
6536429Svs195195 expect_ans, ans);
6546429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
6556429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
6566429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
6576429Svs195195 report, 6120, &observed, &expected, 1,
6586429Svs195195 1, err_data);
6596429Svs195195
6606429Svs195195 return (-2);
6616429Svs195195 }
6626429Svs195195 }
6636429Svs195195
6646429Svs195195 ans = a - (a / b);
6656429Svs195195 expect_ans = expect_ans;
6666429Svs195195 if (ans != -(0.0155000)) {
6676429Svs195195 if (ans < (-(0.0155000) - SPMARGIN) ||
6686429Svs195195 ans > (-(0.0155000) + SPMARGIN)) {
669*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
6706429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
6716429Svs195195 expect_ans, ans);
6726429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
6736429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
6746429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
6756429Svs195195 report, 6121, &observed, &expected, 1,
6766429Svs195195 1, err_data);
6776429Svs195195
6786429Svs195195 return (-2);
6796429Svs195195 }
6806429Svs195195 }
6816429Svs195195
6826429Svs195195 ans = a * (a + b);
6836429Svs195195 expect_ans = 2.7431827;
6846429Svs195195 if (ans != expect_ans) {
6856429Svs195195 if (ans < (2.7431827 - SPMARGIN) ||
6866429Svs195195 ans > (2.7431827 + SPMARGIN)) {
687*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
6886429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
6896429Svs195195 expect_ans, ans);
6906429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
6916429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
6926429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
6936429Svs195195 report, 6122, &observed, &expected, 1,
6946429Svs195195 1, err_data);
6956429Svs195195
6966429Svs195195 return (-2);
6976429Svs195195 }
6986429Svs195195 }
6996429Svs195195
7006429Svs195195 ans = a * (a - b);
7016429Svs195195 expect_ans = 0.3047981;
7026429Svs195195 if (ans != expect_ans) {
7036429Svs195195 if (ans < (0.3047981 - SPMARGIN) ||
7046429Svs195195 ans > (0.3047981 + SPMARGIN)) {
705*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
7066429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
7076429Svs195195 expect_ans, ans);
7086429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
7096429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
7106429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
7116429Svs195195 report, 6123, &observed, &expected, 1,
7126429Svs195195 1, err_data);
7136429Svs195195
7146429Svs195195 return (-2);
7156429Svs195195 }
7166429Svs195195 }
7176429Svs195195
7186429Svs195195 ans = a / (a + b);
7196429Svs195195 expect_ans = 0.5555556;
7206429Svs195195 if (ans != expect_ans) {
7216429Svs195195 if (ans < (0.5555556 - SPMARGIN) ||
7226429Svs195195 ans > (0.5555556 + SPMARGIN)) {
723*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
7246429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
7256429Svs195195 expect_ans, ans);
7266429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
7276429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
7286429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
7296429Svs195195 report, 6124, &observed, &expected, 1,
7306429Svs195195 1, err_data);
7316429Svs195195
7326429Svs195195 return (-2);
7336429Svs195195 }
7346429Svs195195 }
7356429Svs195195
7366429Svs195195 ans = a / (a - b);
7376429Svs195195 expect_ans = 4.9999995;
7386429Svs195195 if (ans != expect_ans) {
7396429Svs195195 if (ans < (4.9999995 - SPMARGIN) ||
7406429Svs195195 ans > (4.9999995 + SPMARGIN)) {
741*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
7426429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
7436429Svs195195 expect_ans, ans);
7446429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
7456429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
7466429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
7476429Svs195195 report, 6125, &observed, &expected, 1,
7486429Svs195195 1, err_data);
7496429Svs195195
7506429Svs195195 return (-2);
7516429Svs195195 }
7526429Svs195195 }
7536429Svs195195
7546429Svs195195 ans = a * (a / b);
7556429Svs195195 expect_ans = 1.5431250;
7566429Svs195195 if (ans != expect_ans) {
7576429Svs195195 if (ans < (1.5431250 - SPMARGIN) ||
7586429Svs195195 ans > (1.5431250 + SPMARGIN)) {
759*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
7606429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
7616429Svs195195 expect_ans, ans);
7626429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
7636429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
7646429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
7656429Svs195195 report, 6126, &observed, &expected, 1,
7666429Svs195195 1, err_data);
7676429Svs195195
7686429Svs195195 return (-2);
7696429Svs195195 }
7706429Svs195195 }
7716429Svs195195
7726429Svs195195 ans = a / (a * b);
7736429Svs195195 expect_ans = 1.0125557;
7746429Svs195195 if (ans != expect_ans) {
7756429Svs195195 if (ans < (1.0125557 - SPMARGIN) ||
7766429Svs195195 ans > (1.0125557 + SPMARGIN)) {
777*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
7786429Svs195195 "\nExpected: %.8f\nObserved: %.8f",
7796429Svs195195 expect_ans, ans);
7806429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans);
7816429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans);
7826429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
7836429Svs195195 report, 6127, &observed, &expected, 1,
7846429Svs195195 1, err_data);
7856429Svs195195
7866429Svs195195 return (-2);
7876429Svs195195 }
7886429Svs195195 }
7896429Svs195195
7906429Svs195195 return (0);
7916429Svs195195 }
7926429Svs195195
7936429Svs195195 /*
7946429Svs195195 * dpmath(int unit, struct fps_test_ereport *report)
7956429Svs195195 * peforms basic tests of the arithmetic operations:
7966429Svs195195 * +, -, *, and /. It also performs tests of cos,
7976429Svs195195 * sine, tan, log, sqrt, and exp. If any errors,
7986429Svs195195 * they are stored in report.
7996429Svs195195 */
8006429Svs195195 static int
dpmath(struct fps_test_ereport * report)8016429Svs195195 dpmath(struct fps_test_ereport *report)
8026429Svs195195 {
8036429Svs195195 char err_data[MAX_INFO_SIZE];
8046429Svs195195 double a;
8056429Svs195195 double ans;
8066429Svs195195 double b;
8076429Svs195195 double expect_ans;
8086429Svs195195 double expect_ans2;
8096429Svs195195 double result;
8106429Svs195195 double x;
8116429Svs195195 uint64_t expected;
8126429Svs195195 uint64_t observed;
8136429Svs195195
8146429Svs195195 a = 1.2345;
8156429Svs195195 b = 0.9876;
8166429Svs195195
8176429Svs195195 ans = (a + b);
8186429Svs195195 expect_ans = 2.222100000000000;
8196429Svs195195 if (ans != expect_ans) {
8206429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
8216429Svs195195 ans > (expect_ans + DPMARGIN)) {
8226429Svs195195 expected = *(uint64_t *)&expect_ans;
8236429Svs195195 observed = *(uint64_t *)&ans;
824*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
8256429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
8266429Svs195195 expect_ans, ans);
8276429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
8286429Svs195195 report, 6128, &observed, &expected, 1, 1,
8296429Svs195195 err_data);
8306429Svs195195
8316429Svs195195 return (-3);
8326429Svs195195 }
8336429Svs195195 }
8346429Svs195195
8356429Svs195195 ans = (a - b);
8366429Svs195195 expect_ans = 0.246899999999999;
8376429Svs195195 if (ans != expect_ans) {
8386429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
8396429Svs195195 ans > (expect_ans + DPMARGIN)) {
8406429Svs195195 expected = *(uint64_t *)&expect_ans;
8416429Svs195195 observed = *(uint64_t *)&ans;
842*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
8436429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
8446429Svs195195 expect_ans, ans);
8456429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
8466429Svs195195 report, 6129, &observed, &expected, 1, 1,
8476429Svs195195 err_data);
8486429Svs195195
8496429Svs195195 return (-3);
8506429Svs195195 }
8516429Svs195195 }
8526429Svs195195
8536429Svs195195 ans = a * b;
8546429Svs195195 expect_ans = 1.219192199999999;
8556429Svs195195 if (ans != expect_ans) {
8566429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
8576429Svs195195 ans > (expect_ans + DPMARGIN)) {
8586429Svs195195 expected = *(uint64_t *)&expect_ans;
8596429Svs195195 observed = *(uint64_t *)&ans;
860*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
8616429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
8626429Svs195195 expect_ans, ans);
8636429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
8646429Svs195195 report, 6130, &observed, &expected, 1, 1,
8656429Svs195195 err_data);
8666429Svs195195
8676429Svs195195 return (-3);
8686429Svs195195 }
8696429Svs195195 }
8706429Svs195195
8716429Svs195195 ans = a / b;
8726429Svs195195 expect_ans = 1.249999999999999;
8736429Svs195195 if (ans != expect_ans) {
8746429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
8756429Svs195195 ans > (expect_ans + DPMARGIN)) {
8766429Svs195195 expected = *(uint64_t *)&expect_ans;
8776429Svs195195 observed = *(uint64_t *)&ans;
878*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
8796429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
8806429Svs195195 expect_ans, ans);
8816429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
8826429Svs195195 report, 6131, &observed, &expected, 1, 1,
8836429Svs195195 err_data);
8846429Svs195195
8856429Svs195195 return (-3);
8866429Svs195195 }
8876429Svs195195 }
8886429Svs195195
8896429Svs195195 ans = a + (a - b);
8906429Svs195195 expect_ans = 1.481399999999999;
8916429Svs195195 if (ans != expect_ans) {
8926429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
8936429Svs195195 ans > (expect_ans + DPMARGIN)) {
8946429Svs195195 expected = *(uint64_t *)&expect_ans;
8956429Svs195195 observed = *(uint64_t *)&ans;
896*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
8976429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
8986429Svs195195 expect_ans, ans);
8996429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
9006429Svs195195 report, 6132, &observed, &expected, 1, 1,
9016429Svs195195 err_data);
9026429Svs195195
9036429Svs195195 return (-3);
9046429Svs195195 }
9056429Svs195195 }
9066429Svs195195
9076429Svs195195 ans = a - (a + b);
9086429Svs195195 expect_ans = -(0.987600000000000);
9096429Svs195195 if (ans != expect_ans) {
9106429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
9116429Svs195195 ans > (expect_ans + DPMARGIN)) {
9126429Svs195195 expected = *(uint64_t *)&expect_ans;
9136429Svs195195 observed = *(uint64_t *)&ans;
914*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
9156429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
9166429Svs195195 expect_ans, ans);
9176429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
9186429Svs195195 report, 6133, &observed, &expected, 1, 1,
9196429Svs195195 err_data);
9206429Svs195195
9216429Svs195195 return (-3);
9226429Svs195195 }
9236429Svs195195 }
9246429Svs195195
9256429Svs195195 ans = a + (a * b);
9266429Svs195195 expect_ans = 2.453692200000000;
9276429Svs195195 if (ans != expect_ans) {
9286429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
9296429Svs195195 ans > (expect_ans + DPMARGIN)) {
9306429Svs195195 expected = *(uint64_t *)&expect_ans;
9316429Svs195195 observed = *(uint64_t *)&ans;
932*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
9336429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
9346429Svs195195 expect_ans, ans);
9356429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
9366429Svs195195 report, 6134, &observed, &expected, 1, 1,
9376429Svs195195 err_data);
9386429Svs195195
9396429Svs195195 return (-3);
9406429Svs195195 }
9416429Svs195195 }
9426429Svs195195
9436429Svs195195 ans = a - (a * b);
9446429Svs195195 expect_ans = 0.015307800000000;
9456429Svs195195 if (ans != expect_ans) {
9466429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
9476429Svs195195 ans > (expect_ans + DPMARGIN)) {
9486429Svs195195 expected = *(uint64_t *)&expect_ans;
9496429Svs195195 observed = *(uint64_t *)&ans;
950*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
9516429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
9526429Svs195195 expect_ans, ans);
9536429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
9546429Svs195195 report, 6135, &observed, &expected, 1, 1,
9556429Svs195195 err_data);
9566429Svs195195
9576429Svs195195 return (-3);
9586429Svs195195 }
9596429Svs195195 }
9606429Svs195195
9616429Svs195195 ans = a + (a / b);
9626429Svs195195 expect_ans = 2.484500000000000;
9636429Svs195195 if (ans != expect_ans) {
9646429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
9656429Svs195195 ans > (expect_ans + DPMARGIN)) {
9666429Svs195195 expected = *(uint64_t *)&expect_ans;
9676429Svs195195 observed = *(uint64_t *)&ans;
968*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
9696429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
9706429Svs195195 expect_ans, ans);
9716429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
9726429Svs195195 report, 6136, &observed, &expected, 1, 1,
9736429Svs195195 err_data);
9746429Svs195195
9756429Svs195195 return (-3);
9766429Svs195195 }
9776429Svs195195 }
9786429Svs195195
9796429Svs195195 ans = a - (a / b);
9806429Svs195195 expect_ans = -(0.015499999999999);
9816429Svs195195 if (ans != expect_ans) {
9826429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
9836429Svs195195 ans > (expect_ans + DPMARGIN)) {
9846429Svs195195 expected = *(uint64_t *)&expect_ans;
9856429Svs195195 observed = *(uint64_t *)&ans;
986*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
9876429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
9886429Svs195195 expect_ans, ans);
9896429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
9906429Svs195195 report, 6137, &observed, &expected, 1, 1,
9916429Svs195195 err_data);
9926429Svs195195
9936429Svs195195 return (-3);
9946429Svs195195 }
9956429Svs195195 }
9966429Svs195195
9976429Svs195195 ans = a * (a + b);
9986429Svs195195 expect_ans = 2.743182449999999;
9996429Svs195195 if (ans != expect_ans) {
10006429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
10016429Svs195195 ans > (expect_ans + DPMARGIN)) {
10026429Svs195195 expected = *(uint64_t *)&expect_ans;
10036429Svs195195 observed = *(uint64_t *)&ans;
1004*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
10056429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
10066429Svs195195 expect_ans, ans);
10076429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
10086429Svs195195 report, 6138, &observed, &expected, 1, 1,
10096429Svs195195 err_data);
10106429Svs195195
10116429Svs195195 return (-3);
10126429Svs195195 }
10136429Svs195195 }
10146429Svs195195
10156429Svs195195 ans = a * (a - b);
10166429Svs195195 expect_ans = 0.304798049999999;
10176429Svs195195 if (ans != expect_ans) {
10186429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
10196429Svs195195 ans > (expect_ans + DPMARGIN)) {
10206429Svs195195 expected = *(uint64_t *)&expect_ans;
10216429Svs195195 observed = *(uint64_t *)&ans;
1022*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
10236429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
10246429Svs195195 expect_ans, ans);
10256429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
10266429Svs195195 report, 6139, &observed, &expected, 1, 1,
10276429Svs195195 err_data);
10286429Svs195195
10296429Svs195195 return (-3);
10306429Svs195195 }
10316429Svs195195 }
10326429Svs195195
10336429Svs195195
10346429Svs195195 ans = a / (a + b);
10356429Svs195195 expect_ans = 0.555555555555555;
10366429Svs195195 if (ans != expect_ans) {
10376429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
10386429Svs195195 ans > (expect_ans + DPMARGIN)) {
10396429Svs195195 expected = *(uint64_t *)&expect_ans;
10406429Svs195195 observed = *(uint64_t *)&ans;
1041*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
10426429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
10436429Svs195195 expect_ans, ans);
10446429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
10456429Svs195195 report, 6140, &observed, &expected, 1, 1,
10466429Svs195195 err_data);
10476429Svs195195
10486429Svs195195 return (-3);
10496429Svs195195 }
10506429Svs195195 }
10516429Svs195195
10526429Svs195195 ans = a / (a - b);
10536429Svs195195 expect_ans = 5.000000000000002;
10546429Svs195195 if (ans != expect_ans) {
10556429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
10566429Svs195195 ans > (expect_ans + DPMARGIN)) {
10576429Svs195195 expected = *(uint64_t *)&expect_ans;
10586429Svs195195 observed = *(uint64_t *)&ans;
1059*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
10606429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
10616429Svs195195 expect_ans, ans);
10626429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
10636429Svs195195 report, 6141, &observed, &expected, 1, 1,
10646429Svs195195 err_data);
10656429Svs195195
10666429Svs195195 return (-3);
10676429Svs195195 }
10686429Svs195195 }
10696429Svs195195
10706429Svs195195 ans = a * (a / b);
10716429Svs195195 expect_ans = 1.543124999999999;
10726429Svs195195 if (ans != expect_ans) {
10736429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
10746429Svs195195 ans > (expect_ans + DPMARGIN)) {
10756429Svs195195 expected = *(uint64_t *)&expect_ans;
10766429Svs195195 observed = *(uint64_t *)&ans;
1077*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
10786429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
10796429Svs195195 expect_ans, ans);
10806429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
10816429Svs195195 report, 6142, &observed, &expected, 1, 1,
10826429Svs195195 err_data);
10836429Svs195195
10846429Svs195195 return (-3);
10856429Svs195195 }
10866429Svs195195 }
10876429Svs195195
10886429Svs195195 ans = a / (a * b);
10896429Svs195195 expect_ans = 1.012555690562980;
10906429Svs195195 if (ans != expect_ans) {
10916429Svs195195 if (ans < (expect_ans - DPMARGIN) ||
10926429Svs195195 ans > (expect_ans + DPMARGIN)) {
10936429Svs195195 expected = *(uint64_t *)&expect_ans;
10946429Svs195195 observed = *(uint64_t *)&ans;
1095*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
10966429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
10976429Svs195195 expect_ans, ans);
10986429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
10996429Svs195195 report, 6143, &observed, &expected, 1, 1,
11006429Svs195195 err_data);
11016429Svs195195
11026429Svs195195 return (-3);
11036429Svs195195 }
11046429Svs195195 }
11056429Svs195195
11066429Svs195195 /* Start Double Precision test of trg functions */
11076429Svs195195
11086429Svs195195 /* sin of values in the range of -2pi to +2pi */
11096429Svs195195 result = sin(-(pi * 2));
11106429Svs195195 expect_ans = -(0.000000000820413);
11116429Svs195195 if (result != expect_ans) {
11126429Svs195195 if (result < (expect_ans - DPMARGIN) ||
11136429Svs195195 result > (expect_ans + DPMARGIN)) {
11146429Svs195195 expected = *(uint64_t *)&expect_ans;
11156429Svs195195 observed = *(uint64_t *)&result;
1116*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
11176429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
11186429Svs195195 expect_ans, result);
11196429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
11206429Svs195195 report, 6144, &observed, &expected, 1, 1,
11216429Svs195195 err_data);
11226429Svs195195
11236429Svs195195 return (-3);
11246429Svs195195 }
11256429Svs195195 }
11266429Svs195195
11276429Svs195195 result = sin((pi * (-3)) / 2);
11286429Svs195195 expect_ans = 1.0000000000000000;
11296429Svs195195 if (result != expect_ans) {
11306429Svs195195 if (result < (expect_ans - DPMARGIN)) {
11316429Svs195195 expected = *(uint64_t *)&expect_ans;
11326429Svs195195 observed = *(uint64_t *)&result;
1133*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
11346429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
11356429Svs195195 expect_ans, result);
11366429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
11376429Svs195195 report, 6145, &observed, &expected, 1, 1,
11386429Svs195195 err_data);
11396429Svs195195
11406429Svs195195 return (-3);
11416429Svs195195 }
11426429Svs195195 #ifndef i86pc
11436429Svs195195 else if (result > (-(0.000000000000000) + DPMARGIN)) {
11446429Svs195195 expected = (uint64_t)-(0.000000000000000);
11456429Svs195195 observed = *(uint64_t *)&result;
1146*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
11476429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
11486429Svs195195 -0.000000000000000, result);
11496429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
11506429Svs195195 report, 6146, &observed, &expected, 1, 1,
11516429Svs195195 err_data);
11526429Svs195195
11536429Svs195195 return (-3);
11546429Svs195195 }
11556429Svs195195 #endif
11566429Svs195195 }
11576429Svs195195
11586429Svs195195 result = sin(-(pi));
11596429Svs195195 expect_ans = 0.000000000410206;
11606429Svs195195 if (result != expect_ans) {
11616429Svs195195 if (result < (expect_ans - DPMARGIN) ||
11626429Svs195195 result > (expect_ans + DPMARGIN)) {
11636429Svs195195 expected = *(uint64_t *)&expect_ans;
11646429Svs195195 observed = *(uint64_t *)&result;
1165*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
11666429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
11676429Svs195195 expect_ans, result);
11686429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
11696429Svs195195 report, 6147, &observed, &expected, 1, 1,
11706429Svs195195 err_data);
11716429Svs195195
11726429Svs195195 return (-3);
11736429Svs195195 }
11746429Svs195195 }
11756429Svs195195
11766429Svs195195 result = sin(-(pi / 2));
11776429Svs195195 expect_ans = -(1.0000000000000000);
11786429Svs195195 if (result != expect_ans) {
11796429Svs195195 if (result < (expect_ans - DPMARGIN) ||
11806429Svs195195 result > (expect_ans + DPMARGIN)) {
11816429Svs195195 expected = *(uint64_t *)&expect_ans;
11826429Svs195195 observed = *(uint64_t *)&result;
1183*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
11846429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
11856429Svs195195 expect_ans, result);
11866429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
11876429Svs195195 report, 6148, &observed, &expected, 1, 1,
11886429Svs195195 err_data);
11896429Svs195195
11906429Svs195195 return (-3);
11916429Svs195195 }
11926429Svs195195 }
11936429Svs195195
11946429Svs195195 result = sin(0.0);
11956429Svs195195 expect_ans = 0.0000000000000000;
11966429Svs195195 if (result != expect_ans) {
11976429Svs195195 if (result < (expect_ans - DPMARGIN) ||
11986429Svs195195 result > (expect_ans + DPMARGIN)) {
11996429Svs195195 expected = *(uint64_t *)&expect_ans;
12006429Svs195195 observed = *(uint64_t *)&result;
1201*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
12026429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
12036429Svs195195 expect_ans, result);
12046429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
12056429Svs195195 report, 6149, &observed, &expected, 1, 1,
12066429Svs195195 err_data);
12076429Svs195195
12086429Svs195195 return (-3);
12096429Svs195195 }
12106429Svs195195 }
12116429Svs195195
12126429Svs195195 result = sin(pi / 2);
12136429Svs195195 expect_ans = 1.0000000000000000;
12146429Svs195195 if (result != expect_ans) {
12156429Svs195195 if (result < (expect_ans - DPMARGIN) ||
12166429Svs195195 result > (expect_ans + DPMARGIN)) {
12176429Svs195195 expected = *(uint64_t *)&expect_ans;
12186429Svs195195 observed = *(uint64_t *)&result;
1219*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
12206429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
12216429Svs195195 expect_ans, result);
12226429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
12236429Svs195195 report, 6150, &observed, &expected, 1, 1,
12246429Svs195195 err_data);
12256429Svs195195
12266429Svs195195 return (-3);
12276429Svs195195 }
12286429Svs195195 }
12296429Svs195195
12306429Svs195195 result = sin(pi);
12316429Svs195195 expect_ans = -(0.000000000410206);
12326429Svs195195 if (result != expect_ans) {
12336429Svs195195 if (result < (expect_ans - DPMARGIN) ||
12346429Svs195195 result > (expect_ans + DPMARGIN)) {
12356429Svs195195 expected = *(uint64_t *)&expect_ans;
12366429Svs195195 observed = *(uint64_t *)&result;
1237*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
12386429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
12396429Svs195195 expect_ans, result);
12406429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
12416429Svs195195 report, 6151, &observed, &expected, 1, 1,
12426429Svs195195 err_data);
12436429Svs195195
12446429Svs195195 return (-3);
12456429Svs195195 }
12466429Svs195195 }
12476429Svs195195
12486429Svs195195 result = sin((pi * 3) / 2);
12496429Svs195195 expect_ans = -(1.0000000000000000);
12506429Svs195195 if (result != expect_ans) {
12516429Svs195195 if (result < (expect_ans - DPMARGIN) ||
12526429Svs195195 result > (expect_ans + DPMARGIN)) {
12536429Svs195195 expected = *(uint64_t *)&expect_ans;
12546429Svs195195 observed = *(uint64_t *)&result;
1255*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
12566429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
12576429Svs195195 expect_ans, result);
12586429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
12596429Svs195195 report, 6152, &observed, &expected, 1, 1,
12606429Svs195195 err_data);
12616429Svs195195
12626429Svs195195 return (-3);
12636429Svs195195 }
12646429Svs195195 }
12656429Svs195195
12666429Svs195195 result = sin(pi * 2);
12676429Svs195195 expect_ans = 0.000000000820143;
12686429Svs195195 expect_ans2 = 0.00000000820143;
12696429Svs195195 if (result != expect_ans) {
12706429Svs195195 if (result < (expect_ans - DPMARGIN) ||
12716429Svs195195 result > (expect_ans2 + DPMARGIN)) {
12726429Svs195195 expected = *(uint64_t *)&expect_ans;
12736429Svs195195 observed = *(uint64_t *)&result;
1274*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
12756429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
12766429Svs195195 expect_ans, result);
12776429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
12786429Svs195195 report, 6153, &observed, &expected, 1, 1,
12796429Svs195195 err_data);
12806429Svs195195
12816429Svs195195 return (-3);
12826429Svs195195 }
12836429Svs195195 }
12846429Svs195195
12856429Svs195195 /* cos of values in the range of -2pi to +2pi */
12866429Svs195195 result = cos(pi * (-2));
12876429Svs195195 expect_ans = 1.0000000000000000;
12886429Svs195195 if (result != expect_ans) {
12896429Svs195195 if (result < (expect_ans - DPMARGIN) ||
12906429Svs195195 result > (expect_ans + DPMARGIN)) {
12916429Svs195195 expected = *(uint64_t *)&expect_ans;
12926429Svs195195 observed = *(uint64_t *)&result;
1293*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
12946429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
12956429Svs195195 expect_ans, result);
12966429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
12976429Svs195195 report, 6154, &observed, &expected, 1, 1,
12986429Svs195195 err_data);
12996429Svs195195
13006429Svs195195 return (-3);
13016429Svs195195 }
13026429Svs195195 }
13036429Svs195195
13046429Svs195195 result = cos((pi * (-3)) / 2);
13056429Svs195195 expect_ans = 0.000000000615310;
13066429Svs195195 if (result != expect_ans) {
13076429Svs195195 if (result < (expect_ans - DPMARGIN) ||
13086429Svs195195 result > (expect_ans + DPMARGIN)) {
13096429Svs195195 expected = *(uint64_t *)&expect_ans;
13106429Svs195195 observed = *(uint64_t *)&result;
1311*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
13126429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
13136429Svs195195 expect_ans, result);
13146429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
13156429Svs195195 report, 6155, &observed, &expected, 1, 1,
13166429Svs195195 err_data);
13176429Svs195195
13186429Svs195195 return (-3);
13196429Svs195195 }
13206429Svs195195 }
13216429Svs195195
13226429Svs195195 result = cos(-pi);
13236429Svs195195 expect_ans = -(1.0000000000000000);
13246429Svs195195 if (result != expect_ans) {
13256429Svs195195 if (result < (expect_ans - DPMARGIN) ||
13266429Svs195195 result > (expect_ans + DPMARGIN)) {
13276429Svs195195 expected = *(uint64_t *)&expect_ans;
13286429Svs195195 observed = *(uint64_t *)&result;
1329*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
13306429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
13316429Svs195195 expect_ans, result);
13326429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
13336429Svs195195 report, 6156, &observed, &expected, 1, 1,
13346429Svs195195 err_data);
13356429Svs195195
13366429Svs195195 return (-3);
13376429Svs195195 }
13386429Svs195195 }
13396429Svs195195
13406429Svs195195 result = cos(-(pi / 2));
13416429Svs195195 expect_ans = -(0.000000000205103);
13426429Svs195195 if (result != expect_ans) {
13436429Svs195195 if (result < (expect_ans - DPMARGIN) ||
13446429Svs195195 result > (expect_ans + DPMARGIN)) {
13456429Svs195195 expected = *(uint64_t *)&expect_ans;
13466429Svs195195 observed = *(uint64_t *)&result;
1347*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
13486429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
13496429Svs195195 expect_ans, result);
13506429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
13516429Svs195195 report, 6157, &observed, &expected, 1, 1,
13526429Svs195195 err_data);
13536429Svs195195
13546429Svs195195 return (-3);
13556429Svs195195 }
13566429Svs195195 }
13576429Svs195195
13586429Svs195195 result = cos(0.0);
13596429Svs195195 expect_ans = 1.0000000000000000;
13606429Svs195195 if (result != expect_ans) {
13616429Svs195195 if (result < (expect_ans - DPMARGIN) ||
13626429Svs195195 result > (expect_ans + DPMARGIN)) {
13636429Svs195195 expected = *(uint64_t *)&expect_ans;
13646429Svs195195 observed = *(uint64_t *)&result;
1365*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
13666429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
13676429Svs195195 expect_ans, result);
13686429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
13696429Svs195195 report, 6158, &observed, &expected, 1, 1,
13706429Svs195195 err_data);
13716429Svs195195
13726429Svs195195 return (-3);
13736429Svs195195 }
13746429Svs195195 }
13756429Svs195195
13766429Svs195195 result = cos(pi / 2);
13776429Svs195195 expect_ans = (-0.000000000205103);
13786429Svs195195 if (result != expect_ans) {
13796429Svs195195 if (result < (expect_ans - DPMARGIN) ||
13806429Svs195195 result > (expect_ans + DPMARGIN)) {
13816429Svs195195 expected = *(uint64_t *)&expect_ans;
13826429Svs195195 observed = *(uint64_t *)&result;
1383*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
13846429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
13856429Svs195195 expect_ans, result);
13866429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
13876429Svs195195 report, 6159, &observed, &expected, 1, 1,
13886429Svs195195 err_data);
13896429Svs195195
13906429Svs195195 return (-3);
13916429Svs195195 }
13926429Svs195195 }
13936429Svs195195
13946429Svs195195 result = cos(pi);
13956429Svs195195 expect_ans = (-1.0000000000000000);
13966429Svs195195 if (result != expect_ans) {
13976429Svs195195 if (result < (expect_ans - DPMARGIN) ||
13986429Svs195195 result > (expect_ans + DPMARGIN)) {
13996429Svs195195 expected = *(uint64_t *)&expect_ans;
14006429Svs195195 observed = *(uint64_t *)&result;
1401*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
14026429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
14036429Svs195195 expect_ans, result);
14046429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
14056429Svs195195 report, 6160, &observed, &expected, 1, 1,
14066429Svs195195 err_data);
14076429Svs195195
14086429Svs195195 return (-3);
14096429Svs195195 }
14106429Svs195195 }
14116429Svs195195
14126429Svs195195 result = cos((pi * 3) / 2);
14136429Svs195195 expect_ans = 0.000000000615310;
14146429Svs195195 if (result != expect_ans) {
14156429Svs195195 if (result < (expect_ans - DPMARGIN) ||
14166429Svs195195 result > (expect_ans + DPMARGIN)) {
14176429Svs195195 expected = *(uint64_t *)&expect_ans;
14186429Svs195195 observed = *(uint64_t *)&result;
1419*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
14206429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
14216429Svs195195 expect_ans, result);
14226429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
14236429Svs195195 report, 6161, &observed, &expected, 1, 1,
14246429Svs195195 err_data);
14256429Svs195195
14266429Svs195195 return (-3);
14276429Svs195195 }
14286429Svs195195 }
14296429Svs195195
14306429Svs195195 result = cos(pi * 2);
14316429Svs195195 expect_ans = 1.0000000000000000;
14326429Svs195195 if (result != expect_ans) {
14336429Svs195195 if (result < (expect_ans - DPMARGIN) ||
14346429Svs195195 result > (expect_ans + DPMARGIN)) {
14356429Svs195195 expected = *(uint64_t *)&expect_ans;
14366429Svs195195 observed = *(uint64_t *)&result;
1437*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
14386429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
14396429Svs195195 expect_ans, result);
14406429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
14416429Svs195195 report, 6162, &observed, &expected, 1, 1,
14426429Svs195195 err_data);
14436429Svs195195
14446429Svs195195 return (-3);
14456429Svs195195 }
14466429Svs195195 }
14476429Svs195195
14486429Svs195195 /* sin and cos of: pi/4, 3pi/4, 5pi/4 and 7pi/4 */
14496429Svs195195 result = sin(pi / 4);
14506429Svs195195 expect_ans = 0.707106781259062;
14516429Svs195195 if (result != expect_ans) {
14526429Svs195195 if (result < (expect_ans - DPMARGIN) ||
14536429Svs195195 result > (expect_ans + DPMARGIN)) {
14546429Svs195195 expected = *(uint64_t *)&expect_ans;
14556429Svs195195 observed = *(uint64_t *)&result;
1456*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
14576429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
14586429Svs195195 expect_ans, result);
14596429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
14606429Svs195195 report, 6163, &observed, &expected, 1, 1,
14616429Svs195195 err_data);
14626429Svs195195
14636429Svs195195 return (-3);
14646429Svs195195 }
14656429Svs195195 }
14666429Svs195195
14676429Svs195195 result = sin((pi * 3) / 4);
14686429Svs195195 expect_ans = 0.707106780969002;
14696429Svs195195 if (result != expect_ans) {
14706429Svs195195 if (result < (expect_ans - DPMARGIN) ||
14716429Svs195195 result > (expect_ans + DPMARGIN)) {
14726429Svs195195 expected = *(uint64_t *)&expect_ans;
14736429Svs195195 observed = *(uint64_t *)&result;
1474*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
14756429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
14766429Svs195195 expect_ans, result);
14776429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
14786429Svs195195 report, 6164, &observed, &expected, 1, 1,
14796429Svs195195 err_data);
14806429Svs195195
14816429Svs195195 return (-3);
14826429Svs195195 }
14836429Svs195195 }
14846429Svs195195
14856429Svs195195 result = sin((pi * 5) / 4);
14866429Svs195195 expect_ans = -(0.707106781549122);
14876429Svs195195 if (result != expect_ans) {
14886429Svs195195 if (result < (expect_ans - DPMARGIN) ||
14896429Svs195195 result > (expect_ans + DPMARGIN)) {
14906429Svs195195 expected = *(uint64_t *)&expect_ans;
14916429Svs195195 observed = *(uint64_t *)&result;
1492*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
14936429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
14946429Svs195195 expect_ans, result);
14956429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
14966429Svs195195 report, 6165, &observed, &expected, 1, 1,
14976429Svs195195 err_data);
14986429Svs195195
14996429Svs195195 return (-3);
15006429Svs195195 }
15016429Svs195195 }
15026429Svs195195
15036429Svs195195 result = sin((pi * 7) / 4);
15046429Svs195195 expect_ans = -(0.707106780678942);
15056429Svs195195 if (result != expect_ans) {
15066429Svs195195 if (result < (expect_ans - DPMARGIN) ||
15076429Svs195195 result > (expect_ans + DPMARGIN)) {
15086429Svs195195 expected = *(uint64_t *)&expect_ans;
15096429Svs195195 observed = *(uint64_t *)&result;
1510*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
15116429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
15126429Svs195195 expect_ans, result);
15136429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
15146429Svs195195 report, 6166, &observed, &expected, 1, 1,
15156429Svs195195 err_data);
15166429Svs195195
15176429Svs195195 return (-3);
15186429Svs195195 }
15196429Svs195195 }
15206429Svs195195
15216429Svs195195 result = cos(pi / 4);
15226429Svs195195 expect_ans = 0.707106781114032;
15236429Svs195195 if (result != expect_ans) {
15246429Svs195195 if (result < (expect_ans - DPMARGIN) ||
15256429Svs195195 result > (expect_ans + DPMARGIN)) {
15266429Svs195195 expected = *(uint64_t *)&expect_ans;
15276429Svs195195 observed = *(uint64_t *)&result;
1528*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
15296429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
15306429Svs195195 expect_ans, result);
15316429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
15326429Svs195195 report, 6167, &observed, &expected, 1, 1,
15336429Svs195195 err_data);
15346429Svs195195
15356429Svs195195 return (-3);
15366429Svs195195 }
15376429Svs195195 }
15386429Svs195195
15396429Svs195195 result = cos((pi * 3) / 4);
15406429Svs195195 expect_ans = -(0.707106781404092);
15416429Svs195195 if (result != expect_ans) {
15426429Svs195195 if (result < (expect_ans - DPMARGIN) ||
15436429Svs195195 result > (expect_ans + DPMARGIN)) {
15446429Svs195195 expected = *(uint64_t *)&expect_ans;
15456429Svs195195 observed = *(uint64_t *)&result;
1546*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
15476429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
15486429Svs195195 expect_ans, result);
15496429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
15506429Svs195195 report, 6168, &observed, &expected, 1, 1,
15516429Svs195195 err_data);
15526429Svs195195
15536429Svs195195 return (-3);
15546429Svs195195 }
15556429Svs195195 }
15566429Svs195195
15576429Svs195195 result = cos((pi * 5) / 4);
15586429Svs195195 expect_ans = -(0.707106780823972);
15596429Svs195195 if (result != expect_ans) {
15606429Svs195195 if (result < (expect_ans - DPMARGIN) ||
15616429Svs195195 result > (expect_ans + DPMARGIN)) {
15626429Svs195195 expected = *(uint64_t *)&expect_ans;
15636429Svs195195 observed = *(uint64_t *)&result;
1564*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
15656429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
15666429Svs195195 expect_ans, result);
15676429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
15686429Svs195195 report, 6169, &observed, &expected, 1, 1,
15696429Svs195195 err_data);
15706429Svs195195
15716429Svs195195 return (-3);
15726429Svs195195 }
15736429Svs195195 }
15746429Svs195195
15756429Svs195195 result = cos((pi * 7) / 4);
15766429Svs195195 expect_ans = 0.707106781694152;
15776429Svs195195 if (result != expect_ans) {
15786429Svs195195 if (result < (expect_ans - DPMARGIN) ||
15796429Svs195195 result > (expect_ans + DPMARGIN)) {
15806429Svs195195 expected = *(uint64_t *)&expect_ans;
15816429Svs195195 observed = *(uint64_t *)&result;
1582*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
15836429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
15846429Svs195195 expect_ans, result);
15856429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
15866429Svs195195 report, 6170, &observed, &expected, 1, 1,
15876429Svs195195 err_data);
15886429Svs195195
15896429Svs195195 return (-3);
15906429Svs195195 }
15916429Svs195195 }
15926429Svs195195
15936429Svs195195 /* exponential */
15946429Svs195195 x = exp(0.0);
15956429Svs195195 expect_ans = 1.0000000000000000;
15966429Svs195195 if (x != expect_ans) {
15976429Svs195195 if (x < (expect_ans - DPMARGIN) ||
15986429Svs195195 x > (expect_ans + DPMARGIN)) {
15996429Svs195195 expected = *(uint64_t *)&expect_ans;
16006429Svs195195 observed = *(uint64_t *)&x;
1601*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
16026429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
16036429Svs195195 expect_ans, x);
16046429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
16056429Svs195195 report, 6171, &observed, &expected, 1, 1,
16066429Svs195195 err_data);
16076429Svs195195
16086429Svs195195 return (-3);
16096429Svs195195 }
16106429Svs195195 }
16116429Svs195195
16126429Svs195195 x = exp(1.0);
16136429Svs195195 expect_ans = 2.718281828459045;
16146429Svs195195 if (x != expect_ans) {
16156429Svs195195 if (x < (expect_ans - DPMARGIN) ||
16166429Svs195195 x > (expect_ans + DPMARGIN)) {
16176429Svs195195 expected = *(uint64_t *)&expect_ans;
16186429Svs195195 observed = *(uint64_t *)&x;
1619*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
16206429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
16216429Svs195195 expect_ans, x);
16226429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
16236429Svs195195 report, 6172, &observed, &expected, 1, 1,
16246429Svs195195 err_data);
16256429Svs195195
16266429Svs195195 return (-3);
16276429Svs195195 }
16286429Svs195195 }
16296429Svs195195
16306429Svs195195 x = exp(2.0);
16316429Svs195195 expect_ans = 7.389056098930650;
16326429Svs195195 if (x != expect_ans) {
16336429Svs195195 if (x < (expect_ans - DPMARGIN) ||
16346429Svs195195 x > (expect_ans + DPMARGIN)) {
16356429Svs195195 expected = *(uint64_t *)&expect_ans;
16366429Svs195195 observed = *(uint64_t *)&x;
1637*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
16386429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
16396429Svs195195 expect_ans, x);
16406429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
16416429Svs195195 report, 6173, &observed, &expected, 1, 1,
16426429Svs195195 err_data);
16436429Svs195195
16446429Svs195195 return (-3);
16456429Svs195195 }
16466429Svs195195 }
16476429Svs195195
16486429Svs195195 x = exp(5.0);
16496429Svs195195 expect_ans = 148.413159102576600;
16506429Svs195195 if (x != expect_ans) {
16516429Svs195195 if (x < (expect_ans - DPMARGIN) ||
16526429Svs195195 x > (expect_ans + DPMARGIN)) {
16536429Svs195195 expected = *(uint64_t *)&expect_ans;
16546429Svs195195 observed = *(uint64_t *)&x;
1655*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
16566429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
16576429Svs195195 expect_ans, x);
16586429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
16596429Svs195195 report, 6174, &observed, &expected, 1, 1,
16606429Svs195195 err_data);
16616429Svs195195
16626429Svs195195 return (-3);
16636429Svs195195 }
16646429Svs195195 }
16656429Svs195195
16666429Svs195195 x = exp(10.0);
16676429Svs195195 expect_ans = 22026.465794806718000;
16686429Svs195195 if (x != expect_ans) {
16696429Svs195195 if (x < (expect_ans - DPMARGIN) ||
16706429Svs195195 x > (expect_ans + DPMARGIN)) {
16716429Svs195195 expected = *(uint64_t *)&expect_ans;
16726429Svs195195 observed = *(uint64_t *)&x;
1673*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
16746429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
16756429Svs195195 expect_ans, x);
16766429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
16776429Svs195195 report, 6175, &observed, &expected, 1, 1,
16786429Svs195195 err_data);
16796429Svs195195
16806429Svs195195 return (-3);
16816429Svs195195 }
16826429Svs195195 }
16836429Svs195195
16846429Svs195195 x = exp(-1.0);
16856429Svs195195 expect_ans = 0.367879441171442;
16866429Svs195195 if (x != expect_ans) {
16876429Svs195195 if (x < (expect_ans - DPMARGIN) ||
16886429Svs195195 x > (expect_ans + DPMARGIN)) {
16896429Svs195195 expected = *(uint64_t *)&expect_ans;
16906429Svs195195 observed = *(uint64_t *)&x;
1691*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
16926429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
16936429Svs195195 expect_ans, x);
16946429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
16956429Svs195195 report, 6176, &observed, &expected, 1, 1,
16966429Svs195195 err_data);
16976429Svs195195
16986429Svs195195 return (-3);
16996429Svs195195 }
17006429Svs195195 }
17016429Svs195195
17026429Svs195195 x = exp(-2.0);
17036429Svs195195 expect_ans = 0.135335283236612;
17046429Svs195195 if (x != expect_ans) {
17056429Svs195195 if (x < (expect_ans - DPMARGIN) ||
17066429Svs195195 x > (expect_ans + DPMARGIN)) {
17076429Svs195195 expected = *(uint64_t *)&expect_ans;
17086429Svs195195 observed = *(uint64_t *)&x;
1709*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
17106429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
17116429Svs195195 expect_ans, x);
17126429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
17136429Svs195195 report, 6177, &observed, &expected, 1, 1,
17146429Svs195195 err_data);
17156429Svs195195
17166429Svs195195 return (-3);
17176429Svs195195 }
17186429Svs195195 }
17196429Svs195195
17206429Svs195195 x = exp(-5.0);
17216429Svs195195 expect_ans = 0.006737946999085;
17226429Svs195195 if (x != expect_ans) {
17236429Svs195195 if (x < (expect_ans - DPMARGIN) ||
17246429Svs195195 x > (expect_ans + DPMARGIN)) {
17256429Svs195195 expected = *(uint64_t *)&expect_ans;
17266429Svs195195 observed = *(uint64_t *)&x;
1727*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
17286429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
17296429Svs195195 expect_ans, x);
17306429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
17316429Svs195195 report, 6178, &observed, &expected, 1, 1,
17326429Svs195195 err_data);
17336429Svs195195
17346429Svs195195 return (-3);
17356429Svs195195 }
17366429Svs195195 }
17376429Svs195195
17386429Svs195195 x = exp(-10.0);
17396429Svs195195 expect_ans = 0.000045399929762;
17406429Svs195195 if (x != expect_ans) {
17416429Svs195195 if (x < (expect_ans - DPMARGIN) ||
17426429Svs195195 x > (expect_ans + DPMARGIN)) {
17436429Svs195195 expected = *(uint64_t *)&expect_ans;
17446429Svs195195 observed = *(uint64_t *)&x;
1745*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
17466429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
17476429Svs195195 expect_ans, x);
17486429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
17496429Svs195195 report, 6179, &observed, &expected, 1, 1,
17506429Svs195195 err_data);
17516429Svs195195
17526429Svs195195 return (-3);
17536429Svs195195 }
17546429Svs195195 }
17556429Svs195195
17566429Svs195195 x = exp(log(1.0));
17576429Svs195195 expect_ans = 1.0000000000000000;
17586429Svs195195 if (x != expect_ans) {
17596429Svs195195 if (x < (expect_ans - DPMARGIN) ||
17606429Svs195195 x > (expect_ans + DPMARGIN)) {
17616429Svs195195 expected = *(uint64_t *)&expect_ans;
17626429Svs195195 observed = *(uint64_t *)&x;
1763*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
17646429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
17656429Svs195195 expect_ans, x);
17666429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
17676429Svs195195 report, 6180, &observed, &expected, 1, 1,
17686429Svs195195 err_data);
17696429Svs195195
17706429Svs195195 return (-3);
17716429Svs195195 }
17726429Svs195195 }
17736429Svs195195
17746429Svs195195 x = exp(log(10.0));
17756429Svs195195 expect_ans = 10.000000000000002;
17766429Svs195195 if (x != expect_ans) {
17776429Svs195195 if (x < (expect_ans - DPMARGIN) ||
17786429Svs195195 x > (expect_ans + DPMARGIN)) {
17796429Svs195195 expected = *(uint64_t *)&expect_ans;
17806429Svs195195 observed = *(uint64_t *)&x;
1781*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
17826429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
17836429Svs195195 expect_ans, x);
17846429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
17856429Svs195195 report, 6181, &observed, &expected, 1, 1,
17866429Svs195195 err_data);
17876429Svs195195
17886429Svs195195 return (-3);
17896429Svs195195 }
17906429Svs195195 }
17916429Svs195195
17926429Svs195195 /* logarithms */
17936429Svs195195 x = log(1.0);
17946429Svs195195 expect_ans = 0.0000000000000000;
17956429Svs195195 if (x != expect_ans) {
17966429Svs195195 if (x < (expect_ans - DPMARGIN) ||
17976429Svs195195 x > (expect_ans + DPMARGIN)) {
17986429Svs195195 expected = *(uint64_t *)&expect_ans;
17996429Svs195195 observed = *(uint64_t *)&x;
1800*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
18016429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
18026429Svs195195 expect_ans, x);
18036429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
18046429Svs195195 report, 6182, &observed, &expected, 1, 1,
18056429Svs195195 err_data);
18066429Svs195195
18076429Svs195195 return (-3);
18086429Svs195195 }
18096429Svs195195 }
18106429Svs195195
18116429Svs195195 x = log(2.0);
18126429Svs195195 expect_ans = 0.693147180559945;
18136429Svs195195 if (x != expect_ans) {
18146429Svs195195 if (x < (expect_ans - DPMARGIN) ||
18156429Svs195195 x > (expect_ans + DPMARGIN)) {
18166429Svs195195 expected = *(uint64_t *)&expect_ans;
18176429Svs195195 observed = *(uint64_t *)&x;
1818*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
18196429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
18206429Svs195195 expect_ans, x);
18216429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
18226429Svs195195 report, 6183, &observed, &expected, 1, 1,
18236429Svs195195 err_data);
18246429Svs195195
18256429Svs195195 return (-3);
18266429Svs195195 }
18276429Svs195195 }
18286429Svs195195
18296429Svs195195 x = log(10.0);
18306429Svs195195 expect_ans = 2.302585092994045;
18316429Svs195195 if (x != expect_ans) {
18326429Svs195195 if (x < (expect_ans - DPMARGIN) ||
18336429Svs195195 x > (expect_ans + DPMARGIN)) {
18346429Svs195195 expected = *(uint64_t *)&expect_ans;
18356429Svs195195 observed = *(uint64_t *)&x;
1836*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
18376429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
18386429Svs195195 expect_ans, x);
18396429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
18406429Svs195195 report, 6184, &observed, &expected, 1, 1,
18416429Svs195195 err_data);
18426429Svs195195
18436429Svs195195 return (-3);
18446429Svs195195 }
18456429Svs195195 }
18466429Svs195195
18476429Svs195195 x = log(100.0);
18486429Svs195195 expect_ans = 4.605170185988091;
18496429Svs195195 if (x != expect_ans) {
18506429Svs195195 if (x < (expect_ans - DPMARGIN) ||
18516429Svs195195 x > (expect_ans + DPMARGIN)) {
18526429Svs195195 expected = *(uint64_t *)&expect_ans;
18536429Svs195195 observed = *(uint64_t *)&x;
1854*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
18556429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
18566429Svs195195 expect_ans, x);
18576429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
18586429Svs195195 report, 6185, &observed, &expected, 1, 1,
18596429Svs195195 err_data);
18606429Svs195195
18616429Svs195195 return (-3);
18626429Svs195195 }
18636429Svs195195 }
18646429Svs195195
18656429Svs195195 x = log(exp(0.0));
18666429Svs195195 expect_ans = 0.0000000000000000;
18676429Svs195195 if (x != expect_ans) {
18686429Svs195195 if (x < (expect_ans - DPMARGIN) ||
18696429Svs195195 x > (expect_ans + DPMARGIN)) {
18706429Svs195195 expected = *(uint64_t *)&expect_ans;
18716429Svs195195 observed = *(uint64_t *)&x;
1872*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
18736429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
18746429Svs195195 expect_ans, x);
18756429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
18766429Svs195195 report, 6186, &observed, &expected, 1, 1,
18776429Svs195195 err_data);
18786429Svs195195
18796429Svs195195 return (-3);
18806429Svs195195 }
18816429Svs195195 }
18826429Svs195195
18836429Svs195195 x = log(exp(1.0));
18846429Svs195195 expect_ans = 1.0000000000000000;
18856429Svs195195 if (x != expect_ans) {
18866429Svs195195 if (x < (expect_ans - DPMARGIN) ||
18876429Svs195195 x > (expect_ans + DPMARGIN)) {
18886429Svs195195 expected = *(uint64_t *)&expect_ans;
18896429Svs195195 observed = *(uint64_t *)&x;
1890*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
18916429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
18926429Svs195195 expect_ans, x);
18936429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
18946429Svs195195 report, 6187, &observed, &expected, 1, 1,
18956429Svs195195 err_data);
18966429Svs195195
18976429Svs195195 return (-3);
18986429Svs195195 }
18996429Svs195195 }
19006429Svs195195
19016429Svs195195 x = log(exp(10.0));
19026429Svs195195 expect_ans = 10.0000000000000000;
19036429Svs195195 if (x != expect_ans) {
19046429Svs195195 if (x < (expect_ans - DPMARGIN) ||
19056429Svs195195 x > (expect_ans + DPMARGIN)) {
19066429Svs195195 expected = *(uint64_t *)&expect_ans;
19076429Svs195195 observed = *(uint64_t *)&x;
1908*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
19096429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
19106429Svs195195 expect_ans, x);
19116429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
19126429Svs195195 report, 6188, &observed, &expected, 1, 1,
19136429Svs195195 err_data);
19146429Svs195195
19156429Svs195195 return (-3);
19166429Svs195195 }
19176429Svs195195 }
19186429Svs195195
19196429Svs195195 /*
19206429Svs195195 * These functions are supported by the 68881
19216429Svs195195 * but not the FPA
19226429Svs195195 */
19236429Svs195195
19246429Svs195195 x = tan(-(2 * pi));
19256429Svs195195 expect_ans = -(0.000000000820414);
19266429Svs195195 if (x != expect_ans) {
19276429Svs195195 if (x < (expect_ans - DPMARGIN) ||
19286429Svs195195 x > (expect_ans + DPMARGIN)) {
19296429Svs195195 expected = *(uint64_t *)&expect_ans;
19306429Svs195195 observed = *(uint64_t *)&x;
1931*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
19326429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
19336429Svs195195 expect_ans, x);
19346429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
19356429Svs195195 report, 6189, &observed, &expected, 1, 1,
19366429Svs195195 err_data);
19376429Svs195195
19386429Svs195195 return (-3);
19396429Svs195195 }
19406429Svs195195 }
19416429Svs195195
19426429Svs195195 x = tan(-(7 * pi) / 4);
19436429Svs195195 expect_ans = 0.999999998564275;
19446429Svs195195 if (x != expect_ans) {
19456429Svs195195 if (x < (expect_ans - DPMARGIN) ||
19466429Svs195195 x > (expect_ans + DPMARGIN)) {
19476429Svs195195 expected = *(uint64_t *)&expect_ans;
19486429Svs195195 observed = *(uint64_t *)&x;
1949*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
19506429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
19516429Svs195195 expect_ans, x);
19526429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
19536429Svs195195 report, 6190, &observed, &expected, 1, 1,
19546429Svs195195 err_data);
19556429Svs195195
19566429Svs195195 return (-3);
19576429Svs195195 }
19586429Svs195195 }
19596429Svs195195
19606429Svs195195 x = tan(-(5 * pi) / 4);
19616429Svs195195 expect_ans = -(1.000000001025517);
19626429Svs195195 if (x != expect_ans) {
19636429Svs195195 if (x < (expect_ans - DPMARGIN) ||
19646429Svs195195 x > (expect_ans + DPMARGIN)) {
19656429Svs195195 expected = *(uint64_t *)&expect_ans;
19666429Svs195195 observed = *(uint64_t *)&x;
1967*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),\
19686429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
19696429Svs195195 expect_ans, x);
19706429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
19716429Svs195195 report, 6191, &observed, &expected, 1, 1,
19726429Svs195195 err_data);
19736429Svs195195
19746429Svs195195 return (-3);
19756429Svs195195 }
19766429Svs195195 }
19776429Svs195195
19786429Svs195195 x = tan(-(pi));
19796429Svs195195 expect_ans = -(0.000000000410207);
19806429Svs195195 if (x != expect_ans) {
19816429Svs195195 if (x < (expect_ans - DPMARGIN) ||
19826429Svs195195 x > (expect_ans + DPMARGIN)) {
19836429Svs195195 expected = *(uint64_t *)&expect_ans;
19846429Svs195195 observed = *(uint64_t *)&x;
1985*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
19866429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
19876429Svs195195 expect_ans, x);
19886429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
19896429Svs195195 report, 6192, &observed, &expected, 1, 1,
19906429Svs195195 err_data);
19916429Svs195195
19926429Svs195195 return (-3);
19936429Svs195195 }
19946429Svs195195 }
19956429Svs195195
19966429Svs195195 x = tan(-(3 * pi) / 4);
19976429Svs195195 expect_ans = 0.999999999384690;
19986429Svs195195 if (x != expect_ans) {
19996429Svs195195 if (x < (expect_ans - DPMARGIN) ||
20006429Svs195195 x > (expect_ans + DPMARGIN)) {
20016429Svs195195 expected = *(uint64_t *)&expect_ans;
20026429Svs195195 observed = *(uint64_t *)&x;
2003*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
20046429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
20056429Svs195195 expect_ans, x);
20066429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
20076429Svs195195 report, 6193, &observed, &expected, 1, 1,
20086429Svs195195 err_data);
20096429Svs195195
20106429Svs195195 return (-3);
20116429Svs195195 }
20126429Svs195195 }
20136429Svs195195
20146429Svs195195 x = tan(-(pi) / 4);
20156429Svs195195 expect_ans = -(1.000000000205103);
20166429Svs195195 if (x != expect_ans) {
20176429Svs195195 if (x < (expect_ans - DPMARGIN) ||
20186429Svs195195 x > (expect_ans + DPMARGIN)) {
20196429Svs195195 expected = *(uint64_t *)&expect_ans;
20206429Svs195195 observed = *(uint64_t *)&x;
2021*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
20226429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
20236429Svs195195 expect_ans, x);
20246429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
20256429Svs195195 report, 6194, &observed, &expected, 1, 1,
20266429Svs195195 err_data);
20276429Svs195195
20286429Svs195195 return (-3);
20296429Svs195195 }
20306429Svs195195 }
20316429Svs195195
20326429Svs195195 x = tan(0.0);
20336429Svs195195 expect_ans = 0.000000000000000;
20346429Svs195195 if (x != expect_ans) {
20356429Svs195195 if (x < (expect_ans - DPMARGIN) ||
20366429Svs195195 x > (expect_ans + DPMARGIN)) {
20376429Svs195195 expected = *(uint64_t *)&expect_ans;
20386429Svs195195 observed = *(uint64_t *)&x;
2039*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
20406429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
20416429Svs195195 expect_ans, x);
20426429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
20436429Svs195195 report, 6195, &observed, &expected, 1, 1,
20446429Svs195195 err_data);
20456429Svs195195
20466429Svs195195 return (-3);
20476429Svs195195 }
20486429Svs195195 }
20496429Svs195195
20506429Svs195195 x = tan(pi / 4);
20516429Svs195195 expect_ans = 1.000000000205103;
20526429Svs195195 if (x != expect_ans) {
20536429Svs195195 if (x < (expect_ans - DPMARGIN) ||
20546429Svs195195 x > (expect_ans + DPMARGIN)) {
20556429Svs195195 expected = *(uint64_t *)&expect_ans;
20566429Svs195195 observed = *(uint64_t *)&x;
2057*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
20586429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
20596429Svs195195 expect_ans, x);
20606429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
20616429Svs195195 report, 6196, &observed, &expected, 1, 1,
20626429Svs195195 err_data);
20636429Svs195195
20646429Svs195195 return (-3);
20656429Svs195195 }
20666429Svs195195 }
20676429Svs195195
20686429Svs195195 x = tan((3 * pi) / 4);
20696429Svs195195 expect_ans = -(0.999999999384690);
20706429Svs195195 if (x != expect_ans) {
20716429Svs195195 if (x < (expect_ans - DPMARGIN) ||
20726429Svs195195 x > (expect_ans + DPMARGIN)) {
20736429Svs195195 expected = *(uint64_t *)&expect_ans;
20746429Svs195195 observed = *(uint64_t *)&x;
2075*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
20766429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
20776429Svs195195 expect_ans, x);
20786429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
20796429Svs195195 report, 6197, &observed, &expected, 1, 1,
20806429Svs195195 err_data);
20816429Svs195195
20826429Svs195195 return (-3);
20836429Svs195195 }
20846429Svs195195 }
20856429Svs195195
20866429Svs195195 x = tan(pi);
20876429Svs195195 expect_ans = 0.000000000410207;
20886429Svs195195 if (x != expect_ans) {
20896429Svs195195 if (x < (expect_ans - DPMARGIN) ||
20906429Svs195195 x > (expect_ans + DPMARGIN)) {
20916429Svs195195 expected = *(uint64_t *)&expect_ans;
20926429Svs195195 observed = *(uint64_t *)&x;
2093*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
20946429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
20956429Svs195195 expect_ans, x);
20966429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
20976429Svs195195 report, 6198, &observed, &expected, 1, 1,
20986429Svs195195 err_data);
20996429Svs195195
21006429Svs195195 return (-3);
21016429Svs195195 }
21026429Svs195195 }
21036429Svs195195
21046429Svs195195 x = tan((5 * pi) / 4);
21056429Svs195195 expect_ans = 1.000000001025517;
21066429Svs195195 if (x != expect_ans) {
21076429Svs195195 if (x < (expect_ans - DPMARGIN) ||
21086429Svs195195 x > (expect_ans + DPMARGIN)) {
21096429Svs195195 expected = *(uint64_t *)&expect_ans;
21106429Svs195195 observed = *(uint64_t *)&x;
2111*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
21126429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
21136429Svs195195 expect_ans, x);
21146429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
21156429Svs195195 report, 6199, &observed, &expected, 1, 1,
21166429Svs195195 err_data);
21176429Svs195195
21186429Svs195195 return (-3);
21196429Svs195195 }
21206429Svs195195 }
21216429Svs195195
21226429Svs195195 x = tan((7 * pi) / 4);
21236429Svs195195 expect_ans = -(0.999999998564275);
21246429Svs195195 if (x != expect_ans) {
21256429Svs195195 if (x < (expect_ans - DPMARGIN) ||
21266429Svs195195 x > (expect_ans + DPMARGIN)) {
21276429Svs195195 expected = *(uint64_t *)&expect_ans;
21286429Svs195195 observed = *(uint64_t *)&x;
2129*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
21306429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
21316429Svs195195 expect_ans, x);
21326429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
21336429Svs195195 report, 6200, &observed, &expected, 1, 1,
21346429Svs195195 err_data);
21356429Svs195195
21366429Svs195195 return (-3);
21376429Svs195195 }
21386429Svs195195 }
21396429Svs195195
21406429Svs195195 x = tan((2 * pi));
21416429Svs195195 expect_ans = 0.000000000820414;
21426429Svs195195 if (x != expect_ans) {
21436429Svs195195 if (x < (expect_ans - DPMARGIN) ||
21446429Svs195195 x > (expect_ans + DPMARGIN)) {
21456429Svs195195 expected = *(uint64_t *)&expect_ans;
21466429Svs195195 observed = *(uint64_t *)&x;
2147*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
21486429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
21496429Svs195195 expect_ans, x);
21506429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
21516429Svs195195 report, 6201, &observed, &expected, 1, 1,
21526429Svs195195 err_data);
21536429Svs195195
21546429Svs195195 return (-3);
21556429Svs195195 }
21566429Svs195195 }
21576429Svs195195
21586429Svs195195 x = sqrt(0.0);
21596429Svs195195 expect_ans = 0.000000000000000;
21606429Svs195195 if (x != expect_ans) {
21616429Svs195195 if (x < (expect_ans - DPMARGIN) ||
21626429Svs195195 x > (expect_ans + DPMARGIN)) {
21636429Svs195195 expected = *(uint64_t *)&expect_ans;
21646429Svs195195 observed = *(uint64_t *)&x;
2165*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
21666429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
21676429Svs195195 expect_ans, x);
21686429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
21696429Svs195195 report, 6202, &observed, &expected, 1, 1,
21706429Svs195195 err_data);
21716429Svs195195
21726429Svs195195 return (-3);
21736429Svs195195 }
21746429Svs195195 }
21756429Svs195195
21766429Svs195195 x = sqrt(1.0);
21776429Svs195195 expect_ans = 1.000000000000000;
21786429Svs195195 if (x != expect_ans) {
21796429Svs195195 if (x < (expect_ans - DPMARGIN) ||
21806429Svs195195 x > (expect_ans + DPMARGIN)) {
21816429Svs195195 expected = *(uint64_t *)&expect_ans;
21826429Svs195195 observed = *(uint64_t *)&x;
2183*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
21846429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
21856429Svs195195 expect_ans, x);
21866429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
21876429Svs195195 report, 6203, &observed, &expected, 1, 1,
21886429Svs195195 err_data);
21896429Svs195195
21906429Svs195195 return (-3);
21916429Svs195195 }
21926429Svs195195 }
21936429Svs195195
21946429Svs195195 x = sqrt(4.0);
21956429Svs195195 expect_ans = 2.000000000000000;
21966429Svs195195 if (x != expect_ans) {
21976429Svs195195 if (x < (expect_ans - DPMARGIN) ||
21986429Svs195195 x > (expect_ans + DPMARGIN)) {
21996429Svs195195 expected = *(uint64_t *)&expect_ans;
22006429Svs195195 observed = *(uint64_t *)&x;
2201*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
22026429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
22036429Svs195195 expect_ans, x);
22046429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
22056429Svs195195 report, 6204, &observed, &expected, 1, 1,
22066429Svs195195 err_data);
22076429Svs195195
22086429Svs195195 return (-3);
22096429Svs195195 }
22106429Svs195195 }
22116429Svs195195
22126429Svs195195 x = sqrt(9.0);
22136429Svs195195 expect_ans = 3.000000000000000;
22146429Svs195195 if (x != expect_ans) {
22156429Svs195195 if (x < (expect_ans - DPMARGIN) ||
22166429Svs195195 x > (expect_ans + DPMARGIN)) {
22176429Svs195195 expected = *(uint64_t *)&expect_ans;
22186429Svs195195 observed = *(uint64_t *)&x;
2219*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
22206429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
22216429Svs195195 expect_ans, x);
22226429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
22236429Svs195195 report, 6205, &observed, &expected, 1, 1,
22246429Svs195195 err_data);
22256429Svs195195
22266429Svs195195 return (-3);
22276429Svs195195 }
22286429Svs195195 }
22296429Svs195195
22306429Svs195195 x = sqrt(16.0);
22316429Svs195195 expect_ans = 4.000000000000000;
22326429Svs195195 if (x != expect_ans) {
22336429Svs195195 if (x < (expect_ans - DPMARGIN) ||
22346429Svs195195 x > (expect_ans + DPMARGIN)) {
22356429Svs195195 expected = *(uint64_t *)&expect_ans;
22366429Svs195195 observed = *(uint64_t *)&x;
2237*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
22386429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
22396429Svs195195 expect_ans, x);
22406429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
22416429Svs195195 report, 6206, &observed, &expected, 1, 1,
22426429Svs195195 err_data);
22436429Svs195195
22446429Svs195195 return (-3);
22456429Svs195195 }
22466429Svs195195 }
22476429Svs195195
22486429Svs195195 x = sqrt(25.0);
22496429Svs195195 expect_ans = 5.000000000000000;
22506429Svs195195 if (x != expect_ans) {
22516429Svs195195 if (x < (expect_ans - DPMARGIN) ||
22526429Svs195195 x > (expect_ans + DPMARGIN)) {
22536429Svs195195 expected = *(uint64_t *)&expect_ans;
22546429Svs195195 observed = *(uint64_t *)&x;
2255*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
22566429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
22576429Svs195195 expect_ans, x);
22586429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
22596429Svs195195 report, 6207, &observed, &expected, 1, 1,
22606429Svs195195 err_data);
22616429Svs195195
22626429Svs195195 return (-3);
22636429Svs195195 }
22646429Svs195195 }
22656429Svs195195
22666429Svs195195 x = sqrt(36.0);
22676429Svs195195 expect_ans = 6.000000000000000;
22686429Svs195195 if (x != expect_ans) {
22696429Svs195195 if (x < (expect_ans - DPMARGIN) ||
22706429Svs195195 x > (expect_ans + DPMARGIN)) {
22716429Svs195195 expected = *(uint64_t *)&expect_ans;
22726429Svs195195 observed = *(uint64_t *)&x;
2273*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
22746429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
22756429Svs195195 expect_ans, x);
22766429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
22776429Svs195195 report, 6208, &observed, &expected, 1, 1,
22786429Svs195195 err_data);
22796429Svs195195
22806429Svs195195 return (-3);
22816429Svs195195 }
22826429Svs195195 }
22836429Svs195195
22846429Svs195195 x = sqrt(49.0);
22856429Svs195195 expect_ans = 7.000000000000000;
22866429Svs195195 if (x != expect_ans) {
22876429Svs195195 if (x < (expect_ans - DPMARGIN) ||
22886429Svs195195 x > (expect_ans + DPMARGIN)) {
22896429Svs195195 expected = *(uint64_t *)&expect_ans;
22906429Svs195195 observed = *(uint64_t *)&x;
2291*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
22926429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
22936429Svs195195 expect_ans, x);
22946429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
22956429Svs195195 report, 6209, &observed, &expected, 1, 1,
22966429Svs195195 err_data);
22976429Svs195195
22986429Svs195195 return (-3);
22996429Svs195195 }
23006429Svs195195 }
23016429Svs195195
23026429Svs195195 x = sqrt(64.0);
23036429Svs195195 expect_ans = 8.000000000000000;
23046429Svs195195 if (x != expect_ans) {
23056429Svs195195 if (x < (expect_ans - DPMARGIN) ||
23066429Svs195195 x > (expect_ans + DPMARGIN)) {
23076429Svs195195 expected = *(uint64_t *)&expect_ans;
23086429Svs195195 observed = *(uint64_t *)&x;
2309*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
23106429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
23116429Svs195195 expect_ans, x);
23126429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
23136429Svs195195 report, 6210, &observed, &expected, 1, 1,
23146429Svs195195 err_data);
23156429Svs195195
23166429Svs195195 return (-3);
23176429Svs195195 }
23186429Svs195195 }
23196429Svs195195
23206429Svs195195 x = sqrt(81.0);
23216429Svs195195 expect_ans = 9.000000000000000;
23226429Svs195195 if (x != expect_ans) {
23236429Svs195195 if (x < (expect_ans - DPMARGIN) ||
23246429Svs195195 x > (expect_ans + DPMARGIN)) {
23256429Svs195195 expected = *(uint64_t *)&expect_ans;
23266429Svs195195 observed = *(uint64_t *)&x;
2327*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
23286429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
23296429Svs195195 expect_ans, x);
23306429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
23316429Svs195195 report, 6211, &observed, &expected, 1, 1,
23326429Svs195195 err_data);
23336429Svs195195
23346429Svs195195 return (-3);
23356429Svs195195 }
23366429Svs195195 }
23376429Svs195195
23386429Svs195195 x = sqrt(100.0);
23396429Svs195195 expect_ans = 10.000000000000000;
23406429Svs195195 if (x != expect_ans) {
23416429Svs195195 if (x < (expect_ans - DPMARGIN) ||
23426429Svs195195 x > (expect_ans + DPMARGIN)) {
23436429Svs195195 expected = *(uint64_t *)&expect_ans;
23446429Svs195195 observed = *(uint64_t *)&x;
2345*7186Skk158166 (void) snprintf(err_data, sizeof (err_data),
23466429Svs195195 "\nExpected: %.16f\nObserved: %.16f",
23476429Svs195195 expect_ans, x);
23486429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO,
23496429Svs195195 report, 6212, &observed, &expected, 1, 1,
23506429Svs195195 err_data);
23516429Svs195195
23526429Svs195195 return (-3);
23536429Svs195195 }
23546429Svs195195 }
23556429Svs195195
23566429Svs195195 return (0);
23576429Svs195195 }
23586429Svs195195
23596429Svs195195 /*
23606429Svs195195 * process_fpu_args(int argc, char *argv[])
23616429Svs195195 * processes the args passed into main()
23626429Svs195195 * and sets the appropriate global vars.
23636429Svs195195 */
23646429Svs195195 static void
process_fpu_args(int argc,char * argv[])23656429Svs195195 process_fpu_args(int argc, char *argv[])
23666429Svs195195 {
23676429Svs195195 char l_buf[32];
23686429Svs195195 char *px;
23696429Svs195195 int opt;
23706429Svs195195
23716429Svs195195 while ((opt = getopt(argc, argv, "s:d:p:f:vnhe")) != EOF) {
23726429Svs195195 switch (opt) {
23736429Svs195195 case 'P': /* -p N or -p all or no -p */
23746429Svs195195 case 'p':
23756429Svs195195
2376*7186Skk158166 (void) memset(l_buf, 0, sizeof (l_buf));
23776429Svs195195 test_group = -1;
23786429Svs195195 if (NULL != optarg) {
2379*7186Skk158166 (void) strncpy(l_buf, optarg, 3); /* -p all */
23806429Svs195195 if (!strncasecmp(l_buf, "all", 3)) {
23816429Svs195195 test_group = 12345;
23826429Svs195195 break;
23836429Svs195195 }
23846429Svs195195 test_group = atoi(optarg);
23856429Svs195195 if ((0 == test_group) && strcmp(optarg, "0"))
23866429Svs195195 test_group = -1;
23876429Svs195195 }
23886429Svs195195
23896429Svs195195 if (test_group < 0) {
23906429Svs195195 _exit(FPU_INVALID_ARG);
23916429Svs195195 }
23926429Svs195195 break;
23936429Svs195195 case 'f': /* 1000,1500,2000 freq */
23946429Svs195195 case 'F':
2395*7186Skk158166 (void) memset(l_buf, 0, sizeof (l_buf));
23966429Svs195195 if (NULL != optarg) {
2397*7186Skk158166 /* -f 1000 */
2398*7186Skk158166 (void) strncpy(l_buf, optarg, 5);
2399*7186Skk158166
24006429Svs195195 proc_fr = atoi(optarg);
24016429Svs195195
24026429Svs195195 switch (proc_fr) {
24036429Svs195195 case 1000 :
24046429Svs195195 lowstresslapagroup_len =
24056429Svs195195 lowstresslapagroup1000_len;
24066429Svs195195 lowstresslapagroup =
24076429Svs195195 LowStressLapaGroup_1000;
24086429Svs195195 break;
24096429Svs195195 case 1500 :
24106429Svs195195 lowstresslapagroup_len =
24116429Svs195195 lowstresslapagroup1500_len;
24126429Svs195195 lowstresslapagroup =
24136429Svs195195 LowStressLapaGroup_1500;
24146429Svs195195 break;
24156429Svs195195 case 2000 :
24166429Svs195195 lowstresslapagroup_len =
24176429Svs195195 lowstresslapagroup2000_len;
24186429Svs195195 lowstresslapagroup =
24196429Svs195195 LowStressLapaGroup_2000;
24206429Svs195195 break;
24216429Svs195195 default :
24226429Svs195195 if (proc_fr < 1500) {
24236429Svs195195 lowstresslapagroup_len =
24246429Svs195195 lowstresslapagroup1000_len;
24256429Svs195195 lowstresslapagroup =
24266429Svs195195 LowStressLapaGroup_1000;
24276429Svs195195 break;
24286429Svs195195 } else if (proc_fr < 2000) {
24296429Svs195195 lowstresslapagroup_len =
24306429Svs195195 lowstresslapagroup1500_len;
24316429Svs195195 lowstresslapagroup =
24326429Svs195195 LowStressLapaGroup_1500;
24336429Svs195195 break;
24346429Svs195195 } else {
24356429Svs195195 lowstresslapagroup_len =
24366429Svs195195 lowstresslapagroup2000_len;
24376429Svs195195 lowstresslapagroup =
24386429Svs195195 LowStressLapaGroup_2000;
24396429Svs195195 break;
24406429Svs195195 }
24416429Svs195195 }
24426429Svs195195 }
24436429Svs195195 break;
24446429Svs195195 case 'd':
24456429Svs195195 if (optarg == NULL)
24466429Svs195195 _exit(FPU_INVALID_ARG);
24476429Svs195195
24486429Svs195195 fpu_cpu = atoi(optarg);
24496429Svs195195
24506429Svs195195 if (fpu_cpu == 0 && strcmp(optarg, "0"))
24516429Svs195195 _exit(FPU_INVALID_ARG);
24526429Svs195195
24536429Svs195195 if (is_cpu_on(fpu_cpu))
24546429Svs195195 _exit(FPU_BIND_FAIL);
24556429Svs195195 break;
24566429Svs195195 case 'E':
24576429Svs195195 case 'e':
24586429Svs195195 fps_exec_time = 1;
24596429Svs195195 break;
24606429Svs195195 case 'V':
24616429Svs195195 case 'v':
24626429Svs195195 fps_verbose_msg = 1;
24636429Svs195195 break;
24646429Svs195195 case 'S':
24656429Svs195195 case 's':
2466*7186Skk158166 (void) memset(l_buf, 0, sizeof (l_buf));
24676429Svs195195 stress_level = 1;
24686429Svs195195
24696429Svs195195 if (NULL != optarg) {
2470*7186Skk158166 (void) strncpy(l_buf, optarg, 2);
24716429Svs195195
24726429Svs195195 if (('X' != l_buf[0]) && (0 != l_buf[1]))
24736429Svs195195 l_buf[0] = 'E';
24746429Svs195195
24756429Svs195195 switch (l_buf[0]) {
24766429Svs195195 case 'l':
24776429Svs195195 case 'L':
24786429Svs195195 case '1':
24796429Svs195195 stress_level = 1;
24806429Svs195195 limit_group = 1;
24816429Svs195195 break;
24826429Svs195195 case 'm':
24836429Svs195195 case 'M':
24846429Svs195195 case '2':
24856429Svs195195 stress_level = 1000;
24866429Svs195195 limit_group = 2;
24876429Svs195195 break;
24886429Svs195195 case 'h':
24896429Svs195195 case 'H':
24906429Svs195195 case '3':
24916429Svs195195 stress_level = 4000;
24926429Svs195195 limit_group = 3;
24936429Svs195195 break;
24946429Svs195195 case 'X':
24956429Svs195195 px = optarg + 1;
24966429Svs195195 stress_level = 10000;
24976429Svs195195 limit_group = 3;
24986429Svs195195
24996429Svs195195 if (NULL != px) {
25006429Svs195195 stress_level = atoi(px);
25016429Svs195195 if ((0 == stress_level) ||
25026429Svs195195 (stress_level > 10000) ||
25036429Svs195195 (stress_level < 1000) ||
25046429Svs195195 (0 != stress_level % 1000))
25056429Svs195195 stress_level = 10000;
25066429Svs195195 }
25076429Svs195195 break;
25086429Svs195195 default:
25096429Svs195195 stress_level = 1;
25106429Svs195195 limit_group = 1;
25116429Svs195195 break;
25126429Svs195195 }
25136429Svs195195 }
25146429Svs195195 break;
25156429Svs195195 default:
25166429Svs195195 _exit(FPU_INVALID_ARG);
25176429Svs195195 break;
25186429Svs195195 }
25196429Svs195195 }
25206429Svs195195 }
25216429Svs195195
25226429Svs195195 /*
25236429Svs195195 * is_cpu_on(int unit) checks to see if processor
25246429Svs195195 * unit is online.
25256429Svs195195 */
25266429Svs195195 static int
is_cpu_on(int unit)25276429Svs195195 is_cpu_on(int unit)
25286429Svs195195 {
25296429Svs195195 int proc_stat;
25306429Svs195195
25316429Svs195195 proc_stat = p_online(unit, P_STATUS);
25326429Svs195195
25336429Svs195195 if (P_ONLINE == proc_stat)
25346429Svs195195 return (0);
25356429Svs195195
25366429Svs195195 return (1);
25376429Svs195195 }
25386429Svs195195
25396429Svs195195 /*
25406429Svs195195 * check_proc(int cpu_id) checks to see that we're on an
25416429Svs195195 * fpscrubber supported processor specified by cpu_id.
25426429Svs195195 */
25436429Svs195195 static int
check_proc(int cpu_id)25446429Svs195195 check_proc(int cpu_id)
25456429Svs195195 {
25466429Svs195195 char brand[40];
25476429Svs195195 kstat_ctl_t *kc;
25486429Svs195195 kstat_t *ksp;
25496429Svs195195 kstat_named_t *knp;
25506429Svs195195
25516429Svs195195
25526429Svs195195 /* grab kstat info */
25536429Svs195195 if ((kc = kstat_open()) == NULL)
25546429Svs195195 return (1);
25556429Svs195195
25566429Svs195195 if ((ksp = kstat_lookup(kc, "cpu_info", (int)cpu_id, NULL)) == NULL) {
2557*7186Skk158166 (void) kstat_close(kc);
25586429Svs195195
25596429Svs195195 return (1);
25606429Svs195195 }
25616429Svs195195
25626429Svs195195 if ((kstat_read(kc, ksp, NULL)) == -1) {
2563*7186Skk158166 (void) kstat_close(kc);
25646429Svs195195
25656429Svs195195 return (1);
25666429Svs195195 }
25676429Svs195195
25686429Svs195195 if ((knp = kstat_data_lookup(ksp, "brand")) == NULL) {
2569*7186Skk158166 (void) kstat_close(kc);
25706429Svs195195
25716429Svs195195 return (1);
25726429Svs195195 }
25736429Svs195195
2574*7186Skk158166 if (snprintf(brand, MAX_CPU_BRAND, "%s",
2575*7186Skk158166 KSTAT_NAMED_STR_PTR(knp)) < 0) {
2576*7186Skk158166 (void) kstat_close(kc);
25776429Svs195195
25786429Svs195195 return (1);
25796429Svs195195 }
25806429Svs195195
25816429Svs195195 /* check against supported CPUs */
25826429Svs195195
25836429Svs195195 if (strcmp(brand, USIII_KSTAT) != 0 &&
25846429Svs195195 strcmp(brand, USIIIi_KSTAT) != 0 &&
25856429Svs195195 strcmp(brand, USIIIP_KSTAT) != 0 &&
25866429Svs195195 strcmp(brand, USIV_KSTAT) != 0 &&
25876429Svs195195 strcmp(brand, USIVP_KSTAT) != 0) {
2588*7186Skk158166 (void) kstat_close(kc);
25896429Svs195195
25906429Svs195195 return (2);
25916429Svs195195 }
25926429Svs195195
2593*7186Skk158166 (void) kstat_close(kc);
25946429Svs195195
25956429Svs195195 return (0);
25966429Svs195195 }
2597