X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-snprintf-posix.h;h=47ad86c4be85472be432f900af6c4695acebfd89;hb=ee9cc09504e83403c347b501d8fb0f2589ea1037;hp=4d69267a6273d3a87f89d4fb43f1cdf4dbf63dfa;hpb=06945b7c073c0872ec2049c0e0b94f789bf8d77e;p=gnulib.git diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h index 4d69267a6..47ad86c4b 100644 --- a/tests/test-snprintf-posix.h +++ b/tests/test-snprintf-posix.h @@ -16,7 +16,7 @@ /* Written by Bruno Haible , 2007. */ -#include +#include "nan.h" /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ static int @@ -197,7 +197,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%a %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%a %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -394,7 +394,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050a %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050a %d", NaNd (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see */ ASSERT (strlen (result) == 50 + 3 @@ -461,7 +461,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%La %d", 0.0L / 0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%La %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -746,7 +746,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050La %d", 0.0L / 0.0L, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050La %d", NaNl (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see */ ASSERT (strlen (result) == 50 + 3 @@ -908,7 +908,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%f %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%f %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -989,7 +989,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050f %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050f %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1004,6 +1004,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2f %d", 999.951, 33, 44, 55); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2f %d", 999.996, 33, 44, 55); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + } + { /* A positive number. */ char result[100]; int retval = @@ -1153,10 +1169,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Lf %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Lf %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1322,10 +1337,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* FLAG_ZERO with NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050Lf %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050Lf %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1340,6 +1354,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2Lf %d", 999.951L, 33, 44, 55); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2Lf %d", 999.996L, 33, 44, 55); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + } + /* Test the support of the %F format directive. */ { /* A positive number. */ @@ -1404,7 +1434,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%F %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%F %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1436,6 +1466,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2F %d", 999.951, 33, 44, 55); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2F %d", 999.996, 33, 44, 55); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + } + { /* A positive number. */ char result[100]; int retval = @@ -1496,10 +1542,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%LF %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%LF %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1531,6 +1576,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2LF %d", 999.951L, 33, 44, 55); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.2LF %d", 999.996L, 33, 44, 55); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + } + /* Test the support of the %e format directive. */ { /* A positive number. */ @@ -1698,7 +1759,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%e %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%e %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1789,7 +1850,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050e %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050e %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -1805,6 +1866,24 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.4e %d", 999.951, 33, 44, 55); + ASSERT (strcmp (result, "9.9995e+02 33") == 0 + || strcmp (result, "9.9995e+002 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.4e %d", 999.996, 33, 44, 55); + ASSERT (strcmp (result, "1.0000e+03 33") == 0 + || strcmp (result, "1.0000e+003 33") == 0); + ASSERT (retval == strlen (result)); + } + { /* A positive number. */ char result[100]; int retval = @@ -1954,10 +2033,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Le %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Le %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -2125,10 +2203,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* FLAG_ZERO with NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050Le %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050Le %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -2143,6 +2220,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.4Le %d", 999.951L, 33, 44, 55); + ASSERT (strcmp (result, "9.9995e+02 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.4Le %d", 999.996L, 33, 44, 55); + ASSERT (strcmp (result, "1.0000e+03 33") == 0); + ASSERT (retval == strlen (result)); + } + /* Test the support of the %g format directive. */ { /* A positive number. */ @@ -2306,7 +2399,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%g %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%g %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -2390,7 +2483,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050g %d", NAN, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050g %d", NaNd (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -2406,6 +2499,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.5g %d", 999.951, 33, 44, 55); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.5g %d", 999.996, 33, 44, 55); + ASSERT (strcmp (result, "1000 33") == 0); + ASSERT (retval == strlen (result)); + } + { /* A positive number. */ char result[100]; int retval = @@ -2555,10 +2664,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%Lg %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%Lg %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -2726,10 +2834,9 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) } { /* FLAG_ZERO with NaN. */ - static long double zero = 0.0L; char result[100]; int retval = - my_snprintf (result, sizeof (result), "%050Lg %d", zero / zero, 33, 44, 55); + my_snprintf (result, sizeof (result), "%050Lg %d", NaNl (), 33, 44, 55); ASSERT (strlen (result) == 50 + 3 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); @@ -2744,6 +2851,22 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) ASSERT (retval == strlen (result)); } + { /* Precision with no rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.5Lg %d", 999.951L, 33, 44, 55); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + } + + { /* Precision with rounding. */ + char result[100]; + int retval = + my_snprintf (result, sizeof (result), "%.5Lg %d", 999.996L, 33, 44, 55); + ASSERT (strcmp (result, "1000 33") == 0); + ASSERT (retval == strlen (result)); + } + /* Test the support of the %n format directive. */ {