~ubuntu-branches/ubuntu/hardy/uim/hardy

« back to all changes in this revision

Viewing changes to sigscheme/test-c/test-format.c

  • Committer: Bazaar Package Importer
  • Author(s): Masahito Omote
  • Date: 2007-04-21 03:46:09 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20070421034609-gpcurkutp8vaysqj
Tags: 1:1.4.1-3
* Switch to dh_gtkmodules for the gtk 2.10 transition (Closes:
  #419318)
  - debian/control: Add ${misc:Depends} and remove libgtk2.0-bin on
    uim-gtk2.0.
  - debian/uim-gtk2.0.post{inst,rm}: Removed.

Show diffs side-by-side

added added

removed removed

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