xref: /aosp_15_r20/external/arm-optimized-routines/string/test/stringtest.h (revision 412f47f9e737e10ed5cc46ec6a8d7fa2264f8a14)
1*412f47f9SXin Li /*
2*412f47f9SXin Li  * Common string test code.
3*412f47f9SXin Li  *
4*412f47f9SXin Li  * Copyright (c) 2020, Arm Limited.
5*412f47f9SXin Li  * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
6*412f47f9SXin Li  */
7*412f47f9SXin Li 
8*412f47f9SXin Li #include <ctype.h>
9*412f47f9SXin Li #include <stdio.h>
10*412f47f9SXin Li 
11*412f47f9SXin Li /* Accounting errors for a test case.  */
12*412f47f9SXin Li static int err_count;
13*412f47f9SXin Li #define ERR_LIMIT 10
14*412f47f9SXin Li #define ERR(...) (err_count++, printf (__VA_ARGS__))
15*412f47f9SXin Li 
16*412f47f9SXin Li static inline void
quotechar(unsigned char c)17*412f47f9SXin Li quotechar (unsigned char c)
18*412f47f9SXin Li {
19*412f47f9SXin Li   if (isprint (c))
20*412f47f9SXin Li     putchar (c);
21*412f47f9SXin Li   else
22*412f47f9SXin Li     printf ("\\x%02x", c);
23*412f47f9SXin Li }
24*412f47f9SXin Li 
25*412f47f9SXin Li /* quoted print around at or the entire string if at < 0.  */
26*412f47f9SXin Li static void
quoteat(const char * prefix,const void * p,int len,int at)27*412f47f9SXin Li quoteat (const char *prefix, const void *p, int len, int at)
28*412f47f9SXin Li {
29*412f47f9SXin Li   static const int CTXLEN = 15;
30*412f47f9SXin Li   int i;
31*412f47f9SXin Li   const char *pre = "\"";
32*412f47f9SXin Li   const char *post = "\"";
33*412f47f9SXin Li   const char *s = p;
34*412f47f9SXin Li   if (at > CTXLEN)
35*412f47f9SXin Li     {
36*412f47f9SXin Li       s += at - CTXLEN;
37*412f47f9SXin Li       len -= at - CTXLEN;
38*412f47f9SXin Li       pre = "...\"";
39*412f47f9SXin Li     }
40*412f47f9SXin Li   if (at >= 0 && len > 2 * CTXLEN + 1)
41*412f47f9SXin Li     {
42*412f47f9SXin Li       len = 2 * CTXLEN + 1;
43*412f47f9SXin Li       post = "\"...";
44*412f47f9SXin Li     }
45*412f47f9SXin Li   printf ("%4s: %s", prefix, pre);
46*412f47f9SXin Li   for (i = 0; i < len; i++)
47*412f47f9SXin Li     quotechar (s[i]);
48*412f47f9SXin Li   printf ("%s\n", post);
49*412f47f9SXin Li }
50*412f47f9SXin Li 
51*412f47f9SXin Li static inline void
quote(const char * prefix,const void * p,int len)52*412f47f9SXin Li quote (const char *prefix, const void *p, int len)
53*412f47f9SXin Li {
54*412f47f9SXin Li   quoteat (prefix, p, len, -1);
55*412f47f9SXin Li }
56