1 /*===========================================================================
2 * Filename : test-format.c
3 * About : unit test for format functions
4 *
5 * Copyright (C) 2006 YAMAMOTO Kengo <yamaken AT bp.iij4u.or.jp>
6 * Copyright (c) 2007-2008 SigScheme Project <uim-en AT googlegroups.com>
7 *
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 *
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of authors nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
24 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
30 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 ===========================================================================*/
35
36 #include <stddef.h>
37 #include <stdarg.h>
38 #include <string.h>
39
40 #include <sigscheme/config.h>
41 #if (!SCM_USE_CHAR || !SCM_USE_STRING || !SCM_USE_INT)
42 #define TST_EXCLUDE_THIS
43 #endif
44
45 #define TST_HAVE_MAIN 1
46 #include "sscm-test.h"
47
48 #ifndef TST_EXCLUDE_THIS
49
50 #include <sigscheme/sigscheme.h>
51 #include "sigschemeinternal.h"
52
53 #define MSG_SSCM_DIRECTIVE_HELP \
54 "(format+ [<port>] <format-string> [<arg>...])\n" \
55 " - <port> is #t, #f or an output-port\n" \
56 " - any escape sequence is case insensitive\n" \
57 "\n" \
58 " The format+ procedure is a SigScheme-specific superset of SRFI-48.\n" \
59 " Following directives accept optional width w and d digits after the decimal,\n" \
60 " and w accepts leading zero as zero-digit-padding specifier. All other rules\n" \
61 " are same as SRFI-48. See also the help message for SRFI-48.\n" \
62 "\n" \
63 "SEQ MNEMONIC DESCRIPTION\n" \
64 "~[w[,d]]D [Decimal] the arg is a number output in decimal radix\n" \
65 "~[w[,d]]X [heXadecimal] the arg is a number output in hexdecimal radix\n" \
66 "~[w[,d]]O [Octal] the arg is a number output in octal radix\n" \
67 "~[w[,d]]B [Binary] the arg is a number output in binary radix\n" \
68 "~[w[,d]]F [Fixed] the arg is a string or number\n"
69
70 #define I32 (SIZEOF_INT == SIZEOF_INT32_T)
71 #define L32 (SIZEOF_LONG == SIZEOF_INT32_T)
72 #define P32 (SIZEOF_VOID_P == SIZEOF_INT32_T)
73
74 #define I64 (SIZEOF_INT == SIZEOF_INT64_T)
75 #define L64 (SIZEOF_LONG == SIZEOF_INT64_T)
76 #define P64 (SIZEOF_VOID_P == SIZEOF_INT64_T)
77
78 #define IMAX32 (SIZEOF_INTMAX_T == SIZEOF_INT32_T)
79 #define IMAX64 (SIZEOF_INTMAX_T == SIZEOF_INT64_T)
80
81 #define PDIFF32 (SIZEOF_PTRDIFF_T == SIZEOF_INT32_T)
82 #define PDIFF64 (SIZEOF_PTRDIFF_T == SIZEOF_INT64_T)
83
84 #define M32 (SIZEOF_SCM_INT_T == SIZEOF_INT32_T)
85 #define M64 (SIZEOF_SCM_INT_T == SIZEOF_INT64_T)
86
87 #define STR SCM_STRING_STR
88
89 static ScmObj lst, clst;
90
91 static ScmObj
format(const char * fmt,...)92 format(const char *fmt, ...)
93 {
94 va_list args;
95 ScmObj ret;
96
97 va_start(args, fmt);
98 ret = scm_vformat(SCM_FALSE, SCM_FMT_INTERNAL, fmt, args);
99 va_end(args);
100
101 return ret;
102 }
103
104 int
main(int argc,char ** argv)105 main(int argc, char **argv)
106 {
107 tst_suite_info suite = TST_DEFAULT_SUITE_SETUP;
108 const char *my_argv[] = {
109 "dummy",
110 "--system-load-path", TST_SCM_SYSTEM_LOAD_PATH,
111 NULL
112 };
113
114 scm_initialize(NULL, my_argv);
115
116 scm_gc_protect_with_init(&lst,
117 LIST_5(SCM_TRUE,
118 MAKE_INT(123),
119 MAKE_CHAR('a'),
120 CONST_STRING("aBc"),
121 LIST_1(MAKE_INT(0))));
122
123 scm_gc_protect_with_init(&clst, LIST_2(MAKE_INT(0), MAKE_INT(1)));
124 SET_CDR(CDR(clst), clst);
125
126 tst_main(&suite);
127
128 scm_finalize();
129
130 TST_DEFAULT_SUITE_CLEANUP(suite);
131 return !!suite.stats.fail;
132 }
133
134 TST_CASE("format no directives")
135 {
136 TST_TN_EQ_STR("", STR(format("")));
137 TST_TN_EQ_STR("\"", STR(format("\"")));
138 TST_TN_EQ_STR("\\", STR(format("\\")));
139 TST_TN_EQ_STR("a", STR(format("a")));
140 TST_TN_EQ_STR("aBc", STR(format("aBc")));
141 TST_TN_EQ_STR("あ", STR(format("あ")));
142 TST_TN_EQ_STR("あい", STR(format("あい")));
143 TST_TN_EQ_STR("aあBいc", STR(format("aあBいc")));
144 }
145
146 TST_CASE("format ~C")
147 {
148 TST_TN_EQ_STR("", STR(format("~C", (scm_ichar_t)'\0')));
149 TST_TN_EQ_STR("a", STR(format("~C", (scm_ichar_t)'a')));
150 TST_TN_EQ_STR("\"", STR(format("~C", (scm_ichar_t)'\"')));
151 TST_TN_EQ_STR("\\", STR(format("~C", (scm_ichar_t)'\\')));
152 TST_TN_EQ_STR("あ", STR(format("~C", (scm_ichar_t)0x3042)));
153 }
154
155 TST_CASE("format ~S")
156 {
157 TST_TN_EQ_STR("", STR(format("~S", "")));
158 TST_TN_EQ_STR("", STR(format("~0S", "")));
159 TST_TN_EQ_STR(" ", STR(format("~1S", "")));
160 TST_TN_EQ_STR("", STR(format("~00S", "")));
161 TST_TN_EQ_STR(" ", STR(format("~01S", "")));
162 TST_TN_EQ_STR("\"", STR(format("~S", "\"")));
163 TST_TN_EQ_STR("\\", STR(format("~S", "\\")));
164 TST_TN_EQ_STR("a", STR(format("~S", "a")));
165 TST_TN_EQ_STR("aBc", STR(format("~S", "aBc")));
166 TST_TN_EQ_STR("あ", STR(format("~S", "あ")));
167 TST_TN_EQ_STR("あい", STR(format("~S", "あい")));
168 TST_TN_EQ_STR("aあBいc", STR(format("~S", "aあBいc")));
169 TST_TN_EQ_STR("aBc", STR(format("~0S", "aBc")));
170 TST_TN_EQ_STR("aBc", STR(format("~1S", "aBc")));
171 TST_TN_EQ_STR("aBc", STR(format("~2S", "aBc")));
172 TST_TN_EQ_STR("aBc", STR(format("~3S", "aBc")));
173 TST_TN_EQ_STR(" aBc", STR(format("~4S", "aBc")));
174 TST_TN_EQ_STR(" aBc", STR(format("~5S", "aBc")));
175 TST_TN_EQ_STR("aBc", STR(format("~00S", "aBc")));
176 TST_TN_EQ_STR("aBc", STR(format("~01S", "aBc")));
177 TST_TN_EQ_STR("aBc", STR(format("~02S", "aBc")));
178 TST_TN_EQ_STR("aBc", STR(format("~03S", "aBc")));
179 TST_TN_EQ_STR(" aBc", STR(format("~04S", "aBc")));
180 TST_TN_EQ_STR(" aBc", STR(format("~05S", "aBc")));
181 TST_TN_EQ_STR("aあBいc", STR(format("~0S", "aあBいc")));
182 TST_TN_EQ_STR("aあBいc", STR(format("~1S", "aあBいc")));
183 TST_TN_EQ_STR("aあBいc", STR(format("~2S", "aあBいc")));
184 TST_TN_EQ_STR("aあBいc", STR(format("~3S", "aあBいc")));
185 TST_TN_EQ_STR("aあBいc", STR(format("~4S", "aあBいc")));
186 TST_TN_EQ_STR("aあBいc", STR(format("~5S", "aあBいc")));
187 TST_TN_EQ_STR(" aあBいc", STR(format("~6S", "aあBいc")));
188 TST_TN_EQ_STR(" aあBいc", STR(format("~7S", "aあBいc")));
189 TST_TN_EQ_STR("aあBいc", STR(format("~00S", "aあBいc")));
190 TST_TN_EQ_STR("aあBいc", STR(format("~01S", "aあBいc")));
191 TST_TN_EQ_STR("aあBいc", STR(format("~02S", "aあBいc")));
192 TST_TN_EQ_STR("aあBいc", STR(format("~03S", "aあBいc")));
193 TST_TN_EQ_STR("aあBいc", STR(format("~04S", "aあBいc")));
194 TST_TN_EQ_STR("aあBいc", STR(format("~05S", "aあBいc")));
195 TST_TN_EQ_STR(" aあBいc", STR(format("~06S", "aあBいc")));
196 TST_TN_EQ_STR(" aあBいc", STR(format("~07S", "aあBいc")));
197 }
198
199 TST_CASE("format ~P")
200 {
201 #if P32
202 TST_TN_EQ_STR("0x00000000", STR(format("~P", (void *)NULL)));
203 TST_TN_EQ_STR("0xffffffff", STR(format("~P", (void *)~0UL)));
204 TST_TN_EQ_STR("0x00012abc", STR(format("~P", (void *)0x12ABC)));
205 #elif P64
206 TST_TN_EQ_STR("0x0000000000000000", STR(format("~P", (void *)NULL)));
207 TST_TN_EQ_STR("0xffffffffffffffff", STR(format("~P", (void *)~0UL)));
208 TST_TN_EQ_STR("0x0000000000012abc", STR(format("~P", (void *)0x12ABC)));
209 TST_TN_EQ_STR("0x000deadbeef12abc",
210 STR(format("~P", (void *)0xDEADBEEF12ABC)));
211 #endif
212 }
213
214 TST_CASE("format ~D")
215 {
216 TST_TN_EQ_STR("-100", STR(format("~D", -100)));
217 TST_TN_EQ_STR("-10", STR(format("~D", -10)));
218 TST_TN_EQ_STR("-1", STR(format("~D", -1)));
219 TST_TN_EQ_STR("0", STR(format("~D", 0)));
220 TST_TN_EQ_STR("1", STR(format("~D", 1)));
221 TST_TN_EQ_STR("10", STR(format("~D", 10)));
222 TST_TN_EQ_STR("100", STR(format("~D", 100)));
223
224 TST_TN_EQ_STR("-100", STR(format("~0D", -100)));
225 TST_TN_EQ_STR("-10", STR(format("~0D", -10)));
226 TST_TN_EQ_STR("-1", STR(format("~0D", -1)));
227 TST_TN_EQ_STR("0", STR(format("~0D", 0)));
228 TST_TN_EQ_STR("1", STR(format("~0D", 1)));
229 TST_TN_EQ_STR("10", STR(format("~0D", 10)));
230 TST_TN_EQ_STR("100", STR(format("~0D", 100)));
231
232 TST_TN_EQ_STR("-100", STR(format("~03D", -100)));
233 TST_TN_EQ_STR("-10", STR(format("~03D", -10)));
234 TST_TN_EQ_STR("-01", STR(format("~03D", -1)));
235 TST_TN_EQ_STR("000", STR(format("~03D", 0)));
236 TST_TN_EQ_STR("001", STR(format("~03D", 1)));
237 TST_TN_EQ_STR("010", STR(format("~03D", 10)));
238 TST_TN_EQ_STR("100", STR(format("~03D", 100)));
239
240 TST_TN_EQ_STR("-100", STR(format("~3D", -100)));
241 TST_TN_EQ_STR("-10", STR(format("~3D", -10)));
242 TST_TN_EQ_STR(" -1", STR(format("~3D", -1)));
243 TST_TN_EQ_STR(" 0", STR(format("~3D", 0)));
244 TST_TN_EQ_STR(" 1", STR(format("~3D", 1)));
245 TST_TN_EQ_STR(" 10", STR(format("~3D", 10)));
246 TST_TN_EQ_STR("100", STR(format("~3D", 100)));
247
248 TST_TN_EQ_STR(" 123",
249 STR(format("~127D", 123)));
250 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
251 STR(format("~0127D", 123)));
252 }
253
254 TST_CASE("format ~U")
255 {
256 TST_TN_EQ_STR("0", STR(format("~U", 0)));
257 TST_TN_EQ_STR("1", STR(format("~U", 1)));
258 TST_TN_EQ_STR("10", STR(format("~U", 10)));
259 TST_TN_EQ_STR("100", STR(format("~U", 100)));
260
261 TST_TN_EQ_STR("0", STR(format("~0U", 0)));
262 TST_TN_EQ_STR("1", STR(format("~0U", 1)));
263 TST_TN_EQ_STR("10", STR(format("~0U", 10)));
264 TST_TN_EQ_STR("100", STR(format("~0U", 100)));
265
266 TST_TN_EQ_STR("000", STR(format("~03U", 0)));
267 TST_TN_EQ_STR("001", STR(format("~03U", 1)));
268 TST_TN_EQ_STR("010", STR(format("~03U", 10)));
269 TST_TN_EQ_STR("100", STR(format("~03U", 100)));
270
271 TST_TN_EQ_STR(" 0", STR(format("~3U", 0)));
272 TST_TN_EQ_STR(" 1", STR(format("~3U", 1)));
273 TST_TN_EQ_STR(" 10", STR(format("~3U", 10)));
274 TST_TN_EQ_STR("100", STR(format("~3U", 100)));
275
276 #if I32
277 TST_TN_EQ_STR("4294967196", STR(format("~U", -100)));
278 TST_TN_EQ_STR("4294967286", STR(format("~U", -10)));
279 TST_TN_EQ_STR("4294967295", STR(format("~U", -1)));
280
281 TST_TN_EQ_STR("4294967196", STR(format("~0U", -100)));
282 TST_TN_EQ_STR("4294967286", STR(format("~0U", -10)));
283 TST_TN_EQ_STR("4294967295", STR(format("~0U", -1)));
284
285 TST_TN_EQ_STR("4294967196", STR(format("~03U", -100)));
286 TST_TN_EQ_STR("4294967286", STR(format("~03U", -10)));
287 TST_TN_EQ_STR("4294967295", STR(format("~03U", -1)));
288
289 TST_TN_EQ_STR("4294967196", STR(format("~3U", -100)));
290 TST_TN_EQ_STR("4294967286", STR(format("~3U", -10)));
291 TST_TN_EQ_STR("4294967295", STR(format("~3U", -1)));
292 #elif I64
293 TST_TN_EQ_STR("18446744073709551516", STR(format("~U", -100)));
294 TST_TN_EQ_STR("18446744073709551606", STR(format("~U", -10)));
295 TST_TN_EQ_STR("18446744073709551615", STR(format("~U", -1)));
296
297 TST_TN_EQ_STR("18446744073709551516", STR(format("~0U", -100)));
298 TST_TN_EQ_STR("18446744073709551606", STR(format("~0U", -10)));
299 TST_TN_EQ_STR("18446744073709551615", STR(format("~0U", -1)));
300
301 TST_TN_EQ_STR("18446744073709551516", STR(format("~03U", -100)));
302 TST_TN_EQ_STR("18446744073709551606", STR(format("~03U", -10)));
303 TST_TN_EQ_STR("18446744073709551615", STR(format("~03U", -1)));
304
305 TST_TN_EQ_STR("18446744073709551516", STR(format("~3U", -100)));
306 TST_TN_EQ_STR("18446744073709551606", STR(format("~3U", -10)));
307 TST_TN_EQ_STR("18446744073709551615", STR(format("~3U", -1)));
308 #endif
309
310 TST_TN_EQ_STR(" 123",
311 STR(format("~127U", 123)));
312 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
313 STR(format("~0127U", 123)));
314 }
315
316 TST_CASE("format ~X")
317 {
318 TST_TN_EQ_STR("0", STR(format("~X", 0)));
319 TST_TN_EQ_STR("1", STR(format("~X", 1)));
320 TST_TN_EQ_STR("a", STR(format("~X", 10)));
321 TST_TN_EQ_STR("64", STR(format("~X", 100)));
322
323 TST_TN_EQ_STR("0", STR(format("~0X", 0)));
324 TST_TN_EQ_STR("1", STR(format("~0X", 1)));
325 TST_TN_EQ_STR("a", STR(format("~0X", 10)));
326 TST_TN_EQ_STR("64", STR(format("~0X", 100)));
327
328 TST_TN_EQ_STR("000", STR(format("~03X", 0)));
329 TST_TN_EQ_STR("001", STR(format("~03X", 1)));
330 TST_TN_EQ_STR("00a", STR(format("~03X", 10)));
331 TST_TN_EQ_STR("064", STR(format("~03X", 100)));
332
333 TST_TN_EQ_STR(" 0", STR(format("~3X", 0)));
334 TST_TN_EQ_STR(" 1", STR(format("~3X", 1)));
335 TST_TN_EQ_STR(" a", STR(format("~3X", 10)));
336 TST_TN_EQ_STR(" 64", STR(format("~3X", 100)));
337
338 #if I32
339 TST_TN_EQ_STR("ffffff9c", STR(format("~X", -100)));
340 TST_TN_EQ_STR("fffffff6", STR(format("~X", -10)));
341 TST_TN_EQ_STR("ffffffff", STR(format("~X", -1)));
342
343 TST_TN_EQ_STR("ffffff9c", STR(format("~0X", -100)));
344 TST_TN_EQ_STR("fffffff6", STR(format("~0X", -10)));
345 TST_TN_EQ_STR("ffffffff", STR(format("~0X", -1)));
346
347 TST_TN_EQ_STR("ffffff9c", STR(format("~03X", -100)));
348 TST_TN_EQ_STR("fffffff6", STR(format("~03X", -10)));
349 TST_TN_EQ_STR("ffffffff", STR(format("~03X", -1)));
350
351 TST_TN_EQ_STR("ffffff9c", STR(format("~3X", -100)));
352 TST_TN_EQ_STR("fffffff6", STR(format("~3X", -10)));
353 TST_TN_EQ_STR("ffffffff", STR(format("~3X", -1)));
354 #elif I64
355 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~X", -100)));
356 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~X", -10)));
357 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~X", -1)));
358
359 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0X", -100)));
360 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0X", -10)));
361 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0X", -1)));
362
363 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03X", -100)));
364 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03X", -10)));
365 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03X", -1)));
366
367 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3X", -100)));
368 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3X", -10)));
369 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3X", -1)));
370 #endif
371
372 TST_TN_EQ_STR(" 1ac",
373 STR(format("~127X", 0x1ac)));
374 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
375 STR(format("~0127X", 0x1ac)));
376 }
377
378 TST_CASE("format ~O")
379 {
380 TST_TN_EQ_STR("0", STR(format("~O", 0)));
381 TST_TN_EQ_STR("1", STR(format("~O", 1)));
382 TST_TN_EQ_STR("12", STR(format("~O", 10)));
383 TST_TN_EQ_STR("144", STR(format("~O", 100)));
384
385 TST_TN_EQ_STR("0", STR(format("~0O", 0)));
386 TST_TN_EQ_STR("1", STR(format("~0O", 1)));
387 TST_TN_EQ_STR("12", STR(format("~0O", 10)));
388 TST_TN_EQ_STR("144", STR(format("~0O", 100)));
389
390 TST_TN_EQ_STR("000", STR(format("~03O", 0)));
391 TST_TN_EQ_STR("001", STR(format("~03O", 1)));
392 TST_TN_EQ_STR("012", STR(format("~03O", 10)));
393 TST_TN_EQ_STR("144", STR(format("~03O", 100)));
394
395 TST_TN_EQ_STR(" 0", STR(format("~3O", 0)));
396 TST_TN_EQ_STR(" 1", STR(format("~3O", 1)));
397 TST_TN_EQ_STR(" 12", STR(format("~3O", 10)));
398 TST_TN_EQ_STR("144", STR(format("~3O", 100)));
399
400 #if I32
401 TST_TN_EQ_STR("37777777634", STR(format("~O", -100)));
402 TST_TN_EQ_STR("37777777766", STR(format("~O", -10)));
403 TST_TN_EQ_STR("37777777777", STR(format("~O", -1)));
404
405 TST_TN_EQ_STR("37777777634", STR(format("~0O", -100)));
406 TST_TN_EQ_STR("37777777766", STR(format("~0O", -10)));
407 TST_TN_EQ_STR("37777777777", STR(format("~0O", -1)));
408
409 TST_TN_EQ_STR("37777777634", STR(format("~03O", -100)));
410 TST_TN_EQ_STR("37777777766", STR(format("~03O", -10)));
411 TST_TN_EQ_STR("37777777777", STR(format("~03O", -1)));
412
413 TST_TN_EQ_STR("37777777634", STR(format("~3O", -100)));
414 TST_TN_EQ_STR("37777777766", STR(format("~3O", -10)));
415 TST_TN_EQ_STR("37777777777", STR(format("~3O", -1)));
416 #elif I64
417 TST_TN_EQ_STR("1777777777777777777634", STR(format("~O", -100)));
418 TST_TN_EQ_STR("1777777777777777777766", STR(format("~O", -10)));
419 TST_TN_EQ_STR("1777777777777777777777", STR(format("~O", -1)));
420
421 TST_TN_EQ_STR("1777777777777777777634", STR(format("~0O", -100)));
422 TST_TN_EQ_STR("1777777777777777777766", STR(format("~0O", -10)));
423 TST_TN_EQ_STR("1777777777777777777777", STR(format("~0O", -1)));
424
425 TST_TN_EQ_STR("1777777777777777777634", STR(format("~03O", -100)));
426 TST_TN_EQ_STR("1777777777777777777766", STR(format("~03O", -10)));
427 TST_TN_EQ_STR("1777777777777777777777", STR(format("~03O", -1)));
428
429 TST_TN_EQ_STR("1777777777777777777634", STR(format("~3O", -100)));
430 TST_TN_EQ_STR("1777777777777777777766", STR(format("~3O", -10)));
431 TST_TN_EQ_STR("1777777777777777777777", STR(format("~3O", -1)));
432 #endif
433
434 TST_TN_EQ_STR(" 123",
435 STR(format("~127O", 0123)));
436 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
437 STR(format("~0127O", 0123)));
438 }
439
440 TST_CASE("format ~B")
441 {
442 TST_TN_EQ_STR("0", STR(format("~B", 0)));
443 TST_TN_EQ_STR("1", STR(format("~B", 1)));
444 TST_TN_EQ_STR("1010", STR(format("~B", 10)));
445 TST_TN_EQ_STR("1100100", STR(format("~B", 100)));
446
447 TST_TN_EQ_STR("0", STR(format("~0B", 0)));
448 TST_TN_EQ_STR("1", STR(format("~0B", 1)));
449 TST_TN_EQ_STR("1010", STR(format("~0B", 10)));
450 TST_TN_EQ_STR("1100100", STR(format("~0B", 100)));
451
452 TST_TN_EQ_STR("00000", STR(format("~05B", 0)));
453 TST_TN_EQ_STR("00001", STR(format("~05B", 1)));
454 TST_TN_EQ_STR("01010", STR(format("~05B", 10)));
455 TST_TN_EQ_STR("1100100", STR(format("~05B", 100)));
456
457 TST_TN_EQ_STR(" 0", STR(format("~5B", 0)));
458 TST_TN_EQ_STR(" 1", STR(format("~5B", 1)));
459 TST_TN_EQ_STR(" 1010", STR(format("~5B", 10)));
460 TST_TN_EQ_STR("1100100", STR(format("~5B", 100)));
461
462 #if I32
463 TST_TN_EQ_STR("11111111111111111111111110011100",
464 STR(format("~B", -100)));
465 TST_TN_EQ_STR("11111111111111111111111111110110",
466 STR(format("~B", -10)));
467 TST_TN_EQ_STR("11111111111111111111111111111111",
468 STR(format("~B", -1)));
469
470 TST_TN_EQ_STR("11111111111111111111111110011100",
471 STR(format("~0B", -100)));
472 TST_TN_EQ_STR("11111111111111111111111111110110",
473 STR(format("~0B", -10)));
474 TST_TN_EQ_STR("11111111111111111111111111111111",
475 STR(format("~0B", -1)));
476
477 TST_TN_EQ_STR("11111111111111111111111110011100",
478 STR(format("~05B", -100)));
479 TST_TN_EQ_STR("11111111111111111111111111110110",
480 STR(format("~05B", -10)));
481 TST_TN_EQ_STR("11111111111111111111111111111111",
482 STR(format("~05B", -1)));
483
484 TST_TN_EQ_STR("11111111111111111111111110011100",
485 STR(format("~5B", -100)));
486 TST_TN_EQ_STR("11111111111111111111111111110110",
487 STR(format("~5B", -10)));
488 TST_TN_EQ_STR("11111111111111111111111111111111",
489 STR(format("~5B", -1)));
490 #elif I64
491 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
492 STR(format("~B", -100)));
493 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
494 STR(format("~B", -10)));
495 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
496 STR(format("~B", -1)));
497
498 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
499 STR(format("~0B", -100)));
500 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
501 STR(format("~0B", -10)));
502 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
503 STR(format("~0B", -1)));
504
505 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
506 STR(format("~05B", -100)));
507 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
508 STR(format("~05B", -10)));
509 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
510 STR(format("~05B", -1)));
511
512 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
513 STR(format("~5B", -100)));
514 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
515 STR(format("~5B", -10)));
516 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
517 STR(format("~5B", -1)));
518 #endif
519
520 TST_TN_EQ_STR(" 101",
521 STR(format("~127B", 0x5)));
522 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
523 STR(format("~0127B", 0x5)));
524 }
525
526 TST_CASE("format ~WD")
527 {
528 TST_TN_EQ_STR("-100", STR(format("~WD", (int32_t)-100)));
529 TST_TN_EQ_STR("-10", STR(format("~WD", (int32_t)-10)));
530 TST_TN_EQ_STR("-1", STR(format("~WD", (int32_t)-1)));
531 TST_TN_EQ_STR("0", STR(format("~WD", (int32_t)0)));
532 TST_TN_EQ_STR("1", STR(format("~WD", (int32_t)1)));
533 TST_TN_EQ_STR("10", STR(format("~WD", (int32_t)10)));
534 TST_TN_EQ_STR("100", STR(format("~WD", (int32_t)100)));
535
536 TST_TN_EQ_STR("-100", STR(format("~0WD", (int32_t)-100)));
537 TST_TN_EQ_STR("-10", STR(format("~0WD", (int32_t)-10)));
538 TST_TN_EQ_STR("-1", STR(format("~0WD", (int32_t)-1)));
539 TST_TN_EQ_STR("0", STR(format("~0WD", (int32_t)0)));
540 TST_TN_EQ_STR("1", STR(format("~0WD", (int32_t)1)));
541 TST_TN_EQ_STR("10", STR(format("~0WD", (int32_t)10)));
542 TST_TN_EQ_STR("100", STR(format("~0WD", (int32_t)100)));
543
544 TST_TN_EQ_STR("-100", STR(format("~03WD", (int32_t)-100)));
545 TST_TN_EQ_STR("-10", STR(format("~03WD", (int32_t)-10)));
546 TST_TN_EQ_STR("-01", STR(format("~03WD", (int32_t)-1)));
547 TST_TN_EQ_STR("000", STR(format("~03WD", (int32_t)0)));
548 TST_TN_EQ_STR("001", STR(format("~03WD", (int32_t)1)));
549 TST_TN_EQ_STR("010", STR(format("~03WD", (int32_t)10)));
550 TST_TN_EQ_STR("100", STR(format("~03WD", (int32_t)100)));
551
552 TST_TN_EQ_STR("-100", STR(format("~3WD", (int32_t)-100)));
553 TST_TN_EQ_STR("-10", STR(format("~3WD", (int32_t)-10)));
554 TST_TN_EQ_STR(" -1", STR(format("~3WD", (int32_t)-1)));
555 TST_TN_EQ_STR(" 0", STR(format("~3WD", (int32_t)0)));
556 TST_TN_EQ_STR(" 1", STR(format("~3WD", (int32_t)1)));
557 TST_TN_EQ_STR(" 10", STR(format("~3WD", (int32_t)10)));
558 TST_TN_EQ_STR("100", STR(format("~3WD", (int32_t)100)));
559
560 TST_TN_EQ_STR(" 123",
561 STR(format("~127WD", (int32_t)123)));
562 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
563 STR(format("~0127WD", (int32_t)123)));
564 }
565
566 TST_CASE("format ~WU")
567 {
568 TST_TN_EQ_STR("0", STR(format("~WU", (int32_t)0)));
569 TST_TN_EQ_STR("1", STR(format("~WU", (int32_t)1)));
570 TST_TN_EQ_STR("10", STR(format("~WU", (int32_t)10)));
571 TST_TN_EQ_STR("100", STR(format("~WU", (int32_t)100)));
572
573 TST_TN_EQ_STR("0", STR(format("~0WU", (int32_t)0)));
574 TST_TN_EQ_STR("1", STR(format("~0WU", (int32_t)1)));
575 TST_TN_EQ_STR("10", STR(format("~0WU", (int32_t)10)));
576 TST_TN_EQ_STR("100", STR(format("~0WU", (int32_t)100)));
577
578 TST_TN_EQ_STR("000", STR(format("~03WU", (int32_t)0)));
579 TST_TN_EQ_STR("001", STR(format("~03WU", (int32_t)1)));
580 TST_TN_EQ_STR("010", STR(format("~03WU", (int32_t)10)));
581 TST_TN_EQ_STR("100", STR(format("~03WU", (int32_t)100)));
582
583 TST_TN_EQ_STR(" 0", STR(format("~3WU", (int32_t)0)));
584 TST_TN_EQ_STR(" 1", STR(format("~3WU", (int32_t)1)));
585 TST_TN_EQ_STR(" 10", STR(format("~3WU", (int32_t)10)));
586 TST_TN_EQ_STR("100", STR(format("~3WU", (int32_t)100)));
587
588 TST_TN_EQ_STR("4294967196", STR(format("~WU", (int32_t)-100)));
589 TST_TN_EQ_STR("4294967286", STR(format("~WU", (int32_t)-10)));
590 TST_TN_EQ_STR("4294967295", STR(format("~WU", (int32_t)-1)));
591
592 TST_TN_EQ_STR("4294967196", STR(format("~0WU", (int32_t)-100)));
593 TST_TN_EQ_STR("4294967286", STR(format("~0WU", (int32_t)-10)));
594 TST_TN_EQ_STR("4294967295", STR(format("~0WU", (int32_t)-1)));
595
596 TST_TN_EQ_STR("4294967196", STR(format("~03WU", (int32_t)-100)));
597 TST_TN_EQ_STR("4294967286", STR(format("~03WU", (int32_t)-10)));
598 TST_TN_EQ_STR("4294967295", STR(format("~03WU", (int32_t)-1)));
599
600 TST_TN_EQ_STR("4294967196", STR(format("~3WU", (int32_t)-100)));
601 TST_TN_EQ_STR("4294967286", STR(format("~3WU", (int32_t)-10)));
602 TST_TN_EQ_STR("4294967295", STR(format("~3WU", (int32_t)-1)));
603
604 TST_TN_EQ_STR(" 123",
605 STR(format("~127WU", (int32_t)123)));
606 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
607 STR(format("~0127WU", (int32_t)123)));
608 }
609
610 TST_CASE("format ~WX")
611 {
612 TST_TN_EQ_STR("0", STR(format("~WX", (int32_t)0)));
613 TST_TN_EQ_STR("1", STR(format("~WX", (int32_t)1)));
614 TST_TN_EQ_STR("a", STR(format("~WX", (int32_t)10)));
615 TST_TN_EQ_STR("64", STR(format("~WX", (int32_t)100)));
616
617 TST_TN_EQ_STR("0", STR(format("~0WX", (int32_t)0)));
618 TST_TN_EQ_STR("1", STR(format("~0WX", (int32_t)1)));
619 TST_TN_EQ_STR("a", STR(format("~0WX", (int32_t)10)));
620 TST_TN_EQ_STR("64", STR(format("~0WX", (int32_t)100)));
621
622 TST_TN_EQ_STR("000", STR(format("~03WX", (int32_t)0)));
623 TST_TN_EQ_STR("001", STR(format("~03WX", (int32_t)1)));
624 TST_TN_EQ_STR("00a", STR(format("~03WX", (int32_t)10)));
625 TST_TN_EQ_STR("064", STR(format("~03WX", (int32_t)100)));
626
627 TST_TN_EQ_STR(" 0", STR(format("~3WX", (int32_t)0)));
628 TST_TN_EQ_STR(" 1", STR(format("~3WX", (int32_t)1)));
629 TST_TN_EQ_STR(" a", STR(format("~3WX", (int32_t)10)));
630 TST_TN_EQ_STR(" 64", STR(format("~3WX", (int32_t)100)));
631
632 TST_TN_EQ_STR("ffffff9c", STR(format("~WX", (int32_t)-100)));
633 TST_TN_EQ_STR("fffffff6", STR(format("~WX", (int32_t)-10)));
634 TST_TN_EQ_STR("ffffffff", STR(format("~WX", (int32_t)-1)));
635
636 TST_TN_EQ_STR("ffffff9c", STR(format("~0WX", (int32_t)-100)));
637 TST_TN_EQ_STR("fffffff6", STR(format("~0WX", (int32_t)-10)));
638 TST_TN_EQ_STR("ffffffff", STR(format("~0WX", (int32_t)-1)));
639
640 TST_TN_EQ_STR("ffffff9c", STR(format("~03WX", (int32_t)-100)));
641 TST_TN_EQ_STR("fffffff6", STR(format("~03WX", (int32_t)-10)));
642 TST_TN_EQ_STR("ffffffff", STR(format("~03WX", (int32_t)-1)));
643
644 TST_TN_EQ_STR("ffffff9c", STR(format("~3WX", (int32_t)-100)));
645 TST_TN_EQ_STR("fffffff6", STR(format("~3WX", (int32_t)-10)));
646 TST_TN_EQ_STR("ffffffff", STR(format("~3WX", (int32_t)-1)));
647
648 TST_TN_EQ_STR(" 1ac",
649 STR(format("~127WX", (int32_t)0x1ac)));
650 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
651 STR(format("~0127WX", (int32_t)0x1ac)));
652 }
653
654 TST_CASE("format ~WO")
655 {
656 TST_TN_EQ_STR("0", STR(format("~WO", (int32_t)0)));
657 TST_TN_EQ_STR("1", STR(format("~WO", (int32_t)1)));
658 TST_TN_EQ_STR("12", STR(format("~WO", (int32_t)10)));
659 TST_TN_EQ_STR("144", STR(format("~WO", (int32_t)100)));
660
661 TST_TN_EQ_STR("0", STR(format("~0WO", (int32_t)0)));
662 TST_TN_EQ_STR("1", STR(format("~0WO", (int32_t)1)));
663 TST_TN_EQ_STR("12", STR(format("~0WO", (int32_t)10)));
664 TST_TN_EQ_STR("144", STR(format("~0WO", (int32_t)100)));
665
666 TST_TN_EQ_STR("000", STR(format("~03WO", (int32_t)0)));
667 TST_TN_EQ_STR("001", STR(format("~03WO", (int32_t)1)));
668 TST_TN_EQ_STR("012", STR(format("~03WO", (int32_t)10)));
669 TST_TN_EQ_STR("144", STR(format("~03WO", (int32_t)100)));
670
671 TST_TN_EQ_STR(" 0", STR(format("~3WO", (int32_t)0)));
672 TST_TN_EQ_STR(" 1", STR(format("~3WO", (int32_t)1)));
673 TST_TN_EQ_STR(" 12", STR(format("~3WO", (int32_t)10)));
674 TST_TN_EQ_STR("144", STR(format("~3WO", (int32_t)100)));
675
676 TST_TN_EQ_STR("37777777634", STR(format("~WO", (int32_t)-100)));
677 TST_TN_EQ_STR("37777777766", STR(format("~WO", (int32_t)-10)));
678 TST_TN_EQ_STR("37777777777", STR(format("~WO", (int32_t)-1)));
679
680 TST_TN_EQ_STR("37777777634", STR(format("~0WO", (int32_t)-100)));
681 TST_TN_EQ_STR("37777777766", STR(format("~0WO", (int32_t)-10)));
682 TST_TN_EQ_STR("37777777777", STR(format("~0WO", (int32_t)-1)));
683
684 TST_TN_EQ_STR("37777777634", STR(format("~03WO", (int32_t)-100)));
685 TST_TN_EQ_STR("37777777766", STR(format("~03WO", (int32_t)-10)));
686 TST_TN_EQ_STR("37777777777", STR(format("~03WO", (int32_t)-1)));
687
688 TST_TN_EQ_STR("37777777634", STR(format("~3WO", (int32_t)-100)));
689 TST_TN_EQ_STR("37777777766", STR(format("~3WO", (int32_t)-10)));
690 TST_TN_EQ_STR("37777777777", STR(format("~3WO", (int32_t)-1)));
691
692 TST_TN_EQ_STR(" 123",
693 STR(format("~127WO", (int32_t)0123)));
694 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
695 STR(format("~0127WO", (int32_t)0123)));
696 }
697
698 TST_CASE("format ~WB")
699 {
700 TST_TN_EQ_STR("0", STR(format("~WB", (int32_t)0)));
701 TST_TN_EQ_STR("1", STR(format("~WB", (int32_t)1)));
702 TST_TN_EQ_STR("1010", STR(format("~WB", (int32_t)10)));
703 TST_TN_EQ_STR("1100100", STR(format("~WB", (int32_t)100)));
704
705 TST_TN_EQ_STR("0", STR(format("~0WB", (int32_t)0)));
706 TST_TN_EQ_STR("1", STR(format("~0WB", (int32_t)1)));
707 TST_TN_EQ_STR("1010", STR(format("~0WB", (int32_t)10)));
708 TST_TN_EQ_STR("1100100", STR(format("~0WB", (int32_t)100)));
709
710 TST_TN_EQ_STR("00000", STR(format("~05WB", (int32_t)0)));
711 TST_TN_EQ_STR("00001", STR(format("~05WB", (int32_t)1)));
712 TST_TN_EQ_STR("01010", STR(format("~05WB", (int32_t)10)));
713 TST_TN_EQ_STR("1100100", STR(format("~05WB", (int32_t)100)));
714
715 TST_TN_EQ_STR(" 0", STR(format("~5WB", (int32_t)0)));
716 TST_TN_EQ_STR(" 1", STR(format("~5WB", (int32_t)1)));
717 TST_TN_EQ_STR(" 1010", STR(format("~5WB", (int32_t)10)));
718 TST_TN_EQ_STR("1100100", STR(format("~5WB", (int32_t)100)));
719
720 TST_TN_EQ_STR("11111111111111111111111110011100",
721 STR(format("~WB", (int32_t)-100)));
722 TST_TN_EQ_STR("11111111111111111111111111110110",
723 STR(format("~WB", (int32_t)-10)));
724 TST_TN_EQ_STR("11111111111111111111111111111111",
725 STR(format("~WB", (int32_t)-1)));
726
727 TST_TN_EQ_STR("11111111111111111111111110011100",
728 STR(format("~0WB", (int32_t)-100)));
729 TST_TN_EQ_STR("11111111111111111111111111110110",
730 STR(format("~0WB", (int32_t)-10)));
731 TST_TN_EQ_STR("11111111111111111111111111111111",
732 STR(format("~0WB", (int32_t)-1)));
733
734 TST_TN_EQ_STR("11111111111111111111111110011100",
735 STR(format("~05WB", (int32_t)-100)));
736 TST_TN_EQ_STR("11111111111111111111111111110110",
737 STR(format("~05WB", (int32_t)-10)));
738 TST_TN_EQ_STR("11111111111111111111111111111111",
739 STR(format("~05WB", (int32_t)-1)));
740
741 TST_TN_EQ_STR("11111111111111111111111110011100",
742 STR(format("~5WB", (int32_t)-100)));
743 TST_TN_EQ_STR("11111111111111111111111111110110",
744 STR(format("~5WB", (int32_t)-10)));
745 TST_TN_EQ_STR("11111111111111111111111111111111",
746 STR(format("~5WB", (int32_t)-1)));
747
748 TST_TN_EQ_STR(" 101",
749 STR(format("~127WB", (int32_t)0x5)));
750 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
751 STR(format("~0127WB", (int32_t)0x5)));
752 }
753
754 TST_CASE("format ~MD")
755 {
756 TST_TN_EQ_STR("-100", STR(format("~MD", (scm_int_t)-100)));
757 TST_TN_EQ_STR("-10", STR(format("~MD", (scm_int_t)-10)));
758 TST_TN_EQ_STR("-1", STR(format("~MD", (scm_int_t)-1)));
759 TST_TN_EQ_STR("0", STR(format("~MD", (scm_int_t)0)));
760 TST_TN_EQ_STR("1", STR(format("~MD", (scm_int_t)1)));
761 TST_TN_EQ_STR("10", STR(format("~MD", (scm_int_t)10)));
762 TST_TN_EQ_STR("100", STR(format("~MD", (scm_int_t)100)));
763
764 TST_TN_EQ_STR("-100", STR(format("~0MD", (scm_int_t)-100)));
765 TST_TN_EQ_STR("-10", STR(format("~0MD", (scm_int_t)-10)));
766 TST_TN_EQ_STR("-1", STR(format("~0MD", (scm_int_t)-1)));
767 TST_TN_EQ_STR("0", STR(format("~0MD", (scm_int_t)0)));
768 TST_TN_EQ_STR("1", STR(format("~0MD", (scm_int_t)1)));
769 TST_TN_EQ_STR("10", STR(format("~0MD", (scm_int_t)10)));
770 TST_TN_EQ_STR("100", STR(format("~0MD", (scm_int_t)100)));
771
772 TST_TN_EQ_STR("-100", STR(format("~03MD", (scm_int_t)-100)));
773 TST_TN_EQ_STR("-10", STR(format("~03MD", (scm_int_t)-10)));
774 TST_TN_EQ_STR("-01", STR(format("~03MD", (scm_int_t)-1)));
775 TST_TN_EQ_STR("000", STR(format("~03MD", (scm_int_t)0)));
776 TST_TN_EQ_STR("001", STR(format("~03MD", (scm_int_t)1)));
777 TST_TN_EQ_STR("010", STR(format("~03MD", (scm_int_t)10)));
778 TST_TN_EQ_STR("100", STR(format("~03MD", (scm_int_t)100)));
779
780 TST_TN_EQ_STR("-100", STR(format("~3MD", (scm_int_t)-100)));
781 TST_TN_EQ_STR("-10", STR(format("~3MD", (scm_int_t)-10)));
782 TST_TN_EQ_STR(" -1", STR(format("~3MD", (scm_int_t)-1)));
783 TST_TN_EQ_STR(" 0", STR(format("~3MD", (scm_int_t)0)));
784 TST_TN_EQ_STR(" 1", STR(format("~3MD", (scm_int_t)1)));
785 TST_TN_EQ_STR(" 10", STR(format("~3MD", (scm_int_t)10)));
786 TST_TN_EQ_STR("100", STR(format("~3MD", (scm_int_t)100)));
787
788 TST_TN_EQ_STR(" 123",
789 STR(format("~127MD", (scm_int_t)123)));
790 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
791 STR(format("~0127MD", (scm_int_t)123)));
792 }
793
794 TST_CASE("format ~MU")
795 {
796 TST_TN_EQ_STR("0", STR(format("~MU", (scm_int_t)0)));
797 TST_TN_EQ_STR("1", STR(format("~MU", (scm_int_t)1)));
798 TST_TN_EQ_STR("10", STR(format("~MU", (scm_int_t)10)));
799 TST_TN_EQ_STR("100", STR(format("~MU", (scm_int_t)100)));
800
801 TST_TN_EQ_STR("0", STR(format("~0MU", (scm_int_t)0)));
802 TST_TN_EQ_STR("1", STR(format("~0MU", (scm_int_t)1)));
803 TST_TN_EQ_STR("10", STR(format("~0MU", (scm_int_t)10)));
804 TST_TN_EQ_STR("100", STR(format("~0MU", (scm_int_t)100)));
805
806 TST_TN_EQ_STR("000", STR(format("~03MU", (scm_int_t)0)));
807 TST_TN_EQ_STR("001", STR(format("~03MU", (scm_int_t)1)));
808 TST_TN_EQ_STR("010", STR(format("~03MU", (scm_int_t)10)));
809 TST_TN_EQ_STR("100", STR(format("~03MU", (scm_int_t)100)));
810
811 TST_TN_EQ_STR(" 0", STR(format("~3MU", (scm_int_t)0)));
812 TST_TN_EQ_STR(" 1", STR(format("~3MU", (scm_int_t)1)));
813 TST_TN_EQ_STR(" 10", STR(format("~3MU", (scm_int_t)10)));
814 TST_TN_EQ_STR("100", STR(format("~3MU", (scm_int_t)100)));
815
816 #if M32
817 TST_TN_EQ_STR("4294967196", STR(format("~MU", (scm_int_t)-100)));
818 TST_TN_EQ_STR("4294967286", STR(format("~MU", (scm_int_t)-10)));
819 TST_TN_EQ_STR("4294967295", STR(format("~MU", (scm_int_t)-1)));
820
821 TST_TN_EQ_STR("4294967196", STR(format("~0MU", (scm_int_t)-100)));
822 TST_TN_EQ_STR("4294967286", STR(format("~0MU", (scm_int_t)-10)));
823 TST_TN_EQ_STR("4294967295", STR(format("~0MU", (scm_int_t)-1)));
824
825 TST_TN_EQ_STR("4294967196", STR(format("~03MU", (scm_int_t)-100)));
826 TST_TN_EQ_STR("4294967286", STR(format("~03MU", (scm_int_t)-10)));
827 TST_TN_EQ_STR("4294967295", STR(format("~03MU", (scm_int_t)-1)));
828
829 TST_TN_EQ_STR("4294967196", STR(format("~3MU", (scm_int_t)-100)));
830 TST_TN_EQ_STR("4294967286", STR(format("~3MU", (scm_int_t)-10)));
831 TST_TN_EQ_STR("4294967295", STR(format("~3MU", (scm_int_t)-1)));
832 #elif M64
833 TST_TN_EQ_STR("18446744073709551516", STR(format("~MU", (scm_int_t)-100)));
834 TST_TN_EQ_STR("18446744073709551606", STR(format("~MU", (scm_int_t)-10)));
835 TST_TN_EQ_STR("18446744073709551615", STR(format("~MU", (scm_int_t)-1)));
836
837 TST_TN_EQ_STR("18446744073709551516", STR(format("~0MU", (scm_int_t)-100)));
838 TST_TN_EQ_STR("18446744073709551606", STR(format("~0MU", (scm_int_t)-10)));
839 TST_TN_EQ_STR("18446744073709551615", STR(format("~0MU", (scm_int_t)-1)));
840
841 TST_TN_EQ_STR("18446744073709551516", STR(format("~03MU",(scm_int_t)-100)));
842 TST_TN_EQ_STR("18446744073709551606", STR(format("~03MU",(scm_int_t)-10)));
843 TST_TN_EQ_STR("18446744073709551615", STR(format("~03MU",(scm_int_t)-1)));
844
845 TST_TN_EQ_STR("18446744073709551516", STR(format("~3MU", (scm_int_t)-100)));
846 TST_TN_EQ_STR("18446744073709551606", STR(format("~3MU", (scm_int_t)-10)));
847 TST_TN_EQ_STR("18446744073709551615", STR(format("~3MU", (scm_int_t)-1)));
848 #endif
849
850 TST_TN_EQ_STR(" 123",
851 STR(format("~127MU", (scm_int_t)123)));
852 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
853 STR(format("~0127MU", (scm_int_t)123)));
854 }
855
856 TST_CASE("format ~MX")
857 {
858 TST_TN_EQ_STR("0", STR(format("~MX", (scm_int_t)0)));
859 TST_TN_EQ_STR("1", STR(format("~MX", (scm_int_t)1)));
860 TST_TN_EQ_STR("a", STR(format("~MX", (scm_int_t)10)));
861 TST_TN_EQ_STR("64", STR(format("~MX", (scm_int_t)100)));
862
863 TST_TN_EQ_STR("0", STR(format("~0MX", (scm_int_t)0)));
864 TST_TN_EQ_STR("1", STR(format("~0MX", (scm_int_t)1)));
865 TST_TN_EQ_STR("a", STR(format("~0MX", (scm_int_t)10)));
866 TST_TN_EQ_STR("64", STR(format("~0MX", (scm_int_t)100)));
867
868 TST_TN_EQ_STR("000", STR(format("~03MX", (scm_int_t)0)));
869 TST_TN_EQ_STR("001", STR(format("~03MX", (scm_int_t)1)));
870 TST_TN_EQ_STR("00a", STR(format("~03MX", (scm_int_t)10)));
871 TST_TN_EQ_STR("064", STR(format("~03MX", (scm_int_t)100)));
872
873 TST_TN_EQ_STR(" 0", STR(format("~3MX", (scm_int_t)0)));
874 TST_TN_EQ_STR(" 1", STR(format("~3MX", (scm_int_t)1)));
875 TST_TN_EQ_STR(" a", STR(format("~3MX", (scm_int_t)10)));
876 TST_TN_EQ_STR(" 64", STR(format("~3MX", (scm_int_t)100)));
877
878 #if M32
879 TST_TN_EQ_STR("ffffff9c", STR(format("~MX", (scm_int_t)-100)));
880 TST_TN_EQ_STR("fffffff6", STR(format("~MX", (scm_int_t)-10)));
881 TST_TN_EQ_STR("ffffffff", STR(format("~MX", (scm_int_t)-1)));
882
883 TST_TN_EQ_STR("ffffff9c", STR(format("~0MX", (scm_int_t)-100)));
884 TST_TN_EQ_STR("fffffff6", STR(format("~0MX", (scm_int_t)-10)));
885 TST_TN_EQ_STR("ffffffff", STR(format("~0MX", (scm_int_t)-1)));
886
887 TST_TN_EQ_STR("ffffff9c", STR(format("~03MX", (scm_int_t)-100)));
888 TST_TN_EQ_STR("fffffff6", STR(format("~03MX", (scm_int_t)-10)));
889 TST_TN_EQ_STR("ffffffff", STR(format("~03MX", (scm_int_t)-1)));
890
891 TST_TN_EQ_STR("ffffff9c", STR(format("~3MX", (scm_int_t)-100)));
892 TST_TN_EQ_STR("fffffff6", STR(format("~3MX", (scm_int_t)-10)));
893 TST_TN_EQ_STR("ffffffff", STR(format("~3MX", (scm_int_t)-1)));
894 #elif M64
895 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~MX", (scm_int_t)-100)));
896 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~MX", (scm_int_t)-10)));
897 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~MX", (scm_int_t)-1)));
898
899 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0MX", (scm_int_t)-100)));
900 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0MX", (scm_int_t)-10)));
901 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0MX", (scm_int_t)-1)));
902
903 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03MX", (scm_int_t)-100)));
904 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03MX", (scm_int_t)-10)));
905 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03MX", (scm_int_t)-1)));
906
907 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3MX", (scm_int_t)-100)));
908 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3MX", (scm_int_t)-10)));
909 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3MX", (scm_int_t)-1)));
910 #endif
911
912 TST_TN_EQ_STR(" 1ac",
913 STR(format("~127MX", (scm_int_t)0x1ac)));
914 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
915 STR(format("~0127MX", (scm_int_t)0x1ac)));
916 }
917
918 TST_CASE("format ~MO")
919 {
920 TST_TN_EQ_STR("0", STR(format("~MO", (scm_int_t)0)));
921 TST_TN_EQ_STR("1", STR(format("~MO", (scm_int_t)1)));
922 TST_TN_EQ_STR("12", STR(format("~MO", (scm_int_t)10)));
923 TST_TN_EQ_STR("144", STR(format("~MO", (scm_int_t)100)));
924
925 TST_TN_EQ_STR("0", STR(format("~0MO", (scm_int_t)0)));
926 TST_TN_EQ_STR("1", STR(format("~0MO", (scm_int_t)1)));
927 TST_TN_EQ_STR("12", STR(format("~0MO", (scm_int_t)10)));
928 TST_TN_EQ_STR("144", STR(format("~0MO", (scm_int_t)100)));
929
930 TST_TN_EQ_STR("000", STR(format("~03MO", (scm_int_t)0)));
931 TST_TN_EQ_STR("001", STR(format("~03MO", (scm_int_t)1)));
932 TST_TN_EQ_STR("012", STR(format("~03MO", (scm_int_t)10)));
933 TST_TN_EQ_STR("144", STR(format("~03MO", (scm_int_t)100)));
934
935 TST_TN_EQ_STR(" 0", STR(format("~3MO", (scm_int_t)0)));
936 TST_TN_EQ_STR(" 1", STR(format("~3MO", (scm_int_t)1)));
937 TST_TN_EQ_STR(" 12", STR(format("~3MO", (scm_int_t)10)));
938 TST_TN_EQ_STR("144", STR(format("~3MO", (scm_int_t)100)));
939
940 #if M32
941 TST_TN_EQ_STR("37777777634", STR(format("~MO", (scm_int_t)-100)));
942 TST_TN_EQ_STR("37777777766", STR(format("~MO", (scm_int_t)-10)));
943 TST_TN_EQ_STR("37777777777", STR(format("~MO", (scm_int_t)-1)));
944
945 TST_TN_EQ_STR("37777777634", STR(format("~0MO", (scm_int_t)-100)));
946 TST_TN_EQ_STR("37777777766", STR(format("~0MO", (scm_int_t)-10)));
947 TST_TN_EQ_STR("37777777777", STR(format("~0MO", (scm_int_t)-1)));
948
949 TST_TN_EQ_STR("37777777634", STR(format("~03MO", (scm_int_t)-100)));
950 TST_TN_EQ_STR("37777777766", STR(format("~03MO", (scm_int_t)-10)));
951 TST_TN_EQ_STR("37777777777", STR(format("~03MO", (scm_int_t)-1)));
952
953 TST_TN_EQ_STR("37777777634", STR(format("~3MO", (scm_int_t)-100)));
954 TST_TN_EQ_STR("37777777766", STR(format("~3MO", (scm_int_t)-10)));
955 TST_TN_EQ_STR("37777777777", STR(format("~3MO", (scm_int_t)-1)));
956 #elif M64
957 TST_TN_EQ_STR("1777777777777777777634",
958 STR(format("~MO", (scm_int_t)-100)));
959 TST_TN_EQ_STR("1777777777777777777766",
960 STR(format("~MO", (scm_int_t)-10)));
961 TST_TN_EQ_STR("1777777777777777777777",
962 STR(format("~MO", (scm_int_t)-1)));
963
964 TST_TN_EQ_STR("1777777777777777777634",
965 STR(format("~0MO", (scm_int_t)-100)));
966 TST_TN_EQ_STR("1777777777777777777766",
967 STR(format("~0MO", (scm_int_t)-10)));
968 TST_TN_EQ_STR("1777777777777777777777",
969 STR(format("~0MO", (scm_int_t)-1)));
970
971 TST_TN_EQ_STR("1777777777777777777634",
972 STR(format("~03MO", (scm_int_t)-100)));
973 TST_TN_EQ_STR("1777777777777777777766",
974 STR(format("~03MO", (scm_int_t)-10)));
975 TST_TN_EQ_STR("1777777777777777777777",
976 STR(format("~03MO", (scm_int_t)-1)));
977
978 TST_TN_EQ_STR("1777777777777777777634",
979 STR(format("~3MO", (scm_int_t)-100)));
980 TST_TN_EQ_STR("1777777777777777777766",
981 STR(format("~3MO", (scm_int_t)-10)));
982 TST_TN_EQ_STR("1777777777777777777777",
983 STR(format("~3MO", (scm_int_t)-1)));
984 #endif
985
986 TST_TN_EQ_STR(" 123",
987 STR(format("~127MO", (scm_int_t)0123)));
988 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
989 STR(format("~0127MO", (scm_int_t)0123)));
990 }
991
992 TST_CASE("format ~MB")
993 {
994 TST_TN_EQ_STR("0", STR(format("~MB", (scm_int_t)0)));
995 TST_TN_EQ_STR("1", STR(format("~MB", (scm_int_t)1)));
996 TST_TN_EQ_STR("1010", STR(format("~MB", (scm_int_t)10)));
997 TST_TN_EQ_STR("1100100", STR(format("~MB", (scm_int_t)100)));
998
999 TST_TN_EQ_STR("0", STR(format("~0MB", (scm_int_t)0)));
1000 TST_TN_EQ_STR("1", STR(format("~0MB", (scm_int_t)1)));
1001 TST_TN_EQ_STR("1010", STR(format("~0MB", (scm_int_t)10)));
1002 TST_TN_EQ_STR("1100100", STR(format("~0MB", (scm_int_t)100)));
1003
1004 TST_TN_EQ_STR("00000", STR(format("~05MB", (scm_int_t)0)));
1005 TST_TN_EQ_STR("00001", STR(format("~05MB", (scm_int_t)1)));
1006 TST_TN_EQ_STR("01010", STR(format("~05MB", (scm_int_t)10)));
1007 TST_TN_EQ_STR("1100100", STR(format("~05MB", (scm_int_t)100)));
1008
1009 TST_TN_EQ_STR(" 0", STR(format("~5MB", (scm_int_t)0)));
1010 TST_TN_EQ_STR(" 1", STR(format("~5MB", (scm_int_t)1)));
1011 TST_TN_EQ_STR(" 1010", STR(format("~5MB", (scm_int_t)10)));
1012 TST_TN_EQ_STR("1100100", STR(format("~5MB", (scm_int_t)100)));
1013
1014 #if M32
1015 TST_TN_EQ_STR("11111111111111111111111110011100",
1016 STR(format("~MB", (scm_int_t)-100)));
1017 TST_TN_EQ_STR("11111111111111111111111111110110",
1018 STR(format("~MB", (scm_int_t)-10)));
1019 TST_TN_EQ_STR("11111111111111111111111111111111",
1020 STR(format("~MB", (scm_int_t)-1)));
1021
1022 TST_TN_EQ_STR("11111111111111111111111110011100",
1023 STR(format("~0MB", (scm_int_t)-100)));
1024 TST_TN_EQ_STR("11111111111111111111111111110110",
1025 STR(format("~0MB", (scm_int_t)-10)));
1026 TST_TN_EQ_STR("11111111111111111111111111111111",
1027 STR(format("~0MB", (scm_int_t)-1)));
1028
1029 TST_TN_EQ_STR("11111111111111111111111110011100",
1030 STR(format("~05MB", (scm_int_t)-100)));
1031 TST_TN_EQ_STR("11111111111111111111111111110110",
1032 STR(format("~05MB", (scm_int_t)-10)));
1033 TST_TN_EQ_STR("11111111111111111111111111111111",
1034 STR(format("~05MB", (scm_int_t)-1)));
1035
1036 TST_TN_EQ_STR("11111111111111111111111110011100",
1037 STR(format("~5MB", (scm_int_t)-100)));
1038 TST_TN_EQ_STR("11111111111111111111111111110110",
1039 STR(format("~5MB", (scm_int_t)-10)));
1040 TST_TN_EQ_STR("11111111111111111111111111111111",
1041 STR(format("~5MB", (scm_int_t)-1)));
1042 #elif M64
1043 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1044 STR(format("~MB", (scm_int_t)-100)));
1045 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1046 STR(format("~MB", (scm_int_t)-10)));
1047 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1048 STR(format("~MB", (scm_int_t)-1)));
1049
1050 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1051 STR(format("~0MB", (scm_int_t)-100)));
1052 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1053 STR(format("~0MB", (scm_int_t)-10)));
1054 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1055 STR(format("~0MB", (scm_int_t)-1)));
1056
1057 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1058 STR(format("~05MB", (scm_int_t)-100)));
1059 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1060 STR(format("~05MB", (scm_int_t)-10)));
1061 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1062 STR(format("~05MB", (scm_int_t)-1)));
1063
1064 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1065 STR(format("~5MB", (scm_int_t)-100)));
1066 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1067 STR(format("~5MB", (scm_int_t)-10)));
1068 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1069 STR(format("~5MB", (scm_int_t)-1)));
1070 #endif
1071
1072 TST_TN_EQ_STR(" 101",
1073 STR(format("~127MB", (scm_int_t)0x5)));
1074 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
1075 STR(format("~0127MB", (scm_int_t)0x5)));
1076 }
1077
1078 TST_CASE("format ~QD")
1079 {
1080 TST_TN_EQ_STR("-100", STR(format("~QD", (int64_t)-100)));
1081 TST_TN_EQ_STR("-10", STR(format("~QD", (int64_t)-10)));
1082 TST_TN_EQ_STR("-1", STR(format("~QD", (int64_t)-1)));
1083 TST_TN_EQ_STR("0", STR(format("~QD", (int64_t)0)));
1084 TST_TN_EQ_STR("1", STR(format("~QD", (int64_t)1)));
1085 TST_TN_EQ_STR("10", STR(format("~QD", (int64_t)10)));
1086 TST_TN_EQ_STR("100", STR(format("~QD", (int64_t)100)));
1087
1088 TST_TN_EQ_STR("-100", STR(format("~0QD", (int64_t)-100)));
1089 TST_TN_EQ_STR("-10", STR(format("~0QD", (int64_t)-10)));
1090 TST_TN_EQ_STR("-1", STR(format("~0QD", (int64_t)-1)));
1091 TST_TN_EQ_STR("0", STR(format("~0QD", (int64_t)0)));
1092 TST_TN_EQ_STR("1", STR(format("~0QD", (int64_t)1)));
1093 TST_TN_EQ_STR("10", STR(format("~0QD", (int64_t)10)));
1094 TST_TN_EQ_STR("100", STR(format("~0QD", (int64_t)100)));
1095
1096 TST_TN_EQ_STR("-100", STR(format("~03QD", (int64_t)-100)));
1097 TST_TN_EQ_STR("-10", STR(format("~03QD", (int64_t)-10)));
1098 TST_TN_EQ_STR("-01", STR(format("~03QD", (int64_t)-1)));
1099 TST_TN_EQ_STR("000", STR(format("~03QD", (int64_t)0)));
1100 TST_TN_EQ_STR("001", STR(format("~03QD", (int64_t)1)));
1101 TST_TN_EQ_STR("010", STR(format("~03QD", (int64_t)10)));
1102 TST_TN_EQ_STR("100", STR(format("~03QD", (int64_t)100)));
1103
1104 TST_TN_EQ_STR("-100", STR(format("~3QD", (int64_t)-100)));
1105 TST_TN_EQ_STR("-10", STR(format("~3QD", (int64_t)-10)));
1106 TST_TN_EQ_STR(" -1", STR(format("~3QD", (int64_t)-1)));
1107 TST_TN_EQ_STR(" 0", STR(format("~3QD", (int64_t)0)));
1108 TST_TN_EQ_STR(" 1", STR(format("~3QD", (int64_t)1)));
1109 TST_TN_EQ_STR(" 10", STR(format("~3QD", (int64_t)10)));
1110 TST_TN_EQ_STR("100", STR(format("~3QD", (int64_t)100)));
1111
1112 TST_TN_EQ_STR(" 123",
1113 STR(format("~127QD", (int64_t)123)));
1114 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1115 STR(format("~0127QD", (int64_t)123)));
1116 }
1117
1118 TST_CASE("format ~QU")
1119 {
1120 TST_TN_EQ_STR("0", STR(format("~QU", (int64_t)0)));
1121 TST_TN_EQ_STR("1", STR(format("~QU", (int64_t)1)));
1122 TST_TN_EQ_STR("10", STR(format("~QU", (int64_t)10)));
1123 TST_TN_EQ_STR("100", STR(format("~QU", (int64_t)100)));
1124
1125 TST_TN_EQ_STR("0", STR(format("~0QU", (int64_t)0)));
1126 TST_TN_EQ_STR("1", STR(format("~0QU", (int64_t)1)));
1127 TST_TN_EQ_STR("10", STR(format("~0QU", (int64_t)10)));
1128 TST_TN_EQ_STR("100", STR(format("~0QU", (int64_t)100)));
1129
1130 TST_TN_EQ_STR("000", STR(format("~03QU", (int64_t)0)));
1131 TST_TN_EQ_STR("001", STR(format("~03QU", (int64_t)1)));
1132 TST_TN_EQ_STR("010", STR(format("~03QU", (int64_t)10)));
1133 TST_TN_EQ_STR("100", STR(format("~03QU", (int64_t)100)));
1134
1135 TST_TN_EQ_STR(" 0", STR(format("~3QU", (int64_t)0)));
1136 TST_TN_EQ_STR(" 1", STR(format("~3QU", (int64_t)1)));
1137 TST_TN_EQ_STR(" 10", STR(format("~3QU", (int64_t)10)));
1138 TST_TN_EQ_STR("100", STR(format("~3QU", (int64_t)100)));
1139
1140 TST_TN_EQ_STR("18446744073709551516", STR(format("~QU", (int64_t)-100)));
1141 TST_TN_EQ_STR("18446744073709551606", STR(format("~QU", (int64_t)-10)));
1142 TST_TN_EQ_STR("18446744073709551615", STR(format("~QU", (int64_t)-1)));
1143
1144 TST_TN_EQ_STR("18446744073709551516", STR(format("~0QU", (int64_t)-100)));
1145 TST_TN_EQ_STR("18446744073709551606", STR(format("~0QU", (int64_t)-10)));
1146 TST_TN_EQ_STR("18446744073709551615", STR(format("~0QU", (int64_t)-1)));
1147
1148 TST_TN_EQ_STR("18446744073709551516", STR(format("~03QU", (int64_t)-100)));
1149 TST_TN_EQ_STR("18446744073709551606", STR(format("~03QU", (int64_t)-10)));
1150 TST_TN_EQ_STR("18446744073709551615", STR(format("~03QU", (int64_t)-1)));
1151
1152 TST_TN_EQ_STR("18446744073709551516", STR(format("~3QU", (int64_t)-100)));
1153 TST_TN_EQ_STR("18446744073709551606", STR(format("~3QU", (int64_t)-10)));
1154 TST_TN_EQ_STR("18446744073709551615", STR(format("~3QU", (int64_t)-1)));
1155
1156 TST_TN_EQ_STR(" 123",
1157 STR(format("~127QU", (int64_t)123)));
1158 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1159 STR(format("~0127QU", (int64_t)123)));
1160 }
1161
1162 TST_CASE("format ~QX")
1163 {
1164 TST_TN_EQ_STR("0", STR(format("~QX", (int64_t)0)));
1165 TST_TN_EQ_STR("1", STR(format("~QX", (int64_t)1)));
1166 TST_TN_EQ_STR("a", STR(format("~QX", (int64_t)10)));
1167 TST_TN_EQ_STR("64", STR(format("~QX", (int64_t)100)));
1168
1169 TST_TN_EQ_STR("0", STR(format("~0QX", (int64_t)0)));
1170 TST_TN_EQ_STR("1", STR(format("~0QX", (int64_t)1)));
1171 TST_TN_EQ_STR("a", STR(format("~0QX", (int64_t)10)));
1172 TST_TN_EQ_STR("64", STR(format("~0QX", (int64_t)100)));
1173
1174 TST_TN_EQ_STR("000", STR(format("~03QX", (int64_t)0)));
1175 TST_TN_EQ_STR("001", STR(format("~03QX", (int64_t)1)));
1176 TST_TN_EQ_STR("00a", STR(format("~03QX", (int64_t)10)));
1177 TST_TN_EQ_STR("064", STR(format("~03QX", (int64_t)100)));
1178
1179 TST_TN_EQ_STR(" 0", STR(format("~3QX", (int64_t)0)));
1180 TST_TN_EQ_STR(" 1", STR(format("~3QX", (int64_t)1)));
1181 TST_TN_EQ_STR(" a", STR(format("~3QX", (int64_t)10)));
1182 TST_TN_EQ_STR(" 64", STR(format("~3QX", (int64_t)100)));
1183
1184 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~QX", (int64_t)-100)));
1185 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~QX", (int64_t)-10)));
1186 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~QX", (int64_t)-1)));
1187
1188 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0QX", (int64_t)-100)));
1189 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0QX", (int64_t)-10)));
1190 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0QX", (int64_t)-1)));
1191
1192 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03QX", (int64_t)-100)));
1193 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03QX", (int64_t)-10)));
1194 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03QX", (int64_t)-1)));
1195
1196 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3QX", (int64_t)-100)));
1197 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3QX", (int64_t)-10)));
1198 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3QX", (int64_t)-1)));
1199
1200 TST_TN_EQ_STR(" 1ac",
1201 STR(format("~127QX", (int64_t)0x1ac)));
1202 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
1203 STR(format("~0127QX", (int64_t)0x1ac)));
1204 }
1205
1206 TST_CASE("format ~QO")
1207 {
1208 TST_TN_EQ_STR("0", STR(format("~QO", (int64_t)0)));
1209 TST_TN_EQ_STR("1", STR(format("~QO", (int64_t)1)));
1210 TST_TN_EQ_STR("12", STR(format("~QO", (int64_t)10)));
1211 TST_TN_EQ_STR("144", STR(format("~QO", (int64_t)100)));
1212
1213 TST_TN_EQ_STR("0", STR(format("~0QO", (int64_t)0)));
1214 TST_TN_EQ_STR("1", STR(format("~0QO", (int64_t)1)));
1215 TST_TN_EQ_STR("12", STR(format("~0QO", (int64_t)10)));
1216 TST_TN_EQ_STR("144", STR(format("~0QO", (int64_t)100)));
1217
1218 TST_TN_EQ_STR("000", STR(format("~03QO", (int64_t)0)));
1219 TST_TN_EQ_STR("001", STR(format("~03QO", (int64_t)1)));
1220 TST_TN_EQ_STR("012", STR(format("~03QO", (int64_t)10)));
1221 TST_TN_EQ_STR("144", STR(format("~03QO", (int64_t)100)));
1222
1223 TST_TN_EQ_STR(" 0", STR(format("~3QO", (int64_t)0)));
1224 TST_TN_EQ_STR(" 1", STR(format("~3QO", (int64_t)1)));
1225 TST_TN_EQ_STR(" 12", STR(format("~3QO", (int64_t)10)));
1226 TST_TN_EQ_STR("144", STR(format("~3QO", (int64_t)100)));
1227
1228 TST_TN_EQ_STR("1777777777777777777634",
1229 STR(format("~QO", (int64_t)-100)));
1230 TST_TN_EQ_STR("1777777777777777777766",
1231 STR(format("~QO", (int64_t)-10)));
1232 TST_TN_EQ_STR("1777777777777777777777",
1233 STR(format("~QO", (int64_t)-1)));
1234
1235 TST_TN_EQ_STR("1777777777777777777634",
1236 STR(format("~0QO", (int64_t)-100)));
1237 TST_TN_EQ_STR("1777777777777777777766",
1238 STR(format("~0QO", (int64_t)-10)));
1239 TST_TN_EQ_STR("1777777777777777777777",
1240 STR(format("~0QO", (int64_t)-1)));
1241
1242 TST_TN_EQ_STR("1777777777777777777634",
1243 STR(format("~03QO", (int64_t)-100)));
1244 TST_TN_EQ_STR("1777777777777777777766",
1245 STR(format("~03QO", (int64_t)-10)));
1246 TST_TN_EQ_STR("1777777777777777777777",
1247 STR(format("~03QO", (int64_t)-1)));
1248
1249 TST_TN_EQ_STR("1777777777777777777634",
1250 STR(format("~3QO", (int64_t)-100)));
1251 TST_TN_EQ_STR("1777777777777777777766",
1252 STR(format("~3QO", (int64_t)-10)));
1253 TST_TN_EQ_STR("1777777777777777777777",
1254 STR(format("~3QO", (int64_t)-1)));
1255
1256 TST_TN_EQ_STR(" 123",
1257 STR(format("~127QO", (int64_t)0123)));
1258 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1259 STR(format("~0127QO", (int64_t)0123)));
1260 }
1261
1262 TST_CASE("format ~QB")
1263 {
1264 TST_TN_EQ_STR("0", STR(format("~QB", (int64_t)0)));
1265 TST_TN_EQ_STR("1", STR(format("~QB", (int64_t)1)));
1266 TST_TN_EQ_STR("1010", STR(format("~QB", (int64_t)10)));
1267 TST_TN_EQ_STR("1100100", STR(format("~QB", (int64_t)100)));
1268
1269 TST_TN_EQ_STR("0", STR(format("~0QB", (int64_t)0)));
1270 TST_TN_EQ_STR("1", STR(format("~0QB", (int64_t)1)));
1271 TST_TN_EQ_STR("1010", STR(format("~0QB", (int64_t)10)));
1272 TST_TN_EQ_STR("1100100", STR(format("~0QB", (int64_t)100)));
1273
1274 TST_TN_EQ_STR("00000", STR(format("~05QB", (int64_t)0)));
1275 TST_TN_EQ_STR("00001", STR(format("~05QB", (int64_t)1)));
1276 TST_TN_EQ_STR("01010", STR(format("~05QB", (int64_t)10)));
1277 TST_TN_EQ_STR("1100100", STR(format("~05QB", (int64_t)100)));
1278
1279 TST_TN_EQ_STR(" 0", STR(format("~5QB", (int64_t)0)));
1280 TST_TN_EQ_STR(" 1", STR(format("~5QB", (int64_t)1)));
1281 TST_TN_EQ_STR(" 1010", STR(format("~5QB", (int64_t)10)));
1282 TST_TN_EQ_STR("1100100", STR(format("~5QB", (int64_t)100)));
1283
1284 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1285 STR(format("~QB", (int64_t)-100)));
1286 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1287 STR(format("~QB", (int64_t)-10)));
1288 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1289 STR(format("~QB", (int64_t)-1)));
1290
1291 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1292 STR(format("~0QB", (int64_t)-100)));
1293 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1294 STR(format("~0QB", (int64_t)-10)));
1295 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1296 STR(format("~0QB", (int64_t)-1)));
1297
1298 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1299 STR(format("~05QB", (int64_t)-100)));
1300 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1301 STR(format("~05QB", (int64_t)-10)));
1302 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1303 STR(format("~05QB", (int64_t)-1)));
1304
1305 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1306 STR(format("~5QB", (int64_t)-100)));
1307 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1308 STR(format("~5QB", (int64_t)-10)));
1309 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1310 STR(format("~5QB", (int64_t)-1)));
1311
1312 TST_TN_EQ_STR(" 101",
1313 STR(format("~127QB", (int64_t)0x5)));
1314 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
1315 STR(format("~0127QB", (int64_t)0x5)));
1316 }
1317
1318 TST_CASE("format ~LD")
1319 {
1320 TST_TN_EQ_STR("-100", STR(format("~LD", (long)-100)));
1321 TST_TN_EQ_STR("-10", STR(format("~LD", (long)-10)));
1322 TST_TN_EQ_STR("-1", STR(format("~LD", (long)-1)));
1323 TST_TN_EQ_STR("0", STR(format("~LD", (long)0)));
1324 TST_TN_EQ_STR("1", STR(format("~LD", (long)1)));
1325 TST_TN_EQ_STR("10", STR(format("~LD", (long)10)));
1326 TST_TN_EQ_STR("100", STR(format("~LD", (long)100)));
1327
1328 TST_TN_EQ_STR("-100", STR(format("~0LD", (long)-100)));
1329 TST_TN_EQ_STR("-10", STR(format("~0LD", (long)-10)));
1330 TST_TN_EQ_STR("-1", STR(format("~0LD", (long)-1)));
1331 TST_TN_EQ_STR("0", STR(format("~0LD", (long)0)));
1332 TST_TN_EQ_STR("1", STR(format("~0LD", (long)1)));
1333 TST_TN_EQ_STR("10", STR(format("~0LD", (long)10)));
1334 TST_TN_EQ_STR("100", STR(format("~0LD", (long)100)));
1335
1336 TST_TN_EQ_STR("-100", STR(format("~03LD", (long)-100)));
1337 TST_TN_EQ_STR("-10", STR(format("~03LD", (long)-10)));
1338 TST_TN_EQ_STR("-01", STR(format("~03LD", (long)-1)));
1339 TST_TN_EQ_STR("000", STR(format("~03LD", (long)0)));
1340 TST_TN_EQ_STR("001", STR(format("~03LD", (long)1)));
1341 TST_TN_EQ_STR("010", STR(format("~03LD", (long)10)));
1342 TST_TN_EQ_STR("100", STR(format("~03LD", (long)100)));
1343
1344 TST_TN_EQ_STR("-100", STR(format("~3LD", (long)-100)));
1345 TST_TN_EQ_STR("-10", STR(format("~3LD", (long)-10)));
1346 TST_TN_EQ_STR(" -1", STR(format("~3LD", (long)-1)));
1347 TST_TN_EQ_STR(" 0", STR(format("~3LD", (long)0)));
1348 TST_TN_EQ_STR(" 1", STR(format("~3LD", (long)1)));
1349 TST_TN_EQ_STR(" 10", STR(format("~3LD", (long)10)));
1350 TST_TN_EQ_STR("100", STR(format("~3LD", (long)100)));
1351
1352 TST_TN_EQ_STR(" 123",
1353 STR(format("~127LD", (long)123)));
1354 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1355 STR(format("~0127LD", (long)123)));
1356 }
1357
1358 TST_CASE("format ~LU")
1359 {
1360 TST_TN_EQ_STR("0", STR(format("~LU", (long)0)));
1361 TST_TN_EQ_STR("1", STR(format("~LU", (long)1)));
1362 TST_TN_EQ_STR("10", STR(format("~LU", (long)10)));
1363 TST_TN_EQ_STR("100", STR(format("~LU", (long)100)));
1364
1365 TST_TN_EQ_STR("0", STR(format("~0LU", (long)0)));
1366 TST_TN_EQ_STR("1", STR(format("~0LU", (long)1)));
1367 TST_TN_EQ_STR("10", STR(format("~0LU", (long)10)));
1368 TST_TN_EQ_STR("100", STR(format("~0LU", (long)100)));
1369
1370 TST_TN_EQ_STR("000", STR(format("~03LU", (long)0)));
1371 TST_TN_EQ_STR("001", STR(format("~03LU", (long)1)));
1372 TST_TN_EQ_STR("010", STR(format("~03LU", (long)10)));
1373 TST_TN_EQ_STR("100", STR(format("~03LU", (long)100)));
1374
1375 TST_TN_EQ_STR(" 0", STR(format("~3LU", (long)0)));
1376 TST_TN_EQ_STR(" 1", STR(format("~3LU", (long)1)));
1377 TST_TN_EQ_STR(" 10", STR(format("~3LU", (long)10)));
1378 TST_TN_EQ_STR("100", STR(format("~3LU", (long)100)));
1379
1380 #if L32
1381 TST_TN_EQ_STR("4294967196", STR(format("~LU", (long)-100)));
1382 TST_TN_EQ_STR("4294967286", STR(format("~LU", (long)-10)));
1383 TST_TN_EQ_STR("4294967295", STR(format("~LU", (long)-1)));
1384
1385 TST_TN_EQ_STR("4294967196", STR(format("~0LU", (long)-100)));
1386 TST_TN_EQ_STR("4294967286", STR(format("~0LU", (long)-10)));
1387 TST_TN_EQ_STR("4294967295", STR(format("~0LU", (long)-1)));
1388
1389 TST_TN_EQ_STR("4294967196", STR(format("~03LU", (long)-100)));
1390 TST_TN_EQ_STR("4294967286", STR(format("~03LU", (long)-10)));
1391 TST_TN_EQ_STR("4294967295", STR(format("~03LU", (long)-1)));
1392
1393 TST_TN_EQ_STR("4294967196", STR(format("~3LU", (long)-100)));
1394 TST_TN_EQ_STR("4294967286", STR(format("~3LU", (long)-10)));
1395 TST_TN_EQ_STR("4294967295", STR(format("~3LU", (long)-1)));
1396 #elif L64
1397 TST_TN_EQ_STR("18446744073709551516", STR(format("~LU", (long)-100)));
1398 TST_TN_EQ_STR("18446744073709551606", STR(format("~LU", (long)-10)));
1399 TST_TN_EQ_STR("18446744073709551615", STR(format("~LU", (long)-1)));
1400
1401 TST_TN_EQ_STR("18446744073709551516", STR(format("~0LU", (long)-100)));
1402 TST_TN_EQ_STR("18446744073709551606", STR(format("~0LU", (long)-10)));
1403 TST_TN_EQ_STR("18446744073709551615", STR(format("~0LU", (long)-1)));
1404
1405 TST_TN_EQ_STR("18446744073709551516", STR(format("~03LU", (long)-100)));
1406 TST_TN_EQ_STR("18446744073709551606", STR(format("~03LU", (long)-10)));
1407 TST_TN_EQ_STR("18446744073709551615", STR(format("~03LU", (long)-1)));
1408
1409 TST_TN_EQ_STR("18446744073709551516", STR(format("~3LU", (long)-100)));
1410 TST_TN_EQ_STR("18446744073709551606", STR(format("~3LU", (long)-10)));
1411 TST_TN_EQ_STR("18446744073709551615", STR(format("~3LU", (long)-1)));
1412 #endif
1413
1414 TST_TN_EQ_STR(" 123",
1415 STR(format("~127LU", (long)123)));
1416 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1417 STR(format("~0127LU", (long)123)));
1418 }
1419
1420 TST_CASE("format ~LX")
1421 {
1422 TST_TN_EQ_STR("0", STR(format("~LX", (long)0)));
1423 TST_TN_EQ_STR("1", STR(format("~LX", (long)1)));
1424 TST_TN_EQ_STR("a", STR(format("~LX", (long)10)));
1425 TST_TN_EQ_STR("64", STR(format("~LX", (long)100)));
1426
1427 TST_TN_EQ_STR("0", STR(format("~0LX", (long)0)));
1428 TST_TN_EQ_STR("1", STR(format("~0LX", (long)1)));
1429 TST_TN_EQ_STR("a", STR(format("~0LX", (long)10)));
1430 TST_TN_EQ_STR("64", STR(format("~0LX", (long)100)));
1431
1432 TST_TN_EQ_STR("000", STR(format("~03LX", (long)0)));
1433 TST_TN_EQ_STR("001", STR(format("~03LX", (long)1)));
1434 TST_TN_EQ_STR("00a", STR(format("~03LX", (long)10)));
1435 TST_TN_EQ_STR("064", STR(format("~03LX", (long)100)));
1436
1437 TST_TN_EQ_STR(" 0", STR(format("~3LX", (long)0)));
1438 TST_TN_EQ_STR(" 1", STR(format("~3LX", (long)1)));
1439 TST_TN_EQ_STR(" a", STR(format("~3LX", (long)10)));
1440 TST_TN_EQ_STR(" 64", STR(format("~3LX", (long)100)));
1441
1442 #if L32
1443 TST_TN_EQ_STR("ffffff9c", STR(format("~LX", (long)-100)));
1444 TST_TN_EQ_STR("fffffff6", STR(format("~LX", (long)-10)));
1445 TST_TN_EQ_STR("ffffffff", STR(format("~LX", (long)-1)));
1446
1447 TST_TN_EQ_STR("ffffff9c", STR(format("~0LX", (long)-100)));
1448 TST_TN_EQ_STR("fffffff6", STR(format("~0LX", (long)-10)));
1449 TST_TN_EQ_STR("ffffffff", STR(format("~0LX", (long)-1)));
1450
1451 TST_TN_EQ_STR("ffffff9c", STR(format("~03LX", (long)-100)));
1452 TST_TN_EQ_STR("fffffff6", STR(format("~03LX", (long)-10)));
1453 TST_TN_EQ_STR("ffffffff", STR(format("~03LX", (long)-1)));
1454
1455 TST_TN_EQ_STR("ffffff9c", STR(format("~3LX", (long)-100)));
1456 TST_TN_EQ_STR("fffffff6", STR(format("~3LX", (long)-10)));
1457 TST_TN_EQ_STR("ffffffff", STR(format("~3LX", (long)-1)));
1458 #elif L64
1459 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~LX", (long)-100)));
1460 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~LX", (long)-10)));
1461 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~LX", (long)-1)));
1462
1463 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0LX", (long)-100)));
1464 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0LX", (long)-10)));
1465 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0LX", (long)-1)));
1466
1467 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03LX", (long)-100)));
1468 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03LX", (long)-10)));
1469 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03LX", (long)-1)));
1470
1471 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3LX", (long)-100)));
1472 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3LX", (long)-10)));
1473 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3LX", (long)-1)));
1474 #endif
1475
1476 TST_TN_EQ_STR(" 1ac",
1477 STR(format("~127LX", (long)0x1ac)));
1478 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
1479 STR(format("~0127LX", (long)0x1ac)));
1480 }
1481
1482 TST_CASE("format ~LO")
1483 {
1484 TST_TN_EQ_STR("0", STR(format("~LO", (long)0)));
1485 TST_TN_EQ_STR("1", STR(format("~LO", (long)1)));
1486 TST_TN_EQ_STR("12", STR(format("~LO", (long)10)));
1487 TST_TN_EQ_STR("144", STR(format("~LO", (long)100)));
1488
1489 TST_TN_EQ_STR("0", STR(format("~0LO", (long)0)));
1490 TST_TN_EQ_STR("1", STR(format("~0LO", (long)1)));
1491 TST_TN_EQ_STR("12", STR(format("~0LO", (long)10)));
1492 TST_TN_EQ_STR("144", STR(format("~0LO", (long)100)));
1493
1494 TST_TN_EQ_STR("000", STR(format("~03LO", (long)0)));
1495 TST_TN_EQ_STR("001", STR(format("~03LO", (long)1)));
1496 TST_TN_EQ_STR("012", STR(format("~03LO", (long)10)));
1497 TST_TN_EQ_STR("144", STR(format("~03LO", (long)100)));
1498
1499 TST_TN_EQ_STR(" 0", STR(format("~3LO", (long)0)));
1500 TST_TN_EQ_STR(" 1", STR(format("~3LO", (long)1)));
1501 TST_TN_EQ_STR(" 12", STR(format("~3LO", (long)10)));
1502 TST_TN_EQ_STR("144", STR(format("~3LO", (long)100)));
1503
1504 #if L32
1505 TST_TN_EQ_STR("37777777634", STR(format("~LO", (long)-100)));
1506 TST_TN_EQ_STR("37777777766", STR(format("~LO", (long)-10)));
1507 TST_TN_EQ_STR("37777777777", STR(format("~LO", (long)-1)));
1508
1509 TST_TN_EQ_STR("37777777634", STR(format("~0LO", (long)-100)));
1510 TST_TN_EQ_STR("37777777766", STR(format("~0LO", (long)-10)));
1511 TST_TN_EQ_STR("37777777777", STR(format("~0LO", (long)-1)));
1512
1513 TST_TN_EQ_STR("37777777634", STR(format("~03LO", (long)-100)));
1514 TST_TN_EQ_STR("37777777766", STR(format("~03LO", (long)-10)));
1515 TST_TN_EQ_STR("37777777777", STR(format("~03LO", (long)-1)));
1516
1517 TST_TN_EQ_STR("37777777634", STR(format("~3LO", (long)-100)));
1518 TST_TN_EQ_STR("37777777766", STR(format("~3LO", (long)-10)));
1519 TST_TN_EQ_STR("37777777777", STR(format("~3LO", (long)-1)));
1520 #elif L64
1521 TST_TN_EQ_STR("1777777777777777777634", STR(format("~LO", (long)-100)));
1522 TST_TN_EQ_STR("1777777777777777777766", STR(format("~LO", (long)-10)));
1523 TST_TN_EQ_STR("1777777777777777777777", STR(format("~LO", (long)-1)));
1524
1525 TST_TN_EQ_STR("1777777777777777777634", STR(format("~0LO", (long)-100)));
1526 TST_TN_EQ_STR("1777777777777777777766", STR(format("~0LO", (long)-10)));
1527 TST_TN_EQ_STR("1777777777777777777777", STR(format("~0LO", (long)-1)));
1528
1529 TST_TN_EQ_STR("1777777777777777777634", STR(format("~03LO", (long)-100)));
1530 TST_TN_EQ_STR("1777777777777777777766", STR(format("~03LO", (long)-10)));
1531 TST_TN_EQ_STR("1777777777777777777777", STR(format("~03LO", (long)-1)));
1532
1533 TST_TN_EQ_STR("1777777777777777777634", STR(format("~3LO", (long)-100)));
1534 TST_TN_EQ_STR("1777777777777777777766", STR(format("~3LO", (long)-10)));
1535 TST_TN_EQ_STR("1777777777777777777777", STR(format("~3LO", (long)-1)));
1536 #endif
1537
1538 TST_TN_EQ_STR(" 123",
1539 STR(format("~127LO", (long)0123)));
1540 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1541 STR(format("~0127LO", (long)0123)));
1542 }
1543
1544 TST_CASE("format ~LB")
1545 {
1546 TST_TN_EQ_STR("0", STR(format("~LB", (long)0)));
1547 TST_TN_EQ_STR("1", STR(format("~LB", (long)1)));
1548 TST_TN_EQ_STR("1010", STR(format("~LB", (long)10)));
1549 TST_TN_EQ_STR("1100100", STR(format("~LB", (long)100)));
1550
1551 TST_TN_EQ_STR("0", STR(format("~0LB", (long)0)));
1552 TST_TN_EQ_STR("1", STR(format("~0LB", (long)1)));
1553 TST_TN_EQ_STR("1010", STR(format("~0LB", (long)10)));
1554 TST_TN_EQ_STR("1100100", STR(format("~0LB", (long)100)));
1555
1556 TST_TN_EQ_STR("00000", STR(format("~05LB", (long)0)));
1557 TST_TN_EQ_STR("00001", STR(format("~05LB", (long)1)));
1558 TST_TN_EQ_STR("01010", STR(format("~05LB", (long)10)));
1559 TST_TN_EQ_STR("1100100", STR(format("~05LB", (long)100)));
1560
1561 TST_TN_EQ_STR(" 0", STR(format("~5LB", (long)0)));
1562 TST_TN_EQ_STR(" 1", STR(format("~5LB", (long)1)));
1563 TST_TN_EQ_STR(" 1010", STR(format("~5LB", (long)10)));
1564 TST_TN_EQ_STR("1100100", STR(format("~5LB", (long)100)));
1565
1566 #if L32
1567 TST_TN_EQ_STR("11111111111111111111111110011100",
1568 STR(format("~LB", (long)-100)));
1569 TST_TN_EQ_STR("11111111111111111111111111110110",
1570 STR(format("~LB", (long)-10)));
1571 TST_TN_EQ_STR("11111111111111111111111111111111",
1572 STR(format("~LB", (long)-1)));
1573
1574 TST_TN_EQ_STR("11111111111111111111111110011100",
1575 STR(format("~0LB", (long)-100)));
1576 TST_TN_EQ_STR("11111111111111111111111111110110",
1577 STR(format("~0LB", (long)-10)));
1578 TST_TN_EQ_STR("11111111111111111111111111111111",
1579 STR(format("~0LB", (long)-1)));
1580
1581 TST_TN_EQ_STR("11111111111111111111111110011100",
1582 STR(format("~05LB", (long)-100)));
1583 TST_TN_EQ_STR("11111111111111111111111111110110",
1584 STR(format("~05LB", (long)-10)));
1585 TST_TN_EQ_STR("11111111111111111111111111111111",
1586 STR(format("~05LB", (long)-1)));
1587
1588 TST_TN_EQ_STR("11111111111111111111111110011100",
1589 STR(format("~5LB", (long)-100)));
1590 TST_TN_EQ_STR("11111111111111111111111111110110",
1591 STR(format("~5LB", (long)-10)));
1592 TST_TN_EQ_STR("11111111111111111111111111111111",
1593 STR(format("~5LB", (long)-1)));
1594 #elif L64
1595 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1596 STR(format("~LB", (long)-100)));
1597 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1598 STR(format("~LB", (long)-10)));
1599 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1600 STR(format("~LB", (long)-1)));
1601
1602 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1603 STR(format("~0LB", (long)-100)));
1604 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1605 STR(format("~0LB", (long)-10)));
1606 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1607 STR(format("~0LB", (long)-1)));
1608
1609 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1610 STR(format("~05LB", (long)-100)));
1611 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1612 STR(format("~05LB", (long)-10)));
1613 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1614 STR(format("~05LB", (long)-1)));
1615
1616 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1617 STR(format("~5LB", (long)-100)));
1618 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1619 STR(format("~5LB", (long)-10)));
1620 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1621 STR(format("~5LB", (long)-1)));
1622 #endif
1623
1624 TST_TN_EQ_STR(" 101",
1625 STR(format("~127LB", (long)0x5)));
1626 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
1627 STR(format("~0127LB", (long)0x5)));
1628 }
1629
1630 TST_CASE("format ~JD")
1631 {
1632 TST_TN_EQ_STR("-100", STR(format("~JD", (intmax_t)-100)));
1633 TST_TN_EQ_STR("-10", STR(format("~JD", (intmax_t)-10)));
1634 TST_TN_EQ_STR("-1", STR(format("~JD", (intmax_t)-1)));
1635 TST_TN_EQ_STR("0", STR(format("~JD", (intmax_t)0)));
1636 TST_TN_EQ_STR("1", STR(format("~JD", (intmax_t)1)));
1637 TST_TN_EQ_STR("10", STR(format("~JD", (intmax_t)10)));
1638 TST_TN_EQ_STR("100", STR(format("~JD", (intmax_t)100)));
1639
1640 TST_TN_EQ_STR("-100", STR(format("~0JD", (intmax_t)-100)));
1641 TST_TN_EQ_STR("-10", STR(format("~0JD", (intmax_t)-10)));
1642 TST_TN_EQ_STR("-1", STR(format("~0JD", (intmax_t)-1)));
1643 TST_TN_EQ_STR("0", STR(format("~0JD", (intmax_t)0)));
1644 TST_TN_EQ_STR("1", STR(format("~0JD", (intmax_t)1)));
1645 TST_TN_EQ_STR("10", STR(format("~0JD", (intmax_t)10)));
1646 TST_TN_EQ_STR("100", STR(format("~0JD", (intmax_t)100)));
1647
1648 TST_TN_EQ_STR("-100", STR(format("~03JD", (intmax_t)-100)));
1649 TST_TN_EQ_STR("-10", STR(format("~03JD", (intmax_t)-10)));
1650 TST_TN_EQ_STR("-01", STR(format("~03JD", (intmax_t)-1)));
1651 TST_TN_EQ_STR("000", STR(format("~03JD", (intmax_t)0)));
1652 TST_TN_EQ_STR("001", STR(format("~03JD", (intmax_t)1)));
1653 TST_TN_EQ_STR("010", STR(format("~03JD", (intmax_t)10)));
1654 TST_TN_EQ_STR("100", STR(format("~03JD", (intmax_t)100)));
1655
1656 TST_TN_EQ_STR("-100", STR(format("~3JD", (intmax_t)-100)));
1657 TST_TN_EQ_STR("-10", STR(format("~3JD", (intmax_t)-10)));
1658 TST_TN_EQ_STR(" -1", STR(format("~3JD", (intmax_t)-1)));
1659 TST_TN_EQ_STR(" 0", STR(format("~3JD", (intmax_t)0)));
1660 TST_TN_EQ_STR(" 1", STR(format("~3JD", (intmax_t)1)));
1661 TST_TN_EQ_STR(" 10", STR(format("~3JD", (intmax_t)10)));
1662 TST_TN_EQ_STR("100", STR(format("~3JD", (intmax_t)100)));
1663
1664 TST_TN_EQ_STR(" 123",
1665 STR(format("~127JD", (intmax_t)123)));
1666 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1667 STR(format("~0127JD", (intmax_t)123)));
1668 }
1669
1670 TST_CASE("format ~JU")
1671 {
1672 TST_TN_EQ_STR("0", STR(format("~JU", (intmax_t)0)));
1673 TST_TN_EQ_STR("1", STR(format("~JU", (intmax_t)1)));
1674 TST_TN_EQ_STR("10", STR(format("~JU", (intmax_t)10)));
1675 TST_TN_EQ_STR("100", STR(format("~JU", (intmax_t)100)));
1676
1677 TST_TN_EQ_STR("0", STR(format("~0JU", (intmax_t)0)));
1678 TST_TN_EQ_STR("1", STR(format("~0JU", (intmax_t)1)));
1679 TST_TN_EQ_STR("10", STR(format("~0JU", (intmax_t)10)));
1680 TST_TN_EQ_STR("100", STR(format("~0JU", (intmax_t)100)));
1681
1682 TST_TN_EQ_STR("000", STR(format("~03JU", (intmax_t)0)));
1683 TST_TN_EQ_STR("001", STR(format("~03JU", (intmax_t)1)));
1684 TST_TN_EQ_STR("010", STR(format("~03JU", (intmax_t)10)));
1685 TST_TN_EQ_STR("100", STR(format("~03JU", (intmax_t)100)));
1686
1687 TST_TN_EQ_STR(" 0", STR(format("~3JU", (intmax_t)0)));
1688 TST_TN_EQ_STR(" 1", STR(format("~3JU", (intmax_t)1)));
1689 TST_TN_EQ_STR(" 10", STR(format("~3JU", (intmax_t)10)));
1690 TST_TN_EQ_STR("100", STR(format("~3JU", (intmax_t)100)));
1691
1692 #if IMAX32
1693 TST_TN_EQ_STR("4294967196", STR(format("~JU", (intmax_t)-100)));
1694 TST_TN_EQ_STR("4294967286", STR(format("~JU", (intmax_t)-10)));
1695 TST_TN_EQ_STR("4294967295", STR(format("~JU", (intmax_t)-1)));
1696
1697 TST_TN_EQ_STR("4294967196", STR(format("~0JU", (intmax_t)-100)));
1698 TST_TN_EQ_STR("4294967286", STR(format("~0JU", (intmax_t)-10)));
1699 TST_TN_EQ_STR("4294967295", STR(format("~0JU", (intmax_t)-1)));
1700
1701 TST_TN_EQ_STR("4294967196", STR(format("~03JU", (intmax_t)-100)));
1702 TST_TN_EQ_STR("4294967286", STR(format("~03JU", (intmax_t)-10)));
1703 TST_TN_EQ_STR("4294967295", STR(format("~03JU", (intmax_t)-1)));
1704
1705 TST_TN_EQ_STR("4294967196", STR(format("~3JU", (intmax_t)-100)));
1706 TST_TN_EQ_STR("4294967286", STR(format("~3JU", (intmax_t)-10)));
1707 TST_TN_EQ_STR("4294967295", STR(format("~3JU", (intmax_t)-1)));
1708 #elif IMAX64
1709 TST_TN_EQ_STR("18446744073709551516", STR(format("~JU", (intmax_t)-100)));
1710 TST_TN_EQ_STR("18446744073709551606", STR(format("~JU", (intmax_t)-10)));
1711 TST_TN_EQ_STR("18446744073709551615", STR(format("~JU", (intmax_t)-1)));
1712
1713 TST_TN_EQ_STR("18446744073709551516", STR(format("~0JU", (intmax_t)-100)));
1714 TST_TN_EQ_STR("18446744073709551606", STR(format("~0JU", (intmax_t)-10)));
1715 TST_TN_EQ_STR("18446744073709551615", STR(format("~0JU", (intmax_t)-1)));
1716
1717 TST_TN_EQ_STR("18446744073709551516", STR(format("~03JU",(intmax_t)-100)));
1718 TST_TN_EQ_STR("18446744073709551606", STR(format("~03JU",(intmax_t)-10)));
1719 TST_TN_EQ_STR("18446744073709551615", STR(format("~03JU",(intmax_t)-1)));
1720
1721 TST_TN_EQ_STR("18446744073709551516", STR(format("~3JU", (intmax_t)-100)));
1722 TST_TN_EQ_STR("18446744073709551606", STR(format("~3JU", (intmax_t)-10)));
1723 TST_TN_EQ_STR("18446744073709551615", STR(format("~3JU", (intmax_t)-1)));
1724 #endif
1725
1726 TST_TN_EQ_STR(" 123",
1727 STR(format("~127JU", (intmax_t)123)));
1728 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1729 STR(format("~0127JU", (intmax_t)123)));
1730 }
1731
1732 TST_CASE("format ~JX")
1733 {
1734 TST_TN_EQ_STR("0", STR(format("~JX", (intmax_t)0)));
1735 TST_TN_EQ_STR("1", STR(format("~JX", (intmax_t)1)));
1736 TST_TN_EQ_STR("a", STR(format("~JX", (intmax_t)10)));
1737 TST_TN_EQ_STR("64", STR(format("~JX", (intmax_t)100)));
1738
1739 TST_TN_EQ_STR("0", STR(format("~0JX", (intmax_t)0)));
1740 TST_TN_EQ_STR("1", STR(format("~0JX", (intmax_t)1)));
1741 TST_TN_EQ_STR("a", STR(format("~0JX", (intmax_t)10)));
1742 TST_TN_EQ_STR("64", STR(format("~0JX", (intmax_t)100)));
1743
1744 TST_TN_EQ_STR("000", STR(format("~03JX", (intmax_t)0)));
1745 TST_TN_EQ_STR("001", STR(format("~03JX", (intmax_t)1)));
1746 TST_TN_EQ_STR("00a", STR(format("~03JX", (intmax_t)10)));
1747 TST_TN_EQ_STR("064", STR(format("~03JX", (intmax_t)100)));
1748
1749 TST_TN_EQ_STR(" 0", STR(format("~3JX", (intmax_t)0)));
1750 TST_TN_EQ_STR(" 1", STR(format("~3JX", (intmax_t)1)));
1751 TST_TN_EQ_STR(" a", STR(format("~3JX", (intmax_t)10)));
1752 TST_TN_EQ_STR(" 64", STR(format("~3JX", (intmax_t)100)));
1753
1754 #if IMAX32
1755 TST_TN_EQ_STR("ffffff9c", STR(format("~JX", (intmax_t)-100)));
1756 TST_TN_EQ_STR("fffffff6", STR(format("~JX", (intmax_t)-10)));
1757 TST_TN_EQ_STR("ffffffff", STR(format("~JX", (intmax_t)-1)));
1758
1759 TST_TN_EQ_STR("ffffff9c", STR(format("~0JX", (intmax_t)-100)));
1760 TST_TN_EQ_STR("fffffff6", STR(format("~0JX", (intmax_t)-10)));
1761 TST_TN_EQ_STR("ffffffff", STR(format("~0JX", (intmax_t)-1)));
1762
1763 TST_TN_EQ_STR("ffffff9c", STR(format("~03JX", (intmax_t)-100)));
1764 TST_TN_EQ_STR("fffffff6", STR(format("~03JX", (intmax_t)-10)));
1765 TST_TN_EQ_STR("ffffffff", STR(format("~03JX", (intmax_t)-1)));
1766
1767 TST_TN_EQ_STR("ffffff9c", STR(format("~3JX", (intmax_t)-100)));
1768 TST_TN_EQ_STR("fffffff6", STR(format("~3JX", (intmax_t)-10)));
1769 TST_TN_EQ_STR("ffffffff", STR(format("~3JX", (intmax_t)-1)));
1770 #elif IMAX64
1771 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~JX", (intmax_t)-100)));
1772 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~JX", (intmax_t)-10)));
1773 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~JX", (intmax_t)-1)));
1774
1775 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0JX", (intmax_t)-100)));
1776 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0JX", (intmax_t)-10)));
1777 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0JX", (intmax_t)-1)));
1778
1779 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03JX", (intmax_t)-100)));
1780 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03JX", (intmax_t)-10)));
1781 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03JX", (intmax_t)-1)));
1782
1783 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3JX", (intmax_t)-100)));
1784 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3JX", (intmax_t)-10)));
1785 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3JX", (intmax_t)-1)));
1786 #endif
1787
1788 TST_TN_EQ_STR(" 1ac",
1789 STR(format("~127JX", (intmax_t)0x1ac)));
1790 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
1791 STR(format("~0127JX", (intmax_t)0x1ac)));
1792 }
1793
1794 TST_CASE("format ~JO")
1795 {
1796 TST_TN_EQ_STR("0", STR(format("~JO", (intmax_t)0)));
1797 TST_TN_EQ_STR("1", STR(format("~JO", (intmax_t)1)));
1798 TST_TN_EQ_STR("12", STR(format("~JO", (intmax_t)10)));
1799 TST_TN_EQ_STR("144", STR(format("~JO", (intmax_t)100)));
1800
1801 TST_TN_EQ_STR("0", STR(format("~0JO", (intmax_t)0)));
1802 TST_TN_EQ_STR("1", STR(format("~0JO", (intmax_t)1)));
1803 TST_TN_EQ_STR("12", STR(format("~0JO", (intmax_t)10)));
1804 TST_TN_EQ_STR("144", STR(format("~0JO", (intmax_t)100)));
1805
1806 TST_TN_EQ_STR("000", STR(format("~03JO", (intmax_t)0)));
1807 TST_TN_EQ_STR("001", STR(format("~03JO", (intmax_t)1)));
1808 TST_TN_EQ_STR("012", STR(format("~03JO", (intmax_t)10)));
1809 TST_TN_EQ_STR("144", STR(format("~03JO", (intmax_t)100)));
1810
1811 TST_TN_EQ_STR(" 0", STR(format("~3JO", (intmax_t)0)));
1812 TST_TN_EQ_STR(" 1", STR(format("~3JO", (intmax_t)1)));
1813 TST_TN_EQ_STR(" 12", STR(format("~3JO", (intmax_t)10)));
1814 TST_TN_EQ_STR("144", STR(format("~3JO", (intmax_t)100)));
1815
1816 #if IMAX32
1817 TST_TN_EQ_STR("37777777634", STR(format("~JO", (intmax_t)-100)));
1818 TST_TN_EQ_STR("37777777766", STR(format("~JO", (intmax_t)-10)));
1819 TST_TN_EQ_STR("37777777777", STR(format("~JO", (intmax_t)-1)));
1820
1821 TST_TN_EQ_STR("37777777634", STR(format("~0JO", (intmax_t)-100)));
1822 TST_TN_EQ_STR("37777777766", STR(format("~0JO", (intmax_t)-10)));
1823 TST_TN_EQ_STR("37777777777", STR(format("~0JO", (intmax_t)-1)));
1824
1825 TST_TN_EQ_STR("37777777634", STR(format("~03JO", (intmax_t)-100)));
1826 TST_TN_EQ_STR("37777777766", STR(format("~03JO", (intmax_t)-10)));
1827 TST_TN_EQ_STR("37777777777", STR(format("~03JO", (intmax_t)-1)));
1828
1829 TST_TN_EQ_STR("37777777634", STR(format("~3JO", (intmax_t)-100)));
1830 TST_TN_EQ_STR("37777777766", STR(format("~3JO", (intmax_t)-10)));
1831 TST_TN_EQ_STR("37777777777", STR(format("~3JO", (intmax_t)-1)));
1832 #elif IMAX64
1833 TST_TN_EQ_STR("1777777777777777777634",
1834 STR(format("~JO", (intmax_t)-100)));
1835 TST_TN_EQ_STR("1777777777777777777766",
1836 STR(format("~JO", (intmax_t)-10)));
1837 TST_TN_EQ_STR("1777777777777777777777",
1838 STR(format("~JO", (intmax_t)-1)));
1839
1840 TST_TN_EQ_STR("1777777777777777777634",
1841 STR(format("~0JO", (intmax_t)-100)));
1842 TST_TN_EQ_STR("1777777777777777777766",
1843 STR(format("~0JO", (intmax_t)-10)));
1844 TST_TN_EQ_STR("1777777777777777777777",
1845 STR(format("~0JO", (intmax_t)-1)));
1846
1847 TST_TN_EQ_STR("1777777777777777777634",
1848 STR(format("~03JO", (intmax_t)-100)));
1849 TST_TN_EQ_STR("1777777777777777777766",
1850 STR(format("~03JO", (intmax_t)-10)));
1851 TST_TN_EQ_STR("1777777777777777777777",
1852 STR(format("~03JO", (intmax_t)-1)));
1853
1854 TST_TN_EQ_STR("1777777777777777777634",
1855 STR(format("~3JO", (intmax_t)-100)));
1856 TST_TN_EQ_STR("1777777777777777777766",
1857 STR(format("~3JO", (intmax_t)-10)));
1858 TST_TN_EQ_STR("1777777777777777777777",
1859 STR(format("~3JO", (intmax_t)-1)));
1860 #endif
1861
1862 TST_TN_EQ_STR(" 123",
1863 STR(format("~127JO", (intmax_t)0123)));
1864 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1865 STR(format("~0127JO", (intmax_t)0123)));
1866 }
1867
1868 TST_CASE("format ~JB")
1869 {
1870 TST_TN_EQ_STR("0", STR(format("~JB", (intmax_t)0)));
1871 TST_TN_EQ_STR("1", STR(format("~JB", (intmax_t)1)));
1872 TST_TN_EQ_STR("1010", STR(format("~JB", (intmax_t)10)));
1873 TST_TN_EQ_STR("1100100", STR(format("~JB", (intmax_t)100)));
1874
1875 TST_TN_EQ_STR("0", STR(format("~0JB", (intmax_t)0)));
1876 TST_TN_EQ_STR("1", STR(format("~0JB", (intmax_t)1)));
1877 TST_TN_EQ_STR("1010", STR(format("~0JB", (intmax_t)10)));
1878 TST_TN_EQ_STR("1100100", STR(format("~0JB", (intmax_t)100)));
1879
1880 TST_TN_EQ_STR("00000", STR(format("~05JB", (intmax_t)0)));
1881 TST_TN_EQ_STR("00001", STR(format("~05JB", (intmax_t)1)));
1882 TST_TN_EQ_STR("01010", STR(format("~05JB", (intmax_t)10)));
1883 TST_TN_EQ_STR("1100100", STR(format("~05JB", (intmax_t)100)));
1884
1885 TST_TN_EQ_STR(" 0", STR(format("~5JB", (intmax_t)0)));
1886 TST_TN_EQ_STR(" 1", STR(format("~5JB", (intmax_t)1)));
1887 TST_TN_EQ_STR(" 1010", STR(format("~5JB", (intmax_t)10)));
1888 TST_TN_EQ_STR("1100100", STR(format("~5JB", (intmax_t)100)));
1889
1890 #if IMAX32
1891 TST_TN_EQ_STR("11111111111111111111111110011100",
1892 STR(format("~JB", (intmax_t)-100)));
1893 TST_TN_EQ_STR("11111111111111111111111111110110",
1894 STR(format("~JB", (intmax_t)-10)));
1895 TST_TN_EQ_STR("11111111111111111111111111111111",
1896 STR(format("~JB", (intmax_t)-1)));
1897
1898 TST_TN_EQ_STR("11111111111111111111111110011100",
1899 STR(format("~0JB", (intmax_t)-100)));
1900 TST_TN_EQ_STR("11111111111111111111111111110110",
1901 STR(format("~0JB", (intmax_t)-10)));
1902 TST_TN_EQ_STR("11111111111111111111111111111111",
1903 STR(format("~0JB", (intmax_t)-1)));
1904
1905 TST_TN_EQ_STR("11111111111111111111111110011100",
1906 STR(format("~05JB", (intmax_t)-100)));
1907 TST_TN_EQ_STR("11111111111111111111111111110110",
1908 STR(format("~05JB", (intmax_t)-10)));
1909 TST_TN_EQ_STR("11111111111111111111111111111111",
1910 STR(format("~05JB", (intmax_t)-1)));
1911
1912 TST_TN_EQ_STR("11111111111111111111111110011100",
1913 STR(format("~5JB", (intmax_t)-100)));
1914 TST_TN_EQ_STR("11111111111111111111111111110110",
1915 STR(format("~5JB", (intmax_t)-10)));
1916 TST_TN_EQ_STR("11111111111111111111111111111111",
1917 STR(format("~5JB", (intmax_t)-1)));
1918 #elif IMAX64
1919 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1920 STR(format("~JB", (intmax_t)-100)));
1921 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1922 STR(format("~JB", (intmax_t)-10)));
1923 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1924 STR(format("~JB", (intmax_t)-1)));
1925
1926 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1927 STR(format("~0JB", (intmax_t)-100)));
1928 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1929 STR(format("~0JB", (intmax_t)-10)));
1930 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1931 STR(format("~0JB", (intmax_t)-1)));
1932
1933 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1934 STR(format("~05JB", (intmax_t)-100)));
1935 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1936 STR(format("~05JB", (intmax_t)-10)));
1937 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1938 STR(format("~05JB", (intmax_t)-1)));
1939
1940 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
1941 STR(format("~5JB", (intmax_t)-100)));
1942 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
1943 STR(format("~5JB", (intmax_t)-10)));
1944 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
1945 STR(format("~5JB", (intmax_t)-1)));
1946 #endif
1947
1948 TST_TN_EQ_STR(" 101",
1949 STR(format("~127JB", (intmax_t)0x5)));
1950 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
1951 STR(format("~0127JB", (intmax_t)0x5)));
1952 }
1953
1954 TST_CASE("format ~TD")
1955 {
1956 TST_TN_EQ_STR("-100", STR(format("~TD", (ptrdiff_t)-100)));
1957 TST_TN_EQ_STR("-10", STR(format("~TD", (ptrdiff_t)-10)));
1958 TST_TN_EQ_STR("-1", STR(format("~TD", (ptrdiff_t)-1)));
1959 TST_TN_EQ_STR("0", STR(format("~TD", (ptrdiff_t)0)));
1960 TST_TN_EQ_STR("1", STR(format("~TD", (ptrdiff_t)1)));
1961 TST_TN_EQ_STR("10", STR(format("~TD", (ptrdiff_t)10)));
1962 TST_TN_EQ_STR("100", STR(format("~TD", (ptrdiff_t)100)));
1963
1964 TST_TN_EQ_STR("-100", STR(format("~0TD", (ptrdiff_t)-100)));
1965 TST_TN_EQ_STR("-10", STR(format("~0TD", (ptrdiff_t)-10)));
1966 TST_TN_EQ_STR("-1", STR(format("~0TD", (ptrdiff_t)-1)));
1967 TST_TN_EQ_STR("0", STR(format("~0TD", (ptrdiff_t)0)));
1968 TST_TN_EQ_STR("1", STR(format("~0TD", (ptrdiff_t)1)));
1969 TST_TN_EQ_STR("10", STR(format("~0TD", (ptrdiff_t)10)));
1970 TST_TN_EQ_STR("100", STR(format("~0TD", (ptrdiff_t)100)));
1971
1972 TST_TN_EQ_STR("-100", STR(format("~03TD", (ptrdiff_t)-100)));
1973 TST_TN_EQ_STR("-10", STR(format("~03TD", (ptrdiff_t)-10)));
1974 TST_TN_EQ_STR("-01", STR(format("~03TD", (ptrdiff_t)-1)));
1975 TST_TN_EQ_STR("000", STR(format("~03TD", (ptrdiff_t)0)));
1976 TST_TN_EQ_STR("001", STR(format("~03TD", (ptrdiff_t)1)));
1977 TST_TN_EQ_STR("010", STR(format("~03TD", (ptrdiff_t)10)));
1978 TST_TN_EQ_STR("100", STR(format("~03TD", (ptrdiff_t)100)));
1979
1980 TST_TN_EQ_STR("-100", STR(format("~3TD", (ptrdiff_t)-100)));
1981 TST_TN_EQ_STR("-10", STR(format("~3TD", (ptrdiff_t)-10)));
1982 TST_TN_EQ_STR(" -1", STR(format("~3TD", (ptrdiff_t)-1)));
1983 TST_TN_EQ_STR(" 0", STR(format("~3TD", (ptrdiff_t)0)));
1984 TST_TN_EQ_STR(" 1", STR(format("~3TD", (ptrdiff_t)1)));
1985 TST_TN_EQ_STR(" 10", STR(format("~3TD", (ptrdiff_t)10)));
1986 TST_TN_EQ_STR("100", STR(format("~3TD", (ptrdiff_t)100)));
1987
1988 TST_TN_EQ_STR(" 123",
1989 STR(format("~127TD", (ptrdiff_t)123)));
1990 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
1991 STR(format("~0127TD", (ptrdiff_t)123)));
1992 }
1993
1994 TST_CASE("format ~TU")
1995 {
1996 TST_TN_EQ_STR("0", STR(format("~TU", (ptrdiff_t)0)));
1997 TST_TN_EQ_STR("1", STR(format("~TU", (ptrdiff_t)1)));
1998 TST_TN_EQ_STR("10", STR(format("~TU", (ptrdiff_t)10)));
1999 TST_TN_EQ_STR("100", STR(format("~TU", (ptrdiff_t)100)));
2000
2001 TST_TN_EQ_STR("0", STR(format("~0TU", (ptrdiff_t)0)));
2002 TST_TN_EQ_STR("1", STR(format("~0TU", (ptrdiff_t)1)));
2003 TST_TN_EQ_STR("10", STR(format("~0TU", (ptrdiff_t)10)));
2004 TST_TN_EQ_STR("100", STR(format("~0TU", (ptrdiff_t)100)));
2005
2006 TST_TN_EQ_STR("000", STR(format("~03TU", (ptrdiff_t)0)));
2007 TST_TN_EQ_STR("001", STR(format("~03TU", (ptrdiff_t)1)));
2008 TST_TN_EQ_STR("010", STR(format("~03TU", (ptrdiff_t)10)));
2009 TST_TN_EQ_STR("100", STR(format("~03TU", (ptrdiff_t)100)));
2010
2011 TST_TN_EQ_STR(" 0", STR(format("~3TU", (ptrdiff_t)0)));
2012 TST_TN_EQ_STR(" 1", STR(format("~3TU", (ptrdiff_t)1)));
2013 TST_TN_EQ_STR(" 10", STR(format("~3TU", (ptrdiff_t)10)));
2014 TST_TN_EQ_STR("100", STR(format("~3TU", (ptrdiff_t)100)));
2015
2016 #if PDIFF32
2017 TST_TN_EQ_STR("4294967196", STR(format("~TU", (ptrdiff_t)-100)));
2018 TST_TN_EQ_STR("4294967286", STR(format("~TU", (ptrdiff_t)-10)));
2019 TST_TN_EQ_STR("4294967295", STR(format("~TU", (ptrdiff_t)-1)));
2020
2021 TST_TN_EQ_STR("4294967196", STR(format("~0TU", (ptrdiff_t)-100)));
2022 TST_TN_EQ_STR("4294967286", STR(format("~0TU", (ptrdiff_t)-10)));
2023 TST_TN_EQ_STR("4294967295", STR(format("~0TU", (ptrdiff_t)-1)));
2024
2025 TST_TN_EQ_STR("4294967196", STR(format("~03TU", (ptrdiff_t)-100)));
2026 TST_TN_EQ_STR("4294967286", STR(format("~03TU", (ptrdiff_t)-10)));
2027 TST_TN_EQ_STR("4294967295", STR(format("~03TU", (ptrdiff_t)-1)));
2028
2029 TST_TN_EQ_STR("4294967196", STR(format("~3TU", (ptrdiff_t)-100)));
2030 TST_TN_EQ_STR("4294967286", STR(format("~3TU", (ptrdiff_t)-10)));
2031 TST_TN_EQ_STR("4294967295", STR(format("~3TU", (ptrdiff_t)-1)));
2032 #elif PDIFF64
2033 TST_TN_EQ_STR("18446744073709551516",
2034 STR(format("~TU", (ptrdiff_t)-100)));
2035 TST_TN_EQ_STR("18446744073709551606",
2036 STR(format("~TU", (ptrdiff_t)-10)));
2037 TST_TN_EQ_STR("18446744073709551615",
2038 STR(format("~TU", (ptrdiff_t)-1)));
2039
2040 TST_TN_EQ_STR("18446744073709551516",
2041 STR(format("~0TU", (ptrdiff_t)-100)));
2042 TST_TN_EQ_STR("18446744073709551606",
2043 STR(format("~0TU", (ptrdiff_t)-10)));
2044 TST_TN_EQ_STR("18446744073709551615",
2045 STR(format("~0TU", (ptrdiff_t)-1)));
2046
2047 TST_TN_EQ_STR("18446744073709551516",
2048 STR(format("~03TU", (ptrdiff_t)-100)));
2049 TST_TN_EQ_STR("18446744073709551606",
2050 STR(format("~03TU", (ptrdiff_t)-10)));
2051 TST_TN_EQ_STR("18446744073709551615",
2052 STR(format("~03TU", (ptrdiff_t)-1)));
2053
2054 TST_TN_EQ_STR("18446744073709551516",
2055 STR(format("~3TU", (ptrdiff_t)-100)));
2056 TST_TN_EQ_STR("18446744073709551606",
2057 STR(format("~3TU", (ptrdiff_t)-10)));
2058 TST_TN_EQ_STR("18446744073709551615",
2059 STR(format("~3TU", (ptrdiff_t)-1)));
2060 #endif
2061
2062 TST_TN_EQ_STR(" 123",
2063 STR(format("~127TU", (ptrdiff_t)123)));
2064 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
2065 STR(format("~0127TU", (ptrdiff_t)123)));
2066 }
2067
2068 TST_CASE("format ~TX")
2069 {
2070 TST_TN_EQ_STR("0", STR(format("~TX", (ptrdiff_t)0)));
2071 TST_TN_EQ_STR("1", STR(format("~TX", (ptrdiff_t)1)));
2072 TST_TN_EQ_STR("a", STR(format("~TX", (ptrdiff_t)10)));
2073 TST_TN_EQ_STR("64", STR(format("~TX", (ptrdiff_t)100)));
2074
2075 TST_TN_EQ_STR("0", STR(format("~0TX", (ptrdiff_t)0)));
2076 TST_TN_EQ_STR("1", STR(format("~0TX", (ptrdiff_t)1)));
2077 TST_TN_EQ_STR("a", STR(format("~0TX", (ptrdiff_t)10)));
2078 TST_TN_EQ_STR("64", STR(format("~0TX", (ptrdiff_t)100)));
2079
2080 TST_TN_EQ_STR("000", STR(format("~03TX", (ptrdiff_t)0)));
2081 TST_TN_EQ_STR("001", STR(format("~03TX", (ptrdiff_t)1)));
2082 TST_TN_EQ_STR("00a", STR(format("~03TX", (ptrdiff_t)10)));
2083 TST_TN_EQ_STR("064", STR(format("~03TX", (ptrdiff_t)100)));
2084
2085 TST_TN_EQ_STR(" 0", STR(format("~3TX", (ptrdiff_t)0)));
2086 TST_TN_EQ_STR(" 1", STR(format("~3TX", (ptrdiff_t)1)));
2087 TST_TN_EQ_STR(" a", STR(format("~3TX", (ptrdiff_t)10)));
2088 TST_TN_EQ_STR(" 64", STR(format("~3TX", (ptrdiff_t)100)));
2089
2090 #if PDIFF32
2091 TST_TN_EQ_STR("ffffff9c", STR(format("~TX", (ptrdiff_t)-100)));
2092 TST_TN_EQ_STR("fffffff6", STR(format("~TX", (ptrdiff_t)-10)));
2093 TST_TN_EQ_STR("ffffffff", STR(format("~TX", (ptrdiff_t)-1)));
2094
2095 TST_TN_EQ_STR("ffffff9c", STR(format("~0TX", (ptrdiff_t)-100)));
2096 TST_TN_EQ_STR("fffffff6", STR(format("~0TX", (ptrdiff_t)-10)));
2097 TST_TN_EQ_STR("ffffffff", STR(format("~0TX", (ptrdiff_t)-1)));
2098
2099 TST_TN_EQ_STR("ffffff9c", STR(format("~03TX", (ptrdiff_t)-100)));
2100 TST_TN_EQ_STR("fffffff6", STR(format("~03TX", (ptrdiff_t)-10)));
2101 TST_TN_EQ_STR("ffffffff", STR(format("~03TX", (ptrdiff_t)-1)));
2102
2103 TST_TN_EQ_STR("ffffff9c", STR(format("~3TX", (ptrdiff_t)-100)));
2104 TST_TN_EQ_STR("fffffff6", STR(format("~3TX", (ptrdiff_t)-10)));
2105 TST_TN_EQ_STR("ffffffff", STR(format("~3TX", (ptrdiff_t)-1)));
2106 #elif PDIFF64
2107 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~TX", (ptrdiff_t)-100)));
2108 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~TX", (ptrdiff_t)-10)));
2109 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~TX", (ptrdiff_t)-1)));
2110
2111 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0TX", (ptrdiff_t)-100)));
2112 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0TX", (ptrdiff_t)-10)));
2113 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0TX", (ptrdiff_t)-1)));
2114
2115 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03TX", (ptrdiff_t)-100)));
2116 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03TX", (ptrdiff_t)-10)));
2117 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03TX", (ptrdiff_t)-1)));
2118
2119 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3TX", (ptrdiff_t)-100)));
2120 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3TX", (ptrdiff_t)-10)));
2121 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3TX", (ptrdiff_t)-1)));
2122 #endif
2123
2124 TST_TN_EQ_STR(" 1ac",
2125 STR(format("~127TX", (ptrdiff_t)0x1ac)));
2126 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
2127 STR(format("~0127TX", (ptrdiff_t)0x1ac)));
2128 }
2129
2130 TST_CASE("format ~TO")
2131 {
2132 TST_TN_EQ_STR("0", STR(format("~TO", (ptrdiff_t)0)));
2133 TST_TN_EQ_STR("1", STR(format("~TO", (ptrdiff_t)1)));
2134 TST_TN_EQ_STR("12", STR(format("~TO", (ptrdiff_t)10)));
2135 TST_TN_EQ_STR("144", STR(format("~TO", (ptrdiff_t)100)));
2136
2137 TST_TN_EQ_STR("0", STR(format("~0TO", (ptrdiff_t)0)));
2138 TST_TN_EQ_STR("1", STR(format("~0TO", (ptrdiff_t)1)));
2139 TST_TN_EQ_STR("12", STR(format("~0TO", (ptrdiff_t)10)));
2140 TST_TN_EQ_STR("144", STR(format("~0TO", (ptrdiff_t)100)));
2141
2142 TST_TN_EQ_STR("000", STR(format("~03TO", (ptrdiff_t)0)));
2143 TST_TN_EQ_STR("001", STR(format("~03TO", (ptrdiff_t)1)));
2144 TST_TN_EQ_STR("012", STR(format("~03TO", (ptrdiff_t)10)));
2145 TST_TN_EQ_STR("144", STR(format("~03TO", (ptrdiff_t)100)));
2146
2147 TST_TN_EQ_STR(" 0", STR(format("~3TO", (ptrdiff_t)0)));
2148 TST_TN_EQ_STR(" 1", STR(format("~3TO", (ptrdiff_t)1)));
2149 TST_TN_EQ_STR(" 12", STR(format("~3TO", (ptrdiff_t)10)));
2150 TST_TN_EQ_STR("144", STR(format("~3TO", (ptrdiff_t)100)));
2151
2152 #if PDIFF32
2153 TST_TN_EQ_STR("37777777634", STR(format("~TO", (ptrdiff_t)-100)));
2154 TST_TN_EQ_STR("37777777766", STR(format("~TO", (ptrdiff_t)-10)));
2155 TST_TN_EQ_STR("37777777777", STR(format("~TO", (ptrdiff_t)-1)));
2156
2157 TST_TN_EQ_STR("37777777634", STR(format("~0TO", (ptrdiff_t)-100)));
2158 TST_TN_EQ_STR("37777777766", STR(format("~0TO", (ptrdiff_t)-10)));
2159 TST_TN_EQ_STR("37777777777", STR(format("~0TO", (ptrdiff_t)-1)));
2160
2161 TST_TN_EQ_STR("37777777634", STR(format("~03TO", (ptrdiff_t)-100)));
2162 TST_TN_EQ_STR("37777777766", STR(format("~03TO", (ptrdiff_t)-10)));
2163 TST_TN_EQ_STR("37777777777", STR(format("~03TO", (ptrdiff_t)-1)));
2164
2165 TST_TN_EQ_STR("37777777634", STR(format("~3TO", (ptrdiff_t)-100)));
2166 TST_TN_EQ_STR("37777777766", STR(format("~3TO", (ptrdiff_t)-10)));
2167 TST_TN_EQ_STR("37777777777", STR(format("~3TO", (ptrdiff_t)-1)));
2168 #elif PDIFF64
2169 TST_TN_EQ_STR("1777777777777777777634",
2170 STR(format("~TO", (ptrdiff_t)-100)));
2171 TST_TN_EQ_STR("1777777777777777777766",
2172 STR(format("~TO", (ptrdiff_t)-10)));
2173 TST_TN_EQ_STR("1777777777777777777777",
2174 STR(format("~TO", (ptrdiff_t)-1)));
2175
2176 TST_TN_EQ_STR("1777777777777777777634",
2177 STR(format("~0TO", (ptrdiff_t)-100)));
2178 TST_TN_EQ_STR("1777777777777777777766",
2179 STR(format("~0TO", (ptrdiff_t)-10)));
2180 TST_TN_EQ_STR("1777777777777777777777",
2181 STR(format("~0TO", (ptrdiff_t)-1)));
2182
2183 TST_TN_EQ_STR("1777777777777777777634",
2184 STR(format("~03TO", (ptrdiff_t)-100)));
2185 TST_TN_EQ_STR("1777777777777777777766",
2186 STR(format("~03TO", (ptrdiff_t)-10)));
2187 TST_TN_EQ_STR("1777777777777777777777",
2188 STR(format("~03TO", (ptrdiff_t)-1)));
2189
2190 TST_TN_EQ_STR("1777777777777777777634",
2191 STR(format("~3TO", (ptrdiff_t)-100)));
2192 TST_TN_EQ_STR("1777777777777777777766",
2193 STR(format("~3TO", (ptrdiff_t)-10)));
2194 TST_TN_EQ_STR("1777777777777777777777",
2195 STR(format("~3TO", (ptrdiff_t)-1)));
2196 #endif
2197
2198 TST_TN_EQ_STR(" 123",
2199 STR(format("~127TO", (ptrdiff_t)0123)));
2200 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
2201 STR(format("~0127TO", (ptrdiff_t)0123)));
2202 }
2203
2204 TST_CASE("format ~TB")
2205 {
2206 TST_TN_EQ_STR("0", STR(format("~TB", (ptrdiff_t)0)));
2207 TST_TN_EQ_STR("1", STR(format("~TB", (ptrdiff_t)1)));
2208 TST_TN_EQ_STR("1010", STR(format("~TB", (ptrdiff_t)10)));
2209 TST_TN_EQ_STR("1100100", STR(format("~TB", (ptrdiff_t)100)));
2210
2211 TST_TN_EQ_STR("0", STR(format("~0TB", (ptrdiff_t)0)));
2212 TST_TN_EQ_STR("1", STR(format("~0TB", (ptrdiff_t)1)));
2213 TST_TN_EQ_STR("1010", STR(format("~0TB", (ptrdiff_t)10)));
2214 TST_TN_EQ_STR("1100100", STR(format("~0TB", (ptrdiff_t)100)));
2215
2216 TST_TN_EQ_STR("00000", STR(format("~05TB", (ptrdiff_t)0)));
2217 TST_TN_EQ_STR("00001", STR(format("~05TB", (ptrdiff_t)1)));
2218 TST_TN_EQ_STR("01010", STR(format("~05TB", (ptrdiff_t)10)));
2219 TST_TN_EQ_STR("1100100", STR(format("~05TB", (ptrdiff_t)100)));
2220
2221 TST_TN_EQ_STR(" 0", STR(format("~5TB", (ptrdiff_t)0)));
2222 TST_TN_EQ_STR(" 1", STR(format("~5TB", (ptrdiff_t)1)));
2223 TST_TN_EQ_STR(" 1010", STR(format("~5TB", (ptrdiff_t)10)));
2224 TST_TN_EQ_STR("1100100", STR(format("~5TB", (ptrdiff_t)100)));
2225
2226 #if PDIFF32
2227 TST_TN_EQ_STR("11111111111111111111111110011100",
2228 STR(format("~TB", (ptrdiff_t)-100)));
2229 TST_TN_EQ_STR("11111111111111111111111111110110",
2230 STR(format("~TB", (ptrdiff_t)-10)));
2231 TST_TN_EQ_STR("11111111111111111111111111111111",
2232 STR(format("~TB", (ptrdiff_t)-1)));
2233
2234 TST_TN_EQ_STR("11111111111111111111111110011100",
2235 STR(format("~0TB", (ptrdiff_t)-100)));
2236 TST_TN_EQ_STR("11111111111111111111111111110110",
2237 STR(format("~0TB", (ptrdiff_t)-10)));
2238 TST_TN_EQ_STR("11111111111111111111111111111111",
2239 STR(format("~0TB", (ptrdiff_t)-1)));
2240
2241 TST_TN_EQ_STR("11111111111111111111111110011100",
2242 STR(format("~05TB", (ptrdiff_t)-100)));
2243 TST_TN_EQ_STR("11111111111111111111111111110110",
2244 STR(format("~05TB", (ptrdiff_t)-10)));
2245 TST_TN_EQ_STR("11111111111111111111111111111111",
2246 STR(format("~05TB", (ptrdiff_t)-1)));
2247
2248 TST_TN_EQ_STR("11111111111111111111111110011100",
2249 STR(format("~5TB", (ptrdiff_t)-100)));
2250 TST_TN_EQ_STR("11111111111111111111111111110110",
2251 STR(format("~5TB", (ptrdiff_t)-10)));
2252 TST_TN_EQ_STR("11111111111111111111111111111111",
2253 STR(format("~5TB", (ptrdiff_t)-1)));
2254 #elif PDIFF64
2255 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2256 STR(format("~TB", (ptrdiff_t)-100)));
2257 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2258 STR(format("~TB", (ptrdiff_t)-10)));
2259 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2260 STR(format("~TB", (ptrdiff_t)-1)));
2261
2262 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2263 STR(format("~0TB", (ptrdiff_t)-100)));
2264 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2265 STR(format("~0TB", (ptrdiff_t)-10)));
2266 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2267 STR(format("~0TB", (ptrdiff_t)-1)));
2268
2269 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2270 STR(format("~05TB", (ptrdiff_t)-100)));
2271 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2272 STR(format("~05TB", (ptrdiff_t)-10)));
2273 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2274 STR(format("~05TB", (ptrdiff_t)-1)));
2275
2276 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2277 STR(format("~5TB", (ptrdiff_t)-100)));
2278 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2279 STR(format("~5TB", (ptrdiff_t)-10)));
2280 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2281 STR(format("~5TB", (ptrdiff_t)-1)));
2282 #endif
2283
2284 TST_TN_EQ_STR(" 101",
2285 STR(format("~127TB", (ptrdiff_t)0x5)));
2286 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
2287 STR(format("~0127TB", (ptrdiff_t)0x5)));
2288 }
2289
2290 TST_CASE("format ~ZD")
2291 {
2292 TST_TN_EQ_STR("-100", STR(format("~ZD", (size_t)-100)));
2293 TST_TN_EQ_STR("-10", STR(format("~ZD", (size_t)-10)));
2294 TST_TN_EQ_STR("-1", STR(format("~ZD", (size_t)-1)));
2295 TST_TN_EQ_STR("0", STR(format("~ZD", (size_t)0)));
2296 TST_TN_EQ_STR("1", STR(format("~ZD", (size_t)1)));
2297 TST_TN_EQ_STR("10", STR(format("~ZD", (size_t)10)));
2298 TST_TN_EQ_STR("100", STR(format("~ZD", (size_t)100)));
2299
2300 TST_TN_EQ_STR("-100", STR(format("~0ZD", (size_t)-100)));
2301 TST_TN_EQ_STR("-10", STR(format("~0ZD", (size_t)-10)));
2302 TST_TN_EQ_STR("-1", STR(format("~0ZD", (size_t)-1)));
2303 TST_TN_EQ_STR("0", STR(format("~0ZD", (size_t)0)));
2304 TST_TN_EQ_STR("1", STR(format("~0ZD", (size_t)1)));
2305 TST_TN_EQ_STR("10", STR(format("~0ZD", (size_t)10)));
2306 TST_TN_EQ_STR("100", STR(format("~0ZD", (size_t)100)));
2307
2308 TST_TN_EQ_STR("-100", STR(format("~03ZD", (size_t)-100)));
2309 TST_TN_EQ_STR("-10", STR(format("~03ZD", (size_t)-10)));
2310 TST_TN_EQ_STR("-01", STR(format("~03ZD", (size_t)-1)));
2311 TST_TN_EQ_STR("000", STR(format("~03ZD", (size_t)0)));
2312 TST_TN_EQ_STR("001", STR(format("~03ZD", (size_t)1)));
2313 TST_TN_EQ_STR("010", STR(format("~03ZD", (size_t)10)));
2314 TST_TN_EQ_STR("100", STR(format("~03ZD", (size_t)100)));
2315
2316 TST_TN_EQ_STR("-100", STR(format("~3ZD", (size_t)-100)));
2317 TST_TN_EQ_STR("-10", STR(format("~3ZD", (size_t)-10)));
2318 TST_TN_EQ_STR(" -1", STR(format("~3ZD", (size_t)-1)));
2319 TST_TN_EQ_STR(" 0", STR(format("~3ZD", (size_t)0)));
2320 TST_TN_EQ_STR(" 1", STR(format("~3ZD", (size_t)1)));
2321 TST_TN_EQ_STR(" 10", STR(format("~3ZD", (size_t)10)));
2322 TST_TN_EQ_STR("100", STR(format("~3ZD", (size_t)100)));
2323
2324 TST_TN_EQ_STR(" 123",
2325 STR(format("~127ZD", (size_t)123)));
2326 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
2327 STR(format("~0127ZD", (size_t)123)));
2328 }
2329
2330 TST_CASE("format ~ZU")
2331 {
2332 TST_TN_EQ_STR("0", STR(format("~ZU", (size_t)0)));
2333 TST_TN_EQ_STR("1", STR(format("~ZU", (size_t)1)));
2334 TST_TN_EQ_STR("10", STR(format("~ZU", (size_t)10)));
2335 TST_TN_EQ_STR("100", STR(format("~ZU", (size_t)100)));
2336
2337 TST_TN_EQ_STR("0", STR(format("~0ZU", (size_t)0)));
2338 TST_TN_EQ_STR("1", STR(format("~0ZU", (size_t)1)));
2339 TST_TN_EQ_STR("10", STR(format("~0ZU", (size_t)10)));
2340 TST_TN_EQ_STR("100", STR(format("~0ZU", (size_t)100)));
2341
2342 TST_TN_EQ_STR("000", STR(format("~03ZU", (size_t)0)));
2343 TST_TN_EQ_STR("001", STR(format("~03ZU", (size_t)1)));
2344 TST_TN_EQ_STR("010", STR(format("~03ZU", (size_t)10)));
2345 TST_TN_EQ_STR("100", STR(format("~03ZU", (size_t)100)));
2346
2347 TST_TN_EQ_STR(" 0", STR(format("~3ZU", (size_t)0)));
2348 TST_TN_EQ_STR(" 1", STR(format("~3ZU", (size_t)1)));
2349 TST_TN_EQ_STR(" 10", STR(format("~3ZU", (size_t)10)));
2350 TST_TN_EQ_STR("100", STR(format("~3ZU", (size_t)100)));
2351
2352 #if P32
2353 TST_TN_EQ_STR("4294967196", STR(format("~ZU", (size_t)-100)));
2354 TST_TN_EQ_STR("4294967286", STR(format("~ZU", (size_t)-10)));
2355 TST_TN_EQ_STR("4294967295", STR(format("~ZU", (size_t)-1)));
2356
2357 TST_TN_EQ_STR("4294967196", STR(format("~0ZU", (size_t)-100)));
2358 TST_TN_EQ_STR("4294967286", STR(format("~0ZU", (size_t)-10)));
2359 TST_TN_EQ_STR("4294967295", STR(format("~0ZU", (size_t)-1)));
2360
2361 TST_TN_EQ_STR("4294967196", STR(format("~03ZU", (size_t)-100)));
2362 TST_TN_EQ_STR("4294967286", STR(format("~03ZU", (size_t)-10)));
2363 TST_TN_EQ_STR("4294967295", STR(format("~03ZU", (size_t)-1)));
2364
2365 TST_TN_EQ_STR("4294967196", STR(format("~3ZU", (size_t)-100)));
2366 TST_TN_EQ_STR("4294967286", STR(format("~3ZU", (size_t)-10)));
2367 TST_TN_EQ_STR("4294967295", STR(format("~3ZU", (size_t)-1)));
2368 #elif P64
2369 TST_TN_EQ_STR("18446744073709551516", STR(format("~ZU", (size_t)-100)));
2370 TST_TN_EQ_STR("18446744073709551606", STR(format("~ZU", (size_t)-10)));
2371 TST_TN_EQ_STR("18446744073709551615", STR(format("~ZU", (size_t)-1)));
2372
2373 TST_TN_EQ_STR("18446744073709551516", STR(format("~0ZU", (size_t)-100)));
2374 TST_TN_EQ_STR("18446744073709551606", STR(format("~0ZU", (size_t)-10)));
2375 TST_TN_EQ_STR("18446744073709551615", STR(format("~0ZU", (size_t)-1)));
2376
2377 TST_TN_EQ_STR("18446744073709551516", STR(format("~03ZU", (size_t)-100)));
2378 TST_TN_EQ_STR("18446744073709551606", STR(format("~03ZU", (size_t)-10)));
2379 TST_TN_EQ_STR("18446744073709551615", STR(format("~03ZU", (size_t)-1)));
2380
2381 TST_TN_EQ_STR("18446744073709551516", STR(format("~3ZU", (size_t)-100)));
2382 TST_TN_EQ_STR("18446744073709551606", STR(format("~3ZU", (size_t)-10)));
2383 TST_TN_EQ_STR("18446744073709551615", STR(format("~3ZU", (size_t)-1)));
2384 #endif
2385
2386 TST_TN_EQ_STR(" 123",
2387 STR(format("~127ZU", (size_t)123)));
2388 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
2389 STR(format("~0127ZU", (size_t)123)));
2390 }
2391
2392 TST_CASE("format ~ZX")
2393 {
2394 TST_TN_EQ_STR("0", STR(format("~ZX", (size_t)0)));
2395 TST_TN_EQ_STR("1", STR(format("~ZX", (size_t)1)));
2396 TST_TN_EQ_STR("a", STR(format("~ZX", (size_t)10)));
2397 TST_TN_EQ_STR("64", STR(format("~ZX", (size_t)100)));
2398
2399 TST_TN_EQ_STR("0", STR(format("~0ZX", (size_t)0)));
2400 TST_TN_EQ_STR("1", STR(format("~0ZX", (size_t)1)));
2401 TST_TN_EQ_STR("a", STR(format("~0ZX", (size_t)10)));
2402 TST_TN_EQ_STR("64", STR(format("~0ZX", (size_t)100)));
2403
2404 TST_TN_EQ_STR("000", STR(format("~03ZX", (size_t)0)));
2405 TST_TN_EQ_STR("001", STR(format("~03ZX", (size_t)1)));
2406 TST_TN_EQ_STR("00a", STR(format("~03ZX", (size_t)10)));
2407 TST_TN_EQ_STR("064", STR(format("~03ZX", (size_t)100)));
2408
2409 TST_TN_EQ_STR(" 0", STR(format("~3ZX", (size_t)0)));
2410 TST_TN_EQ_STR(" 1", STR(format("~3ZX", (size_t)1)));
2411 TST_TN_EQ_STR(" a", STR(format("~3ZX", (size_t)10)));
2412 TST_TN_EQ_STR(" 64", STR(format("~3ZX", (size_t)100)));
2413
2414 #if P32
2415 TST_TN_EQ_STR("ffffffff", STR(format("~ZX", ~(size_t)0)));
2416
2417 TST_TN_EQ_STR("ffffff9c", STR(format("~ZX", (size_t)-100)));
2418 TST_TN_EQ_STR("fffffff6", STR(format("~ZX", (size_t)-10)));
2419 TST_TN_EQ_STR("ffffffff", STR(format("~ZX", (size_t)-1)));
2420
2421 TST_TN_EQ_STR("ffffff9c", STR(format("~0ZX", (size_t)-100)));
2422 TST_TN_EQ_STR("fffffff6", STR(format("~0ZX", (size_t)-10)));
2423 TST_TN_EQ_STR("ffffffff", STR(format("~0ZX", (size_t)-1)));
2424
2425 TST_TN_EQ_STR("ffffff9c", STR(format("~03ZX", (size_t)-100)));
2426 TST_TN_EQ_STR("fffffff6", STR(format("~03ZX", (size_t)-10)));
2427 TST_TN_EQ_STR("ffffffff", STR(format("~03ZX", (size_t)-1)));
2428
2429 TST_TN_EQ_STR("ffffff9c", STR(format("~3ZX", (size_t)-100)));
2430 TST_TN_EQ_STR("fffffff6", STR(format("~3ZX", (size_t)-10)));
2431 TST_TN_EQ_STR("ffffffff", STR(format("~3ZX", (size_t)-1)));
2432 #elif P64
2433 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~ZX", ~(size_t)0)));
2434
2435 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~ZX", (size_t)-100)));
2436 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~ZX", (size_t)-10)));
2437 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~ZX", (size_t)-1)));
2438
2439 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~0ZX", (size_t)-100)));
2440 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~0ZX", (size_t)-10)));
2441 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~0ZX", (size_t)-1)));
2442
2443 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~03ZX", (size_t)-100)));
2444 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~03ZX", (size_t)-10)));
2445 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~03ZX", (size_t)-1)));
2446
2447 TST_TN_EQ_STR("ffffffffffffff9c", STR(format("~3ZX", (size_t)-100)));
2448 TST_TN_EQ_STR("fffffffffffffff6", STR(format("~3ZX", (size_t)-10)));
2449 TST_TN_EQ_STR("ffffffffffffffff", STR(format("~3ZX", (size_t)-1)));
2450 #endif
2451
2452 TST_TN_EQ_STR(" 1ac",
2453 STR(format("~127ZX", (size_t)0x1ac)));
2454 TST_TN_EQ_STR("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ac",
2455 STR(format("~0127ZX", (size_t)0x1ac)));
2456 }
2457
2458 TST_CASE("format ~ZO")
2459 {
2460 TST_TN_EQ_STR("0", STR(format("~ZO", (size_t)0)));
2461 TST_TN_EQ_STR("1", STR(format("~ZO", (size_t)1)));
2462 TST_TN_EQ_STR("12", STR(format("~ZO", (size_t)10)));
2463 TST_TN_EQ_STR("144", STR(format("~ZO", (size_t)100)));
2464
2465 TST_TN_EQ_STR("0", STR(format("~0ZO", (size_t)0)));
2466 TST_TN_EQ_STR("1", STR(format("~0ZO", (size_t)1)));
2467 TST_TN_EQ_STR("12", STR(format("~0ZO", (size_t)10)));
2468 TST_TN_EQ_STR("144", STR(format("~0ZO", (size_t)100)));
2469
2470 TST_TN_EQ_STR("000", STR(format("~03ZO", (size_t)0)));
2471 TST_TN_EQ_STR("001", STR(format("~03ZO", (size_t)1)));
2472 TST_TN_EQ_STR("012", STR(format("~03ZO", (size_t)10)));
2473 TST_TN_EQ_STR("144", STR(format("~03ZO", (size_t)100)));
2474
2475 TST_TN_EQ_STR(" 0", STR(format("~3ZO", (size_t)0)));
2476 TST_TN_EQ_STR(" 1", STR(format("~3ZO", (size_t)1)));
2477 TST_TN_EQ_STR(" 12", STR(format("~3ZO", (size_t)10)));
2478 TST_TN_EQ_STR("144", STR(format("~3ZO", (size_t)100)));
2479
2480 #if P32
2481 TST_TN_EQ_STR("37777777634", STR(format("~ZO", (size_t)-100)));
2482 TST_TN_EQ_STR("37777777766", STR(format("~ZO", (size_t)-10)));
2483 TST_TN_EQ_STR("37777777777", STR(format("~ZO", (size_t)-1)));
2484
2485 TST_TN_EQ_STR("37777777634", STR(format("~0ZO", (size_t)-100)));
2486 TST_TN_EQ_STR("37777777766", STR(format("~0ZO", (size_t)-10)));
2487 TST_TN_EQ_STR("37777777777", STR(format("~0ZO", (size_t)-1)));
2488
2489 TST_TN_EQ_STR("37777777634", STR(format("~03ZO", (size_t)-100)));
2490 TST_TN_EQ_STR("37777777766", STR(format("~03ZO", (size_t)-10)));
2491 TST_TN_EQ_STR("37777777777", STR(format("~03ZO", (size_t)-1)));
2492
2493 TST_TN_EQ_STR("37777777634", STR(format("~3ZO", (size_t)-100)));
2494 TST_TN_EQ_STR("37777777766", STR(format("~3ZO", (size_t)-10)));
2495 TST_TN_EQ_STR("37777777777", STR(format("~3ZO", (size_t)-1)));
2496 #elif P64
2497 TST_TN_EQ_STR("1777777777777777777634",
2498 STR(format("~ZO", (size_t)-100)));
2499 TST_TN_EQ_STR("1777777777777777777766",
2500 STR(format("~ZO", (size_t)-10)));
2501 TST_TN_EQ_STR("1777777777777777777777",
2502 STR(format("~ZO", (size_t)-1)));
2503
2504 TST_TN_EQ_STR("1777777777777777777634",
2505 STR(format("~0ZO", (size_t)-100)));
2506 TST_TN_EQ_STR("1777777777777777777766",
2507 STR(format("~0ZO", (size_t)-10)));
2508 TST_TN_EQ_STR("1777777777777777777777",
2509 STR(format("~0ZO", (size_t)-1)));
2510
2511 TST_TN_EQ_STR("1777777777777777777634",
2512 STR(format("~03ZO", (size_t)-100)));
2513 TST_TN_EQ_STR("1777777777777777777766",
2514 STR(format("~03ZO", (size_t)-10)));
2515 TST_TN_EQ_STR("1777777777777777777777",
2516 STR(format("~03ZO", (size_t)-1)));
2517
2518 TST_TN_EQ_STR("1777777777777777777634",
2519 STR(format("~3ZO", (size_t)-100)));
2520 TST_TN_EQ_STR("1777777777777777777766",
2521 STR(format("~3ZO", (size_t)-10)));
2522 TST_TN_EQ_STR("1777777777777777777777",
2523 STR(format("~3ZO", (size_t)-1)));
2524 #endif
2525
2526 TST_TN_EQ_STR(" 123",
2527 STR(format("~127ZO", (size_t)0123)));
2528 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000123",
2529 STR(format("~0127ZO", (size_t)0123)));
2530 }
2531
2532 TST_CASE("format ~ZB")
2533 {
2534 TST_TN_EQ_STR("0", STR(format("~ZB", (size_t)0)));
2535 TST_TN_EQ_STR("1", STR(format("~ZB", (size_t)1)));
2536 TST_TN_EQ_STR("1010", STR(format("~ZB", (size_t)10)));
2537 TST_TN_EQ_STR("1100100", STR(format("~ZB", (size_t)100)));
2538
2539 TST_TN_EQ_STR("0", STR(format("~0ZB", (size_t)0)));
2540 TST_TN_EQ_STR("1", STR(format("~0ZB", (size_t)1)));
2541 TST_TN_EQ_STR("1010", STR(format("~0ZB", (size_t)10)));
2542 TST_TN_EQ_STR("1100100", STR(format("~0ZB", (size_t)100)));
2543
2544 TST_TN_EQ_STR("00000", STR(format("~05ZB", (size_t)0)));
2545 TST_TN_EQ_STR("00001", STR(format("~05ZB", (size_t)1)));
2546 TST_TN_EQ_STR("01010", STR(format("~05ZB", (size_t)10)));
2547 TST_TN_EQ_STR("1100100", STR(format("~05ZB", (size_t)100)));
2548
2549 TST_TN_EQ_STR(" 0", STR(format("~5ZB", (size_t)0)));
2550 TST_TN_EQ_STR(" 1", STR(format("~5ZB", (size_t)1)));
2551 TST_TN_EQ_STR(" 1010", STR(format("~5ZB", (size_t)10)));
2552 TST_TN_EQ_STR("1100100", STR(format("~5ZB", (size_t)100)));
2553
2554 #if P32
2555 TST_TN_EQ_STR("11111111111111111111111110011100",
2556 STR(format("~ZB", (size_t)-100)));
2557 TST_TN_EQ_STR("11111111111111111111111111110110",
2558 STR(format("~ZB", (size_t)-10)));
2559 TST_TN_EQ_STR("11111111111111111111111111111111",
2560 STR(format("~ZB", (size_t)-1)));
2561
2562 TST_TN_EQ_STR("11111111111111111111111110011100",
2563 STR(format("~0ZB", (size_t)-100)));
2564 TST_TN_EQ_STR("11111111111111111111111111110110",
2565 STR(format("~0ZB", (size_t)-10)));
2566 TST_TN_EQ_STR("11111111111111111111111111111111",
2567 STR(format("~0ZB", (size_t)-1)));
2568
2569 TST_TN_EQ_STR("11111111111111111111111110011100",
2570 STR(format("~05ZB", (size_t)-100)));
2571 TST_TN_EQ_STR("11111111111111111111111111110110",
2572 STR(format("~05ZB", (size_t)-10)));
2573 TST_TN_EQ_STR("11111111111111111111111111111111",
2574 STR(format("~05ZB", (size_t)-1)));
2575
2576 TST_TN_EQ_STR("11111111111111111111111110011100",
2577 STR(format("~5ZB", (size_t)-100)));
2578 TST_TN_EQ_STR("11111111111111111111111111110110",
2579 STR(format("~5ZB", (size_t)-10)));
2580 TST_TN_EQ_STR("11111111111111111111111111111111",
2581 STR(format("~5ZB", (size_t)-1)));
2582 #elif P64
2583 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2584 STR(format("~ZB", (size_t)-100)));
2585 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2586 STR(format("~ZB", (size_t)-10)));
2587 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2588 STR(format("~ZB", (size_t)-1)));
2589
2590 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2591 STR(format("~0ZB", (size_t)-100)));
2592 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2593 STR(format("~0ZB", (size_t)-10)));
2594 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2595 STR(format("~0ZB", (size_t)-1)));
2596
2597 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2598 STR(format("~05ZB", (size_t)-100)));
2599 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2600 STR(format("~05ZB", (size_t)-10)));
2601 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2602 STR(format("~05ZB", (size_t)-1)));
2603
2604 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111110011100",
2605 STR(format("~5ZB", (size_t)-100)));
2606 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111110110",
2607 STR(format("~5ZB", (size_t)-10)));
2608 TST_TN_EQ_STR("1111111111111111111111111111111111111111111111111111111111111111",
2609 STR(format("~5ZB", (size_t)-1)));
2610 #endif
2611
2612 TST_TN_EQ_STR(" 101",
2613 STR(format("~127ZB", (size_t)0x5)));
2614 TST_TN_EQ_STR("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101",
2615 STR(format("~0127ZB", (size_t)0x5)));
2616 }
2617
2618 TST_CASE("format ~c")
2619 {
2620 TST_TN_EQ_STR("", STR(format("~c", MAKE_CHAR('\0'))));
2621 TST_TN_EQ_STR("a", STR(format("~c", MAKE_CHAR('a'))));
2622 TST_TN_EQ_STR("\"", STR(format("~c", MAKE_CHAR('\"'))));
2623 TST_TN_EQ_STR("\\", STR(format("~c", MAKE_CHAR('\\'))));
2624 TST_TN_EQ_STR("あ", STR(format("~c", MAKE_CHAR(0x3042))));
2625 }
2626
2627 TST_CASE("format ~d")
2628 {
2629 TST_TN_EQ_STR("-100", STR(format("~d", MAKE_INT(-100))));
2630 TST_TN_EQ_STR("-10", STR(format("~d", MAKE_INT(-10))));
2631 TST_TN_EQ_STR("-1", STR(format("~d", MAKE_INT(-1))));
2632 TST_TN_EQ_STR("0", STR(format("~d", MAKE_INT(0))));
2633 TST_TN_EQ_STR("1", STR(format("~d", MAKE_INT(1))));
2634 TST_TN_EQ_STR("10", STR(format("~d", MAKE_INT(10))));
2635 TST_TN_EQ_STR("100", STR(format("~d", MAKE_INT(100))));
2636
2637 TST_TN_EQ_STR("-100", STR(format("~0d", MAKE_INT(-100))));
2638 TST_TN_EQ_STR("-10", STR(format("~0d", MAKE_INT(-10))));
2639 TST_TN_EQ_STR("-1", STR(format("~0d", MAKE_INT(-1))));
2640 TST_TN_EQ_STR("0", STR(format("~0d", MAKE_INT(0))));
2641 TST_TN_EQ_STR("1", STR(format("~0d", MAKE_INT(1))));
2642 TST_TN_EQ_STR("10", STR(format("~0d", MAKE_INT(10))));
2643 TST_TN_EQ_STR("100", STR(format("~0d", MAKE_INT(100))));
2644
2645 TST_TN_EQ_STR("-100", STR(format("~03d", MAKE_INT(-100))));
2646 TST_TN_EQ_STR("-10", STR(format("~03d", MAKE_INT(-10))));
2647 TST_TN_EQ_STR("-01", STR(format("~03d", MAKE_INT(-1))));
2648 TST_TN_EQ_STR("000", STR(format("~03d", MAKE_INT(0))));
2649 TST_TN_EQ_STR("001", STR(format("~03d", MAKE_INT(1))));
2650 TST_TN_EQ_STR("010", STR(format("~03d", MAKE_INT(10))));
2651 TST_TN_EQ_STR("100", STR(format("~03d", MAKE_INT(100))));
2652
2653 TST_TN_EQ_STR("-100", STR(format("~3d", MAKE_INT(-100))));
2654 TST_TN_EQ_STR("-10", STR(format("~3d", MAKE_INT(-10))));
2655 TST_TN_EQ_STR(" -1", STR(format("~3d", MAKE_INT(-1))));
2656 TST_TN_EQ_STR(" 0", STR(format("~3d", MAKE_INT(0))));
2657 TST_TN_EQ_STR(" 1", STR(format("~3d", MAKE_INT(1))));
2658 TST_TN_EQ_STR(" 10", STR(format("~3d", MAKE_INT(10))));
2659 TST_TN_EQ_STR("100", STR(format("~3d", MAKE_INT(100))));
2660 }
2661
2662 TST_CASE("format ~x")
2663 {
2664 TST_TN_EQ_STR("-64", STR(format("~x", MAKE_INT(-100))));
2665 TST_TN_EQ_STR("-a", STR(format("~x", MAKE_INT(-10))));
2666 TST_TN_EQ_STR("-1", STR(format("~x", MAKE_INT(-1))));
2667 TST_TN_EQ_STR("0", STR(format("~x", MAKE_INT(0))));
2668 TST_TN_EQ_STR("1", STR(format("~x", MAKE_INT(1))));
2669 TST_TN_EQ_STR("a", STR(format("~x", MAKE_INT(10))));
2670 TST_TN_EQ_STR("64", STR(format("~x", MAKE_INT(100))));
2671
2672 TST_TN_EQ_STR("-64", STR(format("~0x", MAKE_INT(-100))));
2673 TST_TN_EQ_STR("-a", STR(format("~0x", MAKE_INT(-10))));
2674 TST_TN_EQ_STR("-1", STR(format("~0x", MAKE_INT(-1))));
2675 TST_TN_EQ_STR("0", STR(format("~0x", MAKE_INT(0))));
2676 TST_TN_EQ_STR("1", STR(format("~0x", MAKE_INT(1))));
2677 TST_TN_EQ_STR("a", STR(format("~0x", MAKE_INT(10))));
2678 TST_TN_EQ_STR("64", STR(format("~0x", MAKE_INT(100))));
2679
2680 TST_TN_EQ_STR("-64", STR(format("~03x", MAKE_INT(-100))));
2681 TST_TN_EQ_STR("-0a", STR(format("~03x", MAKE_INT(-10))));
2682 TST_TN_EQ_STR("-01", STR(format("~03x", MAKE_INT(-1))));
2683 TST_TN_EQ_STR("000", STR(format("~03x", MAKE_INT(0))));
2684 TST_TN_EQ_STR("001", STR(format("~03x", MAKE_INT(1))));
2685 TST_TN_EQ_STR("00a", STR(format("~03x", MAKE_INT(10))));
2686 TST_TN_EQ_STR("064", STR(format("~03x", MAKE_INT(100))));
2687
2688 TST_TN_EQ_STR("-64", STR(format("~3x", MAKE_INT(-100))));
2689 TST_TN_EQ_STR(" -a", STR(format("~3x", MAKE_INT(-10))));
2690 TST_TN_EQ_STR(" -1", STR(format("~3x", MAKE_INT(-1))));
2691 TST_TN_EQ_STR(" 0", STR(format("~3x", MAKE_INT(0))));
2692 TST_TN_EQ_STR(" 1", STR(format("~3x", MAKE_INT(1))));
2693 TST_TN_EQ_STR(" a", STR(format("~3x", MAKE_INT(10))));
2694 TST_TN_EQ_STR(" 64", STR(format("~3x", MAKE_INT(100))));
2695 }
2696
2697 TST_CASE("format ~o")
2698 {
2699 TST_TN_EQ_STR("-144", STR(format("~o", MAKE_INT(-100))));
2700 TST_TN_EQ_STR("-12", STR(format("~o", MAKE_INT(-10))));
2701 TST_TN_EQ_STR("-1", STR(format("~o", MAKE_INT(-1))));
2702 TST_TN_EQ_STR("0", STR(format("~o", MAKE_INT(0))));
2703 TST_TN_EQ_STR("1", STR(format("~o", MAKE_INT(1))));
2704 TST_TN_EQ_STR("12", STR(format("~o", MAKE_INT(10))));
2705 TST_TN_EQ_STR("144", STR(format("~o", MAKE_INT(100))));
2706
2707 TST_TN_EQ_STR("-144", STR(format("~0o", MAKE_INT(-100))));
2708 TST_TN_EQ_STR("-12", STR(format("~0o", MAKE_INT(-10))));
2709 TST_TN_EQ_STR("-1", STR(format("~0o", MAKE_INT(-1))));
2710 TST_TN_EQ_STR("0", STR(format("~0o", MAKE_INT(0))));
2711 TST_TN_EQ_STR("1", STR(format("~0o", MAKE_INT(1))));
2712 TST_TN_EQ_STR("12", STR(format("~0o", MAKE_INT(10))));
2713 TST_TN_EQ_STR("144", STR(format("~0o", MAKE_INT(100))));
2714
2715 TST_TN_EQ_STR("-144", STR(format("~03o", MAKE_INT(-100))));
2716 TST_TN_EQ_STR("-12", STR(format("~03o", MAKE_INT(-10))));
2717 TST_TN_EQ_STR("-01", STR(format("~03o", MAKE_INT(-1))));
2718 TST_TN_EQ_STR("000", STR(format("~03o", MAKE_INT(0))));
2719 TST_TN_EQ_STR("001", STR(format("~03o", MAKE_INT(1))));
2720 TST_TN_EQ_STR("012", STR(format("~03o", MAKE_INT(10))));
2721 TST_TN_EQ_STR("144", STR(format("~03o", MAKE_INT(100))));
2722
2723 TST_TN_EQ_STR("-144", STR(format("~3o", MAKE_INT(-100))));
2724 TST_TN_EQ_STR("-12", STR(format("~3o", MAKE_INT(-10))));
2725 TST_TN_EQ_STR(" -1", STR(format("~3o", MAKE_INT(-1))));
2726 TST_TN_EQ_STR(" 0", STR(format("~3o", MAKE_INT(0))));
2727 TST_TN_EQ_STR(" 1", STR(format("~3o", MAKE_INT(1))));
2728 TST_TN_EQ_STR(" 12", STR(format("~3o", MAKE_INT(10))));
2729 TST_TN_EQ_STR("144", STR(format("~3o", MAKE_INT(100))));
2730 }
2731
2732 TST_CASE("format ~b")
2733 {
2734 TST_TN_EQ_STR("-1100100", STR(format("~b", MAKE_INT(-100))));
2735 TST_TN_EQ_STR("-1010", STR(format("~b", MAKE_INT(-10))));
2736 TST_TN_EQ_STR("-1", STR(format("~b", MAKE_INT(-1))));
2737 TST_TN_EQ_STR("0", STR(format("~b", MAKE_INT(0))));
2738 TST_TN_EQ_STR("1", STR(format("~b", MAKE_INT(1))));
2739 TST_TN_EQ_STR("1010", STR(format("~b", MAKE_INT(10))));
2740 TST_TN_EQ_STR("1100100", STR(format("~b", MAKE_INT(100))));
2741
2742 TST_TN_EQ_STR("-1100100", STR(format("~0b", MAKE_INT(-100))));
2743 TST_TN_EQ_STR("-1010", STR(format("~0b", MAKE_INT(-10))));
2744 TST_TN_EQ_STR("-1", STR(format("~0b", MAKE_INT(-1))));
2745 TST_TN_EQ_STR("0", STR(format("~0b", MAKE_INT(0))));
2746 TST_TN_EQ_STR("1", STR(format("~0b", MAKE_INT(1))));
2747 TST_TN_EQ_STR("1010", STR(format("~0b", MAKE_INT(10))));
2748 TST_TN_EQ_STR("1100100", STR(format("~0b", MAKE_INT(100))));
2749
2750 TST_TN_EQ_STR("-1100100", STR(format("~05b", MAKE_INT(-100))));
2751 TST_TN_EQ_STR("-1010", STR(format("~05b", MAKE_INT(-10))));
2752 TST_TN_EQ_STR("-0001", STR(format("~05b", MAKE_INT(-1))));
2753 TST_TN_EQ_STR("00000", STR(format("~05b", MAKE_INT(0))));
2754 TST_TN_EQ_STR("00001", STR(format("~05b", MAKE_INT(1))));
2755 TST_TN_EQ_STR("01010", STR(format("~05b", MAKE_INT(10))));
2756 TST_TN_EQ_STR("1100100", STR(format("~05b", MAKE_INT(100))));
2757
2758 TST_TN_EQ_STR("-1100100", STR(format("~5b", MAKE_INT(-100))));
2759 TST_TN_EQ_STR("-1010", STR(format("~5b", MAKE_INT(-10))));
2760 TST_TN_EQ_STR(" -1", STR(format("~5b", MAKE_INT(-1))));
2761 TST_TN_EQ_STR(" 0", STR(format("~5b", MAKE_INT(0))));
2762 TST_TN_EQ_STR(" 1", STR(format("~5b", MAKE_INT(1))));
2763 TST_TN_EQ_STR(" 1010", STR(format("~5b", MAKE_INT(10))));
2764 TST_TN_EQ_STR("1100100", STR(format("~5b", MAKE_INT(100))));
2765 }
2766
2767 TST_CASE("format ~f (number)")
2768 {
2769 TST_TN_EQ_STR("-100", STR(format("~f", MAKE_INT(-100))));
2770 TST_TN_EQ_STR("-10", STR(format("~f", MAKE_INT(-10))));
2771 TST_TN_EQ_STR("-1", STR(format("~f", MAKE_INT(-1))));
2772 TST_TN_EQ_STR("0", STR(format("~f", MAKE_INT(0))));
2773 TST_TN_EQ_STR("1", STR(format("~f", MAKE_INT(1))));
2774 TST_TN_EQ_STR("10", STR(format("~f", MAKE_INT(10))));
2775 TST_TN_EQ_STR("100", STR(format("~f", MAKE_INT(100))));
2776
2777 TST_TN_EQ_STR("-100", STR(format("~0f", MAKE_INT(-100))));
2778 TST_TN_EQ_STR("-10", STR(format("~0f", MAKE_INT(-10))));
2779 TST_TN_EQ_STR("-1", STR(format("~0f", MAKE_INT(-1))));
2780 TST_TN_EQ_STR("0", STR(format("~0f", MAKE_INT(0))));
2781 TST_TN_EQ_STR("1", STR(format("~0f", MAKE_INT(1))));
2782 TST_TN_EQ_STR("10", STR(format("~0f", MAKE_INT(10))));
2783 TST_TN_EQ_STR("100", STR(format("~0f", MAKE_INT(100))));
2784
2785 TST_TN_EQ_STR("-100", STR(format("~03f", MAKE_INT(-100))));
2786 TST_TN_EQ_STR("-10", STR(format("~03f", MAKE_INT(-10))));
2787 TST_TN_EQ_STR("-01", STR(format("~03f", MAKE_INT(-1))));
2788 TST_TN_EQ_STR("000", STR(format("~03f", MAKE_INT(0))));
2789 TST_TN_EQ_STR("001", STR(format("~03f", MAKE_INT(1))));
2790 TST_TN_EQ_STR("010", STR(format("~03f", MAKE_INT(10))));
2791 TST_TN_EQ_STR("100", STR(format("~03f", MAKE_INT(100))));
2792
2793 TST_TN_EQ_STR("-100", STR(format("~3f", MAKE_INT(-100))));
2794 TST_TN_EQ_STR("-10", STR(format("~3f", MAKE_INT(-10))));
2795 TST_TN_EQ_STR(" -1", STR(format("~3f", MAKE_INT(-1))));
2796 TST_TN_EQ_STR(" 0", STR(format("~3f", MAKE_INT(0))));
2797 TST_TN_EQ_STR(" 1", STR(format("~3f", MAKE_INT(1))));
2798 TST_TN_EQ_STR(" 10", STR(format("~3f", MAKE_INT(10))));
2799 TST_TN_EQ_STR("100", STR(format("~3f", MAKE_INT(100))));
2800
2801 TST_TN_EQ_STR("-100", STR(format("~3,02f", MAKE_INT(-100))));
2802 TST_TN_EQ_STR("-10", STR(format("~3,02f", MAKE_INT(-10))));
2803 TST_TN_EQ_STR(" -1", STR(format("~3,02f", MAKE_INT(-1))));
2804 TST_TN_EQ_STR(" 0", STR(format("~3,02f", MAKE_INT(0))));
2805 TST_TN_EQ_STR(" 1", STR(format("~3,02f", MAKE_INT(1))));
2806 TST_TN_EQ_STR(" 10", STR(format("~3,02f", MAKE_INT(10))));
2807 TST_TN_EQ_STR("100", STR(format("~3,02f", MAKE_INT(100))));
2808 }
2809
2810 TST_CASE("format ~f (string)")
2811 {
2812 TST_TN_EQ_STR("", STR(format("~f", CONST_STRING(""))));
2813 TST_TN_EQ_STR("", STR(format("~0f", CONST_STRING(""))));
2814 TST_TN_EQ_STR(" ", STR(format("~1f", CONST_STRING(""))));
2815 TST_TN_EQ_STR("", STR(format("~00f", CONST_STRING(""))));
2816 TST_TN_EQ_STR(" ", STR(format("~01f", CONST_STRING(""))));
2817 TST_TN_EQ_STR("\"", STR(format("~f", CONST_STRING("\""))));
2818 TST_TN_EQ_STR("\\", STR(format("~f", CONST_STRING("\\"))));
2819 TST_TN_EQ_STR("a", STR(format("~f", CONST_STRING("a"))));
2820 TST_TN_EQ_STR("aBc", STR(format("~f", CONST_STRING("aBc"))));
2821 TST_TN_EQ_STR("あ", STR(format("~f", CONST_STRING("あ"))));
2822 TST_TN_EQ_STR("あい", STR(format("~f", CONST_STRING("あい"))));
2823 TST_TN_EQ_STR("aあBいc",
2824 STR(format("~f", CONST_STRING("aあBいc"))));
2825 TST_TN_EQ_STR("aBc", STR(format("~0f", CONST_STRING("aBc"))));
2826 TST_TN_EQ_STR("aBc", STR(format("~1f", CONST_STRING("aBc"))));
2827 TST_TN_EQ_STR("aBc", STR(format("~2f", CONST_STRING("aBc"))));
2828 TST_TN_EQ_STR("aBc", STR(format("~3f", CONST_STRING("aBc"))));
2829 TST_TN_EQ_STR(" aBc", STR(format("~4f", CONST_STRING("aBc"))));
2830 TST_TN_EQ_STR(" aBc", STR(format("~5f", CONST_STRING("aBc"))));
2831 TST_TN_EQ_STR("aBc", STR(format("~00f", CONST_STRING("aBc"))));
2832 TST_TN_EQ_STR("aBc", STR(format("~01f", CONST_STRING("aBc"))));
2833 TST_TN_EQ_STR("aBc", STR(format("~02f", CONST_STRING("aBc"))));
2834 TST_TN_EQ_STR("aBc", STR(format("~03f", CONST_STRING("aBc"))));
2835 TST_TN_EQ_STR(" aBc", STR(format("~04f", CONST_STRING("aBc"))));
2836 TST_TN_EQ_STR(" aBc", STR(format("~05f", CONST_STRING("aBc"))));
2837 TST_TN_EQ_STR("aBc",
2838 STR(format("~00,01f", CONST_STRING("aBc"))));
2839 TST_TN_EQ_STR("aBc",
2840 STR(format("~01,01f", CONST_STRING("aBc"))));
2841 TST_TN_EQ_STR("aBc",
2842 STR(format("~02,01f", CONST_STRING("aBc"))));
2843 TST_TN_EQ_STR("aBc",
2844 STR(format("~03,01f", CONST_STRING("aBc"))));
2845 TST_TN_EQ_STR(" aBc",
2846 STR(format("~04,01f", CONST_STRING("aBc"))));
2847 TST_TN_EQ_STR(" aBc",
2848 STR(format("~05,01f", CONST_STRING("aBc"))));
2849 TST_TN_EQ_STR("aあBいc",
2850 STR(format("~0f", CONST_STRING("aあBいc"))));
2851 TST_TN_EQ_STR("aあBいc",
2852 STR(format("~1f", CONST_STRING("aあBいc"))));
2853 TST_TN_EQ_STR("aあBいc",
2854 STR(format("~2f", CONST_STRING("aあBいc"))));
2855 TST_TN_EQ_STR("aあBいc",
2856 STR(format("~3f", CONST_STRING("aあBいc"))));
2857 TST_TN_EQ_STR("aあBいc",
2858 STR(format("~4f", CONST_STRING("aあBいc"))));
2859 TST_TN_EQ_STR("aあBいc",
2860 STR(format("~5f", CONST_STRING("aあBいc"))));
2861 TST_TN_EQ_STR(" aあBいc",
2862 STR(format("~6f", CONST_STRING("aあBいc"))));
2863 TST_TN_EQ_STR(" aあBいc",
2864 STR(format("~7f", CONST_STRING("aあBいc"))));
2865 TST_TN_EQ_STR("aあBいc",
2866 STR(format("~00f", CONST_STRING("aあBいc"))));
2867 TST_TN_EQ_STR("aあBいc",
2868 STR(format("~01f", CONST_STRING("aあBいc"))));
2869 TST_TN_EQ_STR("aあBいc",
2870 STR(format("~02f", CONST_STRING("aあBいc"))));
2871 TST_TN_EQ_STR("aあBいc",
2872 STR(format("~03f", CONST_STRING("aあBいc"))));
2873 TST_TN_EQ_STR("aあBいc",
2874 STR(format("~04f", CONST_STRING("aあBいc"))));
2875 TST_TN_EQ_STR("aあBいc",
2876 STR(format("~05f", CONST_STRING("aあBいc"))));
2877 TST_TN_EQ_STR(" aあBいc",
2878 STR(format("~06f", CONST_STRING("aあBいc"))));
2879 TST_TN_EQ_STR(" aあBいc",
2880 STR(format("~07f", CONST_STRING("aあBいc"))));
2881 }
2882
2883 TST_CASE("format ~~")
2884 {
2885 TST_TN_EQ_STR("~", STR(format("~~")));
2886 }
2887
2888 TST_CASE("format ~%")
2889 {
2890 TST_TN_EQ_STR("\n", STR(format("~%")));
2891 }
2892
2893 TST_CASE("format ~&")
2894 {
2895 TST_TN_EQ_STR("\n", STR(format("~&")));
2896 TST_TN_EQ_STR("\n", STR(format("~&~&")));
2897 TST_TN_EQ_STR("\n", STR(format("~&~&~&")));
2898 TST_TN_EQ_STR("\n", STR(format("~%~&")));
2899 TST_TN_EQ_STR("\n", STR(format("~%~&~&")));
2900 TST_TN_EQ_STR("\n\n", STR(format("~&~%")));
2901 TST_TN_EQ_STR("\n\n", STR(format("~&~%~&")));
2902 TST_TN_EQ_STR("\n", STR(format("\n~&")));
2903 TST_TN_EQ_STR("\n\n", STR(format("~&\n")));
2904 TST_TN_EQ_STR("\n\n", STR(format("~&\n~&")));
2905 TST_TN_EQ_STR(" \n", STR(format(" ~&")));
2906 TST_TN_EQ_STR("\n \n \n", STR(format("\n ~& ~&")));
2907 }
2908
2909 TST_CASE("format ~t")
2910 {
2911 TST_TN_EQ_STR("\t", STR(format("~t")));
2912 }
2913
2914 TST_CASE("format ~_")
2915 {
2916 TST_TN_EQ_STR(" ", STR(format("~_")));
2917 }
2918
2919 TST_CASE("format ~a")
2920 {
2921 TST_TN_EQ_STR("#t", STR(format("~a", SCM_TRUE)));
2922 TST_TN_EQ_STR("123", STR(format("~a", MAKE_INT(123))));
2923 TST_TN_EQ_STR("a", STR(format("~a", MAKE_CHAR('a'))));
2924 TST_TN_EQ_STR("aBc", STR(format("~a", CONST_STRING("aBc"))));
2925 TST_TN_EQ_STR("(#t 123 a aBc (0))",
2926 STR(format("~a", lst)));
2927 }
2928
2929 TST_CASE("format ~s")
2930 {
2931 TST_TN_EQ_STR("#t", STR(format("~s", SCM_TRUE)));
2932 TST_TN_EQ_STR("123", STR(format("~s", MAKE_INT(123))));
2933 TST_TN_EQ_STR("#\\a", STR(format("~s", MAKE_CHAR('a'))));
2934 TST_TN_EQ_STR("\"aBc\"", STR(format("~s", CONST_STRING("aBc"))));
2935 TST_TN_EQ_STR("(#t 123 #\\a \"aBc\" (0))",
2936 STR(format("~s", lst)));
2937 }
2938
2939 TST_CASE("format ~w")
2940 {
2941 TST_TN_EQ_STR("#t", STR(format("~w", SCM_TRUE)));
2942 TST_TN_EQ_STR("123", STR(format("~w", MAKE_INT(123))));
2943 TST_TN_EQ_STR("#\\a", STR(format("~w", MAKE_CHAR('a'))));
2944 TST_TN_EQ_STR("\"aBc\"", STR(format("~w", CONST_STRING("aBc"))));
2945 TST_TN_EQ_STR("(#t 123 #\\a \"aBc\" (0))",
2946 STR(format("~w", lst)));
2947 /* SigScheme starts the index with 1 */
2948 TST_TN_EQ_STR("#1=(0 1 . #1#)", STR(format("~w", clst)));
2949 }
2950
2951 TST_CASE("format ~y")
2952 {
2953 TST_TN_EQ_STR("#t", STR(format("~y", SCM_TRUE)));
2954 TST_TN_EQ_STR("123", STR(format("~y", MAKE_INT(123))));
2955 TST_TN_EQ_STR("#\\a", STR(format("~y", MAKE_CHAR('a'))));
2956 TST_TN_EQ_STR("\"aBc\"", STR(format("~y", CONST_STRING("aBc"))));
2957 /* no pretty-print procedure */
2958 TST_TN_EQ_STR("(#t 123 #\\a \"aBc\" (0))",
2959 STR(format("~y", lst)));
2960 }
2961
2962 TST_CASE("format ~?")
2963 {
2964 TST_TN_EQ_STR("~", STR(format("~k", CONST_STRING("~~"), SCM_NULL)));
2965 TST_TN_EQ_STR(" ", STR(format("~k", CONST_STRING("~_"), SCM_NULL)));
2966 TST_TN_EQ_STR("\n", STR(format("~k", CONST_STRING("~%"), SCM_NULL)));
2967 TST_TN_EQ_STR("\n", STR(format("~k", CONST_STRING("~&"), SCM_NULL)));
2968 #if 0
2969 /* hard to be this on current port implementation */
2970 TST_TN_EQ_STR("\n", STR(format("~?",
2971 CONST_STRING("~%~?"),
2972 LIST_2(CONST_STRING("~&"), SCM_NULL))));
2973 #else
2974 TST_TN_EQ_STR("\n\n", STR(format("~?",
2975 CONST_STRING("~%~?"),
2976 LIST_2(CONST_STRING("~&"), SCM_NULL))));
2977 #endif
2978 TST_TN_EQ_STR("\n \n", STR(format("~?",
2979 CONST_STRING("~% ~?"),
2980 LIST_2(CONST_STRING("~&"), SCM_NULL))));
2981 TST_TN_EQ_STR("\n \n", STR(format("~?",
2982 CONST_STRING("~%~?"),
2983 LIST_2(CONST_STRING(" ~&"), SCM_NULL))));
2984 TST_TN_EQ_STR("aBc", STR(format("~?",
2985 CONST_STRING("aBc"), SCM_NULL)));
2986 TST_TN_EQ_STR("0aBc1", STR(format("~?",
2987 CONST_STRING("0~a1"),
2988 LIST_1(CONST_STRING("aBc")))));
2989 TST_TN_EQ_STR("02aBc31",
2990 STR(format("~?",
2991 CONST_STRING("0~?1"),
2992 LIST_2(CONST_STRING("2~a3"),
2993 LIST_1(CONST_STRING("aBc"))))));
2994 TST_TN_EQ_STR("024aBc531",
2995 STR(format("~?",
2996 CONST_STRING("0~?1"),
2997 LIST_2(CONST_STRING("2~?3"),
2998 LIST_2(CONST_STRING("4~a5"),
2999 LIST_1(CONST_STRING("aBc")))))));
3000 TST_TN_EQ_STR("#t", STR(format("~?",
3001 CONST_STRING("~w"),
3002 LIST_1(SCM_TRUE))));
3003 TST_TN_EQ_STR("123", STR(format("~?",
3004 CONST_STRING("~w"),
3005 LIST_1(MAKE_INT(123)))));
3006 TST_TN_EQ_STR("#\\a", STR(format("~?",
3007 CONST_STRING("~w"),
3008 LIST_1(MAKE_CHAR('a')))));
3009 TST_TN_EQ_STR("\"\"", STR(format("~?",
3010 CONST_STRING("~w"),
3011 LIST_1(CONST_STRING("")))));
3012 TST_TN_EQ_STR("\"\\\"\"",
3013 STR(format("~?",
3014 CONST_STRING("~w"),
3015 LIST_1(CONST_STRING("\"")))));
3016 TST_TN_EQ_STR("\"aBc\"",
3017 STR(format("~?",
3018 CONST_STRING("~w"),
3019 LIST_1(CONST_STRING("aBc")))));
3020 TST_TN_EQ_STR("(#t 123 #\\a \"aBc\" (0))",
3021 STR(format("~?",
3022 CONST_STRING("~w"), LIST_1(lst))));
3023 /* SigScheme starts the index with 1 */
3024 TST_TN_EQ_STR("#1=(0 1 . #1#)",
3025 STR(format("~?",
3026 CONST_STRING("~w"), LIST_1(clst))));
3027 }
3028
3029 TST_CASE("format ~k")
3030 {
3031 TST_TN_EQ_STR("~", STR(format("~k", CONST_STRING("~~"), SCM_NULL)));
3032 TST_TN_EQ_STR(" ", STR(format("~k", CONST_STRING("~_"), SCM_NULL)));
3033 TST_TN_EQ_STR("\n", STR(format("~k", CONST_STRING("~%"), SCM_NULL)));
3034 TST_TN_EQ_STR("\n", STR(format("~k", CONST_STRING("~&"), SCM_NULL)));
3035
3036 TST_TN_EQ_STR("024aBc531",
3037 STR(format("~k",
3038 CONST_STRING("0~k1"),
3039 LIST_2(CONST_STRING("2~k3"),
3040 LIST_2(CONST_STRING("4~a5"),
3041 LIST_1(CONST_STRING("aBc")))))));
3042 }
3043
3044 TST_CASE("format ~h")
3045 {
3046 TST_TN_EQ_STR(MSG_SSCM_DIRECTIVE_HELP, STR(format("~h")));
3047 }
3048
3049 TST_CASE("format mixed raw C directives")
3050 {
3051 TST_TN_EQ_STR("-100 1010a64-01144100-01",
3052 STR(format("~D~5QBa~WX~03JD~3LO~ZU~03TD",
3053 -100,
3054 (int64_t)10,
3055 (int32_t)100,
3056 (intmax_t)-1,
3057 (long)100,
3058 (size_t)100,
3059 (ptrdiff_t)-1)));
3060
3061 TST_TN_EQ_STR("-100 1010aa string64-01144あ100b-01",
3062 STR(format("~D~5QBa~S~WX~03JD~3LO~C~ZU~C~03TD",
3063 -100,
3064 (int64_t)10,
3065 "a string",
3066 (int32_t)100,
3067 (intmax_t)-1,
3068 (long)100,
3069 (scm_ichar_t)0x3042,
3070 (size_t)100,
3071 (scm_ichar_t)'b',
3072 (ptrdiff_t)-1)));
3073 }
3074
3075 TST_CASE("format mixed SRFI directives")
3076 {
3077 TST_TN_EQ_STR("~\n", STR(format("~~~%")));
3078 TST_TN_EQ_STR("slashified: #\\a\nany: a\n",
3079 STR(format("slashified: ~s~%any: ~a~%",
3080 MAKE_CHAR('a'), MAKE_CHAR('a'))));
3081
3082 TST_TN_EQ_STR("-100 1010aa string64-01144あ100b-01",
3083 STR(format("~d~5ba~a~x~03d~3o~c~d~c~03d",
3084 MAKE_INT(-100),
3085 MAKE_INT(10),
3086 CONST_STRING("a string"),
3087 MAKE_INT(100),
3088 MAKE_INT(-1),
3089 MAKE_INT(100),
3090 MAKE_CHAR(0x3042),
3091 MAKE_INT(100),
3092 MAKE_CHAR('b'),
3093 MAKE_INT(-1))));
3094 }
3095
3096 TST_CASE("format mixed SRFI & raw C directives")
3097 {
3098 TST_TN_EQ_STR("-100 1010aa string64another string-01144~あ100b-01",
3099 STR(format("~D~5ba~S~WX~a~03JD~3LO~~~c~ZU~C~03TD",
3100 -100,
3101 MAKE_INT(10),
3102 "a string",
3103 (int32_t)100,
3104 CONST_STRING("another string"),
3105 (intmax_t)-1,
3106 (long)100,
3107 MAKE_CHAR(0x3042),
3108 (size_t)100,
3109 (scm_ichar_t)'b',
3110 (ptrdiff_t)-1)));
3111 }
3112
3113 TST_CASE("format freshline by mixed SRFI & raw C directives")
3114 {
3115 TST_TN_EQ_STR("\n", STR(format("~C~&", (scm_ichar_t)'\n')));
3116 TST_TN_EQ_STR("\n\n", STR(format("~&~C~&", (scm_ichar_t)'\n')));
3117 TST_TN_EQ_STR("\n", STR(format("~S~&", "\n")));
3118 TST_TN_EQ_STR("\n\n", STR(format("~&~S~&", "\n")));
3119
3120 #if 0
3121 /* current implementation does not support these behariors */
3122 TST_TN_EQ_STR("\n",
3123 STR(format("~C~?",
3124 (scm_ichar_t)'\n',
3125 CONST_STRING("~&"), SCM_NULL)));
3126 TST_TN_EQ_STR("\n\n",
3127 STR(format("~&~C~?",
3128 (scm_ichar_t)'\n',
3129 CONST_STRING("~&"), SCM_NULL)));
3130 TST_TN_EQ_STR("\n",
3131 STR(format("~S~?",
3132 "\n",
3133 CONST_STRING("~&"), SCM_NULL)));
3134 TST_TN_EQ_STR("\n\n",
3135 STR(format("~&~S~?",
3136 "\n",
3137 CONST_STRING("~&"), SCM_NULL)));
3138 #endif
3139 }
3140 #endif /* !TST_EXCLUDE_THIS */
3141