1 /* Test %f format specifier */
7 #include "pub_core_basics.h"
8 #include "pub_core_libcbase.h"
9 #include "pub_core_libcassert.h"
10 #include "pub_core_libcprint.h"
13 #define vg_assert(e) assert(e)
15 #define vg_assert2(e, fmt, args...) assert(e)
17 #include "coregrind/m_debuglog.c"
19 int run(const char *format
, ...)
26 // Count number of '*' in format
28 for (p
= format
; *p
; ++p
)
29 if (*p
== '*') ++num_stars
;
31 va_start(vargs
, format
);
32 fprintf(stderr
, "%s\tprintf = ", format
);
33 n
= vfprintf(stderr
, format
, vargs
);
34 fprintf(stderr
, "\twrote %3d chars\n", n
);
40 fprintf(stderr
, "%s\tdebuglog = ", format
);
41 va_start(vargs
, format
);
42 n
= VG_(debugLog_vprintf
)(add_to_buf
, &buf
, format
, vargs
);
45 emit(buf
.buf
, strlen(buf
.buf
));
46 fprintf(stderr
, "\twrote %3d chars\n", n
);
51 int main(int argc
, char *argv
[])
55 fprintf(stderr
, "...testing value 0\n");
60 run("|%8.0f|", value
);
61 run("|%8.1f|", value
);
62 run("|%8.2f|", value
);
64 fprintf(stderr
, "\n");
65 fprintf(stderr
, "...testing value 3.7 (with rounding)\n");
70 run("|%4.0f|", value
);
71 run("|%4.1f|", value
);
72 run("|%4.2f|", value
);
74 fprintf(stderr
, "\n");
75 fprintf(stderr
, "...testing value 123.01\n");
80 run("|%8.0f|", value
);
81 run("|%8.1f|", value
);
82 run("|%8.2f|", value
);
83 run("|%8.3f|", value
);
85 fprintf(stderr
, "\n");
86 fprintf(stderr
, "...testing value 3.0019 (with rounding)\n");
90 run("|%10.0f|", value
);
91 run("|%10.3f|", value
);
92 run("|%10.4f|", value
);
96 fprintf(stderr
, "\n");
97 fprintf(stderr
, "...testing value -123.456 (with rounding)\n");
100 run("|%10f|", value
);
101 run("|%10.0f|", value
);
102 run("|%10.1f|", value
);
103 run("|%10.2f|", value
);
104 run("|%10.3f|", value
);
105 run("|%10.4f|", value
);
106 run("|%10.5f|", value
);
107 run("|%.4f|", value
);
109 fprintf(stderr
, "\n");
110 fprintf(stderr
, "...testing value = -123.456 width = '*'\n");
112 run("|%*f|", 10, value
);
113 run("|%*f|", 2, value
);
114 run("|%*f.1|", 10, value
);
116 fprintf(stderr
, "\n");
117 fprintf(stderr
, "...testing precision = '*'\n");
119 run("|%.*f|", 10, value
);
120 run("|%.*f|", 2, value
);
121 run("|%10.*f|", 2, value
);
123 fprintf(stderr
, "\n");
124 fprintf(stderr
, "...testing width/precision = '*'\n");
126 run("|%*.*f|", 20, 5, value
);
127 run("|%*.*f|", 1, 4, value
);
129 fprintf(stderr
, "\n");
130 fprintf(stderr
, "...testing left justification\n");
132 run("|%10f|", value
);
133 run("|%-10f|", value
);
135 fprintf(stderr
, "\n");
136 fprintf(stderr
, "...testing strings\n");
137 const char *str
= "abcd";
141 run("|%*s|", 6, str
);
143 fprintf(stderr
, "\n");
144 fprintf(stderr
, "...testing integers\n");
145 long long ival
= -1004005;
147 // runint("|%'lld|", ival); // locale specific (LC_NUMERIC)
148 run("|%15lld|", ival
);
149 run("|%-15lld|", ival
);
150 // runint("|%'-15lld|", ival); // locale specific (LC_NUMERIC)
151 run("|%100lld|", ival
);
152 run("|%*lld|", 13, ival
);
155 run("|%3.0f|", value
);
156 run("|%3.1f|", value
);
157 run("|%3.2f|", value
);
158 run("|%3.3f|", value
);
159 run("|%3.4f|", value
);
160 run("|%3.5f|", value
);