doc: use ASCII in .texi files where UTF-8 isn't needed
[gnulib.git] / tests / test-inttostr.c
index 123aca4..ea5b295 100644 (file)
@@ -1,5 +1,5 @@
 /* Test inttostr functions, and incidentally, INT_BUFSIZE_BOUND
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010-2014 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <assert.h>
+
+#include "macros.h"
 
 #define STREQ(a, b) (strcmp (a, b) == 0)
 #define FMT(T) (TYPE_SIGNED (T) ? "%jd" : "%ju")
 #define CAST_VAL(T,V) (TYPE_SIGNED (T) ? (intmax_t) (V) : (uintmax_t) (V))
 #define V_min(T) (CAST_VAL (T, TYPE_MINIMUM (T)))
 #define V_max(T) (CAST_VAL (T, TYPE_MAXIMUM (T)))
-#define IS_TIGHT(T) (signed_type_or_expr__(T) == TYPE_SIGNED (T))
+#define IS_TIGHT(T) (_GL_SIGNED_TYPE_OR_EXPR (T) == TYPE_SIGNED (T))
 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
 
 /* Verify that an inttostr function works as advertised.
       char ref[100];                                                    \
       char *buf = malloc (INT_BUFSIZE_BOUND (T));                       \
       char const *p;                                                    \
-      assert (buf);                                                     \
+      ASSERT (buf);                                                     \
       *buf = '\0';                                                      \
-      assert (snprintf (ref, sizeof ref, FMT (T), V_min (T)) < sizeof ref); \
-      assert (STREQ ((p = Fn (TYPE_MINIMUM (T), buf)), ref));           \
+      ASSERT (snprintf (ref, sizeof ref, FMT (T), V_min (T)) < sizeof ref); \
+      ASSERT (STREQ ((p = Fn (TYPE_MINIMUM (T), buf)), ref));           \
       /* Ensure that INT_BUFSIZE_BOUND is tight for signed types.  */   \
-      assert (! TYPE_SIGNED (T) || (p == buf && *p == '-'));            \
-      assert (snprintf (ref, sizeof ref, FMT (T), V_max (T)) < sizeof ref); \
-      assert (STREQ ((p = Fn (TYPE_MAXIMUM (T), buf)), ref));           \
+      ASSERT (! TYPE_SIGNED (T) || (p == buf && *p == '-'));            \
+      ASSERT (snprintf (ref, sizeof ref, FMT (T), V_max (T)) < sizeof ref); \
+      ASSERT (STREQ ((p = Fn (TYPE_MAXIMUM (T), buf)), ref));           \
       /* For unsigned types, the bound is not always tight.  */         \
-      assert (! IS_TIGHT (T) || TYPE_SIGNED (T)                         \
+      ASSERT (! IS_TIGHT (T) || TYPE_SIGNED (T)                         \
               || (p == buf && ISDIGIT (*p)));                           \
       free (buf);                                                       \
     }                                                                   \
 int
 main (void)
 {
-  CK (int,          inttostr);
-  CK (unsigned int, uinttostr);
-  CK (off_t,        offtostr);
-  CK (uintmax_t,    umaxtostr);
-  CK (intmax_t,     imaxtostr);
-  return 0;
+  size_t b_size = 2;
+  char *b = malloc (b_size);
+  ASSERT (b);
+
+  /* Ideally we would rely on the snprintf-posix module, in which case
+     this guard would not be required, but due to limitations in gnulib's
+     implementation (see modules/snprintf-posix), we cannot.  */
+  if (snprintf (b, b_size, "%ju", (uintmax_t) 3) == 1
+      && b[0] == '3' && b[1] == '\0')
+    {
+      CK (int,          inttostr);
+      CK (unsigned int, uinttostr);
+      CK (off_t,        offtostr);
+      CK (uintmax_t,    umaxtostr);
+      CK (intmax_t,     imaxtostr);
+      return 0;
+    }
+
+  /* snprintf doesn't accept %ju; skip this test.  */
+  return 77;
 }