1
/* Test of sprintf_min(), specification: o.
2
$Id: sprintf_min-3.c,v 1.1.2.1 2008/03/20 21:42:31 joerg_wunsch Exp $ */
5
# define PRINTFLN(line, fmt, ...) \
6
printf("\nLine %2d: " fmt "\n", line, ##__VA_ARGS__)
7
# define EXIT(code) exit ((code) < 255 ? (code) : 255)
8
# define sprintf_P sprintf
10
# if defined(__AVR_ATmega128__)
11
/* ATmega128 has enough RAM for sprintf(), print to 0x2000 in XRAM. */
12
# define PRINTFLN(line, fmt, ...) \
13
sprintf ((char *)0x2000, "\nLine %d: " fmt "\n", line, ##__VA_ARGS__)
16
# define PRINTFLN(args...)
28
int retval, const char *retstr)
32
if (retval != (int)strlen (retstr))
34
else if (strcmp_P (retstr, expstr))
38
PRINTFLN (line, "expect: %3d, \"%s\",\n%8s output: %3d, \"%s\"\n",
39
strlen(expstr), expstr, " ", retval, retstr);
46
/* 'vp' is used to avoid gcc warnings about format string. */
47
#define CHECK(expstr, fmt, ...) do { \
50
int (* volatile vp)(char *, const char *, ...) = sprintf_P; \
51
memset (s, 0, sizeof(s)); \
52
i = vp (s, PSTR(fmt), ##__VA_ARGS__); \
53
Check (__LINE__, PSTR(expstr), i, s); \
58
/* '%o' specification */
60
CHECK ("123456", "%o", 0123456);
61
CHECK ("1 77777 100000 100001 177777",
63
1, 0x7fff, 0x8000, 0x8001, 0xffff);
65
CHECK ("0 1 177777", "%0o %0o %0o", 0, 1, 0xffff);
66
CHECK ("0 1 177777", "% o % o % o", 0, 1, 0xffff);
67
CHECK ("0 1 177777", "%+o %+o %+o", 0, 1, 0xffff);
68
CHECK ("0 1 177777", "%-o %-o %-o", 0, 1, 0xffff);
69
CHECK ("0 01 0177777", "%#o %#o %#o", 0, 1, 0xffff);
72
CHECK ("0", "%.0o", 0);
74
CHECK ("1 177777", "%.0o %.0o", 1, 0xffff);
75
CHECK ("0 1 177777", "%.1o %.1o %.1o", 0, 1, 0xffff);
76
#ifdef __AVR__ /* PRINTF_MIN */
77
CHECK ("0 1 10 177777", "%.2o %.2o %.2o %.2o", 0, 1, 8, 0xffff);
78
CHECK ("0 1 12 123 1234 12345",
79
"%.4o %.4o %.4o %.4o %.4o %.4o",
80
0, 1, 012, 0123, 01234, 012345);
82
CHECK ("0.1.177777", "%1o.%1o.%1o", 0, 1, 0xffff);
83
CHECK ("1.12.123", "%2o.%2o.%2o", 1, 012, 0123);
84
CHECK ("1.12.123.1234.12345",
85
"%4o.%4o.%4o.%4o.%4o", 1, 012, 0123, 01234, 012345);
86
CHECK ("012.0123.01234", "%#4o.%#4o.%#4o", 012, 0123, 01234);
87
CHECK ("14.177777", "% 4o.% 4o", 014, 0xffff);
88
CHECK ("16.177777", "%+4o.%+4o", 016, 0xffff);
89
CHECK ("17.177777", "%-4o.%-4o", 017, 0xffff);
91
CHECK ("0.1.12.123.1234.12345.177777",
92
"%04o.%04o.%04o.%04o.%04o.%04o.%04o",
93
0, 1, 012, 0123, 01234, 012345, 0177777);
95
CHECK ("1", "%08.4o", 1); /* 0 - ignored */
96
CHECK ("1", "%08.0o", 1);
97
CHECK ("1", "%08.o", 1);
99
CHECK ("1.123.1234.177777",
100
"%8.4o.%8.4o.%8.4o.%8.4o", 1, 0123, 01234, 0xffff);
102
"%08.4o.% 8.4o.%+8.4o", 012, 013, 014);
103
CHECK ("1.123.1234.12345",
104
"%-8.4o.%-8.4o.%-8.4o.%-8.4o", 1, 0123, 01234, 012345);
106
CHECK ("0.01.012.0123.01234",
107
"%#8.4o.%#8.4o.%#8.4o.%#8.4o.%#8.4o", 0, 1, 012, 0123, 01234);
109
CHECK ("1", "%255o", 1);
110
CHECK ("1", "%-255o", 1);
111
CHECK ("2", "%.255o", 2);
115
CHECK ("0 1234567 76543210 17777777777 20000000000 20000000001 37777777777",
116
"%lo %lo %lo %lo %lo %lo %lo",
117
0L, 01234567L, 076543210L,
118
0x7fffffffL, 0x80000000L, 0x80000001L, 0xffffffffL);
121
CHECK ("0 2 177776", "%ho %ho %ho", 0, 2, 0xfffe);