1*57718be8SEnji Cooper /* $NetBSD: t_wcstod.c,v 1.3 2011/10/01 17:56:11 christos Exp $ */ 2*57718be8SEnji Cooper 3*57718be8SEnji Cooper /*- 4*57718be8SEnji Cooper * Copyright (c) 2011 The NetBSD Foundation, Inc. 5*57718be8SEnji Cooper * All rights reserved. 6*57718be8SEnji Cooper * 7*57718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 8*57718be8SEnji Cooper * modification, are permitted provided that the following conditions 9*57718be8SEnji Cooper * are met: 10*57718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 11*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 12*57718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 13*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 14*57718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 15*57718be8SEnji Cooper * 16*57718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17*57718be8SEnji Cooper * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18*57718be8SEnji Cooper * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19*57718be8SEnji Cooper * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20*57718be8SEnji Cooper * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*57718be8SEnji Cooper * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*57718be8SEnji Cooper * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23*57718be8SEnji Cooper * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24*57718be8SEnji Cooper * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25*57718be8SEnji Cooper * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26*57718be8SEnji Cooper * POSSIBILITY OF SUCH DAMAGE. 27*57718be8SEnji Cooper */ 28*57718be8SEnji Cooper 29*57718be8SEnji Cooper /*- 30*57718be8SEnji Cooper * Copyright (c)2005 Citrus Project, 31*57718be8SEnji Cooper * All rights reserved. 32*57718be8SEnji Cooper * 33*57718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 34*57718be8SEnji Cooper * modification, are permitted provided that the following conditions 35*57718be8SEnji Cooper * are met: 36*57718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 37*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 38*57718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 39*57718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 40*57718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 41*57718be8SEnji Cooper * 42*57718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 43*57718be8SEnji Cooper * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 44*57718be8SEnji Cooper * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 45*57718be8SEnji Cooper * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 46*57718be8SEnji Cooper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 47*57718be8SEnji Cooper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 48*57718be8SEnji Cooper * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 49*57718be8SEnji Cooper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 50*57718be8SEnji Cooper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 51*57718be8SEnji Cooper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52*57718be8SEnji Cooper * SUCH DAMAGE. 53*57718be8SEnji Cooper * 54*57718be8SEnji Cooper */ 55*57718be8SEnji Cooper 56*57718be8SEnji Cooper #include <sys/cdefs.h> 57*57718be8SEnji Cooper __COPYRIGHT("@(#) Copyright (c) 2011\ 58*57718be8SEnji Cooper The NetBSD Foundation, inc. All rights reserved."); 59*57718be8SEnji Cooper __RCSID("$NetBSD: t_wcstod.c,v 1.3 2011/10/01 17:56:11 christos Exp $"); 60*57718be8SEnji Cooper 61*57718be8SEnji Cooper #include <errno.h> 62*57718be8SEnji Cooper #include <math.h> 63*57718be8SEnji Cooper #include <stdlib.h> 64*57718be8SEnji Cooper #include <string.h> 65*57718be8SEnji Cooper #include <wchar.h> 66*57718be8SEnji Cooper 67*57718be8SEnji Cooper #include <atf-c.h> 68*57718be8SEnji Cooper 69*57718be8SEnji Cooper #define ALT_HUGE_VAL -1 70*57718be8SEnji Cooper #define ALT_MINUS_HUGE_VAL -2 71*57718be8SEnji Cooper #define ALT_NAN -3 72*57718be8SEnji Cooper 73*57718be8SEnji Cooper #if !defined(__vax__) 74*57718be8SEnji Cooper static struct test { 75*57718be8SEnji Cooper const wchar_t *wcs; 76*57718be8SEnji Cooper size_t len; 77*57718be8SEnji Cooper double val; 78*57718be8SEnji Cooper int err; 79*57718be8SEnji Cooper } tests[] = { 80*57718be8SEnji Cooper { L"IN", 0, 0, 0 }, 81*57718be8SEnji Cooper { L"+IN", 0, 0, 0 }, 82*57718be8SEnji Cooper { L"-IN", 0, 0, 0 }, 83*57718be8SEnji Cooper { L"INX", 0, 0, 0 }, 84*57718be8SEnji Cooper { L"+INX", 0, 0, 0 }, 85*57718be8SEnji Cooper { L"-INX", 0, 0, 0 }, 86*57718be8SEnji Cooper { L"INF", 3, ALT_HUGE_VAL, 0 }, 87*57718be8SEnji Cooper { L"+INF", 4, ALT_HUGE_VAL, 0 }, 88*57718be8SEnji Cooper { L"-INF", 4, ALT_MINUS_HUGE_VAL, 0 }, 89*57718be8SEnji Cooper { L"INFX", 3, ALT_HUGE_VAL, 0 }, 90*57718be8SEnji Cooper { L"+INFX", 4, ALT_HUGE_VAL, 0 }, 91*57718be8SEnji Cooper { L"-INFX", 4, ALT_MINUS_HUGE_VAL, 0 }, 92*57718be8SEnji Cooper { L" IN", 0, 0, 0 }, 93*57718be8SEnji Cooper { L" +IN", 0, 0, 0 }, 94*57718be8SEnji Cooper { L" -IN", 0, 0, 0 }, 95*57718be8SEnji Cooper { L" INX", 0, 0, 0 }, 96*57718be8SEnji Cooper { L" +INX", 0, 0, 0 }, 97*57718be8SEnji Cooper { L" -INX", 0, 0, 0 }, 98*57718be8SEnji Cooper { L"+ INF", 0, 0, 0 }, 99*57718be8SEnji Cooper { L"- INF", 0, 0, 0 }, 100*57718be8SEnji Cooper { L" INF", 8, ALT_HUGE_VAL, 0 }, 101*57718be8SEnji Cooper { L" +INF", 9, ALT_HUGE_VAL, 0 }, 102*57718be8SEnji Cooper { L" -INF", 9, ALT_MINUS_HUGE_VAL, 0 }, 103*57718be8SEnji Cooper { L" INFX", 8, ALT_HUGE_VAL, 0 }, 104*57718be8SEnji Cooper { L" +INFX", 9, ALT_HUGE_VAL, 0 }, 105*57718be8SEnji Cooper { L" -INFX", 9, ALT_MINUS_HUGE_VAL, 0 }, 106*57718be8SEnji Cooper { L" INFINIT", 8, ALT_HUGE_VAL, 0 }, 107*57718be8SEnji Cooper { L" +INFINIT", 9, ALT_HUGE_VAL, 0 }, 108*57718be8SEnji Cooper { L" -INFINIT", 9, ALT_MINUS_HUGE_VAL, 0 }, 109*57718be8SEnji Cooper { L" INFINITY", 13, ALT_HUGE_VAL, 0 }, 110*57718be8SEnji Cooper { L" +INFINITY", 14, ALT_HUGE_VAL, 0 }, 111*57718be8SEnji Cooper { L" -INFINITY", 14, ALT_MINUS_HUGE_VAL, 0 }, 112*57718be8SEnji Cooper { L" INFINITYX", 13, ALT_HUGE_VAL, 0 }, 113*57718be8SEnji Cooper { L" +INFINITYX", 14, ALT_HUGE_VAL, 0 }, 114*57718be8SEnji Cooper { L" -INFINITYX", 14, ALT_MINUS_HUGE_VAL, 0 }, 115*57718be8SEnji Cooper 116*57718be8SEnji Cooper /* NAN */ 117*57718be8SEnji Cooper { L"NA", 0, 0, 0 }, 118*57718be8SEnji Cooper { L"+NA", 0, 0, 0 }, 119*57718be8SEnji Cooper { L"-NA", 0, 0, 0 }, 120*57718be8SEnji Cooper { L"NAX", 0, 0, 0 }, 121*57718be8SEnji Cooper { L"+NAX", 0, 0, 0 }, 122*57718be8SEnji Cooper { L"-NAX", 0, 0, 0 }, 123*57718be8SEnji Cooper { L"NAN", 3, ALT_NAN, 0 }, 124*57718be8SEnji Cooper { L"+NAN", 4, ALT_NAN, 0 }, 125*57718be8SEnji Cooper { L"-NAN", 4, ALT_NAN, 0 }, 126*57718be8SEnji Cooper { L"NANX", 3, ALT_NAN, 0 }, 127*57718be8SEnji Cooper { L"+NANX", 4, ALT_NAN, 0 }, 128*57718be8SEnji Cooper { L"-NANX", 4, ALT_NAN, 0 }, 129*57718be8SEnji Cooper { L" NA", 0, 0, 0 }, 130*57718be8SEnji Cooper { L" +NA", 0, 0, 0 }, 131*57718be8SEnji Cooper { L" -NA", 0, 0, 0 }, 132*57718be8SEnji Cooper { L" NAX", 0, 0, 0 }, 133*57718be8SEnji Cooper { L" +NAX", 0, 0, 0 }, 134*57718be8SEnji Cooper { L" -NAX", 0, 0, 0 }, 135*57718be8SEnji Cooper { L"+ NAN", 0, 0, 0 }, 136*57718be8SEnji Cooper { L"- NAN", 0, 0, 0 }, 137*57718be8SEnji Cooper { L" NAN", 8, ALT_NAN, 0 }, 138*57718be8SEnji Cooper { L" +NAN", 9, ALT_NAN, 0 }, 139*57718be8SEnji Cooper { L" -NAN", 9, ALT_NAN, 0 }, 140*57718be8SEnji Cooper { L" NANX", 8, ALT_NAN, 0 }, 141*57718be8SEnji Cooper { L" +NANX", 9, ALT_NAN, 0 }, 142*57718be8SEnji Cooper { L" -NANX", 9, ALT_NAN, 0 }, 143*57718be8SEnji Cooper 144*57718be8SEnji Cooper { L"0", 1, 0, 0 }, 145*57718be8SEnji Cooper { L"+0", 2, 0, 0 }, 146*57718be8SEnji Cooper { L"-0", 2, 0, 0 }, 147*57718be8SEnji Cooper { L" 0", 11, 0, 0 }, 148*57718be8SEnji Cooper { L" +0", 12, 0, 0 }, 149*57718be8SEnji Cooper { L" -0", 12, 0, 0 }, 150*57718be8SEnji Cooper { L"+ 0", 0, 0, 0 }, 151*57718be8SEnji Cooper { L"- 0", 0, 0, 0 }, 152*57718be8SEnji Cooper 153*57718be8SEnji Cooper { L".", 0, 0, 0 }, 154*57718be8SEnji Cooper { L".0", 2, 0, 0 }, 155*57718be8SEnji Cooper { L".00", 3, 0, 0 }, 156*57718be8SEnji Cooper { L".000", 4, 0, 0 }, 157*57718be8SEnji Cooper 158*57718be8SEnji Cooper { L"0.", 2, 0, 0 }, 159*57718be8SEnji Cooper { L"+0.", 3, 0, 0 }, 160*57718be8SEnji Cooper { L"-0.", 3, 0, 0 }, 161*57718be8SEnji Cooper { L" 0.", 12, 0, 0 }, 162*57718be8SEnji Cooper { L" +0.", 13, 0, 0 }, 163*57718be8SEnji Cooper { L" -0.", 13, 0, 0 }, 164*57718be8SEnji Cooper 165*57718be8SEnji Cooper { L"0.0", 3, 0, 0 }, 166*57718be8SEnji Cooper { L"+0.0", 4, 0, 0 }, 167*57718be8SEnji Cooper { L"-0.0", 4, 0, 0 }, 168*57718be8SEnji Cooper { L" 0.0", 13, 0, 0 }, 169*57718be8SEnji Cooper { L" +0.0", 14, 0, 0 }, 170*57718be8SEnji Cooper { L" -0.0", 14, 0, 0 }, 171*57718be8SEnji Cooper 172*57718be8SEnji Cooper { L"000", 3, 0, 0 }, 173*57718be8SEnji Cooper { L"+000", 4, 0, 0 }, 174*57718be8SEnji Cooper { L"-000", 4, 0, 0 }, 175*57718be8SEnji Cooper { L" 000", 13, 0, 0 }, 176*57718be8SEnji Cooper { L" +000", 14, 0, 0 }, 177*57718be8SEnji Cooper { L" -000", 14, 0, 0 }, 178*57718be8SEnji Cooper 179*57718be8SEnji Cooper { L"000.", 4, 0, 0 }, 180*57718be8SEnji Cooper { L"+000.", 5, 0, 0 }, 181*57718be8SEnji Cooper { L"-000.", 5, 0, 0 }, 182*57718be8SEnji Cooper { L" 000.", 14, 0, 0 }, 183*57718be8SEnji Cooper { L" +000.", 15, 0, 0 }, 184*57718be8SEnji Cooper { L" -000.", 15, 0, 0 }, 185*57718be8SEnji Cooper 186*57718be8SEnji Cooper { L"000.0", 5, 0, 0 }, 187*57718be8SEnji Cooper { L"+000.0", 6, 0, 0 }, 188*57718be8SEnji Cooper { L"-000.0", 6, 0, 0 }, 189*57718be8SEnji Cooper { L" 000.0", 15, 0, 0 }, 190*57718be8SEnji Cooper { L" +000.0", 16, 0, 0 }, 191*57718be8SEnji Cooper { L" -000.0", 16, 0, 0 }, 192*57718be8SEnji Cooper 193*57718be8SEnji Cooper 194*57718be8SEnji Cooper { L"0.0.", 3, 0, 0 }, 195*57718be8SEnji Cooper { L"+0.0.", 4, 0, 0 }, 196*57718be8SEnji Cooper { L"-0.0.", 4, 0, 0 }, 197*57718be8SEnji Cooper { L" 0.0.", 13, 0, 0 }, 198*57718be8SEnji Cooper { L" +0.0.", 14, 0, 0 }, 199*57718be8SEnji Cooper { L" -0.0.", 14, 0, 0 }, 200*57718be8SEnji Cooper 201*57718be8SEnji Cooper { L"0.0.0", 3, 0, 0 }, 202*57718be8SEnji Cooper { L"+0.0.0", 4, 0, 0 }, 203*57718be8SEnji Cooper { L"-0.0.0", 4, 0, 0 }, 204*57718be8SEnji Cooper { L" 0.0.0", 13, 0, 0 }, 205*57718be8SEnji Cooper { L" +0.0.0", 14, 0, 0 }, 206*57718be8SEnji Cooper { L" -0.0.0", 14, 0, 0 }, 207*57718be8SEnji Cooper 208*57718be8SEnji Cooper /* XXX: FIXME */ 209*57718be8SEnji Cooper #if defined(__linux__) 210*57718be8SEnji Cooper { L"0X", 2, 0, 0 }, 211*57718be8SEnji Cooper { L"+0X", 3, 0, 0 }, 212*57718be8SEnji Cooper { L"-0X", 3, 0, 0 }, 213*57718be8SEnji Cooper #else 214*57718be8SEnji Cooper { L"0X", 1, 0, 0 }, 215*57718be8SEnji Cooper { L"+0X", 2, 0, 0 }, 216*57718be8SEnji Cooper { L"-0X", 2, 0, 0 }, 217*57718be8SEnji Cooper #endif 218*57718be8SEnji Cooper 219*57718be8SEnji Cooper /* XXX: SunOS 5.8's wcstod(3) doesn't accept hex */ 220*57718be8SEnji Cooper #if !defined(__SunOS__) 221*57718be8SEnji Cooper #if defined(__linux__) 222*57718be8SEnji Cooper { L"0X.", 3, 0, 0 }, 223*57718be8SEnji Cooper { L"+0X.", 4, 0, 0 }, 224*57718be8SEnji Cooper { L"-0X.", 4, 0, 0 }, 225*57718be8SEnji Cooper { L" 0X.", 13, 0, 0 }, 226*57718be8SEnji Cooper { L" +0X.", 14, 0, 0 }, 227*57718be8SEnji Cooper { L" -0X.", 14, 0, 0 }, 228*57718be8SEnji Cooper #else 229*57718be8SEnji Cooper { L"0X.", 1, 0, 0 }, 230*57718be8SEnji Cooper { L"+0X.", 2, 0, 0 }, 231*57718be8SEnji Cooper { L"-0X.", 2, 0, 0 }, 232*57718be8SEnji Cooper { L" 0X.", 11, 0, 0 }, 233*57718be8SEnji Cooper { L" +0X.", 12, 0, 0 }, 234*57718be8SEnji Cooper { L" -0X.", 12, 0, 0 }, 235*57718be8SEnji Cooper #endif 236*57718be8SEnji Cooper /* XXX: FIXME */ 237*57718be8SEnji Cooper #if defined(__NetBSD__) || defined(__linux__) 238*57718be8SEnji Cooper { L"0X.0", 4, 0, 0 }, 239*57718be8SEnji Cooper { L"+0X.0", 5, 0, 0 }, 240*57718be8SEnji Cooper { L"-0X.0", 5, 0, 0 }, 241*57718be8SEnji Cooper { L" 0X.0", 14, 0, 0 }, 242*57718be8SEnji Cooper { L" +0X.0", 15, 0, 0 }, 243*57718be8SEnji Cooper { L" -0X.0", 15, 0, 0 }, 244*57718be8SEnji Cooper 245*57718be8SEnji Cooper { L"0X.0P", 4, 0, 0 }, 246*57718be8SEnji Cooper { L"+0X.0P", 5, 0, 0 }, 247*57718be8SEnji Cooper { L"-0X.0P", 5, 0, 0 }, 248*57718be8SEnji Cooper { L" 0X.0P", 14, 0, 0 }, 249*57718be8SEnji Cooper { L" +0X.0P", 15, 0, 0 }, 250*57718be8SEnji Cooper { L" -0X.0P", 15, 0, 0 }, 251*57718be8SEnji Cooper #else 252*57718be8SEnji Cooper { L"0X.0", 1, 0, 0 }, 253*57718be8SEnji Cooper { L"+0X.0", 2, 0, 0 }, 254*57718be8SEnji Cooper { L"-0X.0", 2, 0, 0 }, 255*57718be8SEnji Cooper { L" 0X.0", 11, 0, 0 }, 256*57718be8SEnji Cooper { L" +0X.0", 12, 0, 0 }, 257*57718be8SEnji Cooper { L" -0X.0", 12, 0, 0 }, 258*57718be8SEnji Cooper 259*57718be8SEnji Cooper { L"0X.0P", 1, 0, 0 }, 260*57718be8SEnji Cooper { L"+0X.0P", 2, 0, 0 }, 261*57718be8SEnji Cooper { L"-0X.0P", 2, 0, 0 }, 262*57718be8SEnji Cooper { L" 0X.0P", 11, 0, 0 }, 263*57718be8SEnji Cooper { L" +0X.0P", 12, 0, 0 }, 264*57718be8SEnji Cooper { L" -0X.0P", 12, 0, 0 }, 265*57718be8SEnji Cooper #endif 266*57718be8SEnji Cooper 267*57718be8SEnji Cooper { L"0X0", 3, 0, 0 }, 268*57718be8SEnji Cooper { L"+0X0", 4, 0, 0 }, 269*57718be8SEnji Cooper { L"-0X0", 4, 0, 0 }, 270*57718be8SEnji Cooper { L" 0X0", 13, 0, 0 }, 271*57718be8SEnji Cooper { L" +0X0", 14, 0, 0 }, 272*57718be8SEnji Cooper { L" -0X0", 14, 0, 0 }, 273*57718be8SEnji Cooper 274*57718be8SEnji Cooper { L"00X0.0", 2, 0, 0 }, 275*57718be8SEnji Cooper { L"+00X0.0", 3, 0, 0 }, 276*57718be8SEnji Cooper { L"-00X0.0", 3, 0, 0 }, 277*57718be8SEnji Cooper { L" 00X0.0", 12, 0, 0 }, 278*57718be8SEnji Cooper { L" +00X0.0", 13, 0, 0 }, 279*57718be8SEnji Cooper { L" -00X0.0", 13, 0, 0 }, 280*57718be8SEnji Cooper 281*57718be8SEnji Cooper { L"0X0P", 3, 0, 0 }, 282*57718be8SEnji Cooper { L"+0X0P", 4, 0, 0 }, 283*57718be8SEnji Cooper { L"-0X0P", 4, 0, 0 }, 284*57718be8SEnji Cooper { L" 0X0P", 13, 0, 0 }, 285*57718be8SEnji Cooper { L" +0X0P", 14, 0, 0 }, 286*57718be8SEnji Cooper { L" -0X0P", 14, 0, 0 }, 287*57718be8SEnji Cooper 288*57718be8SEnji Cooper { L"0X0.", 4, 0, 0 }, 289*57718be8SEnji Cooper { L"+0X0.", 5, 0, 0 }, 290*57718be8SEnji Cooper { L"-0X0.", 5, 0, 0 }, 291*57718be8SEnji Cooper { L" 0X0.", 14, 0, 0 }, 292*57718be8SEnji Cooper { L" +0X0.", 15, 0, 0 }, 293*57718be8SEnji Cooper { L" -0X0.", 15, 0, 0 }, 294*57718be8SEnji Cooper 295*57718be8SEnji Cooper { L"0X0.0", 5, 0, 0 }, 296*57718be8SEnji Cooper { L"+0X0.0", 6, 0, 0 }, 297*57718be8SEnji Cooper { L"-0X0.0", 6, 0, 0 }, 298*57718be8SEnji Cooper { L" 0X0.0", 15, 0, 0 }, 299*57718be8SEnji Cooper { L" +0X0.0", 16, 0, 0 }, 300*57718be8SEnji Cooper { L" -0X0.0", 16, 0, 0 }, 301*57718be8SEnji Cooper 302*57718be8SEnji Cooper { L"0X0.P", 4, 0, 0 }, 303*57718be8SEnji Cooper { L"+0X0.P", 5, 0, 0 }, 304*57718be8SEnji Cooper { L"-0X0.P", 5, 0, 0 }, 305*57718be8SEnji Cooper { L" 0X0.P", 14, 0, 0 }, 306*57718be8SEnji Cooper { L" +0X0.P", 15, 0, 0 }, 307*57718be8SEnji Cooper { L" -0X0.P", 15, 0, 0 }, 308*57718be8SEnji Cooper 309*57718be8SEnji Cooper { L"0X0.P", 4, 0, 0 }, 310*57718be8SEnji Cooper { L"+0X0.P", 5, 0, 0 }, 311*57718be8SEnji Cooper { L"-0X0.P", 5, 0, 0 }, 312*57718be8SEnji Cooper { L" 0X0.P", 14, 0, 0 }, 313*57718be8SEnji Cooper { L" +0X0.P", 15, 0, 0 }, 314*57718be8SEnji Cooper { L" -0X0.P", 15, 0, 0 }, 315*57718be8SEnji Cooper 316*57718be8SEnji Cooper #endif 317*57718be8SEnji Cooper { L"0.12345678", 10, 0.12345678, 0 }, 318*57718be8SEnji Cooper { L"+0.12345678", 11, +0.12345678, 0 }, 319*57718be8SEnji Cooper { L"-0.12345678", 11, -0.12345678, 0 }, 320*57718be8SEnji Cooper { L" 0.12345678", 15, 0.12345678, 0 }, 321*57718be8SEnji Cooper { L" +0.12345678", 16, +0.12345678, 0 }, 322*57718be8SEnji Cooper { L" -0.12345678", 16, -0.12345678, 0 }, 323*57718be8SEnji Cooper 324*57718be8SEnji Cooper { L"0.12345E67", 10, 0.12345E67, 0 }, 325*57718be8SEnji Cooper { L"+0.12345E67", 11, +0.12345E67, 0 }, 326*57718be8SEnji Cooper { L"-0.12345E67", 11, -0.12345E67, 0 }, 327*57718be8SEnji Cooper { L" 0.12345E67", 15, 0.12345E67, 0 }, 328*57718be8SEnji Cooper { L" +0.12345E67", 16, +0.12345E67, 0 }, 329*57718be8SEnji Cooper { L" -0.12345E67", 16, -0.12345E67, 0 }, 330*57718be8SEnji Cooper 331*57718be8SEnji Cooper { L"0.12345E+6", 10, 0.12345E+6, 0 }, 332*57718be8SEnji Cooper { L"+0.12345E+6", 11, +0.12345E+6, 0 }, 333*57718be8SEnji Cooper { L"-0.12345E+6", 11, -0.12345E+6, 0 }, 334*57718be8SEnji Cooper { L" 0.12345E+6", 15, 0.12345E+6, 0 }, 335*57718be8SEnji Cooper { L" +0.12345E+6", 16, +0.12345E+6, 0 }, 336*57718be8SEnji Cooper { L" -0.12345E+6", 16, -0.12345E+6, 0 }, 337*57718be8SEnji Cooper 338*57718be8SEnji Cooper { L"0.98765E-4", 10, 0.98765E-4, 0 }, 339*57718be8SEnji Cooper { L"+0.98765E-4", 11, +0.98765E-4, 0 }, 340*57718be8SEnji Cooper { L"-0.98765E-4", 11, -0.98765E-4, 0 }, 341*57718be8SEnji Cooper { L" 0.98765E-4", 15, 0.98765E-4, 0 }, 342*57718be8SEnji Cooper { L" +0.98765E-4", 16, +0.98765E-4, 0 }, 343*57718be8SEnji Cooper { L" -0.98765E-4", 16, -0.98765E-4, 0 }, 344*57718be8SEnji Cooper 345*57718be8SEnji Cooper { L"12345678E9", 10, 12345678E9, 0 }, 346*57718be8SEnji Cooper { L"+12345678E9", 11, +12345678E9, 0 }, 347*57718be8SEnji Cooper { L"-12345678E9", 11, -12345678E9, 0 }, 348*57718be8SEnji Cooper { L" 12345678E9", 15, 12345678E9, 0 }, 349*57718be8SEnji Cooper { L" +12345678E9", 16, +12345678E9, 0 }, 350*57718be8SEnji Cooper { L" -12345678E9", 16, -12345678E9, 0 }, 351*57718be8SEnji Cooper 352*57718be8SEnji Cooper /* XXX: SunOS 5.8's wcstod(3) doesn't accept hex */ 353*57718be8SEnji Cooper #if !defined(__SunOS__) 354*57718be8SEnji Cooper { L"0x1P+2", 6, 4, 0 }, 355*57718be8SEnji Cooper { L"+0x1P+2", 7, +4, 0 }, 356*57718be8SEnji Cooper { L"-0x1P+2", 7, -4, 0 }, 357*57718be8SEnji Cooper { L" 0x1P+2", 11, 4, 0 }, 358*57718be8SEnji Cooper { L" +0x1P+2", 12, +4, 0 }, 359*57718be8SEnji Cooper { L" -0x1P+2", 12, -4, 0 }, 360*57718be8SEnji Cooper 361*57718be8SEnji Cooper { L"0x1.0P+2", 8, 4, 0 }, 362*57718be8SEnji Cooper { L"+0x1.0P+2", 9, +4, 0 }, 363*57718be8SEnji Cooper { L"-0x1.0P+2", 9, -4, 0 }, 364*57718be8SEnji Cooper { L" 0x1.0P+2", 13, 4, 0 }, 365*57718be8SEnji Cooper { L" +0x1.0P+2", 14, +4, 0 }, 366*57718be8SEnji Cooper { L" -0x1.0P+2", 14, -4, 0 }, 367*57718be8SEnji Cooper 368*57718be8SEnji Cooper { L"0x1P-2", 6, 0.25, 0 }, 369*57718be8SEnji Cooper { L"+0x1P-2", 7, +0.25, 0 }, 370*57718be8SEnji Cooper { L"-0x1P-2", 7, -0.25, 0 }, 371*57718be8SEnji Cooper { L" 0x1P-2", 11, 0.25, 0 }, 372*57718be8SEnji Cooper { L" +0x1P-2", 12, +0.25, 0 }, 373*57718be8SEnji Cooper { L" -0x1P-2", 12, -0.25, 0 }, 374*57718be8SEnji Cooper 375*57718be8SEnji Cooper { L"0x1.0P-2", 8, 0.25, 0 }, 376*57718be8SEnji Cooper { L"+0x1.0P-2", 9, +0.25, 0 }, 377*57718be8SEnji Cooper { L"-0x1.0P-2", 9, -0.25, 0 }, 378*57718be8SEnji Cooper { L" 0x1.0P-2", 13, 0.25, 0 }, 379*57718be8SEnji Cooper { L" +0x1.0P-2", 14, +0.25, 0 }, 380*57718be8SEnji Cooper { L" -0x1.0P-2", 14, -0.25, 0 }, 381*57718be8SEnji Cooper #endif 382*57718be8SEnji Cooper 383*57718be8SEnji Cooper { NULL, 0, 0, 0 } 384*57718be8SEnji Cooper }; 385*57718be8SEnji Cooper #endif /* !defined(__vax__) */ 386*57718be8SEnji Cooper 387*57718be8SEnji Cooper ATF_TC(wcstod); 388*57718be8SEnji Cooper ATF_TC_HEAD(wcstod, tc) 389*57718be8SEnji Cooper { 390*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks wcstod(3)"); 391*57718be8SEnji Cooper } 392*57718be8SEnji Cooper ATF_TC_BODY(wcstod, tc) 393*57718be8SEnji Cooper { 394*57718be8SEnji Cooper #if defined(__vax__) 395*57718be8SEnji Cooper #else 396*57718be8SEnji Cooper struct test *t; 397*57718be8SEnji Cooper #endif 398*57718be8SEnji Cooper 399*57718be8SEnji Cooper #if !defined(__vax__) 400*57718be8SEnji Cooper for (t = &tests[0]; t->wcs != NULL; ++t) { 401*57718be8SEnji Cooper double d; 402*57718be8SEnji Cooper size_t n; 403*57718be8SEnji Cooper wchar_t *tail; 404*57718be8SEnji Cooper char *buf; 405*57718be8SEnji Cooper 406*57718be8SEnji Cooper /* we do not supported %ls nor %S yet. */ 407*57718be8SEnji Cooper n = wcstombs(NULL, t->wcs, 0); 408*57718be8SEnji Cooper ATF_REQUIRE((buf = (void *)malloc(n + 1)) != NULL); 409*57718be8SEnji Cooper (void)wcstombs(buf, t->wcs, n + 1); 410*57718be8SEnji Cooper (void)printf("Checking wcstod(\"%s\", &tail):\n", buf); 411*57718be8SEnji Cooper free(buf); 412*57718be8SEnji Cooper 413*57718be8SEnji Cooper errno = 0; 414*57718be8SEnji Cooper d = wcstod(t->wcs, &tail); 415*57718be8SEnji Cooper (void)printf("[errno]\n"); 416*57718be8SEnji Cooper (void)printf(" got : %s\n", strerror(errno)); 417*57718be8SEnji Cooper (void)printf(" expected: %s\n", strerror(t->err)); 418*57718be8SEnji Cooper ATF_REQUIRE_EQ(errno, t->err); 419*57718be8SEnji Cooper 420*57718be8SEnji Cooper n = (size_t)(tail - t->wcs); 421*57718be8SEnji Cooper (void)printf("[endptr - nptr]\n"); 422*57718be8SEnji Cooper (void)printf(" got : %zd\n", n); 423*57718be8SEnji Cooper (void)printf(" expected: %zd\n", t->len); 424*57718be8SEnji Cooper ATF_REQUIRE_EQ(n, t->len); 425*57718be8SEnji Cooper 426*57718be8SEnji Cooper (void)printf("[result]\n"); 427*57718be8SEnji Cooper (void)printf(" real: %F\n", d); 428*57718be8SEnji Cooper if (t->val == ALT_HUGE_VAL) { 429*57718be8SEnji Cooper (void)printf(" expected: %F\n", HUGE_VAL); 430*57718be8SEnji Cooper ATF_REQUIRE(isinf(d)); 431*57718be8SEnji Cooper ATF_REQUIRE_EQ(d, HUGE_VAL); 432*57718be8SEnji Cooper } else if (t->val == ALT_MINUS_HUGE_VAL) { 433*57718be8SEnji Cooper (void)printf(" expected: %F\n", -HUGE_VAL); 434*57718be8SEnji Cooper ATF_REQUIRE(isinf(d)); 435*57718be8SEnji Cooper ATF_REQUIRE_EQ(d, -HUGE_VAL); 436*57718be8SEnji Cooper } else if (t->val == ALT_NAN) { 437*57718be8SEnji Cooper (void)printf(" expected: %F\n", NAN); 438*57718be8SEnji Cooper ATF_REQUIRE(isnan(d)); 439*57718be8SEnji Cooper } else { 440*57718be8SEnji Cooper (void)printf(" expected: %F\n", t->val); 441*57718be8SEnji Cooper ATF_REQUIRE_EQ(d, t->val); 442*57718be8SEnji Cooper } 443*57718be8SEnji Cooper 444*57718be8SEnji Cooper (void)printf("\n"); 445*57718be8SEnji Cooper } 446*57718be8SEnji Cooper #else /* !defined(__vax__) */ 447*57718be8SEnji Cooper atf_tc_skip("Test is unavailable on vax."); 448*57718be8SEnji Cooper #endif /* !defined(__vax__) */ 449*57718be8SEnji Cooper } 450*57718be8SEnji Cooper 451*57718be8SEnji Cooper ATF_TP_ADD_TCS(tp) 452*57718be8SEnji Cooper { 453*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, wcstod); 454*57718be8SEnji Cooper 455*57718be8SEnji Cooper return atf_no_error(); 456*57718be8SEnji Cooper } 457