(root)/
glibc-2.38/
stdio-common/
tst-fphex.c
       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
      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"