Update.
[kopensolaris-gnu/glibc.git] / stdio-common / tst-printfsz.c
1 /* Based on code by Larry McVoy <lm@neteng.engr.sgi.com>.  */
2 #include <printf.h>
3 #include <stdio.h>
4 #include <string.h>
5
6 #define V       12345678.12345678
7
8
9 int
10 main (int argc, char *argv[])
11 {
12   char buf[1024];
13   int result = 0;
14
15   /* Register the printf handlers.  */
16   register_printf_function ('b', printf_size, printf_size_info);
17   register_printf_function ('B', printf_size, printf_size_info);
18
19
20   sprintf (buf, "%g %b %B %.0b %.0B %.1b %.1B %8.0b %08.0B",
21            V, 1025., V, V, V, V, V, V, V, V);
22   fputs (buf, stdout);
23   if (strcmp (buf, "\
24 1.23457e+07 1.001k 12.346M 12m 12M 11.8m 12.3M      12m 0000012M"))
25     {
26       result = 1;
27       fputs (" -> WRONG\n", stdout);
28     }
29   else
30     fputs (" -> OK\n", stdout);
31
32   sprintf (buf, "%b|%B|%-20.2b|%-10.0b|%-10.8b|%-10.2B|",
33            V, V, V, V, V, V, V, V, V, V, V);
34   fputs (buf, stdout);
35   if (strcmp (buf, "\
36 11.774m|12.346M|11.77m              |12m       |11.77375614m|12.35M    |"))
37     {
38       result = 1;
39       fputs (" -> WRONG\n", stdout);
40     }
41   else
42     fputs (" -> OK\n", stdout);
43
44   sprintf (buf, "%#.0B %*.0b %10.*b %*.*B %10.2B",
45            V, 2, V, 2, V, 10, 2, V, V);
46   fputs (buf, stdout);
47   if (strcmp (buf, "12.M 12m     11.77m     12.35M     12.35M"))
48     {
49       result = 1;
50       fputs (" -> WRONG\n", stdout);
51     }
52   else
53     fputs (" -> OK\n", stdout);
54
55   sprintf (buf, "%6B %6.1B %b %B %b %B",
56            V, V, 1000.0, 1000.0, 1024.0, 1024.0);
57   fputs (buf, stdout);
58   if (strcmp (buf, "12.346M  12.3M 1000.000  1.000K 1.000k 1.024K"))
59     {
60       result = 1;
61       fputs (" -> WRONG\n", stdout);
62     }
63   else
64     fputs (" -> OK\n", stdout);
65
66   return result;
67 }