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 936429Svs195195 main(int argc, char *argv[]) 946429Svs195195 { 956429Svs195195 int test_ret; 966429Svs195195 int procb; 976429Svs195195 int proc_setb; 98*6863Sia112686 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) { 1556429Svs195195 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 164*6863Sia112686 /* 165*6863Sia112686 * Testing is now done and a return code is selected. 166*6863Sia112686 * FPU_OK: No problems found on FPU tested. 167*6863Sia112686 * 168*6863Sia112686 * FPU_BIND_FAIL: CPU currently bound to is not the 169*6863Sia112686 * one started on. Attempt to file ereport if CPU 170*6863Sia112686 * is supported, but don't include resource so 171*6863Sia112686 * CPU isn't offlined. 172*6863Sia112686 * 173*6863Sia112686 * FPU_UNSUPPORT: Test wasn't run on a supported CPU. 174*6863Sia112686 * Error was found, but no ereport will be filed since 175*6863Sia112686 * CPU is unsupported and test values may not be valid. 176*6863Sia112686 * 177*6863Sia112686 * FPU_FOROFFLINE: Error found on FPU and ereport 178*6863Sia112686 * payload successfully sent. 179*6863Sia112686 * 180*6863Sia112686 * FPU_EREPORT_INCOM: Error found on FPU, ereport payload 181*6863Sia112686 * sent, but some nonessential information failed to add 182*6863Sia112686 * to that payload. CPU will still be offlined. 183*6863Sia112686 * 184*6863Sia112686 * FPU_EREPORT_FAIL: Error found on FPU, but ereport payload 185*6863Sia112686 * failed to transfer either due to lack of mandatory data 186*6863Sia112686 * or unable to send on FPScrubber systevent channel. 187*6863Sia112686 */ 188*6863Sia112686 1896429Svs195195 if (test_ret == FPU_FOROFFLINE) { 1906429Svs195195 /* 1916429Svs195195 * check bind and 1926429Svs195195 * check if on supported plaform 1936429Svs195195 */ 1946429Svs195195 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) { 208*6863Sia112686 test_ret = fps_generate_ereport_struct(&ereport_data); 209*6863Sia112686 if (ret != FPU_BIND_FAIL) { 210*6863Sia112686 ret = test_ret; 211*6863Sia112686 } 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 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 2496429Svs195195 printf("Execution time: %ldH.%ldM.%ldS.%ldMsec\n", hour, minute, 2506429Svs195195 second, mili); 2516429Svs195195 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 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 3366429Svs195195 if (align_data(lim, unit, report) != 0) { 3376429Svs195195 return (FPU_FOROFFLINE); 3386429Svs195195 } 3396429Svs195195 3406429Svs195195 if (vis_test(unit, 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 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); 4586429Svs195195 if (dlinpack_test(lapa_loop_stress, unit, 4596429Svs195195 report, fps_verbose_msg)) 4606429Svs195195 return (-4); 4616429Svs195195 } 4626429Svs195195 break; 4636429Svs195195 } 4646429Svs195195 4656429Svs195195 if (slinpack_test(lapa_stress, unit, report, fps_verbose_msg)) 4666429Svs195195 return (-4); 4676429Svs195195 if (dlinpack_test(lapa_stress, unit, report, fps_verbose_msg)) 4686429Svs195195 return (-4); 4696429Svs195195 } 4706429Svs195195 4716429Svs195195 return (0); 4726429Svs195195 } 4736429Svs195195 4746429Svs195195 4756429Svs195195 /* 4766429Svs195195 * spmath(int unit, struct fps_test_ereport *report) 4776429Svs195195 * peforms basic tests of the arithmetic operations: 4786429Svs195195 * +, -, *, and /. If any errors, they are stored in 4796429Svs195195 * report. 4806429Svs195195 */ 4816429Svs195195 static int 4826429Svs195195 spmath(struct fps_test_ereport *report) 4836429Svs195195 { 4846429Svs195195 char err_data[MAX_INFO_SIZE]; 4856429Svs195195 float a; 4866429Svs195195 float ans; 4876429Svs195195 float b; 4886429Svs195195 float expect_ans; 4896429Svs195195 uint64_t expected; 4906429Svs195195 uint64_t observed; 4916429Svs195195 4926429Svs195195 a = 1.2345; 4936429Svs195195 b = 0.9876; 4946429Svs195195 4956429Svs195195 #ifndef __lint 4966429Svs195195 ans = a + b; 4976429Svs195195 #endif 4986429Svs195195 ans = a + b; 4996429Svs195195 expect_ans = 2.2221000; 5006429Svs195195 if (ans != expect_ans) { 5016429Svs195195 if (ans < (2.2221000 - SPMARGIN) || 5026429Svs195195 ans > (2.2221000 + SPMARGIN)) { 5036429Svs195195 snprintf(err_data, sizeof (err_data), 5046429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 5056429Svs195195 expect_ans, ans); 5066429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 5076429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 5086429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 5096429Svs195195 report, 6112, &observed, &expected, 1, 5106429Svs195195 1, err_data); 5116429Svs195195 5126429Svs195195 return (-2); 5136429Svs195195 } 5146429Svs195195 } 5156429Svs195195 5166429Svs195195 ans = (a - b); 5176429Svs195195 expect_ans = 0.2469000; 5186429Svs195195 if (ans != expect_ans) { 5196429Svs195195 if (ans < (0.2469000 - SPMARGIN) || 5206429Svs195195 ans > (0.2469000 + SPMARGIN)) { 5216429Svs195195 snprintf(err_data, sizeof (err_data), 5226429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 5236429Svs195195 expect_ans, ans); 5246429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 5256429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 5266429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 5276429Svs195195 report, 6113, &observed, &expected, 1, 5286429Svs195195 1, err_data); 5296429Svs195195 5306429Svs195195 return (-2); 5316429Svs195195 } 5326429Svs195195 } 5336429Svs195195 5346429Svs195195 ans = a * b; 5356429Svs195195 expect_ans = 1.2191923; 5366429Svs195195 if (ans != expect_ans) { 5376429Svs195195 if (ans < (1.2191923 - SPMARGIN) || 5386429Svs195195 ans > (1.2191923 + SPMARGIN)) { 5396429Svs195195 snprintf(err_data, sizeof (err_data), 5406429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 5416429Svs195195 expect_ans, ans); 5426429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 5436429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 5446429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 5456429Svs195195 report, 6114, &observed, &expected, 1, 5466429Svs195195 1, err_data); 5476429Svs195195 5486429Svs195195 return (-2); 5496429Svs195195 } 5506429Svs195195 } 5516429Svs195195 5526429Svs195195 ans = a / b; 5536429Svs195195 expect_ans = 1.2500000; 5546429Svs195195 if (ans != expect_ans) { 5556429Svs195195 if (ans < (1.2500000 - SPMARGIN) || 5566429Svs195195 ans > (1.2500000 + SPMARGIN)) { 5576429Svs195195 snprintf(err_data, sizeof (err_data), 5586429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 5596429Svs195195 expect_ans, ans); 5606429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 5616429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 5626429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 5636429Svs195195 report, 6115, &observed, &expected, 1, 5646429Svs195195 1, err_data); 5656429Svs195195 5666429Svs195195 return (-2); 5676429Svs195195 } 5686429Svs195195 } 5696429Svs195195 5706429Svs195195 ans = a + (a - b); 5716429Svs195195 expect_ans = 1.4814000; 5726429Svs195195 if (ans != expect_ans) { 5736429Svs195195 if (ans < (1.4814000 - SPMARGIN) || 5746429Svs195195 ans > (1.4814000 + SPMARGIN)) { 5756429Svs195195 snprintf(err_data, sizeof (err_data), 5766429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 5776429Svs195195 expect_ans, ans); 5786429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 5796429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 5806429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 5816429Svs195195 report, 6116, &observed, &expected, 1, 5826429Svs195195 1, err_data); 5836429Svs195195 5846429Svs195195 return (-2); 5856429Svs195195 } 5866429Svs195195 } 5876429Svs195195 5886429Svs195195 ans = a - (a + b); 5896429Svs195195 expect_ans = -(0.9876000); 5906429Svs195195 if (ans != expect_ans) { 5916429Svs195195 if (ans < (-(0.9876000) - SPMARGIN) || 5926429Svs195195 ans > (-(0.9876000) + SPMARGIN)) { 5936429Svs195195 snprintf(err_data, sizeof (err_data), 5946429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 5956429Svs195195 expect_ans, ans); 5966429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 5976429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 5986429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 5996429Svs195195 report, 6117, &observed, &expected, 1, 6006429Svs195195 1, err_data); 6016429Svs195195 6026429Svs195195 return (-2); 6036429Svs195195 } 6046429Svs195195 } 6056429Svs195195 6066429Svs195195 ans = a + (a * b); 6076429Svs195195 expect_ans = 2.4536924; 6086429Svs195195 if (ans != expect_ans) { 6096429Svs195195 if (ans < (2.4536924 - SPMARGIN) || 6106429Svs195195 ans > (2.4536924 + SPMARGIN)) { 6116429Svs195195 snprintf(err_data, sizeof (err_data), 6126429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 6136429Svs195195 expect_ans, ans); 6146429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 6156429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 6166429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 6176429Svs195195 report, 6118, &observed, &expected, 1, 6186429Svs195195 1, err_data); 6196429Svs195195 6206429Svs195195 return (-2); 6216429Svs195195 } 6226429Svs195195 } 6236429Svs195195 6246429Svs195195 ans = a - (a * b); 6256429Svs195195 expect_ans = 0.0153078; 6266429Svs195195 if (ans != expect_ans) { 6276429Svs195195 if (ans < (0.0153078 - SPMARGIN) || 6286429Svs195195 ans > (0.0153078 + SPMARGIN)) { 6296429Svs195195 snprintf(err_data, sizeof (err_data), 6306429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 6316429Svs195195 expect_ans, ans); 6326429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 6336429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 6346429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 6356429Svs195195 report, 6119, &observed, &expected, 1, 6366429Svs195195 1, err_data); 6376429Svs195195 6386429Svs195195 return (-2); 6396429Svs195195 } 6406429Svs195195 } 6416429Svs195195 6426429Svs195195 ans = a + (a / b); 6436429Svs195195 expect_ans = 2.4844999; 6446429Svs195195 if (ans != expect_ans) { 6456429Svs195195 if (ans < (2.4844999 - SPMARGIN) || 6466429Svs195195 ans > (2.4844999 + SPMARGIN)) { 6476429Svs195195 snprintf(err_data, sizeof (err_data), 6486429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 6496429Svs195195 expect_ans, ans); 6506429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 6516429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 6526429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 6536429Svs195195 report, 6120, &observed, &expected, 1, 6546429Svs195195 1, err_data); 6556429Svs195195 6566429Svs195195 return (-2); 6576429Svs195195 } 6586429Svs195195 } 6596429Svs195195 6606429Svs195195 ans = a - (a / b); 6616429Svs195195 expect_ans = expect_ans; 6626429Svs195195 if (ans != -(0.0155000)) { 6636429Svs195195 if (ans < (-(0.0155000) - SPMARGIN) || 6646429Svs195195 ans > (-(0.0155000) + SPMARGIN)) { 6656429Svs195195 snprintf(err_data, sizeof (err_data), 6666429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 6676429Svs195195 expect_ans, ans); 6686429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 6696429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 6706429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 6716429Svs195195 report, 6121, &observed, &expected, 1, 6726429Svs195195 1, err_data); 6736429Svs195195 6746429Svs195195 return (-2); 6756429Svs195195 } 6766429Svs195195 } 6776429Svs195195 6786429Svs195195 ans = a * (a + b); 6796429Svs195195 expect_ans = 2.7431827; 6806429Svs195195 if (ans != expect_ans) { 6816429Svs195195 if (ans < (2.7431827 - SPMARGIN) || 6826429Svs195195 ans > (2.7431827 + SPMARGIN)) { 6836429Svs195195 snprintf(err_data, sizeof (err_data), 6846429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 6856429Svs195195 expect_ans, ans); 6866429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 6876429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 6886429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 6896429Svs195195 report, 6122, &observed, &expected, 1, 6906429Svs195195 1, err_data); 6916429Svs195195 6926429Svs195195 return (-2); 6936429Svs195195 } 6946429Svs195195 } 6956429Svs195195 6966429Svs195195 ans = a * (a - b); 6976429Svs195195 expect_ans = 0.3047981; 6986429Svs195195 if (ans != expect_ans) { 6996429Svs195195 if (ans < (0.3047981 - SPMARGIN) || 7006429Svs195195 ans > (0.3047981 + SPMARGIN)) { 7016429Svs195195 snprintf(err_data, sizeof (err_data), 7026429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 7036429Svs195195 expect_ans, ans); 7046429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 7056429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 7066429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 7076429Svs195195 report, 6123, &observed, &expected, 1, 7086429Svs195195 1, err_data); 7096429Svs195195 7106429Svs195195 return (-2); 7116429Svs195195 } 7126429Svs195195 } 7136429Svs195195 7146429Svs195195 ans = a / (a + b); 7156429Svs195195 expect_ans = 0.5555556; 7166429Svs195195 if (ans != expect_ans) { 7176429Svs195195 if (ans < (0.5555556 - SPMARGIN) || 7186429Svs195195 ans > (0.5555556 + SPMARGIN)) { 7196429Svs195195 snprintf(err_data, sizeof (err_data), 7206429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 7216429Svs195195 expect_ans, ans); 7226429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 7236429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 7246429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 7256429Svs195195 report, 6124, &observed, &expected, 1, 7266429Svs195195 1, err_data); 7276429Svs195195 7286429Svs195195 return (-2); 7296429Svs195195 } 7306429Svs195195 } 7316429Svs195195 7326429Svs195195 ans = a / (a - b); 7336429Svs195195 expect_ans = 4.9999995; 7346429Svs195195 if (ans != expect_ans) { 7356429Svs195195 if (ans < (4.9999995 - SPMARGIN) || 7366429Svs195195 ans > (4.9999995 + SPMARGIN)) { 7376429Svs195195 snprintf(err_data, sizeof (err_data), 7386429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 7396429Svs195195 expect_ans, ans); 7406429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 7416429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 7426429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 7436429Svs195195 report, 6125, &observed, &expected, 1, 7446429Svs195195 1, err_data); 7456429Svs195195 7466429Svs195195 return (-2); 7476429Svs195195 } 7486429Svs195195 } 7496429Svs195195 7506429Svs195195 ans = a * (a / b); 7516429Svs195195 expect_ans = 1.5431250; 7526429Svs195195 if (ans != expect_ans) { 7536429Svs195195 if (ans < (1.5431250 - SPMARGIN) || 7546429Svs195195 ans > (1.5431250 + SPMARGIN)) { 7556429Svs195195 snprintf(err_data, sizeof (err_data), 7566429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 7576429Svs195195 expect_ans, ans); 7586429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 7596429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 7606429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 7616429Svs195195 report, 6126, &observed, &expected, 1, 7626429Svs195195 1, err_data); 7636429Svs195195 7646429Svs195195 return (-2); 7656429Svs195195 } 7666429Svs195195 } 7676429Svs195195 7686429Svs195195 ans = a / (a * b); 7696429Svs195195 expect_ans = 1.0125557; 7706429Svs195195 if (ans != expect_ans) { 7716429Svs195195 if (ans < (1.0125557 - SPMARGIN) || 7726429Svs195195 ans > (1.0125557 + SPMARGIN)) { 7736429Svs195195 snprintf(err_data, sizeof (err_data), 7746429Svs195195 "\nExpected: %.8f\nObserved: %.8f", 7756429Svs195195 expect_ans, ans); 7766429Svs195195 expected = (uint64_t)(*(uint32_t *)&expect_ans); 7776429Svs195195 observed = (uint64_t)(*(uint32_t *)&ans); 7786429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 7796429Svs195195 report, 6127, &observed, &expected, 1, 7806429Svs195195 1, err_data); 7816429Svs195195 7826429Svs195195 return (-2); 7836429Svs195195 } 7846429Svs195195 } 7856429Svs195195 7866429Svs195195 return (0); 7876429Svs195195 } 7886429Svs195195 7896429Svs195195 /* 7906429Svs195195 * dpmath(int unit, struct fps_test_ereport *report) 7916429Svs195195 * peforms basic tests of the arithmetic operations: 7926429Svs195195 * +, -, *, and /. It also performs tests of cos, 7936429Svs195195 * sine, tan, log, sqrt, and exp. If any errors, 7946429Svs195195 * they are stored in report. 7956429Svs195195 */ 7966429Svs195195 static int 7976429Svs195195 dpmath(struct fps_test_ereport *report) 7986429Svs195195 { 7996429Svs195195 char err_data[MAX_INFO_SIZE]; 8006429Svs195195 double a; 8016429Svs195195 double ans; 8026429Svs195195 double b; 8036429Svs195195 double expect_ans; 8046429Svs195195 double expect_ans2; 8056429Svs195195 double result; 8066429Svs195195 double x; 8076429Svs195195 uint64_t expected; 8086429Svs195195 uint64_t observed; 8096429Svs195195 8106429Svs195195 a = 1.2345; 8116429Svs195195 b = 0.9876; 8126429Svs195195 8136429Svs195195 ans = (a + b); 8146429Svs195195 expect_ans = 2.222100000000000; 8156429Svs195195 if (ans != expect_ans) { 8166429Svs195195 if (ans < (expect_ans - DPMARGIN) || 8176429Svs195195 ans > (expect_ans + DPMARGIN)) { 8186429Svs195195 expected = *(uint64_t *)&expect_ans; 8196429Svs195195 observed = *(uint64_t *)&ans; 8206429Svs195195 snprintf(err_data, sizeof (err_data), 8216429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 8226429Svs195195 expect_ans, ans); 8236429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 8246429Svs195195 report, 6128, &observed, &expected, 1, 1, 8256429Svs195195 err_data); 8266429Svs195195 8276429Svs195195 return (-3); 8286429Svs195195 } 8296429Svs195195 } 8306429Svs195195 8316429Svs195195 ans = (a - b); 8326429Svs195195 expect_ans = 0.246899999999999; 8336429Svs195195 if (ans != expect_ans) { 8346429Svs195195 if (ans < (expect_ans - DPMARGIN) || 8356429Svs195195 ans > (expect_ans + DPMARGIN)) { 8366429Svs195195 expected = *(uint64_t *)&expect_ans; 8376429Svs195195 observed = *(uint64_t *)&ans; 8386429Svs195195 snprintf(err_data, sizeof (err_data), 8396429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 8406429Svs195195 expect_ans, ans); 8416429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 8426429Svs195195 report, 6129, &observed, &expected, 1, 1, 8436429Svs195195 err_data); 8446429Svs195195 8456429Svs195195 return (-3); 8466429Svs195195 } 8476429Svs195195 } 8486429Svs195195 8496429Svs195195 ans = a * b; 8506429Svs195195 expect_ans = 1.219192199999999; 8516429Svs195195 if (ans != expect_ans) { 8526429Svs195195 if (ans < (expect_ans - DPMARGIN) || 8536429Svs195195 ans > (expect_ans + DPMARGIN)) { 8546429Svs195195 expected = *(uint64_t *)&expect_ans; 8556429Svs195195 observed = *(uint64_t *)&ans; 8566429Svs195195 snprintf(err_data, sizeof (err_data), 8576429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 8586429Svs195195 expect_ans, ans); 8596429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 8606429Svs195195 report, 6130, &observed, &expected, 1, 1, 8616429Svs195195 err_data); 8626429Svs195195 8636429Svs195195 return (-3); 8646429Svs195195 } 8656429Svs195195 } 8666429Svs195195 8676429Svs195195 ans = a / b; 8686429Svs195195 expect_ans = 1.249999999999999; 8696429Svs195195 if (ans != expect_ans) { 8706429Svs195195 if (ans < (expect_ans - DPMARGIN) || 8716429Svs195195 ans > (expect_ans + DPMARGIN)) { 8726429Svs195195 expected = *(uint64_t *)&expect_ans; 8736429Svs195195 observed = *(uint64_t *)&ans; 8746429Svs195195 snprintf(err_data, sizeof (err_data), 8756429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 8766429Svs195195 expect_ans, ans); 8776429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 8786429Svs195195 report, 6131, &observed, &expected, 1, 1, 8796429Svs195195 err_data); 8806429Svs195195 8816429Svs195195 return (-3); 8826429Svs195195 } 8836429Svs195195 } 8846429Svs195195 8856429Svs195195 ans = a + (a - b); 8866429Svs195195 expect_ans = 1.481399999999999; 8876429Svs195195 if (ans != expect_ans) { 8886429Svs195195 if (ans < (expect_ans - DPMARGIN) || 8896429Svs195195 ans > (expect_ans + DPMARGIN)) { 8906429Svs195195 expected = *(uint64_t *)&expect_ans; 8916429Svs195195 observed = *(uint64_t *)&ans; 8926429Svs195195 snprintf(err_data, sizeof (err_data), 8936429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 8946429Svs195195 expect_ans, ans); 8956429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 8966429Svs195195 report, 6132, &observed, &expected, 1, 1, 8976429Svs195195 err_data); 8986429Svs195195 8996429Svs195195 return (-3); 9006429Svs195195 } 9016429Svs195195 } 9026429Svs195195 9036429Svs195195 ans = a - (a + b); 9046429Svs195195 expect_ans = -(0.987600000000000); 9056429Svs195195 if (ans != expect_ans) { 9066429Svs195195 if (ans < (expect_ans - DPMARGIN) || 9076429Svs195195 ans > (expect_ans + DPMARGIN)) { 9086429Svs195195 expected = *(uint64_t *)&expect_ans; 9096429Svs195195 observed = *(uint64_t *)&ans; 9106429Svs195195 snprintf(err_data, sizeof (err_data), 9116429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 9126429Svs195195 expect_ans, ans); 9136429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 9146429Svs195195 report, 6133, &observed, &expected, 1, 1, 9156429Svs195195 err_data); 9166429Svs195195 9176429Svs195195 return (-3); 9186429Svs195195 } 9196429Svs195195 } 9206429Svs195195 9216429Svs195195 ans = a + (a * b); 9226429Svs195195 expect_ans = 2.453692200000000; 9236429Svs195195 if (ans != expect_ans) { 9246429Svs195195 if (ans < (expect_ans - DPMARGIN) || 9256429Svs195195 ans > (expect_ans + DPMARGIN)) { 9266429Svs195195 expected = *(uint64_t *)&expect_ans; 9276429Svs195195 observed = *(uint64_t *)&ans; 9286429Svs195195 snprintf(err_data, sizeof (err_data), 9296429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 9306429Svs195195 expect_ans, ans); 9316429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 9326429Svs195195 report, 6134, &observed, &expected, 1, 1, 9336429Svs195195 err_data); 9346429Svs195195 9356429Svs195195 return (-3); 9366429Svs195195 } 9376429Svs195195 } 9386429Svs195195 9396429Svs195195 ans = a - (a * b); 9406429Svs195195 expect_ans = 0.015307800000000; 9416429Svs195195 if (ans != expect_ans) { 9426429Svs195195 if (ans < (expect_ans - DPMARGIN) || 9436429Svs195195 ans > (expect_ans + DPMARGIN)) { 9446429Svs195195 expected = *(uint64_t *)&expect_ans; 9456429Svs195195 observed = *(uint64_t *)&ans; 9466429Svs195195 snprintf(err_data, sizeof (err_data), 9476429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 9486429Svs195195 expect_ans, ans); 9496429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 9506429Svs195195 report, 6135, &observed, &expected, 1, 1, 9516429Svs195195 err_data); 9526429Svs195195 9536429Svs195195 return (-3); 9546429Svs195195 } 9556429Svs195195 } 9566429Svs195195 9576429Svs195195 ans = a + (a / b); 9586429Svs195195 expect_ans = 2.484500000000000; 9596429Svs195195 if (ans != expect_ans) { 9606429Svs195195 if (ans < (expect_ans - DPMARGIN) || 9616429Svs195195 ans > (expect_ans + DPMARGIN)) { 9626429Svs195195 expected = *(uint64_t *)&expect_ans; 9636429Svs195195 observed = *(uint64_t *)&ans; 9646429Svs195195 snprintf(err_data, sizeof (err_data), 9656429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 9666429Svs195195 expect_ans, ans); 9676429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 9686429Svs195195 report, 6136, &observed, &expected, 1, 1, 9696429Svs195195 err_data); 9706429Svs195195 9716429Svs195195 return (-3); 9726429Svs195195 } 9736429Svs195195 } 9746429Svs195195 9756429Svs195195 ans = a - (a / b); 9766429Svs195195 expect_ans = -(0.015499999999999); 9776429Svs195195 if (ans != expect_ans) { 9786429Svs195195 if (ans < (expect_ans - DPMARGIN) || 9796429Svs195195 ans > (expect_ans + DPMARGIN)) { 9806429Svs195195 expected = *(uint64_t *)&expect_ans; 9816429Svs195195 observed = *(uint64_t *)&ans; 9826429Svs195195 snprintf(err_data, sizeof (err_data), 9836429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 9846429Svs195195 expect_ans, ans); 9856429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 9866429Svs195195 report, 6137, &observed, &expected, 1, 1, 9876429Svs195195 err_data); 9886429Svs195195 9896429Svs195195 return (-3); 9906429Svs195195 } 9916429Svs195195 } 9926429Svs195195 9936429Svs195195 ans = a * (a + b); 9946429Svs195195 expect_ans = 2.743182449999999; 9956429Svs195195 if (ans != expect_ans) { 9966429Svs195195 if (ans < (expect_ans - DPMARGIN) || 9976429Svs195195 ans > (expect_ans + DPMARGIN)) { 9986429Svs195195 expected = *(uint64_t *)&expect_ans; 9996429Svs195195 observed = *(uint64_t *)&ans; 10006429Svs195195 snprintf(err_data, sizeof (err_data), 10016429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 10026429Svs195195 expect_ans, ans); 10036429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 10046429Svs195195 report, 6138, &observed, &expected, 1, 1, 10056429Svs195195 err_data); 10066429Svs195195 10076429Svs195195 return (-3); 10086429Svs195195 } 10096429Svs195195 } 10106429Svs195195 10116429Svs195195 ans = a * (a - b); 10126429Svs195195 expect_ans = 0.304798049999999; 10136429Svs195195 if (ans != expect_ans) { 10146429Svs195195 if (ans < (expect_ans - DPMARGIN) || 10156429Svs195195 ans > (expect_ans + DPMARGIN)) { 10166429Svs195195 expected = *(uint64_t *)&expect_ans; 10176429Svs195195 observed = *(uint64_t *)&ans; 10186429Svs195195 snprintf(err_data, sizeof (err_data), 10196429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 10206429Svs195195 expect_ans, ans); 10216429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 10226429Svs195195 report, 6139, &observed, &expected, 1, 1, 10236429Svs195195 err_data); 10246429Svs195195 10256429Svs195195 return (-3); 10266429Svs195195 } 10276429Svs195195 } 10286429Svs195195 10296429Svs195195 10306429Svs195195 ans = a / (a + b); 10316429Svs195195 expect_ans = 0.555555555555555; 10326429Svs195195 if (ans != expect_ans) { 10336429Svs195195 if (ans < (expect_ans - DPMARGIN) || 10346429Svs195195 ans > (expect_ans + DPMARGIN)) { 10356429Svs195195 expected = *(uint64_t *)&expect_ans; 10366429Svs195195 observed = *(uint64_t *)&ans; 10376429Svs195195 snprintf(err_data, sizeof (err_data), 10386429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 10396429Svs195195 expect_ans, ans); 10406429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 10416429Svs195195 report, 6140, &observed, &expected, 1, 1, 10426429Svs195195 err_data); 10436429Svs195195 10446429Svs195195 return (-3); 10456429Svs195195 } 10466429Svs195195 } 10476429Svs195195 10486429Svs195195 ans = a / (a - b); 10496429Svs195195 expect_ans = 5.000000000000002; 10506429Svs195195 if (ans != expect_ans) { 10516429Svs195195 if (ans < (expect_ans - DPMARGIN) || 10526429Svs195195 ans > (expect_ans + DPMARGIN)) { 10536429Svs195195 expected = *(uint64_t *)&expect_ans; 10546429Svs195195 observed = *(uint64_t *)&ans; 10556429Svs195195 snprintf(err_data, sizeof (err_data), 10566429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 10576429Svs195195 expect_ans, ans); 10586429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 10596429Svs195195 report, 6141, &observed, &expected, 1, 1, 10606429Svs195195 err_data); 10616429Svs195195 10626429Svs195195 return (-3); 10636429Svs195195 } 10646429Svs195195 } 10656429Svs195195 10666429Svs195195 ans = a * (a / b); 10676429Svs195195 expect_ans = 1.543124999999999; 10686429Svs195195 if (ans != expect_ans) { 10696429Svs195195 if (ans < (expect_ans - DPMARGIN) || 10706429Svs195195 ans > (expect_ans + DPMARGIN)) { 10716429Svs195195 expected = *(uint64_t *)&expect_ans; 10726429Svs195195 observed = *(uint64_t *)&ans; 10736429Svs195195 snprintf(err_data, sizeof (err_data), 10746429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 10756429Svs195195 expect_ans, ans); 10766429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 10776429Svs195195 report, 6142, &observed, &expected, 1, 1, 10786429Svs195195 err_data); 10796429Svs195195 10806429Svs195195 return (-3); 10816429Svs195195 } 10826429Svs195195 } 10836429Svs195195 10846429Svs195195 ans = a / (a * b); 10856429Svs195195 expect_ans = 1.012555690562980; 10866429Svs195195 if (ans != expect_ans) { 10876429Svs195195 if (ans < (expect_ans - DPMARGIN) || 10886429Svs195195 ans > (expect_ans + DPMARGIN)) { 10896429Svs195195 expected = *(uint64_t *)&expect_ans; 10906429Svs195195 observed = *(uint64_t *)&ans; 10916429Svs195195 snprintf(err_data, sizeof (err_data), 10926429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 10936429Svs195195 expect_ans, ans); 10946429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 10956429Svs195195 report, 6143, &observed, &expected, 1, 1, 10966429Svs195195 err_data); 10976429Svs195195 10986429Svs195195 return (-3); 10996429Svs195195 } 11006429Svs195195 } 11016429Svs195195 11026429Svs195195 /* Start Double Precision test of trg functions */ 11036429Svs195195 11046429Svs195195 /* sin of values in the range of -2pi to +2pi */ 11056429Svs195195 result = sin(-(pi * 2)); 11066429Svs195195 expect_ans = -(0.000000000820413); 11076429Svs195195 if (result != expect_ans) { 11086429Svs195195 if (result < (expect_ans - DPMARGIN) || 11096429Svs195195 result > (expect_ans + DPMARGIN)) { 11106429Svs195195 expected = *(uint64_t *)&expect_ans; 11116429Svs195195 observed = *(uint64_t *)&result; 11126429Svs195195 snprintf(err_data, sizeof (err_data), 11136429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 11146429Svs195195 expect_ans, result); 11156429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 11166429Svs195195 report, 6144, &observed, &expected, 1, 1, 11176429Svs195195 err_data); 11186429Svs195195 11196429Svs195195 return (-3); 11206429Svs195195 } 11216429Svs195195 } 11226429Svs195195 11236429Svs195195 result = sin((pi * (-3)) / 2); 11246429Svs195195 expect_ans = 1.0000000000000000; 11256429Svs195195 if (result != expect_ans) { 11266429Svs195195 if (result < (expect_ans - DPMARGIN)) { 11276429Svs195195 expected = *(uint64_t *)&expect_ans; 11286429Svs195195 observed = *(uint64_t *)&result; 11296429Svs195195 snprintf(err_data, sizeof (err_data), 11306429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 11316429Svs195195 expect_ans, result); 11326429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 11336429Svs195195 report, 6145, &observed, &expected, 1, 1, 11346429Svs195195 err_data); 11356429Svs195195 11366429Svs195195 return (-3); 11376429Svs195195 } 11386429Svs195195 #ifndef i86pc 11396429Svs195195 else if (result > (-(0.000000000000000) + DPMARGIN)) { 11406429Svs195195 expected = (uint64_t)-(0.000000000000000); 11416429Svs195195 observed = *(uint64_t *)&result; 11426429Svs195195 snprintf(err_data, sizeof (err_data), 11436429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 11446429Svs195195 -0.000000000000000, result); 11456429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 11466429Svs195195 report, 6146, &observed, &expected, 1, 1, 11476429Svs195195 err_data); 11486429Svs195195 11496429Svs195195 return (-3); 11506429Svs195195 } 11516429Svs195195 #endif 11526429Svs195195 } 11536429Svs195195 11546429Svs195195 result = sin(-(pi)); 11556429Svs195195 expect_ans = 0.000000000410206; 11566429Svs195195 if (result != expect_ans) { 11576429Svs195195 if (result < (expect_ans - DPMARGIN) || 11586429Svs195195 result > (expect_ans + DPMARGIN)) { 11596429Svs195195 expected = *(uint64_t *)&expect_ans; 11606429Svs195195 observed = *(uint64_t *)&result; 11616429Svs195195 snprintf(err_data, sizeof (err_data), 11626429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 11636429Svs195195 expect_ans, result); 11646429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 11656429Svs195195 report, 6147, &observed, &expected, 1, 1, 11666429Svs195195 err_data); 11676429Svs195195 11686429Svs195195 return (-3); 11696429Svs195195 } 11706429Svs195195 } 11716429Svs195195 11726429Svs195195 result = sin(-(pi / 2)); 11736429Svs195195 expect_ans = -(1.0000000000000000); 11746429Svs195195 if (result != expect_ans) { 11756429Svs195195 if (result < (expect_ans - DPMARGIN) || 11766429Svs195195 result > (expect_ans + DPMARGIN)) { 11776429Svs195195 expected = *(uint64_t *)&expect_ans; 11786429Svs195195 observed = *(uint64_t *)&result; 11796429Svs195195 snprintf(err_data, sizeof (err_data), 11806429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 11816429Svs195195 expect_ans, result); 11826429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 11836429Svs195195 report, 6148, &observed, &expected, 1, 1, 11846429Svs195195 err_data); 11856429Svs195195 11866429Svs195195 return (-3); 11876429Svs195195 } 11886429Svs195195 } 11896429Svs195195 11906429Svs195195 result = sin(0.0); 11916429Svs195195 expect_ans = 0.0000000000000000; 11926429Svs195195 if (result != expect_ans) { 11936429Svs195195 if (result < (expect_ans - DPMARGIN) || 11946429Svs195195 result > (expect_ans + DPMARGIN)) { 11956429Svs195195 expected = *(uint64_t *)&expect_ans; 11966429Svs195195 observed = *(uint64_t *)&result; 11976429Svs195195 snprintf(err_data, sizeof (err_data), 11986429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 11996429Svs195195 expect_ans, result); 12006429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 12016429Svs195195 report, 6149, &observed, &expected, 1, 1, 12026429Svs195195 err_data); 12036429Svs195195 12046429Svs195195 return (-3); 12056429Svs195195 } 12066429Svs195195 } 12076429Svs195195 12086429Svs195195 result = sin(pi / 2); 12096429Svs195195 expect_ans = 1.0000000000000000; 12106429Svs195195 if (result != expect_ans) { 12116429Svs195195 if (result < (expect_ans - DPMARGIN) || 12126429Svs195195 result > (expect_ans + DPMARGIN)) { 12136429Svs195195 expected = *(uint64_t *)&expect_ans; 12146429Svs195195 observed = *(uint64_t *)&result; 12156429Svs195195 snprintf(err_data, sizeof (err_data), 12166429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 12176429Svs195195 expect_ans, result); 12186429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 12196429Svs195195 report, 6150, &observed, &expected, 1, 1, 12206429Svs195195 err_data); 12216429Svs195195 12226429Svs195195 return (-3); 12236429Svs195195 } 12246429Svs195195 } 12256429Svs195195 12266429Svs195195 result = sin(pi); 12276429Svs195195 expect_ans = -(0.000000000410206); 12286429Svs195195 if (result != expect_ans) { 12296429Svs195195 if (result < (expect_ans - DPMARGIN) || 12306429Svs195195 result > (expect_ans + DPMARGIN)) { 12316429Svs195195 expected = *(uint64_t *)&expect_ans; 12326429Svs195195 observed = *(uint64_t *)&result; 12336429Svs195195 snprintf(err_data, sizeof (err_data), 12346429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 12356429Svs195195 expect_ans, result); 12366429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 12376429Svs195195 report, 6151, &observed, &expected, 1, 1, 12386429Svs195195 err_data); 12396429Svs195195 12406429Svs195195 return (-3); 12416429Svs195195 } 12426429Svs195195 } 12436429Svs195195 12446429Svs195195 result = sin((pi * 3) / 2); 12456429Svs195195 expect_ans = -(1.0000000000000000); 12466429Svs195195 if (result != expect_ans) { 12476429Svs195195 if (result < (expect_ans - DPMARGIN) || 12486429Svs195195 result > (expect_ans + DPMARGIN)) { 12496429Svs195195 expected = *(uint64_t *)&expect_ans; 12506429Svs195195 observed = *(uint64_t *)&result; 12516429Svs195195 snprintf(err_data, sizeof (err_data), 12526429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 12536429Svs195195 expect_ans, result); 12546429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 12556429Svs195195 report, 6152, &observed, &expected, 1, 1, 12566429Svs195195 err_data); 12576429Svs195195 12586429Svs195195 return (-3); 12596429Svs195195 } 12606429Svs195195 } 12616429Svs195195 12626429Svs195195 result = sin(pi * 2); 12636429Svs195195 expect_ans = 0.000000000820143; 12646429Svs195195 expect_ans2 = 0.00000000820143; 12656429Svs195195 if (result != expect_ans) { 12666429Svs195195 if (result < (expect_ans - DPMARGIN) || 12676429Svs195195 result > (expect_ans2 + DPMARGIN)) { 12686429Svs195195 expected = *(uint64_t *)&expect_ans; 12696429Svs195195 observed = *(uint64_t *)&result; 12706429Svs195195 snprintf(err_data, sizeof (err_data), 12716429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 12726429Svs195195 expect_ans, result); 12736429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 12746429Svs195195 report, 6153, &observed, &expected, 1, 1, 12756429Svs195195 err_data); 12766429Svs195195 12776429Svs195195 return (-3); 12786429Svs195195 } 12796429Svs195195 } 12806429Svs195195 12816429Svs195195 /* cos of values in the range of -2pi to +2pi */ 12826429Svs195195 result = cos(pi * (-2)); 12836429Svs195195 expect_ans = 1.0000000000000000; 12846429Svs195195 if (result != expect_ans) { 12856429Svs195195 if (result < (expect_ans - DPMARGIN) || 12866429Svs195195 result > (expect_ans + DPMARGIN)) { 12876429Svs195195 expected = *(uint64_t *)&expect_ans; 12886429Svs195195 observed = *(uint64_t *)&result; 12896429Svs195195 snprintf(err_data, sizeof (err_data), 12906429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 12916429Svs195195 expect_ans, result); 12926429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 12936429Svs195195 report, 6154, &observed, &expected, 1, 1, 12946429Svs195195 err_data); 12956429Svs195195 12966429Svs195195 return (-3); 12976429Svs195195 } 12986429Svs195195 } 12996429Svs195195 13006429Svs195195 result = cos((pi * (-3)) / 2); 13016429Svs195195 expect_ans = 0.000000000615310; 13026429Svs195195 if (result != expect_ans) { 13036429Svs195195 if (result < (expect_ans - DPMARGIN) || 13046429Svs195195 result > (expect_ans + DPMARGIN)) { 13056429Svs195195 expected = *(uint64_t *)&expect_ans; 13066429Svs195195 observed = *(uint64_t *)&result; 13076429Svs195195 snprintf(err_data, sizeof (err_data), 13086429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 13096429Svs195195 expect_ans, result); 13106429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 13116429Svs195195 report, 6155, &observed, &expected, 1, 1, 13126429Svs195195 err_data); 13136429Svs195195 13146429Svs195195 return (-3); 13156429Svs195195 } 13166429Svs195195 } 13176429Svs195195 13186429Svs195195 result = cos(-pi); 13196429Svs195195 expect_ans = -(1.0000000000000000); 13206429Svs195195 if (result != expect_ans) { 13216429Svs195195 if (result < (expect_ans - DPMARGIN) || 13226429Svs195195 result > (expect_ans + DPMARGIN)) { 13236429Svs195195 expected = *(uint64_t *)&expect_ans; 13246429Svs195195 observed = *(uint64_t *)&result; 13256429Svs195195 snprintf(err_data, sizeof (err_data), 13266429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 13276429Svs195195 expect_ans, result); 13286429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 13296429Svs195195 report, 6156, &observed, &expected, 1, 1, 13306429Svs195195 err_data); 13316429Svs195195 13326429Svs195195 return (-3); 13336429Svs195195 } 13346429Svs195195 } 13356429Svs195195 13366429Svs195195 result = cos(-(pi / 2)); 13376429Svs195195 expect_ans = -(0.000000000205103); 13386429Svs195195 if (result != expect_ans) { 13396429Svs195195 if (result < (expect_ans - DPMARGIN) || 13406429Svs195195 result > (expect_ans + DPMARGIN)) { 13416429Svs195195 expected = *(uint64_t *)&expect_ans; 13426429Svs195195 observed = *(uint64_t *)&result; 13436429Svs195195 snprintf(err_data, sizeof (err_data), 13446429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 13456429Svs195195 expect_ans, result); 13466429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 13476429Svs195195 report, 6157, &observed, &expected, 1, 1, 13486429Svs195195 err_data); 13496429Svs195195 13506429Svs195195 return (-3); 13516429Svs195195 } 13526429Svs195195 } 13536429Svs195195 13546429Svs195195 result = cos(0.0); 13556429Svs195195 expect_ans = 1.0000000000000000; 13566429Svs195195 if (result != expect_ans) { 13576429Svs195195 if (result < (expect_ans - DPMARGIN) || 13586429Svs195195 result > (expect_ans + DPMARGIN)) { 13596429Svs195195 expected = *(uint64_t *)&expect_ans; 13606429Svs195195 observed = *(uint64_t *)&result; 13616429Svs195195 snprintf(err_data, sizeof (err_data), 13626429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 13636429Svs195195 expect_ans, result); 13646429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 13656429Svs195195 report, 6158, &observed, &expected, 1, 1, 13666429Svs195195 err_data); 13676429Svs195195 13686429Svs195195 return (-3); 13696429Svs195195 } 13706429Svs195195 } 13716429Svs195195 13726429Svs195195 result = cos(pi / 2); 13736429Svs195195 expect_ans = (-0.000000000205103); 13746429Svs195195 if (result != expect_ans) { 13756429Svs195195 if (result < (expect_ans - DPMARGIN) || 13766429Svs195195 result > (expect_ans + DPMARGIN)) { 13776429Svs195195 expected = *(uint64_t *)&expect_ans; 13786429Svs195195 observed = *(uint64_t *)&result; 13796429Svs195195 snprintf(err_data, sizeof (err_data), 13806429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 13816429Svs195195 expect_ans, result); 13826429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 13836429Svs195195 report, 6159, &observed, &expected, 1, 1, 13846429Svs195195 err_data); 13856429Svs195195 13866429Svs195195 return (-3); 13876429Svs195195 } 13886429Svs195195 } 13896429Svs195195 13906429Svs195195 result = cos(pi); 13916429Svs195195 expect_ans = (-1.0000000000000000); 13926429Svs195195 if (result != expect_ans) { 13936429Svs195195 if (result < (expect_ans - DPMARGIN) || 13946429Svs195195 result > (expect_ans + DPMARGIN)) { 13956429Svs195195 expected = *(uint64_t *)&expect_ans; 13966429Svs195195 observed = *(uint64_t *)&result; 13976429Svs195195 snprintf(err_data, sizeof (err_data), 13986429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 13996429Svs195195 expect_ans, result); 14006429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 14016429Svs195195 report, 6160, &observed, &expected, 1, 1, 14026429Svs195195 err_data); 14036429Svs195195 14046429Svs195195 return (-3); 14056429Svs195195 } 14066429Svs195195 } 14076429Svs195195 14086429Svs195195 result = cos((pi * 3) / 2); 14096429Svs195195 expect_ans = 0.000000000615310; 14106429Svs195195 if (result != expect_ans) { 14116429Svs195195 if (result < (expect_ans - DPMARGIN) || 14126429Svs195195 result > (expect_ans + DPMARGIN)) { 14136429Svs195195 expected = *(uint64_t *)&expect_ans; 14146429Svs195195 observed = *(uint64_t *)&result; 14156429Svs195195 snprintf(err_data, sizeof (err_data), 14166429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 14176429Svs195195 expect_ans, result); 14186429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 14196429Svs195195 report, 6161, &observed, &expected, 1, 1, 14206429Svs195195 err_data); 14216429Svs195195 14226429Svs195195 return (-3); 14236429Svs195195 } 14246429Svs195195 } 14256429Svs195195 14266429Svs195195 result = cos(pi * 2); 14276429Svs195195 expect_ans = 1.0000000000000000; 14286429Svs195195 if (result != expect_ans) { 14296429Svs195195 if (result < (expect_ans - DPMARGIN) || 14306429Svs195195 result > (expect_ans + DPMARGIN)) { 14316429Svs195195 expected = *(uint64_t *)&expect_ans; 14326429Svs195195 observed = *(uint64_t *)&result; 14336429Svs195195 snprintf(err_data, sizeof (err_data), 14346429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 14356429Svs195195 expect_ans, result); 14366429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 14376429Svs195195 report, 6162, &observed, &expected, 1, 1, 14386429Svs195195 err_data); 14396429Svs195195 14406429Svs195195 return (-3); 14416429Svs195195 } 14426429Svs195195 } 14436429Svs195195 14446429Svs195195 /* sin and cos of: pi/4, 3pi/4, 5pi/4 and 7pi/4 */ 14456429Svs195195 result = sin(pi / 4); 14466429Svs195195 expect_ans = 0.707106781259062; 14476429Svs195195 if (result != expect_ans) { 14486429Svs195195 if (result < (expect_ans - DPMARGIN) || 14496429Svs195195 result > (expect_ans + DPMARGIN)) { 14506429Svs195195 expected = *(uint64_t *)&expect_ans; 14516429Svs195195 observed = *(uint64_t *)&result; 14526429Svs195195 snprintf(err_data, sizeof (err_data), 14536429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 14546429Svs195195 expect_ans, result); 14556429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 14566429Svs195195 report, 6163, &observed, &expected, 1, 1, 14576429Svs195195 err_data); 14586429Svs195195 14596429Svs195195 return (-3); 14606429Svs195195 } 14616429Svs195195 } 14626429Svs195195 14636429Svs195195 result = sin((pi * 3) / 4); 14646429Svs195195 expect_ans = 0.707106780969002; 14656429Svs195195 if (result != expect_ans) { 14666429Svs195195 if (result < (expect_ans - DPMARGIN) || 14676429Svs195195 result > (expect_ans + DPMARGIN)) { 14686429Svs195195 expected = *(uint64_t *)&expect_ans; 14696429Svs195195 observed = *(uint64_t *)&result; 14706429Svs195195 snprintf(err_data, sizeof (err_data), 14716429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 14726429Svs195195 expect_ans, result); 14736429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 14746429Svs195195 report, 6164, &observed, &expected, 1, 1, 14756429Svs195195 err_data); 14766429Svs195195 14776429Svs195195 return (-3); 14786429Svs195195 } 14796429Svs195195 } 14806429Svs195195 14816429Svs195195 result = sin((pi * 5) / 4); 14826429Svs195195 expect_ans = -(0.707106781549122); 14836429Svs195195 if (result != expect_ans) { 14846429Svs195195 if (result < (expect_ans - DPMARGIN) || 14856429Svs195195 result > (expect_ans + DPMARGIN)) { 14866429Svs195195 expected = *(uint64_t *)&expect_ans; 14876429Svs195195 observed = *(uint64_t *)&result; 14886429Svs195195 snprintf(err_data, sizeof (err_data), 14896429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 14906429Svs195195 expect_ans, result); 14916429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 14926429Svs195195 report, 6165, &observed, &expected, 1, 1, 14936429Svs195195 err_data); 14946429Svs195195 14956429Svs195195 return (-3); 14966429Svs195195 } 14976429Svs195195 } 14986429Svs195195 14996429Svs195195 result = sin((pi * 7) / 4); 15006429Svs195195 expect_ans = -(0.707106780678942); 15016429Svs195195 if (result != expect_ans) { 15026429Svs195195 if (result < (expect_ans - DPMARGIN) || 15036429Svs195195 result > (expect_ans + DPMARGIN)) { 15046429Svs195195 expected = *(uint64_t *)&expect_ans; 15056429Svs195195 observed = *(uint64_t *)&result; 15066429Svs195195 snprintf(err_data, sizeof (err_data), 15076429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 15086429Svs195195 expect_ans, result); 15096429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 15106429Svs195195 report, 6166, &observed, &expected, 1, 1, 15116429Svs195195 err_data); 15126429Svs195195 15136429Svs195195 return (-3); 15146429Svs195195 } 15156429Svs195195 } 15166429Svs195195 15176429Svs195195 result = cos(pi / 4); 15186429Svs195195 expect_ans = 0.707106781114032; 15196429Svs195195 if (result != expect_ans) { 15206429Svs195195 if (result < (expect_ans - DPMARGIN) || 15216429Svs195195 result > (expect_ans + DPMARGIN)) { 15226429Svs195195 expected = *(uint64_t *)&expect_ans; 15236429Svs195195 observed = *(uint64_t *)&result; 15246429Svs195195 snprintf(err_data, sizeof (err_data), 15256429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 15266429Svs195195 expect_ans, result); 15276429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 15286429Svs195195 report, 6167, &observed, &expected, 1, 1, 15296429Svs195195 err_data); 15306429Svs195195 15316429Svs195195 return (-3); 15326429Svs195195 } 15336429Svs195195 } 15346429Svs195195 15356429Svs195195 result = cos((pi * 3) / 4); 15366429Svs195195 expect_ans = -(0.707106781404092); 15376429Svs195195 if (result != expect_ans) { 15386429Svs195195 if (result < (expect_ans - DPMARGIN) || 15396429Svs195195 result > (expect_ans + DPMARGIN)) { 15406429Svs195195 expected = *(uint64_t *)&expect_ans; 15416429Svs195195 observed = *(uint64_t *)&result; 15426429Svs195195 snprintf(err_data, sizeof (err_data), 15436429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 15446429Svs195195 expect_ans, result); 15456429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 15466429Svs195195 report, 6168, &observed, &expected, 1, 1, 15476429Svs195195 err_data); 15486429Svs195195 15496429Svs195195 return (-3); 15506429Svs195195 } 15516429Svs195195 } 15526429Svs195195 15536429Svs195195 result = cos((pi * 5) / 4); 15546429Svs195195 expect_ans = -(0.707106780823972); 15556429Svs195195 if (result != expect_ans) { 15566429Svs195195 if (result < (expect_ans - DPMARGIN) || 15576429Svs195195 result > (expect_ans + DPMARGIN)) { 15586429Svs195195 expected = *(uint64_t *)&expect_ans; 15596429Svs195195 observed = *(uint64_t *)&result; 15606429Svs195195 snprintf(err_data, sizeof (err_data), 15616429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 15626429Svs195195 expect_ans, result); 15636429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 15646429Svs195195 report, 6169, &observed, &expected, 1, 1, 15656429Svs195195 err_data); 15666429Svs195195 15676429Svs195195 return (-3); 15686429Svs195195 } 15696429Svs195195 } 15706429Svs195195 15716429Svs195195 result = cos((pi * 7) / 4); 15726429Svs195195 expect_ans = 0.707106781694152; 15736429Svs195195 if (result != expect_ans) { 15746429Svs195195 if (result < (expect_ans - DPMARGIN) || 15756429Svs195195 result > (expect_ans + DPMARGIN)) { 15766429Svs195195 expected = *(uint64_t *)&expect_ans; 15776429Svs195195 observed = *(uint64_t *)&result; 15786429Svs195195 snprintf(err_data, sizeof (err_data), 15796429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 15806429Svs195195 expect_ans, result); 15816429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 15826429Svs195195 report, 6170, &observed, &expected, 1, 1, 15836429Svs195195 err_data); 15846429Svs195195 15856429Svs195195 return (-3); 15866429Svs195195 } 15876429Svs195195 } 15886429Svs195195 15896429Svs195195 /* exponential */ 15906429Svs195195 x = exp(0.0); 15916429Svs195195 expect_ans = 1.0000000000000000; 15926429Svs195195 if (x != expect_ans) { 15936429Svs195195 if (x < (expect_ans - DPMARGIN) || 15946429Svs195195 x > (expect_ans + DPMARGIN)) { 15956429Svs195195 expected = *(uint64_t *)&expect_ans; 15966429Svs195195 observed = *(uint64_t *)&x; 15976429Svs195195 snprintf(err_data, sizeof (err_data), 15986429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 15996429Svs195195 expect_ans, x); 16006429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 16016429Svs195195 report, 6171, &observed, &expected, 1, 1, 16026429Svs195195 err_data); 16036429Svs195195 16046429Svs195195 return (-3); 16056429Svs195195 } 16066429Svs195195 } 16076429Svs195195 16086429Svs195195 x = exp(1.0); 16096429Svs195195 expect_ans = 2.718281828459045; 16106429Svs195195 if (x != expect_ans) { 16116429Svs195195 if (x < (expect_ans - DPMARGIN) || 16126429Svs195195 x > (expect_ans + DPMARGIN)) { 16136429Svs195195 expected = *(uint64_t *)&expect_ans; 16146429Svs195195 observed = *(uint64_t *)&x; 16156429Svs195195 snprintf(err_data, sizeof (err_data), 16166429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 16176429Svs195195 expect_ans, x); 16186429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 16196429Svs195195 report, 6172, &observed, &expected, 1, 1, 16206429Svs195195 err_data); 16216429Svs195195 16226429Svs195195 return (-3); 16236429Svs195195 } 16246429Svs195195 } 16256429Svs195195 16266429Svs195195 x = exp(2.0); 16276429Svs195195 expect_ans = 7.389056098930650; 16286429Svs195195 if (x != expect_ans) { 16296429Svs195195 if (x < (expect_ans - DPMARGIN) || 16306429Svs195195 x > (expect_ans + DPMARGIN)) { 16316429Svs195195 expected = *(uint64_t *)&expect_ans; 16326429Svs195195 observed = *(uint64_t *)&x; 16336429Svs195195 snprintf(err_data, sizeof (err_data), 16346429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 16356429Svs195195 expect_ans, x); 16366429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 16376429Svs195195 report, 6173, &observed, &expected, 1, 1, 16386429Svs195195 err_data); 16396429Svs195195 16406429Svs195195 return (-3); 16416429Svs195195 } 16426429Svs195195 } 16436429Svs195195 16446429Svs195195 x = exp(5.0); 16456429Svs195195 expect_ans = 148.413159102576600; 16466429Svs195195 if (x != expect_ans) { 16476429Svs195195 if (x < (expect_ans - DPMARGIN) || 16486429Svs195195 x > (expect_ans + DPMARGIN)) { 16496429Svs195195 expected = *(uint64_t *)&expect_ans; 16506429Svs195195 observed = *(uint64_t *)&x; 16516429Svs195195 snprintf(err_data, sizeof (err_data), 16526429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 16536429Svs195195 expect_ans, x); 16546429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 16556429Svs195195 report, 6174, &observed, &expected, 1, 1, 16566429Svs195195 err_data); 16576429Svs195195 16586429Svs195195 return (-3); 16596429Svs195195 } 16606429Svs195195 } 16616429Svs195195 16626429Svs195195 x = exp(10.0); 16636429Svs195195 expect_ans = 22026.465794806718000; 16646429Svs195195 if (x != expect_ans) { 16656429Svs195195 if (x < (expect_ans - DPMARGIN) || 16666429Svs195195 x > (expect_ans + DPMARGIN)) { 16676429Svs195195 expected = *(uint64_t *)&expect_ans; 16686429Svs195195 observed = *(uint64_t *)&x; 16696429Svs195195 snprintf(err_data, sizeof (err_data), 16706429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 16716429Svs195195 expect_ans, x); 16726429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 16736429Svs195195 report, 6175, &observed, &expected, 1, 1, 16746429Svs195195 err_data); 16756429Svs195195 16766429Svs195195 return (-3); 16776429Svs195195 } 16786429Svs195195 } 16796429Svs195195 16806429Svs195195 x = exp(-1.0); 16816429Svs195195 expect_ans = 0.367879441171442; 16826429Svs195195 if (x != expect_ans) { 16836429Svs195195 if (x < (expect_ans - DPMARGIN) || 16846429Svs195195 x > (expect_ans + DPMARGIN)) { 16856429Svs195195 expected = *(uint64_t *)&expect_ans; 16866429Svs195195 observed = *(uint64_t *)&x; 16876429Svs195195 snprintf(err_data, sizeof (err_data), 16886429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 16896429Svs195195 expect_ans, x); 16906429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 16916429Svs195195 report, 6176, &observed, &expected, 1, 1, 16926429Svs195195 err_data); 16936429Svs195195 16946429Svs195195 return (-3); 16956429Svs195195 } 16966429Svs195195 } 16976429Svs195195 16986429Svs195195 x = exp(-2.0); 16996429Svs195195 expect_ans = 0.135335283236612; 17006429Svs195195 if (x != expect_ans) { 17016429Svs195195 if (x < (expect_ans - DPMARGIN) || 17026429Svs195195 x > (expect_ans + DPMARGIN)) { 17036429Svs195195 expected = *(uint64_t *)&expect_ans; 17046429Svs195195 observed = *(uint64_t *)&x; 17056429Svs195195 snprintf(err_data, sizeof (err_data), 17066429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 17076429Svs195195 expect_ans, x); 17086429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 17096429Svs195195 report, 6177, &observed, &expected, 1, 1, 17106429Svs195195 err_data); 17116429Svs195195 17126429Svs195195 return (-3); 17136429Svs195195 } 17146429Svs195195 } 17156429Svs195195 17166429Svs195195 x = exp(-5.0); 17176429Svs195195 expect_ans = 0.006737946999085; 17186429Svs195195 if (x != expect_ans) { 17196429Svs195195 if (x < (expect_ans - DPMARGIN) || 17206429Svs195195 x > (expect_ans + DPMARGIN)) { 17216429Svs195195 expected = *(uint64_t *)&expect_ans; 17226429Svs195195 observed = *(uint64_t *)&x; 17236429Svs195195 snprintf(err_data, sizeof (err_data), 17246429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 17256429Svs195195 expect_ans, x); 17266429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 17276429Svs195195 report, 6178, &observed, &expected, 1, 1, 17286429Svs195195 err_data); 17296429Svs195195 17306429Svs195195 return (-3); 17316429Svs195195 } 17326429Svs195195 } 17336429Svs195195 17346429Svs195195 x = exp(-10.0); 17356429Svs195195 expect_ans = 0.000045399929762; 17366429Svs195195 if (x != expect_ans) { 17376429Svs195195 if (x < (expect_ans - DPMARGIN) || 17386429Svs195195 x > (expect_ans + DPMARGIN)) { 17396429Svs195195 expected = *(uint64_t *)&expect_ans; 17406429Svs195195 observed = *(uint64_t *)&x; 17416429Svs195195 snprintf(err_data, sizeof (err_data), 17426429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 17436429Svs195195 expect_ans, x); 17446429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 17456429Svs195195 report, 6179, &observed, &expected, 1, 1, 17466429Svs195195 err_data); 17476429Svs195195 17486429Svs195195 return (-3); 17496429Svs195195 } 17506429Svs195195 } 17516429Svs195195 17526429Svs195195 x = exp(log(1.0)); 17536429Svs195195 expect_ans = 1.0000000000000000; 17546429Svs195195 if (x != expect_ans) { 17556429Svs195195 if (x < (expect_ans - DPMARGIN) || 17566429Svs195195 x > (expect_ans + DPMARGIN)) { 17576429Svs195195 expected = *(uint64_t *)&expect_ans; 17586429Svs195195 observed = *(uint64_t *)&x; 17596429Svs195195 snprintf(err_data, sizeof (err_data), 17606429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 17616429Svs195195 expect_ans, x); 17626429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 17636429Svs195195 report, 6180, &observed, &expected, 1, 1, 17646429Svs195195 err_data); 17656429Svs195195 17666429Svs195195 return (-3); 17676429Svs195195 } 17686429Svs195195 } 17696429Svs195195 17706429Svs195195 x = exp(log(10.0)); 17716429Svs195195 expect_ans = 10.000000000000002; 17726429Svs195195 if (x != expect_ans) { 17736429Svs195195 if (x < (expect_ans - DPMARGIN) || 17746429Svs195195 x > (expect_ans + DPMARGIN)) { 17756429Svs195195 expected = *(uint64_t *)&expect_ans; 17766429Svs195195 observed = *(uint64_t *)&x; 17776429Svs195195 snprintf(err_data, sizeof (err_data), 17786429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 17796429Svs195195 expect_ans, x); 17806429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 17816429Svs195195 report, 6181, &observed, &expected, 1, 1, 17826429Svs195195 err_data); 17836429Svs195195 17846429Svs195195 return (-3); 17856429Svs195195 } 17866429Svs195195 } 17876429Svs195195 17886429Svs195195 /* logarithms */ 17896429Svs195195 x = log(1.0); 17906429Svs195195 expect_ans = 0.0000000000000000; 17916429Svs195195 if (x != expect_ans) { 17926429Svs195195 if (x < (expect_ans - DPMARGIN) || 17936429Svs195195 x > (expect_ans + DPMARGIN)) { 17946429Svs195195 expected = *(uint64_t *)&expect_ans; 17956429Svs195195 observed = *(uint64_t *)&x; 17966429Svs195195 snprintf(err_data, sizeof (err_data), 17976429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 17986429Svs195195 expect_ans, x); 17996429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 18006429Svs195195 report, 6182, &observed, &expected, 1, 1, 18016429Svs195195 err_data); 18026429Svs195195 18036429Svs195195 return (-3); 18046429Svs195195 } 18056429Svs195195 } 18066429Svs195195 18076429Svs195195 x = log(2.0); 18086429Svs195195 expect_ans = 0.693147180559945; 18096429Svs195195 if (x != expect_ans) { 18106429Svs195195 if (x < (expect_ans - DPMARGIN) || 18116429Svs195195 x > (expect_ans + DPMARGIN)) { 18126429Svs195195 expected = *(uint64_t *)&expect_ans; 18136429Svs195195 observed = *(uint64_t *)&x; 18146429Svs195195 snprintf(err_data, sizeof (err_data), 18156429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 18166429Svs195195 expect_ans, x); 18176429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 18186429Svs195195 report, 6183, &observed, &expected, 1, 1, 18196429Svs195195 err_data); 18206429Svs195195 18216429Svs195195 return (-3); 18226429Svs195195 } 18236429Svs195195 } 18246429Svs195195 18256429Svs195195 x = log(10.0); 18266429Svs195195 expect_ans = 2.302585092994045; 18276429Svs195195 if (x != expect_ans) { 18286429Svs195195 if (x < (expect_ans - DPMARGIN) || 18296429Svs195195 x > (expect_ans + DPMARGIN)) { 18306429Svs195195 expected = *(uint64_t *)&expect_ans; 18316429Svs195195 observed = *(uint64_t *)&x; 18326429Svs195195 snprintf(err_data, sizeof (err_data), 18336429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 18346429Svs195195 expect_ans, x); 18356429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 18366429Svs195195 report, 6184, &observed, &expected, 1, 1, 18376429Svs195195 err_data); 18386429Svs195195 18396429Svs195195 return (-3); 18406429Svs195195 } 18416429Svs195195 } 18426429Svs195195 18436429Svs195195 x = log(100.0); 18446429Svs195195 expect_ans = 4.605170185988091; 18456429Svs195195 if (x != expect_ans) { 18466429Svs195195 if (x < (expect_ans - DPMARGIN) || 18476429Svs195195 x > (expect_ans + DPMARGIN)) { 18486429Svs195195 expected = *(uint64_t *)&expect_ans; 18496429Svs195195 observed = *(uint64_t *)&x; 18506429Svs195195 snprintf(err_data, sizeof (err_data), 18516429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 18526429Svs195195 expect_ans, x); 18536429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 18546429Svs195195 report, 6185, &observed, &expected, 1, 1, 18556429Svs195195 err_data); 18566429Svs195195 18576429Svs195195 return (-3); 18586429Svs195195 } 18596429Svs195195 } 18606429Svs195195 18616429Svs195195 x = log(exp(0.0)); 18626429Svs195195 expect_ans = 0.0000000000000000; 18636429Svs195195 if (x != expect_ans) { 18646429Svs195195 if (x < (expect_ans - DPMARGIN) || 18656429Svs195195 x > (expect_ans + DPMARGIN)) { 18666429Svs195195 expected = *(uint64_t *)&expect_ans; 18676429Svs195195 observed = *(uint64_t *)&x; 18686429Svs195195 snprintf(err_data, sizeof (err_data), 18696429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 18706429Svs195195 expect_ans, x); 18716429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 18726429Svs195195 report, 6186, &observed, &expected, 1, 1, 18736429Svs195195 err_data); 18746429Svs195195 18756429Svs195195 return (-3); 18766429Svs195195 } 18776429Svs195195 } 18786429Svs195195 18796429Svs195195 x = log(exp(1.0)); 18806429Svs195195 expect_ans = 1.0000000000000000; 18816429Svs195195 if (x != expect_ans) { 18826429Svs195195 if (x < (expect_ans - DPMARGIN) || 18836429Svs195195 x > (expect_ans + DPMARGIN)) { 18846429Svs195195 expected = *(uint64_t *)&expect_ans; 18856429Svs195195 observed = *(uint64_t *)&x; 18866429Svs195195 snprintf(err_data, sizeof (err_data), 18876429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 18886429Svs195195 expect_ans, x); 18896429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 18906429Svs195195 report, 6187, &observed, &expected, 1, 1, 18916429Svs195195 err_data); 18926429Svs195195 18936429Svs195195 return (-3); 18946429Svs195195 } 18956429Svs195195 } 18966429Svs195195 18976429Svs195195 x = log(exp(10.0)); 18986429Svs195195 expect_ans = 10.0000000000000000; 18996429Svs195195 if (x != expect_ans) { 19006429Svs195195 if (x < (expect_ans - DPMARGIN) || 19016429Svs195195 x > (expect_ans + DPMARGIN)) { 19026429Svs195195 expected = *(uint64_t *)&expect_ans; 19036429Svs195195 observed = *(uint64_t *)&x; 19046429Svs195195 snprintf(err_data, sizeof (err_data), 19056429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 19066429Svs195195 expect_ans, x); 19076429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 19086429Svs195195 report, 6188, &observed, &expected, 1, 1, 19096429Svs195195 err_data); 19106429Svs195195 19116429Svs195195 return (-3); 19126429Svs195195 } 19136429Svs195195 } 19146429Svs195195 19156429Svs195195 /* 19166429Svs195195 * These functions are supported by the 68881 19176429Svs195195 * but not the FPA 19186429Svs195195 */ 19196429Svs195195 19206429Svs195195 x = tan(-(2 * pi)); 19216429Svs195195 expect_ans = -(0.000000000820414); 19226429Svs195195 if (x != expect_ans) { 19236429Svs195195 if (x < (expect_ans - DPMARGIN) || 19246429Svs195195 x > (expect_ans + DPMARGIN)) { 19256429Svs195195 expected = *(uint64_t *)&expect_ans; 19266429Svs195195 observed = *(uint64_t *)&x; 19276429Svs195195 snprintf(err_data, sizeof (err_data), 19286429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 19296429Svs195195 expect_ans, x); 19306429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 19316429Svs195195 report, 6189, &observed, &expected, 1, 1, 19326429Svs195195 err_data); 19336429Svs195195 19346429Svs195195 return (-3); 19356429Svs195195 } 19366429Svs195195 } 19376429Svs195195 19386429Svs195195 x = tan(-(7 * pi) / 4); 19396429Svs195195 expect_ans = 0.999999998564275; 19406429Svs195195 if (x != expect_ans) { 19416429Svs195195 if (x < (expect_ans - DPMARGIN) || 19426429Svs195195 x > (expect_ans + DPMARGIN)) { 19436429Svs195195 expected = *(uint64_t *)&expect_ans; 19446429Svs195195 observed = *(uint64_t *)&x; 19456429Svs195195 snprintf(err_data, sizeof (err_data), 19466429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 19476429Svs195195 expect_ans, x); 19486429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 19496429Svs195195 report, 6190, &observed, &expected, 1, 1, 19506429Svs195195 err_data); 19516429Svs195195 19526429Svs195195 return (-3); 19536429Svs195195 } 19546429Svs195195 } 19556429Svs195195 19566429Svs195195 x = tan(-(5 * pi) / 4); 19576429Svs195195 expect_ans = -(1.000000001025517); 19586429Svs195195 if (x != expect_ans) { 19596429Svs195195 if (x < (expect_ans - DPMARGIN) || 19606429Svs195195 x > (expect_ans + DPMARGIN)) { 19616429Svs195195 expected = *(uint64_t *)&expect_ans; 19626429Svs195195 observed = *(uint64_t *)&x; 19636429Svs195195 snprintf(err_data, sizeof (err_data),\ 19646429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 19656429Svs195195 expect_ans, x); 19666429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 19676429Svs195195 report, 6191, &observed, &expected, 1, 1, 19686429Svs195195 err_data); 19696429Svs195195 19706429Svs195195 return (-3); 19716429Svs195195 } 19726429Svs195195 } 19736429Svs195195 19746429Svs195195 x = tan(-(pi)); 19756429Svs195195 expect_ans = -(0.000000000410207); 19766429Svs195195 if (x != expect_ans) { 19776429Svs195195 if (x < (expect_ans - DPMARGIN) || 19786429Svs195195 x > (expect_ans + DPMARGIN)) { 19796429Svs195195 expected = *(uint64_t *)&expect_ans; 19806429Svs195195 observed = *(uint64_t *)&x; 19816429Svs195195 snprintf(err_data, sizeof (err_data), 19826429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 19836429Svs195195 expect_ans, x); 19846429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 19856429Svs195195 report, 6192, &observed, &expected, 1, 1, 19866429Svs195195 err_data); 19876429Svs195195 19886429Svs195195 return (-3); 19896429Svs195195 } 19906429Svs195195 } 19916429Svs195195 19926429Svs195195 x = tan(-(3 * pi) / 4); 19936429Svs195195 expect_ans = 0.999999999384690; 19946429Svs195195 if (x != expect_ans) { 19956429Svs195195 if (x < (expect_ans - DPMARGIN) || 19966429Svs195195 x > (expect_ans + DPMARGIN)) { 19976429Svs195195 expected = *(uint64_t *)&expect_ans; 19986429Svs195195 observed = *(uint64_t *)&x; 19996429Svs195195 snprintf(err_data, sizeof (err_data), 20006429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 20016429Svs195195 expect_ans, x); 20026429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 20036429Svs195195 report, 6193, &observed, &expected, 1, 1, 20046429Svs195195 err_data); 20056429Svs195195 20066429Svs195195 return (-3); 20076429Svs195195 } 20086429Svs195195 } 20096429Svs195195 20106429Svs195195 x = tan(-(pi) / 4); 20116429Svs195195 expect_ans = -(1.000000000205103); 20126429Svs195195 if (x != expect_ans) { 20136429Svs195195 if (x < (expect_ans - DPMARGIN) || 20146429Svs195195 x > (expect_ans + DPMARGIN)) { 20156429Svs195195 expected = *(uint64_t *)&expect_ans; 20166429Svs195195 observed = *(uint64_t *)&x; 20176429Svs195195 snprintf(err_data, sizeof (err_data), 20186429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 20196429Svs195195 expect_ans, x); 20206429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 20216429Svs195195 report, 6194, &observed, &expected, 1, 1, 20226429Svs195195 err_data); 20236429Svs195195 20246429Svs195195 return (-3); 20256429Svs195195 } 20266429Svs195195 } 20276429Svs195195 20286429Svs195195 x = tan(0.0); 20296429Svs195195 expect_ans = 0.000000000000000; 20306429Svs195195 if (x != expect_ans) { 20316429Svs195195 if (x < (expect_ans - DPMARGIN) || 20326429Svs195195 x > (expect_ans + DPMARGIN)) { 20336429Svs195195 expected = *(uint64_t *)&expect_ans; 20346429Svs195195 observed = *(uint64_t *)&x; 20356429Svs195195 snprintf(err_data, sizeof (err_data), 20366429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 20376429Svs195195 expect_ans, x); 20386429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 20396429Svs195195 report, 6195, &observed, &expected, 1, 1, 20406429Svs195195 err_data); 20416429Svs195195 20426429Svs195195 return (-3); 20436429Svs195195 } 20446429Svs195195 } 20456429Svs195195 20466429Svs195195 x = tan(pi / 4); 20476429Svs195195 expect_ans = 1.000000000205103; 20486429Svs195195 if (x != expect_ans) { 20496429Svs195195 if (x < (expect_ans - DPMARGIN) || 20506429Svs195195 x > (expect_ans + DPMARGIN)) { 20516429Svs195195 expected = *(uint64_t *)&expect_ans; 20526429Svs195195 observed = *(uint64_t *)&x; 20536429Svs195195 snprintf(err_data, sizeof (err_data), 20546429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 20556429Svs195195 expect_ans, x); 20566429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 20576429Svs195195 report, 6196, &observed, &expected, 1, 1, 20586429Svs195195 err_data); 20596429Svs195195 20606429Svs195195 return (-3); 20616429Svs195195 } 20626429Svs195195 } 20636429Svs195195 20646429Svs195195 x = tan((3 * pi) / 4); 20656429Svs195195 expect_ans = -(0.999999999384690); 20666429Svs195195 if (x != expect_ans) { 20676429Svs195195 if (x < (expect_ans - DPMARGIN) || 20686429Svs195195 x > (expect_ans + DPMARGIN)) { 20696429Svs195195 expected = *(uint64_t *)&expect_ans; 20706429Svs195195 observed = *(uint64_t *)&x; 20716429Svs195195 snprintf(err_data, sizeof (err_data), 20726429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 20736429Svs195195 expect_ans, x); 20746429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 20756429Svs195195 report, 6197, &observed, &expected, 1, 1, 20766429Svs195195 err_data); 20776429Svs195195 20786429Svs195195 return (-3); 20796429Svs195195 } 20806429Svs195195 } 20816429Svs195195 20826429Svs195195 x = tan(pi); 20836429Svs195195 expect_ans = 0.000000000410207; 20846429Svs195195 if (x != expect_ans) { 20856429Svs195195 if (x < (expect_ans - DPMARGIN) || 20866429Svs195195 x > (expect_ans + DPMARGIN)) { 20876429Svs195195 expected = *(uint64_t *)&expect_ans; 20886429Svs195195 observed = *(uint64_t *)&x; 20896429Svs195195 snprintf(err_data, sizeof (err_data), 20906429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 20916429Svs195195 expect_ans, x); 20926429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 20936429Svs195195 report, 6198, &observed, &expected, 1, 1, 20946429Svs195195 err_data); 20956429Svs195195 20966429Svs195195 return (-3); 20976429Svs195195 } 20986429Svs195195 } 20996429Svs195195 21006429Svs195195 x = tan((5 * pi) / 4); 21016429Svs195195 expect_ans = 1.000000001025517; 21026429Svs195195 if (x != expect_ans) { 21036429Svs195195 if (x < (expect_ans - DPMARGIN) || 21046429Svs195195 x > (expect_ans + DPMARGIN)) { 21056429Svs195195 expected = *(uint64_t *)&expect_ans; 21066429Svs195195 observed = *(uint64_t *)&x; 21076429Svs195195 snprintf(err_data, sizeof (err_data), 21086429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 21096429Svs195195 expect_ans, x); 21106429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 21116429Svs195195 report, 6199, &observed, &expected, 1, 1, 21126429Svs195195 err_data); 21136429Svs195195 21146429Svs195195 return (-3); 21156429Svs195195 } 21166429Svs195195 } 21176429Svs195195 21186429Svs195195 x = tan((7 * pi) / 4); 21196429Svs195195 expect_ans = -(0.999999998564275); 21206429Svs195195 if (x != expect_ans) { 21216429Svs195195 if (x < (expect_ans - DPMARGIN) || 21226429Svs195195 x > (expect_ans + DPMARGIN)) { 21236429Svs195195 expected = *(uint64_t *)&expect_ans; 21246429Svs195195 observed = *(uint64_t *)&x; 21256429Svs195195 snprintf(err_data, sizeof (err_data), 21266429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 21276429Svs195195 expect_ans, x); 21286429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 21296429Svs195195 report, 6200, &observed, &expected, 1, 1, 21306429Svs195195 err_data); 21316429Svs195195 21326429Svs195195 return (-3); 21336429Svs195195 } 21346429Svs195195 } 21356429Svs195195 21366429Svs195195 x = tan((2 * pi)); 21376429Svs195195 expect_ans = 0.000000000820414; 21386429Svs195195 if (x != expect_ans) { 21396429Svs195195 if (x < (expect_ans - DPMARGIN) || 21406429Svs195195 x > (expect_ans + DPMARGIN)) { 21416429Svs195195 expected = *(uint64_t *)&expect_ans; 21426429Svs195195 observed = *(uint64_t *)&x; 21436429Svs195195 snprintf(err_data, sizeof (err_data), 21446429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 21456429Svs195195 expect_ans, x); 21466429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 21476429Svs195195 report, 6201, &observed, &expected, 1, 1, 21486429Svs195195 err_data); 21496429Svs195195 21506429Svs195195 return (-3); 21516429Svs195195 } 21526429Svs195195 } 21536429Svs195195 21546429Svs195195 x = sqrt(0.0); 21556429Svs195195 expect_ans = 0.000000000000000; 21566429Svs195195 if (x != expect_ans) { 21576429Svs195195 if (x < (expect_ans - DPMARGIN) || 21586429Svs195195 x > (expect_ans + DPMARGIN)) { 21596429Svs195195 expected = *(uint64_t *)&expect_ans; 21606429Svs195195 observed = *(uint64_t *)&x; 21616429Svs195195 snprintf(err_data, sizeof (err_data), 21626429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 21636429Svs195195 expect_ans, x); 21646429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 21656429Svs195195 report, 6202, &observed, &expected, 1, 1, 21666429Svs195195 err_data); 21676429Svs195195 21686429Svs195195 return (-3); 21696429Svs195195 } 21706429Svs195195 } 21716429Svs195195 21726429Svs195195 x = sqrt(1.0); 21736429Svs195195 expect_ans = 1.000000000000000; 21746429Svs195195 if (x != expect_ans) { 21756429Svs195195 if (x < (expect_ans - DPMARGIN) || 21766429Svs195195 x > (expect_ans + DPMARGIN)) { 21776429Svs195195 expected = *(uint64_t *)&expect_ans; 21786429Svs195195 observed = *(uint64_t *)&x; 21796429Svs195195 snprintf(err_data, sizeof (err_data), 21806429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 21816429Svs195195 expect_ans, x); 21826429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 21836429Svs195195 report, 6203, &observed, &expected, 1, 1, 21846429Svs195195 err_data); 21856429Svs195195 21866429Svs195195 return (-3); 21876429Svs195195 } 21886429Svs195195 } 21896429Svs195195 21906429Svs195195 x = sqrt(4.0); 21916429Svs195195 expect_ans = 2.000000000000000; 21926429Svs195195 if (x != expect_ans) { 21936429Svs195195 if (x < (expect_ans - DPMARGIN) || 21946429Svs195195 x > (expect_ans + DPMARGIN)) { 21956429Svs195195 expected = *(uint64_t *)&expect_ans; 21966429Svs195195 observed = *(uint64_t *)&x; 21976429Svs195195 snprintf(err_data, sizeof (err_data), 21986429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 21996429Svs195195 expect_ans, x); 22006429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 22016429Svs195195 report, 6204, &observed, &expected, 1, 1, 22026429Svs195195 err_data); 22036429Svs195195 22046429Svs195195 return (-3); 22056429Svs195195 } 22066429Svs195195 } 22076429Svs195195 22086429Svs195195 x = sqrt(9.0); 22096429Svs195195 expect_ans = 3.000000000000000; 22106429Svs195195 if (x != expect_ans) { 22116429Svs195195 if (x < (expect_ans - DPMARGIN) || 22126429Svs195195 x > (expect_ans + DPMARGIN)) { 22136429Svs195195 expected = *(uint64_t *)&expect_ans; 22146429Svs195195 observed = *(uint64_t *)&x; 22156429Svs195195 snprintf(err_data, sizeof (err_data), 22166429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 22176429Svs195195 expect_ans, x); 22186429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 22196429Svs195195 report, 6205, &observed, &expected, 1, 1, 22206429Svs195195 err_data); 22216429Svs195195 22226429Svs195195 return (-3); 22236429Svs195195 } 22246429Svs195195 } 22256429Svs195195 22266429Svs195195 x = sqrt(16.0); 22276429Svs195195 expect_ans = 4.000000000000000; 22286429Svs195195 if (x != expect_ans) { 22296429Svs195195 if (x < (expect_ans - DPMARGIN) || 22306429Svs195195 x > (expect_ans + DPMARGIN)) { 22316429Svs195195 expected = *(uint64_t *)&expect_ans; 22326429Svs195195 observed = *(uint64_t *)&x; 22336429Svs195195 snprintf(err_data, sizeof (err_data), 22346429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 22356429Svs195195 expect_ans, x); 22366429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 22376429Svs195195 report, 6206, &observed, &expected, 1, 1, 22386429Svs195195 err_data); 22396429Svs195195 22406429Svs195195 return (-3); 22416429Svs195195 } 22426429Svs195195 } 22436429Svs195195 22446429Svs195195 x = sqrt(25.0); 22456429Svs195195 expect_ans = 5.000000000000000; 22466429Svs195195 if (x != expect_ans) { 22476429Svs195195 if (x < (expect_ans - DPMARGIN) || 22486429Svs195195 x > (expect_ans + DPMARGIN)) { 22496429Svs195195 expected = *(uint64_t *)&expect_ans; 22506429Svs195195 observed = *(uint64_t *)&x; 22516429Svs195195 snprintf(err_data, sizeof (err_data), 22526429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 22536429Svs195195 expect_ans, x); 22546429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 22556429Svs195195 report, 6207, &observed, &expected, 1, 1, 22566429Svs195195 err_data); 22576429Svs195195 22586429Svs195195 return (-3); 22596429Svs195195 } 22606429Svs195195 } 22616429Svs195195 22626429Svs195195 x = sqrt(36.0); 22636429Svs195195 expect_ans = 6.000000000000000; 22646429Svs195195 if (x != expect_ans) { 22656429Svs195195 if (x < (expect_ans - DPMARGIN) || 22666429Svs195195 x > (expect_ans + DPMARGIN)) { 22676429Svs195195 expected = *(uint64_t *)&expect_ans; 22686429Svs195195 observed = *(uint64_t *)&x; 22696429Svs195195 snprintf(err_data, sizeof (err_data), 22706429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 22716429Svs195195 expect_ans, x); 22726429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 22736429Svs195195 report, 6208, &observed, &expected, 1, 1, 22746429Svs195195 err_data); 22756429Svs195195 22766429Svs195195 return (-3); 22776429Svs195195 } 22786429Svs195195 } 22796429Svs195195 22806429Svs195195 x = sqrt(49.0); 22816429Svs195195 expect_ans = 7.000000000000000; 22826429Svs195195 if (x != expect_ans) { 22836429Svs195195 if (x < (expect_ans - DPMARGIN) || 22846429Svs195195 x > (expect_ans + DPMARGIN)) { 22856429Svs195195 expected = *(uint64_t *)&expect_ans; 22866429Svs195195 observed = *(uint64_t *)&x; 22876429Svs195195 snprintf(err_data, sizeof (err_data), 22886429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 22896429Svs195195 expect_ans, x); 22906429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 22916429Svs195195 report, 6209, &observed, &expected, 1, 1, 22926429Svs195195 err_data); 22936429Svs195195 22946429Svs195195 return (-3); 22956429Svs195195 } 22966429Svs195195 } 22976429Svs195195 22986429Svs195195 x = sqrt(64.0); 22996429Svs195195 expect_ans = 8.000000000000000; 23006429Svs195195 if (x != expect_ans) { 23016429Svs195195 if (x < (expect_ans - DPMARGIN) || 23026429Svs195195 x > (expect_ans + DPMARGIN)) { 23036429Svs195195 expected = *(uint64_t *)&expect_ans; 23046429Svs195195 observed = *(uint64_t *)&x; 23056429Svs195195 snprintf(err_data, sizeof (err_data), 23066429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 23076429Svs195195 expect_ans, x); 23086429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 23096429Svs195195 report, 6210, &observed, &expected, 1, 1, 23106429Svs195195 err_data); 23116429Svs195195 23126429Svs195195 return (-3); 23136429Svs195195 } 23146429Svs195195 } 23156429Svs195195 23166429Svs195195 x = sqrt(81.0); 23176429Svs195195 expect_ans = 9.000000000000000; 23186429Svs195195 if (x != expect_ans) { 23196429Svs195195 if (x < (expect_ans - DPMARGIN) || 23206429Svs195195 x > (expect_ans + DPMARGIN)) { 23216429Svs195195 expected = *(uint64_t *)&expect_ans; 23226429Svs195195 observed = *(uint64_t *)&x; 23236429Svs195195 snprintf(err_data, sizeof (err_data), 23246429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 23256429Svs195195 expect_ans, x); 23266429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 23276429Svs195195 report, 6211, &observed, &expected, 1, 1, 23286429Svs195195 err_data); 23296429Svs195195 23306429Svs195195 return (-3); 23316429Svs195195 } 23326429Svs195195 } 23336429Svs195195 23346429Svs195195 x = sqrt(100.0); 23356429Svs195195 expect_ans = 10.000000000000000; 23366429Svs195195 if (x != expect_ans) { 23376429Svs195195 if (x < (expect_ans - DPMARGIN) || 23386429Svs195195 x > (expect_ans + DPMARGIN)) { 23396429Svs195195 expected = *(uint64_t *)&expect_ans; 23406429Svs195195 observed = *(uint64_t *)&x; 23416429Svs195195 snprintf(err_data, sizeof (err_data), 23426429Svs195195 "\nExpected: %.16f\nObserved: %.16f", 23436429Svs195195 expect_ans, x); 23446429Svs195195 setup_fps_test_struct(IS_EREPORT_INFO, 23456429Svs195195 report, 6212, &observed, &expected, 1, 1, 23466429Svs195195 err_data); 23476429Svs195195 23486429Svs195195 return (-3); 23496429Svs195195 } 23506429Svs195195 } 23516429Svs195195 23526429Svs195195 return (0); 23536429Svs195195 } 23546429Svs195195 23556429Svs195195 /* 23566429Svs195195 * process_fpu_args(int argc, char *argv[]) 23576429Svs195195 * processes the args passed into main() 23586429Svs195195 * and sets the appropriate global vars. 23596429Svs195195 */ 23606429Svs195195 static void 23616429Svs195195 process_fpu_args(int argc, char *argv[]) 23626429Svs195195 { 23636429Svs195195 char l_buf[32]; 23646429Svs195195 char *px; 23656429Svs195195 int opt; 23666429Svs195195 23676429Svs195195 while ((opt = getopt(argc, argv, "s:d:p:f:vnhe")) != EOF) { 23686429Svs195195 switch (opt) { 23696429Svs195195 case 'P': /* -p N or -p all or no -p */ 23706429Svs195195 case 'p': 23716429Svs195195 23726429Svs195195 memset(l_buf, 0, sizeof (l_buf)); 23736429Svs195195 test_group = -1; 23746429Svs195195 if (NULL != optarg) { 23756429Svs195195 strncpy(l_buf, optarg, 3); /* -p all */ 23766429Svs195195 if (!strncasecmp(l_buf, "all", 3)) { 23776429Svs195195 test_group = 12345; 23786429Svs195195 break; 23796429Svs195195 } 23806429Svs195195 test_group = atoi(optarg); 23816429Svs195195 if ((0 == test_group) && strcmp(optarg, "0")) 23826429Svs195195 test_group = -1; 23836429Svs195195 } 23846429Svs195195 23856429Svs195195 if (test_group < 0) { 23866429Svs195195 _exit(FPU_INVALID_ARG); 23876429Svs195195 } 23886429Svs195195 break; 23896429Svs195195 case 'f': /* 1000,1500,2000 freq */ 23906429Svs195195 case 'F': 23916429Svs195195 memset(l_buf, 0, sizeof (l_buf)); 23926429Svs195195 if (NULL != optarg) { 23936429Svs195195 strncpy(l_buf, optarg, 5); /* -f 1000 */ 23946429Svs195195 proc_fr = atoi(optarg); 23956429Svs195195 23966429Svs195195 switch (proc_fr) { 23976429Svs195195 case 1000 : 23986429Svs195195 lowstresslapagroup_len = 23996429Svs195195 lowstresslapagroup1000_len; 24006429Svs195195 lowstresslapagroup = 24016429Svs195195 LowStressLapaGroup_1000; 24026429Svs195195 break; 24036429Svs195195 case 1500 : 24046429Svs195195 lowstresslapagroup_len = 24056429Svs195195 lowstresslapagroup1500_len; 24066429Svs195195 lowstresslapagroup = 24076429Svs195195 LowStressLapaGroup_1500; 24086429Svs195195 break; 24096429Svs195195 case 2000 : 24106429Svs195195 lowstresslapagroup_len = 24116429Svs195195 lowstresslapagroup2000_len; 24126429Svs195195 lowstresslapagroup = 24136429Svs195195 LowStressLapaGroup_2000; 24146429Svs195195 break; 24156429Svs195195 default : 24166429Svs195195 if (proc_fr < 1500) { 24176429Svs195195 lowstresslapagroup_len = 24186429Svs195195 lowstresslapagroup1000_len; 24196429Svs195195 lowstresslapagroup = 24206429Svs195195 LowStressLapaGroup_1000; 24216429Svs195195 break; 24226429Svs195195 } else if (proc_fr < 2000) { 24236429Svs195195 lowstresslapagroup_len = 24246429Svs195195 lowstresslapagroup1500_len; 24256429Svs195195 lowstresslapagroup = 24266429Svs195195 LowStressLapaGroup_1500; 24276429Svs195195 break; 24286429Svs195195 } else { 24296429Svs195195 lowstresslapagroup_len = 24306429Svs195195 lowstresslapagroup2000_len; 24316429Svs195195 lowstresslapagroup = 24326429Svs195195 LowStressLapaGroup_2000; 24336429Svs195195 break; 24346429Svs195195 } 24356429Svs195195 } 24366429Svs195195 } 24376429Svs195195 break; 24386429Svs195195 case 'd': 24396429Svs195195 if (optarg == NULL) 24406429Svs195195 _exit(FPU_INVALID_ARG); 24416429Svs195195 24426429Svs195195 fpu_cpu = atoi(optarg); 24436429Svs195195 24446429Svs195195 if (fpu_cpu == 0 && strcmp(optarg, "0")) 24456429Svs195195 _exit(FPU_INVALID_ARG); 24466429Svs195195 24476429Svs195195 if (is_cpu_on(fpu_cpu)) 24486429Svs195195 _exit(FPU_BIND_FAIL); 24496429Svs195195 break; 24506429Svs195195 case 'E': 24516429Svs195195 case 'e': 24526429Svs195195 fps_exec_time = 1; 24536429Svs195195 break; 24546429Svs195195 case 'V': 24556429Svs195195 case 'v': 24566429Svs195195 fps_verbose_msg = 1; 24576429Svs195195 break; 24586429Svs195195 case 'S': 24596429Svs195195 case 's': 24606429Svs195195 memset(l_buf, 0, sizeof (l_buf)); 24616429Svs195195 stress_level = 1; 24626429Svs195195 24636429Svs195195 if (NULL != optarg) { 24646429Svs195195 strncpy(l_buf, optarg, 2); 24656429Svs195195 24666429Svs195195 if (('X' != l_buf[0]) && (0 != l_buf[1])) 24676429Svs195195 l_buf[0] = 'E'; 24686429Svs195195 24696429Svs195195 switch (l_buf[0]) { 24706429Svs195195 case 'l': 24716429Svs195195 case 'L': 24726429Svs195195 case '1': 24736429Svs195195 stress_level = 1; 24746429Svs195195 limit_group = 1; 24756429Svs195195 break; 24766429Svs195195 case 'm': 24776429Svs195195 case 'M': 24786429Svs195195 case '2': 24796429Svs195195 stress_level = 1000; 24806429Svs195195 limit_group = 2; 24816429Svs195195 break; 24826429Svs195195 case 'h': 24836429Svs195195 case 'H': 24846429Svs195195 case '3': 24856429Svs195195 stress_level = 4000; 24866429Svs195195 limit_group = 3; 24876429Svs195195 break; 24886429Svs195195 case 'X': 24896429Svs195195 px = optarg + 1; 24906429Svs195195 stress_level = 10000; 24916429Svs195195 limit_group = 3; 24926429Svs195195 24936429Svs195195 if (NULL != px) { 24946429Svs195195 stress_level = atoi(px); 24956429Svs195195 if ((0 == stress_level) || 24966429Svs195195 (stress_level > 10000) || 24976429Svs195195 (stress_level < 1000) || 24986429Svs195195 (0 != stress_level % 1000)) 24996429Svs195195 stress_level = 10000; 25006429Svs195195 } 25016429Svs195195 break; 25026429Svs195195 default: 25036429Svs195195 stress_level = 1; 25046429Svs195195 limit_group = 1; 25056429Svs195195 break; 25066429Svs195195 } 25076429Svs195195 } 25086429Svs195195 break; 25096429Svs195195 default: 25106429Svs195195 _exit(FPU_INVALID_ARG); 25116429Svs195195 break; 25126429Svs195195 } 25136429Svs195195 } 25146429Svs195195 } 25156429Svs195195 25166429Svs195195 /* 25176429Svs195195 * is_cpu_on(int unit) checks to see if processor 25186429Svs195195 * unit is online. 25196429Svs195195 */ 25206429Svs195195 static int 25216429Svs195195 is_cpu_on(int unit) 25226429Svs195195 { 25236429Svs195195 int proc_stat; 25246429Svs195195 25256429Svs195195 proc_stat = p_online(unit, P_STATUS); 25266429Svs195195 25276429Svs195195 if (P_ONLINE == proc_stat) 25286429Svs195195 return (0); 25296429Svs195195 25306429Svs195195 return (1); 25316429Svs195195 } 25326429Svs195195 25336429Svs195195 /* 25346429Svs195195 * check_proc(int cpu_id) checks to see that we're on an 25356429Svs195195 * fpscrubber supported processor specified by cpu_id. 25366429Svs195195 */ 25376429Svs195195 static int 25386429Svs195195 check_proc(int cpu_id) 25396429Svs195195 { 25406429Svs195195 char brand[40]; 25416429Svs195195 kstat_ctl_t *kc; 25426429Svs195195 kstat_t *ksp; 25436429Svs195195 kstat_named_t *knp; 25446429Svs195195 25456429Svs195195 25466429Svs195195 /* grab kstat info */ 25476429Svs195195 if ((kc = kstat_open()) == NULL) 25486429Svs195195 return (1); 25496429Svs195195 25506429Svs195195 if ((ksp = kstat_lookup(kc, "cpu_info", (int)cpu_id, NULL)) == NULL) { 25516429Svs195195 kstat_close(kc); 25526429Svs195195 25536429Svs195195 return (1); 25546429Svs195195 } 25556429Svs195195 25566429Svs195195 if ((kstat_read(kc, ksp, NULL)) == -1) { 25576429Svs195195 kstat_close(kc); 25586429Svs195195 25596429Svs195195 return (1); 25606429Svs195195 } 25616429Svs195195 25626429Svs195195 if ((knp = kstat_data_lookup(ksp, "brand")) == NULL) { 25636429Svs195195 kstat_close(kc); 25646429Svs195195 25656429Svs195195 return (1); 25666429Svs195195 } 25676429Svs195195 25686429Svs195195 if ((snprintf(brand, MAX_CPU_BRAND, "%s", 25696429Svs195195 KSTAT_NAMED_STR_PTR(knp))) < 0) { 25706429Svs195195 kstat_close(kc); 25716429Svs195195 25726429Svs195195 return (1); 25736429Svs195195 } 25746429Svs195195 25756429Svs195195 /* check against supported CPUs */ 25766429Svs195195 25776429Svs195195 if (strcmp(brand, USIII_KSTAT) != 0 && 25786429Svs195195 strcmp(brand, USIIIi_KSTAT) != 0 && 25796429Svs195195 strcmp(brand, USIIIP_KSTAT) != 0 && 25806429Svs195195 strcmp(brand, USIV_KSTAT) != 0 && 25816429Svs195195 strcmp(brand, USIVP_KSTAT) != 0) { 25826429Svs195195 kstat_close(kc); 25836429Svs195195 25846429Svs195195 return (2); 25856429Svs195195 } 25866429Svs195195 25876429Svs195195 kstat_close(kc); 25886429Svs195195 25896429Svs195195 return (0); 25906429Svs195195 } 2591