X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-sprintf-posix.h;h=f178803f61bdaf5da71a110200dba5e454295cb5;hb=2e7980e7a83a290bfaf0638bd95a9cbfeec0f67d;hp=3df6d128b08d1be2647634e94f6ce85b134d057f;hpb=e10764b1e130842f06b574ee7fb96c8f018bc60b;p=gnulib.git diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h index 3df6d128b..f178803f6 100644 --- a/tests/test-sprintf-posix.h +++ b/tests/test-sprintf-posix.h @@ -49,6 +49,27 @@ strmatch (const char *pattern, const char *string) return 1; } +/* Test whether string[start_index..end_index-1] is a valid textual + representation of NaN. */ +static int +strisnan (const char *string, size_t start_index, size_t end_index, int uppercase) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} + static void test_function (int (*my_sprintf) (char *, const char *, ...)) { @@ -162,7 +183,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%a %d", NaN (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -357,11 +378,11 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = - my_sprintf (result, "%020a %d", NaN (), 33, 44, 55); + my_sprintf (result, "%050a %d", NaN (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see */ - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -426,7 +447,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%La %d", 0.0L / 0.0L, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -622,11 +643,11 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = - my_sprintf (result, "%020La %d", 0.0L / 0.0L, 33, 44, 55); + my_sprintf (result, "%050La %d", 0.0L / 0.0L, 33, 44, 55); /* "0000000nan 33" is not a valid result; see */ - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -786,7 +807,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%f %d", NaN (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -859,9 +880,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = - my_sprintf (result, "%020f %d", NaN (), 33, 44, 55); - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + my_sprintf (result, "%050f %d", NaN (), 33, 44, 55); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1028,7 +1049,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%Lf %d", zero / zero, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1102,9 +1123,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) static long double zero = 0.0L; char result[1000]; int retval = - my_sprintf (result, "%020Lf %d", zero / zero, 33, 44, 55); - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + my_sprintf (result, "%050Lf %d", zero / zero, 33, 44, 55); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1183,7 +1204,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%F %d", NaN (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "NAN", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1278,7 +1299,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%LF %d", zero / zero, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "NAN", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 1) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1477,7 +1498,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%e %d", NaN (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1566,9 +1587,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = - my_sprintf (result, "%020e %d", NaN (), 33, 44, 55); - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + my_sprintf (result, "%050e %d", NaN (), 33, 44, 55); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1736,7 +1757,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%Le %d", zero / zero, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1818,9 +1839,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) static long double zero = 0.0L; char result[1000]; int retval = - my_sprintf (result, "%020Le %d", zero / zero, 33, 44, 55); - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + my_sprintf (result, "%050Le %d", zero / zero, 33, 44, 55); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -1998,7 +2019,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%g %d", NaN (), 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -2080,9 +2101,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = - my_sprintf (result, "%020g %d", NaN (), 33, 44, 55); - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + my_sprintf (result, "%050g %d", NaN (), 33, 44, 55); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -2250,7 +2271,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) int retval = my_sprintf (result, "%Lg %d", zero / zero, 33, 44, 55); ASSERT (strlen (result) >= 3 + 3 - && memcmp (result, "nan", 3) == 0 + && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); } @@ -2332,9 +2353,9 @@ test_function (int (*my_sprintf) (char *, const char *, ...)) static long double zero = 0.0L; char result[1000]; int retval = - my_sprintf (result, "%020Lg %d", zero / zero, 33, 44, 55); - ASSERT (strlen (result) == 20 + 3 - && memcmp (result + strspn (result, " "), "nan", 3) == 0 + my_sprintf (result, "%050Lg %d", zero / zero, 33, 44, 55); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); }