157718be8SEnji Cooper /* $NetBSD: t_wcstod.c,v 1.3 2011/10/01 17:56:11 christos Exp $ */ 257718be8SEnji Cooper 357718be8SEnji Cooper /*- 457718be8SEnji Cooper * Copyright (c) 2011 The NetBSD Foundation, Inc. 557718be8SEnji Cooper * All rights reserved. 657718be8SEnji Cooper * 757718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 857718be8SEnji Cooper * modification, are permitted provided that the following conditions 957718be8SEnji Cooper * are met: 1057718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 1157718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 1257718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 1357718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 1457718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 1557718be8SEnji Cooper * 1657718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1757718be8SEnji Cooper * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1857718be8SEnji Cooper * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1957718be8SEnji Cooper * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2057718be8SEnji Cooper * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2157718be8SEnji Cooper * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2257718be8SEnji Cooper * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2357718be8SEnji Cooper * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2457718be8SEnji Cooper * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2557718be8SEnji Cooper * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2657718be8SEnji Cooper * POSSIBILITY OF SUCH DAMAGE. 2757718be8SEnji Cooper */ 2857718be8SEnji Cooper 2957718be8SEnji Cooper /*- 3057718be8SEnji Cooper * Copyright (c)2005 Citrus Project, 3157718be8SEnji Cooper * All rights reserved. 3257718be8SEnji Cooper * 3357718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 3457718be8SEnji Cooper * modification, are permitted provided that the following conditions 3557718be8SEnji Cooper * are met: 3657718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 3757718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 3857718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 3957718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 4057718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 4157718be8SEnji Cooper * 4257718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 4357718be8SEnji Cooper * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4457718be8SEnji Cooper * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4557718be8SEnji Cooper * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4657718be8SEnji Cooper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4757718be8SEnji Cooper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4857718be8SEnji Cooper * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4957718be8SEnji Cooper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 5057718be8SEnji Cooper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5157718be8SEnji Cooper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5257718be8SEnji Cooper * SUCH DAMAGE. 5357718be8SEnji Cooper * 5457718be8SEnji Cooper */ 5557718be8SEnji Cooper 5657718be8SEnji Cooper #include <sys/cdefs.h> 5757718be8SEnji Cooper __COPYRIGHT("@(#) Copyright (c) 2011\ 5857718be8SEnji Cooper The NetBSD Foundation, inc. All rights reserved."); 5957718be8SEnji Cooper __RCSID("$NetBSD: t_wcstod.c,v 1.3 2011/10/01 17:56:11 christos Exp $"); 6057718be8SEnji Cooper 6157718be8SEnji Cooper #include <errno.h> 6257718be8SEnji Cooper #include <math.h> 6357718be8SEnji Cooper #include <stdlib.h> 6457718be8SEnji Cooper #include <string.h> 6557718be8SEnji Cooper #include <wchar.h> 6657718be8SEnji Cooper 6757718be8SEnji Cooper #include <atf-c.h> 6857718be8SEnji Cooper 6957718be8SEnji Cooper #define ALT_HUGE_VAL -1 7057718be8SEnji Cooper #define ALT_MINUS_HUGE_VAL -2 7157718be8SEnji Cooper #define ALT_NAN -3 7257718be8SEnji Cooper 7357718be8SEnji Cooper #if !defined(__vax__) 7457718be8SEnji Cooper static struct test { 7557718be8SEnji Cooper const wchar_t *wcs; 7657718be8SEnji Cooper size_t len; 7757718be8SEnji Cooper double val; 7857718be8SEnji Cooper int err; 7957718be8SEnji Cooper } tests[] = { 8057718be8SEnji Cooper { L"IN", 0, 0, 0 }, 8157718be8SEnji Cooper { L"+IN", 0, 0, 0 }, 8257718be8SEnji Cooper { L"-IN", 0, 0, 0 }, 8357718be8SEnji Cooper { L"INX", 0, 0, 0 }, 8457718be8SEnji Cooper { L"+INX", 0, 0, 0 }, 8557718be8SEnji Cooper { L"-INX", 0, 0, 0 }, 8657718be8SEnji Cooper { L"INF", 3, ALT_HUGE_VAL, 0 }, 8757718be8SEnji Cooper { L"+INF", 4, ALT_HUGE_VAL, 0 }, 8857718be8SEnji Cooper { L"-INF", 4, ALT_MINUS_HUGE_VAL, 0 }, 8957718be8SEnji Cooper { L"INFX", 3, ALT_HUGE_VAL, 0 }, 9057718be8SEnji Cooper { L"+INFX", 4, ALT_HUGE_VAL, 0 }, 9157718be8SEnji Cooper { L"-INFX", 4, ALT_MINUS_HUGE_VAL, 0 }, 9257718be8SEnji Cooper { L" IN", 0, 0, 0 }, 9357718be8SEnji Cooper { L" +IN", 0, 0, 0 }, 9457718be8SEnji Cooper { L" -IN", 0, 0, 0 }, 9557718be8SEnji Cooper { L" INX", 0, 0, 0 }, 9657718be8SEnji Cooper { L" +INX", 0, 0, 0 }, 9757718be8SEnji Cooper { L" -INX", 0, 0, 0 }, 9857718be8SEnji Cooper { L"+ INF", 0, 0, 0 }, 9957718be8SEnji Cooper { L"- INF", 0, 0, 0 }, 10057718be8SEnji Cooper { L" INF", 8, ALT_HUGE_VAL, 0 }, 10157718be8SEnji Cooper { L" +INF", 9, ALT_HUGE_VAL, 0 }, 10257718be8SEnji Cooper { L" -INF", 9, ALT_MINUS_HUGE_VAL, 0 }, 10357718be8SEnji Cooper { L" INFX", 8, ALT_HUGE_VAL, 0 }, 10457718be8SEnji Cooper { L" +INFX", 9, ALT_HUGE_VAL, 0 }, 10557718be8SEnji Cooper { L" -INFX", 9, ALT_MINUS_HUGE_VAL, 0 }, 10657718be8SEnji Cooper { L" INFINIT", 8, ALT_HUGE_VAL, 0 }, 10757718be8SEnji Cooper { L" +INFINIT", 9, ALT_HUGE_VAL, 0 }, 10857718be8SEnji Cooper { L" -INFINIT", 9, ALT_MINUS_HUGE_VAL, 0 }, 10957718be8SEnji Cooper { L" INFINITY", 13, ALT_HUGE_VAL, 0 }, 11057718be8SEnji Cooper { L" +INFINITY", 14, ALT_HUGE_VAL, 0 }, 11157718be8SEnji Cooper { L" -INFINITY", 14, ALT_MINUS_HUGE_VAL, 0 }, 11257718be8SEnji Cooper { L" INFINITYX", 13, ALT_HUGE_VAL, 0 }, 11357718be8SEnji Cooper { L" +INFINITYX", 14, ALT_HUGE_VAL, 0 }, 11457718be8SEnji Cooper { L" -INFINITYX", 14, ALT_MINUS_HUGE_VAL, 0 }, 11557718be8SEnji Cooper 11657718be8SEnji Cooper /* NAN */ 11757718be8SEnji Cooper { L"NA", 0, 0, 0 }, 11857718be8SEnji Cooper { L"+NA", 0, 0, 0 }, 11957718be8SEnji Cooper { L"-NA", 0, 0, 0 }, 12057718be8SEnji Cooper { L"NAX", 0, 0, 0 }, 12157718be8SEnji Cooper { L"+NAX", 0, 0, 0 }, 12257718be8SEnji Cooper { L"-NAX", 0, 0, 0 }, 12357718be8SEnji Cooper { L"NAN", 3, ALT_NAN, 0 }, 12457718be8SEnji Cooper { L"+NAN", 4, ALT_NAN, 0 }, 12557718be8SEnji Cooper { L"-NAN", 4, ALT_NAN, 0 }, 12657718be8SEnji Cooper { L"NANX", 3, ALT_NAN, 0 }, 12757718be8SEnji Cooper { L"+NANX", 4, ALT_NAN, 0 }, 12857718be8SEnji Cooper { L"-NANX", 4, ALT_NAN, 0 }, 12957718be8SEnji Cooper { L" NA", 0, 0, 0 }, 13057718be8SEnji Cooper { L" +NA", 0, 0, 0 }, 13157718be8SEnji Cooper { L" -NA", 0, 0, 0 }, 13257718be8SEnji Cooper { L" NAX", 0, 0, 0 }, 13357718be8SEnji Cooper { L" +NAX", 0, 0, 0 }, 13457718be8SEnji Cooper { L" -NAX", 0, 0, 0 }, 13557718be8SEnji Cooper { L"+ NAN", 0, 0, 0 }, 13657718be8SEnji Cooper { L"- NAN", 0, 0, 0 }, 13757718be8SEnji Cooper { L" NAN", 8, ALT_NAN, 0 }, 13857718be8SEnji Cooper { L" +NAN", 9, ALT_NAN, 0 }, 13957718be8SEnji Cooper { L" -NAN", 9, ALT_NAN, 0 }, 14057718be8SEnji Cooper { L" NANX", 8, ALT_NAN, 0 }, 14157718be8SEnji Cooper { L" +NANX", 9, ALT_NAN, 0 }, 14257718be8SEnji Cooper { L" -NANX", 9, ALT_NAN, 0 }, 14357718be8SEnji Cooper 14457718be8SEnji Cooper { L"0", 1, 0, 0 }, 14557718be8SEnji Cooper { L"+0", 2, 0, 0 }, 14657718be8SEnji Cooper { L"-0", 2, 0, 0 }, 14757718be8SEnji Cooper { L" 0", 11, 0, 0 }, 14857718be8SEnji Cooper { L" +0", 12, 0, 0 }, 14957718be8SEnji Cooper { L" -0", 12, 0, 0 }, 15057718be8SEnji Cooper { L"+ 0", 0, 0, 0 }, 15157718be8SEnji Cooper { L"- 0", 0, 0, 0 }, 15257718be8SEnji Cooper 15357718be8SEnji Cooper { L".", 0, 0, 0 }, 15457718be8SEnji Cooper { L".0", 2, 0, 0 }, 15557718be8SEnji Cooper { L".00", 3, 0, 0 }, 15657718be8SEnji Cooper { L".000", 4, 0, 0 }, 15757718be8SEnji Cooper 15857718be8SEnji Cooper { L"0.", 2, 0, 0 }, 15957718be8SEnji Cooper { L"+0.", 3, 0, 0 }, 16057718be8SEnji Cooper { L"-0.", 3, 0, 0 }, 16157718be8SEnji Cooper { L" 0.", 12, 0, 0 }, 16257718be8SEnji Cooper { L" +0.", 13, 0, 0 }, 16357718be8SEnji Cooper { L" -0.", 13, 0, 0 }, 16457718be8SEnji Cooper 16557718be8SEnji Cooper { L"0.0", 3, 0, 0 }, 16657718be8SEnji Cooper { L"+0.0", 4, 0, 0 }, 16757718be8SEnji Cooper { L"-0.0", 4, 0, 0 }, 16857718be8SEnji Cooper { L" 0.0", 13, 0, 0 }, 16957718be8SEnji Cooper { L" +0.0", 14, 0, 0 }, 17057718be8SEnji Cooper { L" -0.0", 14, 0, 0 }, 17157718be8SEnji Cooper 17257718be8SEnji Cooper { L"000", 3, 0, 0 }, 17357718be8SEnji Cooper { L"+000", 4, 0, 0 }, 17457718be8SEnji Cooper { L"-000", 4, 0, 0 }, 17557718be8SEnji Cooper { L" 000", 13, 0, 0 }, 17657718be8SEnji Cooper { L" +000", 14, 0, 0 }, 17757718be8SEnji Cooper { L" -000", 14, 0, 0 }, 17857718be8SEnji Cooper 17957718be8SEnji Cooper { L"000.", 4, 0, 0 }, 18057718be8SEnji Cooper { L"+000.", 5, 0, 0 }, 18157718be8SEnji Cooper { L"-000.", 5, 0, 0 }, 18257718be8SEnji Cooper { L" 000.", 14, 0, 0 }, 18357718be8SEnji Cooper { L" +000.", 15, 0, 0 }, 18457718be8SEnji Cooper { L" -000.", 15, 0, 0 }, 18557718be8SEnji Cooper 18657718be8SEnji Cooper { L"000.0", 5, 0, 0 }, 18757718be8SEnji Cooper { L"+000.0", 6, 0, 0 }, 18857718be8SEnji Cooper { L"-000.0", 6, 0, 0 }, 18957718be8SEnji Cooper { L" 000.0", 15, 0, 0 }, 19057718be8SEnji Cooper { L" +000.0", 16, 0, 0 }, 19157718be8SEnji Cooper { L" -000.0", 16, 0, 0 }, 19257718be8SEnji Cooper 19357718be8SEnji Cooper 19457718be8SEnji Cooper { L"0.0.", 3, 0, 0 }, 19557718be8SEnji Cooper { L"+0.0.", 4, 0, 0 }, 19657718be8SEnji Cooper { L"-0.0.", 4, 0, 0 }, 19757718be8SEnji Cooper { L" 0.0.", 13, 0, 0 }, 19857718be8SEnji Cooper { L" +0.0.", 14, 0, 0 }, 19957718be8SEnji Cooper { L" -0.0.", 14, 0, 0 }, 20057718be8SEnji Cooper 20157718be8SEnji Cooper { L"0.0.0", 3, 0, 0 }, 20257718be8SEnji Cooper { L"+0.0.0", 4, 0, 0 }, 20357718be8SEnji Cooper { L"-0.0.0", 4, 0, 0 }, 20457718be8SEnji Cooper { L" 0.0.0", 13, 0, 0 }, 20557718be8SEnji Cooper { L" +0.0.0", 14, 0, 0 }, 20657718be8SEnji Cooper { L" -0.0.0", 14, 0, 0 }, 20757718be8SEnji Cooper 20857718be8SEnji Cooper /* XXX: FIXME */ 20957718be8SEnji Cooper #if defined(__linux__) 21057718be8SEnji Cooper { L"0X", 2, 0, 0 }, 21157718be8SEnji Cooper { L"+0X", 3, 0, 0 }, 21257718be8SEnji Cooper { L"-0X", 3, 0, 0 }, 21357718be8SEnji Cooper #else 21457718be8SEnji Cooper { L"0X", 1, 0, 0 }, 21557718be8SEnji Cooper { L"+0X", 2, 0, 0 }, 21657718be8SEnji Cooper { L"-0X", 2, 0, 0 }, 21757718be8SEnji Cooper #endif 21857718be8SEnji Cooper 21957718be8SEnji Cooper /* XXX: SunOS 5.8's wcstod(3) doesn't accept hex */ 22057718be8SEnji Cooper #if !defined(__SunOS__) 22157718be8SEnji Cooper #if defined(__linux__) 22257718be8SEnji Cooper { L"0X.", 3, 0, 0 }, 22357718be8SEnji Cooper { L"+0X.", 4, 0, 0 }, 22457718be8SEnji Cooper { L"-0X.", 4, 0, 0 }, 22557718be8SEnji Cooper { L" 0X.", 13, 0, 0 }, 22657718be8SEnji Cooper { L" +0X.", 14, 0, 0 }, 22757718be8SEnji Cooper { L" -0X.", 14, 0, 0 }, 22857718be8SEnji Cooper #else 22957718be8SEnji Cooper { L"0X.", 1, 0, 0 }, 23057718be8SEnji Cooper { L"+0X.", 2, 0, 0 }, 23157718be8SEnji Cooper { L"-0X.", 2, 0, 0 }, 23257718be8SEnji Cooper { L" 0X.", 11, 0, 0 }, 23357718be8SEnji Cooper { L" +0X.", 12, 0, 0 }, 23457718be8SEnji Cooper { L" -0X.", 12, 0, 0 }, 23557718be8SEnji Cooper #endif 23657718be8SEnji Cooper /* XXX: FIXME */ 23757718be8SEnji Cooper #if defined(__NetBSD__) || defined(__linux__) 23857718be8SEnji Cooper { L"0X.0", 4, 0, 0 }, 23957718be8SEnji Cooper { L"+0X.0", 5, 0, 0 }, 24057718be8SEnji Cooper { L"-0X.0", 5, 0, 0 }, 24157718be8SEnji Cooper { L" 0X.0", 14, 0, 0 }, 24257718be8SEnji Cooper { L" +0X.0", 15, 0, 0 }, 24357718be8SEnji Cooper { L" -0X.0", 15, 0, 0 }, 24457718be8SEnji Cooper 24557718be8SEnji Cooper { L"0X.0P", 4, 0, 0 }, 24657718be8SEnji Cooper { L"+0X.0P", 5, 0, 0 }, 24757718be8SEnji Cooper { L"-0X.0P", 5, 0, 0 }, 24857718be8SEnji Cooper { L" 0X.0P", 14, 0, 0 }, 24957718be8SEnji Cooper { L" +0X.0P", 15, 0, 0 }, 25057718be8SEnji Cooper { L" -0X.0P", 15, 0, 0 }, 25157718be8SEnji Cooper #else 25257718be8SEnji Cooper { L"0X.0", 1, 0, 0 }, 25357718be8SEnji Cooper { L"+0X.0", 2, 0, 0 }, 25457718be8SEnji Cooper { L"-0X.0", 2, 0, 0 }, 25557718be8SEnji Cooper { L" 0X.0", 11, 0, 0 }, 25657718be8SEnji Cooper { L" +0X.0", 12, 0, 0 }, 25757718be8SEnji Cooper { L" -0X.0", 12, 0, 0 }, 25857718be8SEnji Cooper 25957718be8SEnji Cooper { L"0X.0P", 1, 0, 0 }, 26057718be8SEnji Cooper { L"+0X.0P", 2, 0, 0 }, 26157718be8SEnji Cooper { L"-0X.0P", 2, 0, 0 }, 26257718be8SEnji Cooper { L" 0X.0P", 11, 0, 0 }, 26357718be8SEnji Cooper { L" +0X.0P", 12, 0, 0 }, 26457718be8SEnji Cooper { L" -0X.0P", 12, 0, 0 }, 26557718be8SEnji Cooper #endif 26657718be8SEnji Cooper 26757718be8SEnji Cooper { L"0X0", 3, 0, 0 }, 26857718be8SEnji Cooper { L"+0X0", 4, 0, 0 }, 26957718be8SEnji Cooper { L"-0X0", 4, 0, 0 }, 27057718be8SEnji Cooper { L" 0X0", 13, 0, 0 }, 27157718be8SEnji Cooper { L" +0X0", 14, 0, 0 }, 27257718be8SEnji Cooper { L" -0X0", 14, 0, 0 }, 27357718be8SEnji Cooper 27457718be8SEnji Cooper { L"00X0.0", 2, 0, 0 }, 27557718be8SEnji Cooper { L"+00X0.0", 3, 0, 0 }, 27657718be8SEnji Cooper { L"-00X0.0", 3, 0, 0 }, 27757718be8SEnji Cooper { L" 00X0.0", 12, 0, 0 }, 27857718be8SEnji Cooper { L" +00X0.0", 13, 0, 0 }, 27957718be8SEnji Cooper { L" -00X0.0", 13, 0, 0 }, 28057718be8SEnji Cooper 28157718be8SEnji Cooper { L"0X0P", 3, 0, 0 }, 28257718be8SEnji Cooper { L"+0X0P", 4, 0, 0 }, 28357718be8SEnji Cooper { L"-0X0P", 4, 0, 0 }, 28457718be8SEnji Cooper { L" 0X0P", 13, 0, 0 }, 28557718be8SEnji Cooper { L" +0X0P", 14, 0, 0 }, 28657718be8SEnji Cooper { L" -0X0P", 14, 0, 0 }, 28757718be8SEnji Cooper 28857718be8SEnji Cooper { L"0X0.", 4, 0, 0 }, 28957718be8SEnji Cooper { L"+0X0.", 5, 0, 0 }, 29057718be8SEnji Cooper { L"-0X0.", 5, 0, 0 }, 29157718be8SEnji Cooper { L" 0X0.", 14, 0, 0 }, 29257718be8SEnji Cooper { L" +0X0.", 15, 0, 0 }, 29357718be8SEnji Cooper { L" -0X0.", 15, 0, 0 }, 29457718be8SEnji Cooper 29557718be8SEnji Cooper { L"0X0.0", 5, 0, 0 }, 29657718be8SEnji Cooper { L"+0X0.0", 6, 0, 0 }, 29757718be8SEnji Cooper { L"-0X0.0", 6, 0, 0 }, 29857718be8SEnji Cooper { L" 0X0.0", 15, 0, 0 }, 29957718be8SEnji Cooper { L" +0X0.0", 16, 0, 0 }, 30057718be8SEnji Cooper { L" -0X0.0", 16, 0, 0 }, 30157718be8SEnji Cooper 30257718be8SEnji Cooper { L"0X0.P", 4, 0, 0 }, 30357718be8SEnji Cooper { L"+0X0.P", 5, 0, 0 }, 30457718be8SEnji Cooper { L"-0X0.P", 5, 0, 0 }, 30557718be8SEnji Cooper { L" 0X0.P", 14, 0, 0 }, 30657718be8SEnji Cooper { L" +0X0.P", 15, 0, 0 }, 30757718be8SEnji Cooper { L" -0X0.P", 15, 0, 0 }, 30857718be8SEnji Cooper 30957718be8SEnji Cooper { L"0X0.P", 4, 0, 0 }, 31057718be8SEnji Cooper { L"+0X0.P", 5, 0, 0 }, 31157718be8SEnji Cooper { L"-0X0.P", 5, 0, 0 }, 31257718be8SEnji Cooper { L" 0X0.P", 14, 0, 0 }, 31357718be8SEnji Cooper { L" +0X0.P", 15, 0, 0 }, 31457718be8SEnji Cooper { L" -0X0.P", 15, 0, 0 }, 31557718be8SEnji Cooper 31657718be8SEnji Cooper #endif 31757718be8SEnji Cooper { L"0.12345678", 10, 0.12345678, 0 }, 31857718be8SEnji Cooper { L"+0.12345678", 11, +0.12345678, 0 }, 31957718be8SEnji Cooper { L"-0.12345678", 11, -0.12345678, 0 }, 32057718be8SEnji Cooper { L" 0.12345678", 15, 0.12345678, 0 }, 32157718be8SEnji Cooper { L" +0.12345678", 16, +0.12345678, 0 }, 32257718be8SEnji Cooper { L" -0.12345678", 16, -0.12345678, 0 }, 32357718be8SEnji Cooper 32457718be8SEnji Cooper { L"0.12345E67", 10, 0.12345E67, 0 }, 32557718be8SEnji Cooper { L"+0.12345E67", 11, +0.12345E67, 0 }, 32657718be8SEnji Cooper { L"-0.12345E67", 11, -0.12345E67, 0 }, 32757718be8SEnji Cooper { L" 0.12345E67", 15, 0.12345E67, 0 }, 32857718be8SEnji Cooper { L" +0.12345E67", 16, +0.12345E67, 0 }, 32957718be8SEnji Cooper { L" -0.12345E67", 16, -0.12345E67, 0 }, 33057718be8SEnji Cooper 33157718be8SEnji Cooper { L"0.12345E+6", 10, 0.12345E+6, 0 }, 33257718be8SEnji Cooper { L"+0.12345E+6", 11, +0.12345E+6, 0 }, 33357718be8SEnji Cooper { L"-0.12345E+6", 11, -0.12345E+6, 0 }, 33457718be8SEnji Cooper { L" 0.12345E+6", 15, 0.12345E+6, 0 }, 33557718be8SEnji Cooper { L" +0.12345E+6", 16, +0.12345E+6, 0 }, 33657718be8SEnji Cooper { L" -0.12345E+6", 16, -0.12345E+6, 0 }, 33757718be8SEnji Cooper 33857718be8SEnji Cooper { L"0.98765E-4", 10, 0.98765E-4, 0 }, 33957718be8SEnji Cooper { L"+0.98765E-4", 11, +0.98765E-4, 0 }, 34057718be8SEnji Cooper { L"-0.98765E-4", 11, -0.98765E-4, 0 }, 34157718be8SEnji Cooper { L" 0.98765E-4", 15, 0.98765E-4, 0 }, 34257718be8SEnji Cooper { L" +0.98765E-4", 16, +0.98765E-4, 0 }, 34357718be8SEnji Cooper { L" -0.98765E-4", 16, -0.98765E-4, 0 }, 34457718be8SEnji Cooper 34557718be8SEnji Cooper { L"12345678E9", 10, 12345678E9, 0 }, 34657718be8SEnji Cooper { L"+12345678E9", 11, +12345678E9, 0 }, 34757718be8SEnji Cooper { L"-12345678E9", 11, -12345678E9, 0 }, 34857718be8SEnji Cooper { L" 12345678E9", 15, 12345678E9, 0 }, 34957718be8SEnji Cooper { L" +12345678E9", 16, +12345678E9, 0 }, 35057718be8SEnji Cooper { L" -12345678E9", 16, -12345678E9, 0 }, 35157718be8SEnji Cooper 35257718be8SEnji Cooper /* XXX: SunOS 5.8's wcstod(3) doesn't accept hex */ 35357718be8SEnji Cooper #if !defined(__SunOS__) 35457718be8SEnji Cooper { L"0x1P+2", 6, 4, 0 }, 35557718be8SEnji Cooper { L"+0x1P+2", 7, +4, 0 }, 35657718be8SEnji Cooper { L"-0x1P+2", 7, -4, 0 }, 35757718be8SEnji Cooper { L" 0x1P+2", 11, 4, 0 }, 35857718be8SEnji Cooper { L" +0x1P+2", 12, +4, 0 }, 35957718be8SEnji Cooper { L" -0x1P+2", 12, -4, 0 }, 36057718be8SEnji Cooper 36157718be8SEnji Cooper { L"0x1.0P+2", 8, 4, 0 }, 36257718be8SEnji Cooper { L"+0x1.0P+2", 9, +4, 0 }, 36357718be8SEnji Cooper { L"-0x1.0P+2", 9, -4, 0 }, 36457718be8SEnji Cooper { L" 0x1.0P+2", 13, 4, 0 }, 36557718be8SEnji Cooper { L" +0x1.0P+2", 14, +4, 0 }, 36657718be8SEnji Cooper { L" -0x1.0P+2", 14, -4, 0 }, 36757718be8SEnji Cooper 36857718be8SEnji Cooper { L"0x1P-2", 6, 0.25, 0 }, 36957718be8SEnji Cooper { L"+0x1P-2", 7, +0.25, 0 }, 37057718be8SEnji Cooper { L"-0x1P-2", 7, -0.25, 0 }, 37157718be8SEnji Cooper { L" 0x1P-2", 11, 0.25, 0 }, 37257718be8SEnji Cooper { L" +0x1P-2", 12, +0.25, 0 }, 37357718be8SEnji Cooper { L" -0x1P-2", 12, -0.25, 0 }, 37457718be8SEnji Cooper 37557718be8SEnji Cooper { L"0x1.0P-2", 8, 0.25, 0 }, 37657718be8SEnji Cooper { L"+0x1.0P-2", 9, +0.25, 0 }, 37757718be8SEnji Cooper { L"-0x1.0P-2", 9, -0.25, 0 }, 37857718be8SEnji Cooper { L" 0x1.0P-2", 13, 0.25, 0 }, 37957718be8SEnji Cooper { L" +0x1.0P-2", 14, +0.25, 0 }, 38057718be8SEnji Cooper { L" -0x1.0P-2", 14, -0.25, 0 }, 38157718be8SEnji Cooper #endif 38257718be8SEnji Cooper 38357718be8SEnji Cooper { NULL, 0, 0, 0 } 38457718be8SEnji Cooper }; 38557718be8SEnji Cooper #endif /* !defined(__vax__) */ 38657718be8SEnji Cooper 38757718be8SEnji Cooper ATF_TC(wcstod); 38857718be8SEnji Cooper ATF_TC_HEAD(wcstod, tc) 38957718be8SEnji Cooper { 39057718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "Checks wcstod(3)"); 39157718be8SEnji Cooper } 39257718be8SEnji Cooper ATF_TC_BODY(wcstod, tc) 39357718be8SEnji Cooper { 39457718be8SEnji Cooper #if defined(__vax__) 39557718be8SEnji Cooper #else 39657718be8SEnji Cooper struct test *t; 39757718be8SEnji Cooper #endif 39857718be8SEnji Cooper 39957718be8SEnji Cooper #if !defined(__vax__) 40057718be8SEnji Cooper for (t = &tests[0]; t->wcs != NULL; ++t) { 40157718be8SEnji Cooper double d; 40257718be8SEnji Cooper size_t n; 40357718be8SEnji Cooper wchar_t *tail; 40457718be8SEnji Cooper char *buf; 40557718be8SEnji Cooper 40657718be8SEnji Cooper /* we do not supported %ls nor %S yet. */ 40757718be8SEnji Cooper n = wcstombs(NULL, t->wcs, 0); 40857718be8SEnji Cooper ATF_REQUIRE((buf = (void *)malloc(n + 1)) != NULL); 40957718be8SEnji Cooper (void)wcstombs(buf, t->wcs, n + 1); 41057718be8SEnji Cooper (void)printf("Checking wcstod(\"%s\", &tail):\n", buf); 41157718be8SEnji Cooper free(buf); 41257718be8SEnji Cooper 41357718be8SEnji Cooper errno = 0; 41457718be8SEnji Cooper d = wcstod(t->wcs, &tail); 41557718be8SEnji Cooper (void)printf("[errno]\n"); 41657718be8SEnji Cooper (void)printf(" got : %s\n", strerror(errno)); 41757718be8SEnji Cooper (void)printf(" expected: %s\n", strerror(t->err)); 41857718be8SEnji Cooper ATF_REQUIRE_EQ(errno, t->err); 41957718be8SEnji Cooper 42057718be8SEnji Cooper n = (size_t)(tail - t->wcs); 42157718be8SEnji Cooper (void)printf("[endptr - nptr]\n"); 42257718be8SEnji Cooper (void)printf(" got : %zd\n", n); 42357718be8SEnji Cooper (void)printf(" expected: %zd\n", t->len); 42457718be8SEnji Cooper ATF_REQUIRE_EQ(n, t->len); 42557718be8SEnji Cooper 42657718be8SEnji Cooper (void)printf("[result]\n"); 42757718be8SEnji Cooper (void)printf(" real: %F\n", d); 42857718be8SEnji Cooper if (t->val == ALT_HUGE_VAL) { 42957718be8SEnji Cooper (void)printf(" expected: %F\n", HUGE_VAL); 43057718be8SEnji Cooper ATF_REQUIRE(isinf(d)); 43157718be8SEnji Cooper ATF_REQUIRE_EQ(d, HUGE_VAL); 43257718be8SEnji Cooper } else if (t->val == ALT_MINUS_HUGE_VAL) { 43357718be8SEnji Cooper (void)printf(" expected: %F\n", -HUGE_VAL); 43457718be8SEnji Cooper ATF_REQUIRE(isinf(d)); 43557718be8SEnji Cooper ATF_REQUIRE_EQ(d, -HUGE_VAL); 43657718be8SEnji Cooper } else if (t->val == ALT_NAN) { 43757718be8SEnji Cooper (void)printf(" expected: %F\n", NAN); 43857718be8SEnji Cooper ATF_REQUIRE(isnan(d)); 43957718be8SEnji Cooper } else { 44057718be8SEnji Cooper (void)printf(" expected: %F\n", t->val); 44157718be8SEnji Cooper ATF_REQUIRE_EQ(d, t->val); 44257718be8SEnji Cooper } 44357718be8SEnji Cooper 44457718be8SEnji Cooper (void)printf("\n"); 44557718be8SEnji Cooper } 44657718be8SEnji Cooper #else /* !defined(__vax__) */ 44757718be8SEnji Cooper atf_tc_skip("Test is unavailable on vax."); 44857718be8SEnji Cooper #endif /* !defined(__vax__) */ 44957718be8SEnji Cooper } 45057718be8SEnji Cooper 45157718be8SEnji Cooper ATF_TP_ADD_TCS(tp) 45257718be8SEnji Cooper { 45357718be8SEnji Cooper ATF_TP_ADD_TC(tp, wcstod); 45457718be8SEnji Cooper 45557718be8SEnji Cooper return atf_no_error(); 45657718be8SEnji Cooper } 457