From f038c629a404c49cb8149add55dde286b7ddb079 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Wed, 6 Nov 2013 16:35:21 +0800 Subject: [PATCH] glib/tests/: Avoid GCCisms and fix tests for MSVC Skip the tests on inf/nan strings for the gvariant and strfuncs tests, and skip the hex strings for the strtod tests in strfuncs as they are C99 features that are not yet supported by Visual C++ (even 2013). Use a definition for NAN and INFINITY (that is also used in PyGObject) as atof("NaN") and atof("Infinity") simply returns 0.0 (which is not a NAN) in Visual C++ to fix the tests running there. Also adapt to the format of g_ascii_formatd() when dealing with 1e99. https://bugzilla.gnome.org/show_bug.cgi?id=711047 --- glib/tests/gvariant.c | 5 ++++- glib/tests/strfuncs.c | 31 +++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/glib/tests/gvariant.c b/glib/tests/gvariant.c index 01e4600..fbc5cee 100644 --- a/glib/tests/gvariant.c +++ b/glib/tests/gvariant.c @@ -2195,7 +2195,7 @@ static void serialise_tree (TreeInstance *tree, GVariantSerialised *serialised) { - GVariantSerialised empty = { }; + GVariantSerialised empty = {0, }; *serialised = empty; tree_filler (serialised, tree); @@ -3741,6 +3741,8 @@ test_parses (void) g_free (printed); } +#ifndef _MSC_VER + /* inf/nan strings are C99 features which Visual C++ does not support */ /* inf/nan mini test */ { const gchar *tests[] = { "inf", "-inf", "nan" }; @@ -3762,6 +3764,7 @@ test_parses (void) g_variant_unref (value); } } +#endif g_variant_type_info_assert_no_infos (); } diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c index f0ea4a2..52ecf35 100644 --- a/glib/tests/strfuncs.c +++ b/glib/tests/strfuncs.c @@ -32,6 +32,20 @@ #include #include "glib.h" +#if defined (_MSC_VER) && (_MSC_VER <= 1800) +#define isnan(x) _isnan(x) + +#ifndef NAN +static const unsigned long __nan[2] = {0xffffffff, 0x7fffffff}; +#define NAN (*(const float *) __nan) +#endif + +#ifndef INFINITY +#define INFINITY HUGE_VAL +#endif + +#endif + #define GLIB_TEST_STRING "el dorado " #define FOR_ALL_CTYPE(macro) \ @@ -970,24 +984,33 @@ test_strtod (void) check_strtod_string ("5.4", 5.4, TRUE, 3); check_strtod_string ("5.4,5.5", 5.4, TRUE, 3); check_strtod_string ("5,4", 5.0, TRUE, 1); +#ifndef _MSC_VER + /* hex strings for strtod() is a C99 feature which Visual C++ does not support */ check_strtod_string ("0xa.b", 10.6875, TRUE, 5); check_strtod_string ("0xa.bP3", 85.5, TRUE, 7); check_strtod_string ("0xa.bp+3", 85.5, TRUE, 8); check_strtod_string ("0xa.bp-2", 2.671875, TRUE, 8); check_strtod_string ("0xA.BG", 10.6875, TRUE, 5); +#endif /* the following are for #156421 */ - check_strtod_string ("1e1", 1e1, FALSE, 0); + check_strtod_string ("1e1", 1e1, FALSE, 0); +#ifndef _MSC_VER + /* NAN/-nan/INF/-infinity strings for strtod() are C99 features which Visual C++ does not support */ check_strtod_string ("NAN", our_nan, FALSE, 0); check_strtod_string ("-nan", -our_nan, FALSE, 0); check_strtod_string ("INF", our_inf, FALSE, 0); check_strtod_string ("-infinity", -our_inf, FALSE, 0); +#endif check_strtod_string ("-.75,0", -0.75, TRUE, 4); - + +#ifndef _MSC_VER + /* the values of d in the following 2 tests generate a C1064 compiler limit error */ d = 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0; g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL)); d = -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0; g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL)); +#endif d = pow (2.0, -1024.1); g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL)); @@ -1014,7 +1037,11 @@ test_strtod (void) check_strtod_number (0.75, "%5.2f", " 0.75"); check_strtod_number (-0.75, "%0.2f", "-0.75"); check_strtod_number (-0.75, "%5.2f", "-0.75"); +#ifdef _MSC_VER + check_strtod_number (1e99, "%0.e", "1e+099"); +#else check_strtod_number (1e99, "%.0e", "1e+99"); +#endif } static void -- 2.7.4