1272343Sngie/* $NetBSD: t_wcstod.c,v 1.3 2011/10/01 17:56:11 christos Exp $ */ 2272343Sngie 3272343Sngie/*- 4272343Sngie * Copyright (c) 2011 The NetBSD Foundation, Inc. 5272343Sngie * All rights reserved. 6272343Sngie * 7272343Sngie * Redistribution and use in source and binary forms, with or without 8272343Sngie * modification, are permitted provided that the following conditions 9272343Sngie * are met: 10272343Sngie * 1. Redistributions of source code must retain the above copyright 11272343Sngie * notice, this list of conditions and the following disclaimer. 12272343Sngie * 2. Redistributions in binary form must reproduce the above copyright 13272343Sngie * notice, this list of conditions and the following disclaimer in the 14272343Sngie * documentation and/or other materials provided with the distribution. 15272343Sngie * 16272343Sngie * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17272343Sngie * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18272343Sngie * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19272343Sngie * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20272343Sngie * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21272343Sngie * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22272343Sngie * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23272343Sngie * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24272343Sngie * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25272343Sngie * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26272343Sngie * POSSIBILITY OF SUCH DAMAGE. 27272343Sngie */ 28272343Sngie 29272343Sngie/*- 30272343Sngie * Copyright (c)2005 Citrus Project, 31272343Sngie * All rights reserved. 32272343Sngie * 33272343Sngie * Redistribution and use in source and binary forms, with or without 34272343Sngie * modification, are permitted provided that the following conditions 35272343Sngie * are met: 36272343Sngie * 1. Redistributions of source code must retain the above copyright 37272343Sngie * notice, this list of conditions and the following disclaimer. 38272343Sngie * 2. Redistributions in binary form must reproduce the above copyright 39272343Sngie * notice, this list of conditions and the following disclaimer in the 40272343Sngie * documentation and/or other materials provided with the distribution. 41272343Sngie * 42272343Sngie * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 43272343Sngie * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 44272343Sngie * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 45272343Sngie * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 46272343Sngie * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 47272343Sngie * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 48272343Sngie * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 49272343Sngie * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 50272343Sngie * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 51272343Sngie * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52272343Sngie * SUCH DAMAGE. 53272343Sngie * 54272343Sngie */ 55272343Sngie 56272343Sngie#include <sys/cdefs.h> 57272343Sngie__COPYRIGHT("@(#) Copyright (c) 2011\ 58272343Sngie The NetBSD Foundation, inc. All rights reserved."); 59272343Sngie__RCSID("$NetBSD: t_wcstod.c,v 1.3 2011/10/01 17:56:11 christos Exp $"); 60272343Sngie 61272343Sngie#include <errno.h> 62272343Sngie#include <math.h> 63272343Sngie#include <stdlib.h> 64272343Sngie#include <string.h> 65272343Sngie#include <wchar.h> 66272343Sngie 67272343Sngie#include <atf-c.h> 68272343Sngie 69276478Sngie#ifdef __FreeBSD__ 70276478Sngie#include <stdio.h> 71276478Sngie#endif 72276478Sngie 73272343Sngie#define ALT_HUGE_VAL -1 74272343Sngie#define ALT_MINUS_HUGE_VAL -2 75272343Sngie#define ALT_NAN -3 76272343Sngie 77272343Sngie#if !defined(__vax__) 78272343Sngiestatic struct test { 79272343Sngie const wchar_t *wcs; 80272343Sngie size_t len; 81272343Sngie double val; 82272343Sngie int err; 83272343Sngie} tests[] = { 84272343Sngie{ L"IN", 0, 0, 0 }, 85272343Sngie{ L"+IN", 0, 0, 0 }, 86272343Sngie{ L"-IN", 0, 0, 0 }, 87272343Sngie{ L"INX", 0, 0, 0 }, 88272343Sngie{ L"+INX", 0, 0, 0 }, 89272343Sngie{ L"-INX", 0, 0, 0 }, 90272343Sngie{ L"INF", 3, ALT_HUGE_VAL, 0 }, 91272343Sngie{ L"+INF", 4, ALT_HUGE_VAL, 0 }, 92272343Sngie{ L"-INF", 4, ALT_MINUS_HUGE_VAL, 0 }, 93272343Sngie{ L"INFX", 3, ALT_HUGE_VAL, 0 }, 94272343Sngie{ L"+INFX", 4, ALT_HUGE_VAL, 0 }, 95272343Sngie{ L"-INFX", 4, ALT_MINUS_HUGE_VAL, 0 }, 96272343Sngie{ L" IN", 0, 0, 0 }, 97272343Sngie{ L" +IN", 0, 0, 0 }, 98272343Sngie{ L" -IN", 0, 0, 0 }, 99272343Sngie{ L" INX", 0, 0, 0 }, 100272343Sngie{ L" +INX", 0, 0, 0 }, 101272343Sngie{ L" -INX", 0, 0, 0 }, 102272343Sngie{ L"+ INF", 0, 0, 0 }, 103272343Sngie{ L"- INF", 0, 0, 0 }, 104272343Sngie{ L" INF", 8, ALT_HUGE_VAL, 0 }, 105272343Sngie{ L" +INF", 9, ALT_HUGE_VAL, 0 }, 106272343Sngie{ L" -INF", 9, ALT_MINUS_HUGE_VAL, 0 }, 107272343Sngie{ L" INFX", 8, ALT_HUGE_VAL, 0 }, 108272343Sngie{ L" +INFX", 9, ALT_HUGE_VAL, 0 }, 109272343Sngie{ L" -INFX", 9, ALT_MINUS_HUGE_VAL, 0 }, 110272343Sngie{ L" INFINIT", 8, ALT_HUGE_VAL, 0 }, 111272343Sngie{ L" +INFINIT", 9, ALT_HUGE_VAL, 0 }, 112272343Sngie{ L" -INFINIT", 9, ALT_MINUS_HUGE_VAL, 0 }, 113272343Sngie{ L" INFINITY", 13, ALT_HUGE_VAL, 0 }, 114272343Sngie{ L" +INFINITY", 14, ALT_HUGE_VAL, 0 }, 115272343Sngie{ L" -INFINITY", 14, ALT_MINUS_HUGE_VAL, 0 }, 116272343Sngie{ L" INFINITYX", 13, ALT_HUGE_VAL, 0 }, 117272343Sngie{ L" +INFINITYX", 14, ALT_HUGE_VAL, 0 }, 118272343Sngie{ L" -INFINITYX", 14, ALT_MINUS_HUGE_VAL, 0 }, 119272343Sngie 120272343Sngie/* NAN */ 121272343Sngie{ L"NA", 0, 0, 0 }, 122272343Sngie{ L"+NA", 0, 0, 0 }, 123272343Sngie{ L"-NA", 0, 0, 0 }, 124272343Sngie{ L"NAX", 0, 0, 0 }, 125272343Sngie{ L"+NAX", 0, 0, 0 }, 126272343Sngie{ L"-NAX", 0, 0, 0 }, 127272343Sngie{ L"NAN", 3, ALT_NAN, 0 }, 128272343Sngie{ L"+NAN", 4, ALT_NAN, 0 }, 129272343Sngie{ L"-NAN", 4, ALT_NAN, 0 }, 130272343Sngie{ L"NANX", 3, ALT_NAN, 0 }, 131272343Sngie{ L"+NANX", 4, ALT_NAN, 0 }, 132272343Sngie{ L"-NANX", 4, ALT_NAN, 0 }, 133272343Sngie{ L" NA", 0, 0, 0 }, 134272343Sngie{ L" +NA", 0, 0, 0 }, 135272343Sngie{ L" -NA", 0, 0, 0 }, 136272343Sngie{ L" NAX", 0, 0, 0 }, 137272343Sngie{ L" +NAX", 0, 0, 0 }, 138272343Sngie{ L" -NAX", 0, 0, 0 }, 139272343Sngie{ L"+ NAN", 0, 0, 0 }, 140272343Sngie{ L"- NAN", 0, 0, 0 }, 141272343Sngie{ L" NAN", 8, ALT_NAN, 0 }, 142272343Sngie{ L" +NAN", 9, ALT_NAN, 0 }, 143272343Sngie{ L" -NAN", 9, ALT_NAN, 0 }, 144272343Sngie{ L" NANX", 8, ALT_NAN, 0 }, 145272343Sngie{ L" +NANX", 9, ALT_NAN, 0 }, 146272343Sngie{ L" -NANX", 9, ALT_NAN, 0 }, 147272343Sngie 148272343Sngie{ L"0", 1, 0, 0 }, 149272343Sngie{ L"+0", 2, 0, 0 }, 150272343Sngie{ L"-0", 2, 0, 0 }, 151272343Sngie{ L" 0", 11, 0, 0 }, 152272343Sngie{ L" +0", 12, 0, 0 }, 153272343Sngie{ L" -0", 12, 0, 0 }, 154272343Sngie{ L"+ 0", 0, 0, 0 }, 155272343Sngie{ L"- 0", 0, 0, 0 }, 156272343Sngie 157272343Sngie{ L".", 0, 0, 0 }, 158272343Sngie{ L".0", 2, 0, 0 }, 159272343Sngie{ L".00", 3, 0, 0 }, 160272343Sngie{ L".000", 4, 0, 0 }, 161272343Sngie 162272343Sngie{ L"0.", 2, 0, 0 }, 163272343Sngie{ L"+0.", 3, 0, 0 }, 164272343Sngie{ L"-0.", 3, 0, 0 }, 165272343Sngie{ L" 0.", 12, 0, 0 }, 166272343Sngie{ L" +0.", 13, 0, 0 }, 167272343Sngie{ L" -0.", 13, 0, 0 }, 168272343Sngie 169272343Sngie{ L"0.0", 3, 0, 0 }, 170272343Sngie{ L"+0.0", 4, 0, 0 }, 171272343Sngie{ L"-0.0", 4, 0, 0 }, 172272343Sngie{ L" 0.0", 13, 0, 0 }, 173272343Sngie{ L" +0.0", 14, 0, 0 }, 174272343Sngie{ L" -0.0", 14, 0, 0 }, 175272343Sngie 176272343Sngie{ L"000", 3, 0, 0 }, 177272343Sngie{ L"+000", 4, 0, 0 }, 178272343Sngie{ L"-000", 4, 0, 0 }, 179272343Sngie{ L" 000", 13, 0, 0 }, 180272343Sngie{ L" +000", 14, 0, 0 }, 181272343Sngie{ L" -000", 14, 0, 0 }, 182272343Sngie 183272343Sngie{ L"000.", 4, 0, 0 }, 184272343Sngie{ L"+000.", 5, 0, 0 }, 185272343Sngie{ L"-000.", 5, 0, 0 }, 186272343Sngie{ L" 000.", 14, 0, 0 }, 187272343Sngie{ L" +000.", 15, 0, 0 }, 188272343Sngie{ L" -000.", 15, 0, 0 }, 189272343Sngie 190272343Sngie{ L"000.0", 5, 0, 0 }, 191272343Sngie{ L"+000.0", 6, 0, 0 }, 192272343Sngie{ L"-000.0", 6, 0, 0 }, 193272343Sngie{ L" 000.0", 15, 0, 0 }, 194272343Sngie{ L" +000.0", 16, 0, 0 }, 195272343Sngie{ L" -000.0", 16, 0, 0 }, 196272343Sngie 197272343Sngie 198272343Sngie{ L"0.0.", 3, 0, 0 }, 199272343Sngie{ L"+0.0.", 4, 0, 0 }, 200272343Sngie{ L"-0.0.", 4, 0, 0 }, 201272343Sngie{ L" 0.0.", 13, 0, 0 }, 202272343Sngie{ L" +0.0.", 14, 0, 0 }, 203272343Sngie{ L" -0.0.", 14, 0, 0 }, 204272343Sngie 205272343Sngie{ L"0.0.0", 3, 0, 0 }, 206272343Sngie{ L"+0.0.0", 4, 0, 0 }, 207272343Sngie{ L"-0.0.0", 4, 0, 0 }, 208272343Sngie{ L" 0.0.0", 13, 0, 0 }, 209272343Sngie{ L" +0.0.0", 14, 0, 0 }, 210272343Sngie{ L" -0.0.0", 14, 0, 0 }, 211272343Sngie 212272343Sngie/* XXX: FIXME */ 213272343Sngie#if defined(__linux__) 214272343Sngie{ L"0X", 2, 0, 0 }, 215272343Sngie{ L"+0X", 3, 0, 0 }, 216272343Sngie{ L"-0X", 3, 0, 0 }, 217272343Sngie#else 218272343Sngie{ L"0X", 1, 0, 0 }, 219272343Sngie{ L"+0X", 2, 0, 0 }, 220272343Sngie{ L"-0X", 2, 0, 0 }, 221272343Sngie#endif 222272343Sngie 223272343Sngie/* XXX: SunOS 5.8's wcstod(3) doesn't accept hex */ 224272343Sngie#if !defined(__SunOS__) 225272343Sngie#if defined(__linux__) 226272343Sngie{ L"0X.", 3, 0, 0 }, 227272343Sngie{ L"+0X.", 4, 0, 0 }, 228272343Sngie{ L"-0X.", 4, 0, 0 }, 229272343Sngie{ L" 0X.", 13, 0, 0 }, 230272343Sngie{ L" +0X.", 14, 0, 0 }, 231272343Sngie{ L" -0X.", 14, 0, 0 }, 232272343Sngie#else 233272343Sngie{ L"0X.", 1, 0, 0 }, 234272343Sngie{ L"+0X.", 2, 0, 0 }, 235272343Sngie{ L"-0X.", 2, 0, 0 }, 236272343Sngie{ L" 0X.", 11, 0, 0 }, 237272343Sngie{ L" +0X.", 12, 0, 0 }, 238272343Sngie{ L" -0X.", 12, 0, 0 }, 239272343Sngie#endif 240272343Sngie/* XXX: FIXME */ 241276478Sngie#if defined(__NetBSD__) || defined(__linux__) || defined(__FreeBSD__) 242272343Sngie{ L"0X.0", 4, 0, 0 }, 243272343Sngie{ L"+0X.0", 5, 0, 0 }, 244272343Sngie{ L"-0X.0", 5, 0, 0 }, 245272343Sngie{ L" 0X.0", 14, 0, 0 }, 246272343Sngie{ L" +0X.0", 15, 0, 0 }, 247272343Sngie{ L" -0X.0", 15, 0, 0 }, 248272343Sngie 249272343Sngie{ L"0X.0P", 4, 0, 0 }, 250272343Sngie{ L"+0X.0P", 5, 0, 0 }, 251272343Sngie{ L"-0X.0P", 5, 0, 0 }, 252272343Sngie{ L" 0X.0P", 14, 0, 0 }, 253272343Sngie{ L" +0X.0P", 15, 0, 0 }, 254272343Sngie{ L" -0X.0P", 15, 0, 0 }, 255272343Sngie#else 256272343Sngie{ L"0X.0", 1, 0, 0 }, 257272343Sngie{ L"+0X.0", 2, 0, 0 }, 258272343Sngie{ L"-0X.0", 2, 0, 0 }, 259272343Sngie{ L" 0X.0", 11, 0, 0 }, 260272343Sngie{ L" +0X.0", 12, 0, 0 }, 261272343Sngie{ L" -0X.0", 12, 0, 0 }, 262272343Sngie 263272343Sngie{ L"0X.0P", 1, 0, 0 }, 264272343Sngie{ L"+0X.0P", 2, 0, 0 }, 265272343Sngie{ L"-0X.0P", 2, 0, 0 }, 266272343Sngie{ L" 0X.0P", 11, 0, 0 }, 267272343Sngie{ L" +0X.0P", 12, 0, 0 }, 268272343Sngie{ L" -0X.0P", 12, 0, 0 }, 269272343Sngie#endif 270272343Sngie 271272343Sngie{ L"0X0", 3, 0, 0 }, 272272343Sngie{ L"+0X0", 4, 0, 0 }, 273272343Sngie{ L"-0X0", 4, 0, 0 }, 274272343Sngie{ L" 0X0", 13, 0, 0 }, 275272343Sngie{ L" +0X0", 14, 0, 0 }, 276272343Sngie{ L" -0X0", 14, 0, 0 }, 277272343Sngie 278272343Sngie{ L"00X0.0", 2, 0, 0 }, 279272343Sngie{ L"+00X0.0", 3, 0, 0 }, 280272343Sngie{ L"-00X0.0", 3, 0, 0 }, 281272343Sngie{ L" 00X0.0", 12, 0, 0 }, 282272343Sngie{ L" +00X0.0", 13, 0, 0 }, 283272343Sngie{ L" -00X0.0", 13, 0, 0 }, 284272343Sngie 285272343Sngie{ L"0X0P", 3, 0, 0 }, 286272343Sngie{ L"+0X0P", 4, 0, 0 }, 287272343Sngie{ L"-0X0P", 4, 0, 0 }, 288272343Sngie{ L" 0X0P", 13, 0, 0 }, 289272343Sngie{ L" +0X0P", 14, 0, 0 }, 290272343Sngie{ L" -0X0P", 14, 0, 0 }, 291272343Sngie 292272343Sngie{ L"0X0.", 4, 0, 0 }, 293272343Sngie{ L"+0X0.", 5, 0, 0 }, 294272343Sngie{ L"-0X0.", 5, 0, 0 }, 295272343Sngie{ L" 0X0.", 14, 0, 0 }, 296272343Sngie{ L" +0X0.", 15, 0, 0 }, 297272343Sngie{ L" -0X0.", 15, 0, 0 }, 298272343Sngie 299272343Sngie{ L"0X0.0", 5, 0, 0 }, 300272343Sngie{ L"+0X0.0", 6, 0, 0 }, 301272343Sngie{ L"-0X0.0", 6, 0, 0 }, 302272343Sngie{ L" 0X0.0", 15, 0, 0 }, 303272343Sngie{ L" +0X0.0", 16, 0, 0 }, 304272343Sngie{ L" -0X0.0", 16, 0, 0 }, 305272343Sngie 306272343Sngie{ L"0X0.P", 4, 0, 0 }, 307272343Sngie{ L"+0X0.P", 5, 0, 0 }, 308272343Sngie{ L"-0X0.P", 5, 0, 0 }, 309272343Sngie{ L" 0X0.P", 14, 0, 0 }, 310272343Sngie{ L" +0X0.P", 15, 0, 0 }, 311272343Sngie{ L" -0X0.P", 15, 0, 0 }, 312272343Sngie 313272343Sngie{ L"0X0.P", 4, 0, 0 }, 314272343Sngie{ L"+0X0.P", 5, 0, 0 }, 315272343Sngie{ L"-0X0.P", 5, 0, 0 }, 316272343Sngie{ L" 0X0.P", 14, 0, 0 }, 317272343Sngie{ L" +0X0.P", 15, 0, 0 }, 318272343Sngie{ L" -0X0.P", 15, 0, 0 }, 319272343Sngie 320272343Sngie#endif 321272343Sngie{ L"0.12345678", 10, 0.12345678, 0 }, 322272343Sngie{ L"+0.12345678", 11, +0.12345678, 0 }, 323272343Sngie{ L"-0.12345678", 11, -0.12345678, 0 }, 324272343Sngie{ L" 0.12345678", 15, 0.12345678, 0 }, 325272343Sngie{ L" +0.12345678", 16, +0.12345678, 0 }, 326272343Sngie{ L" -0.12345678", 16, -0.12345678, 0 }, 327272343Sngie 328272343Sngie{ L"0.12345E67", 10, 0.12345E67, 0 }, 329272343Sngie{ L"+0.12345E67", 11, +0.12345E67, 0 }, 330272343Sngie{ L"-0.12345E67", 11, -0.12345E67, 0 }, 331272343Sngie{ L" 0.12345E67", 15, 0.12345E67, 0 }, 332272343Sngie{ L" +0.12345E67", 16, +0.12345E67, 0 }, 333272343Sngie{ L" -0.12345E67", 16, -0.12345E67, 0 }, 334272343Sngie 335272343Sngie{ L"0.12345E+6", 10, 0.12345E+6, 0 }, 336272343Sngie{ L"+0.12345E+6", 11, +0.12345E+6, 0 }, 337272343Sngie{ L"-0.12345E+6", 11, -0.12345E+6, 0 }, 338272343Sngie{ L" 0.12345E+6", 15, 0.12345E+6, 0 }, 339272343Sngie{ L" +0.12345E+6", 16, +0.12345E+6, 0 }, 340272343Sngie{ L" -0.12345E+6", 16, -0.12345E+6, 0 }, 341272343Sngie 342272343Sngie{ L"0.98765E-4", 10, 0.98765E-4, 0 }, 343272343Sngie{ L"+0.98765E-4", 11, +0.98765E-4, 0 }, 344272343Sngie{ L"-0.98765E-4", 11, -0.98765E-4, 0 }, 345272343Sngie{ L" 0.98765E-4", 15, 0.98765E-4, 0 }, 346272343Sngie{ L" +0.98765E-4", 16, +0.98765E-4, 0 }, 347272343Sngie{ L" -0.98765E-4", 16, -0.98765E-4, 0 }, 348272343Sngie 349272343Sngie{ L"12345678E9", 10, 12345678E9, 0 }, 350272343Sngie{ L"+12345678E9", 11, +12345678E9, 0 }, 351272343Sngie{ L"-12345678E9", 11, -12345678E9, 0 }, 352272343Sngie{ L" 12345678E9", 15, 12345678E9, 0 }, 353272343Sngie{ L" +12345678E9", 16, +12345678E9, 0 }, 354272343Sngie{ L" -12345678E9", 16, -12345678E9, 0 }, 355272343Sngie 356272343Sngie/* XXX: SunOS 5.8's wcstod(3) doesn't accept hex */ 357272343Sngie#if !defined(__SunOS__) 358272343Sngie{ L"0x1P+2", 6, 4, 0 }, 359272343Sngie{ L"+0x1P+2", 7, +4, 0 }, 360272343Sngie{ L"-0x1P+2", 7, -4, 0 }, 361272343Sngie{ L" 0x1P+2", 11, 4, 0 }, 362272343Sngie{ L" +0x1P+2", 12, +4, 0 }, 363272343Sngie{ L" -0x1P+2", 12, -4, 0 }, 364272343Sngie 365272343Sngie{ L"0x1.0P+2", 8, 4, 0 }, 366272343Sngie{ L"+0x1.0P+2", 9, +4, 0 }, 367272343Sngie{ L"-0x1.0P+2", 9, -4, 0 }, 368272343Sngie{ L" 0x1.0P+2", 13, 4, 0 }, 369272343Sngie{ L" +0x1.0P+2", 14, +4, 0 }, 370272343Sngie{ L" -0x1.0P+2", 14, -4, 0 }, 371272343Sngie 372272343Sngie{ L"0x1P-2", 6, 0.25, 0 }, 373272343Sngie{ L"+0x1P-2", 7, +0.25, 0 }, 374272343Sngie{ L"-0x1P-2", 7, -0.25, 0 }, 375272343Sngie{ L" 0x1P-2", 11, 0.25, 0 }, 376272343Sngie{ L" +0x1P-2", 12, +0.25, 0 }, 377272343Sngie{ L" -0x1P-2", 12, -0.25, 0 }, 378272343Sngie 379272343Sngie{ L"0x1.0P-2", 8, 0.25, 0 }, 380272343Sngie{ L"+0x1.0P-2", 9, +0.25, 0 }, 381272343Sngie{ L"-0x1.0P-2", 9, -0.25, 0 }, 382272343Sngie{ L" 0x1.0P-2", 13, 0.25, 0 }, 383272343Sngie{ L" +0x1.0P-2", 14, +0.25, 0 }, 384272343Sngie{ L" -0x1.0P-2", 14, -0.25, 0 }, 385272343Sngie#endif 386272343Sngie 387272343Sngie{ NULL, 0, 0, 0 } 388272343Sngie}; 389272343Sngie#endif /* !defined(__vax__) */ 390272343Sngie 391272343SngieATF_TC(wcstod); 392272343SngieATF_TC_HEAD(wcstod, tc) 393272343Sngie{ 394272343Sngie atf_tc_set_md_var(tc, "descr", "Checks wcstod(3)"); 395272343Sngie} 396272343SngieATF_TC_BODY(wcstod, tc) 397272343Sngie{ 398272343Sngie#if defined(__vax__) 399272343Sngie#else 400272343Sngie struct test *t; 401272343Sngie#endif 402272343Sngie 403272343Sngie#if !defined(__vax__) 404272343Sngie for (t = &tests[0]; t->wcs != NULL; ++t) { 405272343Sngie double d; 406272343Sngie size_t n; 407272343Sngie wchar_t *tail; 408272343Sngie char *buf; 409272343Sngie 410272343Sngie /* we do not supported %ls nor %S yet. */ 411272343Sngie n = wcstombs(NULL, t->wcs, 0); 412272343Sngie ATF_REQUIRE((buf = (void *)malloc(n + 1)) != NULL); 413272343Sngie (void)wcstombs(buf, t->wcs, n + 1); 414272343Sngie (void)printf("Checking wcstod(\"%s\", &tail):\n", buf); 415272343Sngie free(buf); 416272343Sngie 417272343Sngie errno = 0; 418272343Sngie d = wcstod(t->wcs, &tail); 419272343Sngie (void)printf("[errno]\n"); 420272343Sngie (void)printf(" got : %s\n", strerror(errno)); 421272343Sngie (void)printf(" expected: %s\n", strerror(t->err)); 422272343Sngie ATF_REQUIRE_EQ(errno, t->err); 423272343Sngie 424272343Sngie n = (size_t)(tail - t->wcs); 425272343Sngie (void)printf("[endptr - nptr]\n"); 426272343Sngie (void)printf(" got : %zd\n", n); 427272343Sngie (void)printf(" expected: %zd\n", t->len); 428272343Sngie ATF_REQUIRE_EQ(n, t->len); 429272343Sngie 430272343Sngie (void)printf("[result]\n"); 431272343Sngie (void)printf(" real: %F\n", d); 432272343Sngie if (t->val == ALT_HUGE_VAL) { 433272343Sngie (void)printf(" expected: %F\n", HUGE_VAL); 434272343Sngie ATF_REQUIRE(isinf(d)); 435272343Sngie ATF_REQUIRE_EQ(d, HUGE_VAL); 436272343Sngie } else if (t->val == ALT_MINUS_HUGE_VAL) { 437272343Sngie (void)printf(" expected: %F\n", -HUGE_VAL); 438272343Sngie ATF_REQUIRE(isinf(d)); 439272343Sngie ATF_REQUIRE_EQ(d, -HUGE_VAL); 440272343Sngie } else if (t->val == ALT_NAN) { 441272343Sngie (void)printf(" expected: %F\n", NAN); 442272343Sngie ATF_REQUIRE(isnan(d)); 443272343Sngie } else { 444272343Sngie (void)printf(" expected: %F\n", t->val); 445272343Sngie ATF_REQUIRE_EQ(d, t->val); 446272343Sngie } 447272343Sngie 448272343Sngie (void)printf("\n"); 449272343Sngie } 450272343Sngie#else /* !defined(__vax__) */ 451272343Sngie atf_tc_skip("Test is unavailable on vax."); 452272343Sngie#endif /* !defined(__vax__) */ 453272343Sngie} 454272343Sngie 455272343SngieATF_TP_ADD_TCS(tp) 456272343Sngie{ 457272343Sngie ATF_TP_ADD_TC(tp, wcstod); 458272343Sngie 459272343Sngie return atf_no_error(); 460272343Sngie} 461