1 /* Test program for %a printf formats.  */
2 
3 #include <array_length.h>
4 #include <stdio.h>
5 #include <string.h>
6 
7 #ifndef WIDE
8 # define STR_LEN strlen
9 # define STR_CMP strcmp
10 # define SPRINT snprintf
11 # define CHAR_T char
12 # define PRINT printf
13 # define L_(Str) Str
14 # define S "%s"
15 #else
16 # define STR_LEN wcslen
17 # define SPRINT swprintf
18 # define STR_CMP wcscmp
19 # define CHAR_T wchar_t
20 # define PRINT wprintf
21 # define L_(Str) L##Str
22 # define S "%ls"
23 #endif
24 
25 struct testcase
26 {
27   double value;
28   const CHAR_T *fmt;
29   const CHAR_T *expect;
30 };
31 
32 static const struct testcase testcases[] =
33   {
34     { 0x0.0030p+0, L_("%a"),		L_("0x1.8p-11") },
35     { 0x0.0040p+0, L_("%a"),		L_("0x1p-10") },
36     { 0x0.0030p+0, L_("%040a"),		L_("0x00000000000000000000000000000001.8p-11") },
37     { 0x0.0040p+0, L_("%040a"),		L_("0x0000000000000000000000000000000001p-10") },
38     { 0x0.0040p+0, L_("%40a"),		L_("                                 0x1p-10") },
39     { 0x0.0040p+0, L_("%#40a"),		L_("                                0x1.p-10") },
40     { 0x0.0040p+0, L_("%-40a"),		L_("0x1p-10                                 ") },
41     { 0x0.0040p+0, L_("%#-40a"),	L_("0x1.p-10                                ") },
42     { 0x0.0030p+0, L_("%040e"),		L_("00000000000000000000000000007.324219e-04") },
43     { 0x0.0040p+0, L_("%040e"),		L_("00000000000000000000000000009.765625e-04") },
44   };
45 
46 
47 static int
do_test(void)48 do_test (void)
49 {
50   const struct testcase *t;
51   int result = 0;
52 
53   for (t = testcases; t < array_end (testcases); ++t)
54     {
55       CHAR_T buf[1024];
56       int n = SPRINT (buf, array_length (buf), t->fmt, t->value);
57       if (n != STR_LEN (t->expect) || STR_CMP (buf, t->expect) != 0)
58 	{
59 	  PRINT (L_("" S "\tExpected \"" S "\" (%Zu)\n\tGot      \""
60 		    S "\" (%d, %Zu)\n"),
61 		 t->fmt, t->expect, STR_LEN (t->expect),
62 		 buf, n, STR_LEN (buf));
63 	  result = 1;
64 	}
65     }
66 
67   return result;
68 }
69 
70 #define TEST_FUNCTION do_test ()
71 #include "../test-skeleton.c"
72