Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.94k stars 554 forks source link

printf %a mishandles several edge cases on long doubles #15507

Closed p5pRT closed 6 years ago

p5pRT commented 8 years ago

Migrated from rt.perl.org#128899 (status was 'resolved')

Searchable as RT128899$

p5pRT commented 8 years ago

From @dcollinsn

Greetings!

Somewhere in the following stack of commits to blead​:

commit be93048a43d87d317acca5b37619111b6a5f8c44 Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Thu Aug 11 09​:18​:27 2016 -0400

  [rt.perl.org #128893]​: printf %a botches 0 flag for negative values

commit 75326c485e9d40be5c22d508f581cdea68b244ce Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Thu Aug 11 09​:15​:21 2016 -0400

  [rt.perl.org #128890]​: printf %a rounds incorrectly

commit a9ce335538454d590920dab8d62db84948f1fb83 Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Thu Aug 11 09​:12​:04 2016 -0400

  [rt.perl.org #128889]​: printf %a mishandles negative pseudo-precision

  (the fix for [rt.perl.org #128888] fixed also this one)

commit 82229f9f47d9a169b59715582fb5a09b5a4ac0ff Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Wed Aug 10 19​:06​:03 2016 -0400

  [rt.perl.org #128888]​: printf %a mishandles zero precision

commit 520f3e58c346a7bc3ef0509dfe0db206dae454ee Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Wed Aug 10 19​:47​:19 2016 -0400

  Comment fix for b6d9b423

commit 94d00769fba240ffb86f18b3d66341fb1d24ae6c Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Wed Aug 10 19​:13​:36 2016 -0400

  Add rt.perl.org reference for b6d9b423

I began encountering the following test failures​:

dcollins@​nightshade64​:\~/toolchain/buildbot/master/workers/bot1/linux-debug-thread-ld/build$ ./perl -Ilib t/harness t/op/sprintf2.t op/sprintf2.t .. 724/? # Failed test 1489 - at op/sprintf2.t line 807 # got "0x8.4p-3" # expected "0x1.08p+0" # Failed test 1490 - at op/sprintf2.t line 808 # got "0x8.4p-3" # expected "0x1.0p+0" # Failed test 1491 - [rt.perl.org \#128888] at op/sprintf2.t line 809 # got "0x8p-3" # expected "0x1p+0" # Failed test 1492 - [rt.perl.org \#128889] at op/sprintf2.t line 812 # got "0x8.4p-3" # expected "0x1.08p+0" # Failed test 1493 - at op/sprintf2.t line 815 # got "0x8.cp-3" # expected "0x1.18p+0" # Failed test 1494 - at op/sprintf2.t line 816 # got "0x8.4p-3" # expected "0x1.0p+0" # Failed test 1495 - [rt.perl.org \#128890] at op/sprintf2.t line 817 # got "0x8.cp-3" # expected "0x1.2p+0" # Failed test 1496 - at op/sprintf2.t line 818 # got "0x9.4p-3" # expected "0x1.2p+0" # Failed test 1497 - at op/sprintf2.t line 819 # got "0x9.cp-3" # expected "0x1.4p+0" # Failed test 1498 - at op/sprintf2.t line 820 # got "0xa.4p-3" # expected "0x1.4p+0" # Failed test 1499 - at op/sprintf2.t line 821 # got "0xa.cp-3" # expected "0x1.6p+0" # Failed test 1500 - at op/sprintf2.t line 822 # got "0xb.4p-3" # expected "0x1.6p+0" # Failed test 1501 - at op/sprintf2.t line 823 # got "0xb.cp-3" # expected "0x1.8p+0" # Failed test 1502 - at op/sprintf2.t line 824 # got "0xc.4p-3" # expected "0x1.8p+0" # Failed test 1503 - at op/sprintf2.t line 825 # got "0xc.cp-3" # expected "0x1.ap+0" # Failed test 1504 - at op/sprintf2.t line 826 # got "0xd.4p-3" # expected "0x1.ap+0" # Failed test 1505 - at op/sprintf2.t line 827 # got "0xd.cp-3" # expected "0x1.cp+0" # Failed test 1506 - at op/sprintf2.t line 828 # got "0xe.4p-3" # expected "0x1.cp+0" # Failed test 1507 - at op/sprintf2.t line 829 # got "0xe.cp-3" # expected "0x1.ep+0" # Failed test 1508 - at op/sprintf2.t line 830 # got "0xf.4p-3" # expected "0x1.ep+0" # Failed test 1509 - at op/sprintf2.t line 831 # got "0xf.cp-3" # expected "0x2.0p+0" # Failed test 1510 - at op/sprintf2.t line 833 # got "0x8.8p-3" # expected "0x1.1p+0" # Failed test 1511 - at op/sprintf2.t line 834 # got "0x8.cp-3" # expected "0x1.1p+0" # Failed test 1512 - at op/sprintf2.t line 835 # got "0x8.cp-3" # expected "0x1.2p+0" # Failed test 1513 - at op/sprintf2.t line 836 # got "0x9.0p-3" # expected "0x1.2p+0" # Failed test 1514 - at op/sprintf2.t line 838 # got "0x0.00p-3" # expected "0x2.00p+0" # Failed test 1515 - at op/sprintf2.t line 839 # got "0x0.00p+0" # expected "0x2.00p+3" # Failed test 1516 - at op/sprintf2.t line 842 # got "0x00000000000000cp-3" # expected "0x0000000000001.8p+0" # Failed test 1517 - [rt.perl.org \#128893] at op/sprintf2.t line 843 # got "-0x0000000000000cp-3" # expected "-0x000000000001.8p+0" # Failed test 1518 - [rt.perl.org \#128893] at op/sprintf2.t line 844 # got "+0x0000000000000cp-3" # expected "+0x000000000001.8p+0" # Failed test 1519 - [rt.perl.org \#128893] at op/sprintf2.t line 845 # got " 0x0000000000000cp-3" # expected " 0x000000000001.8p+0" # Failed test 1520 - at op/sprintf2.t line 846 # got " -0xcp-3" # expected " -0x1.8p+0" # Failed test 1521 - at op/sprintf2.t line 847 # got " +0xcp-3" # expected " +0x1.8p+0" # Failed test 1522 - at op/sprintf2.t line 848 # got " 0xcp-3" # expected " 0x1.8p+0" op/sprintf2.t .. Failed 34/1522 subtests   (less 34 skipped subtests​: 1454 okay)

Test Summary Report


op/sprintf2.t (Wstat​: 0 Tests​: 1522 Failed​: 34)   Failed tests​: 1489-1522 Files=1\, Tests=1522\, 1 wallclock secs ( 0.05 usr 0.01 sys + 0.04 cusr 0.04 csys = 0.14 CPU) Result​: FAIL

Under this configuration​:

dcollins@​nightshade64​:\~/toolchain/buildbot/master/workers/bot1/linux-debug-thread-ld/build$ ./perl -Ilib -V Summary of my perl5 (revision 5 version 25 subversion 4) configuration​:   Derived from​: be93048a43d87d317acca5b37619111b6a5f8c44   Platform​:   osname=linux   osvers=4.6.0-1-amd64   archname=x86_64-linux-thread-multi-ld   uname='linux nightshade64 4.6.0-1-amd64 #1 smp debian 4.6.1-1 (2016-06-06) x86_64 gnulinux '   config_args='-Dusedevel -des -Dcc=ccache gcc-6 -DDEBUGGING -Dusethreads -Duselongdouble'   hint=recommended   useposix=true   d_sigaction=define   useithreads=define   usemultiplicity=define   use64bitint=define   use64bitall=define   uselongdouble=define   usemymalloc=n   bincompat5005=undef   Compiler​:   cc='ccache gcc-6'   ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'   optimize='-O2 -g'   cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'   ccversion=''   gccversion='6.1.1 20160519'   gccosandvers=''   intsize=4   longsize=8   ptrsize=8   doublesize=8   byteorder=12345678   doublekind=3   d_longlong=define   longlongsize=8   d_longdbl=define   longdblsize=16   longdblkind=3   ivtype='long'   ivsize=8   nvtype='long double'   nvsize=16   Off_t='off_t'   lseeksize=8   alignbytes=16   prototype=define   Linker and Libraries​:   ld='ccache gcc-6'   ldflags =' -fstack-protector-strong -L/usr/local/lib'   libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib   libs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc   perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc   libc=libc-2.22.so   so=so   useshrplib=false   libperl=libperl.a   gnulibc_version='2.22'   Dynamic Linking​:   dlsrc=dl_dlopen.xs   dlext=so   d_dlsymun=undef   ccdlflags='-Wl\,-E'   cccdlflags='-fPIC'   lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector-strong'

Characteristics of this binary (from libperl)​:   Compile-time options​:   DEBUGGING   HAS_TIMES   MULTIPLICITY   PERLIO_LAYERS   PERL_COPY_ON_WRITE   PERL_DONT_CREATE_GVSV   PERL_HASH_FUNC_ONE_AT_A_TIME_HARD   PERL_IMPLICIT_CONTEXT   PERL_MALLOC_WRAP   PERL_OP_PARENT   PERL_PRESERVE_IVUV   PERL_TRACK_MEMPOOL   PERL_USE_DEVEL   USE_64_BIT_ALL   USE_64_BIT_INT   USE_ITHREADS   USE_LARGE_FILES   USE_LOCALE   USE_LOCALE_COLLATE   USE_LOCALE_CTYPE   USE_LOCALE_NUMERIC   USE_LOCALE_TIME   USE_LONG_DOUBLE   USE_PERLIO   USE_PERL_ATOF   USE_REENTRANT_API   Locally applied patches​:   uncommitted-changes   Built under linux   Compiled at Jan 1 1970 00​:00​:00   %ENV​:   PERLBREW_BASHRC_VERSION="0.76"   PERLBREW_HOME="/home/dcollins/.perlbrew"   PERLBREW_ROOT="/home/dcollins/toolchain/perl5"   @​INC​:   lib   /usr/local/lib/perl5/site_perl/5.25.4/x86_64-linux-thread-multi-ld   /usr/local/lib/perl5/site_perl/5.25.4   /usr/local/lib/perl5/5.25.4/x86_64-linux-thread-multi-ld   /usr/local/lib/perl5/5.25.4   .

I don't have a long doubles smoker that doesn't also build with -DDEBUGGING and -Dusethreads\, but I suspect that a build with -Duselongdoubles is sufficient to trigger this. Full build log here​: http​://73.193.221.114​:8010/#/builders/15/builds/42

-- Respectfully\, Dan Collins

p5pRT commented 8 years ago

From @dcollinsn

In fact\, these test failures were added by several of those commits - they do not bisect cleanly. For example​:

82229f9f47d9a169b59715582fb5a09b5a4ac0ff is the first bad commit commit 82229f9f47d9a169b59715582fb5a09b5a4ac0ff Author​: Jarkko Hietaniemi \jhi@​iki\.fi Date​: Wed Aug 10 19​:06​:03 2016 -0400

  [rt.perl.org #128888]​: printf %a mishandles zero precision

:100644 100644 93e6364071013469fde22fc001170da29bff9cc9 ac41af27dfe9035a46244a1b6d15830aa8de2c9c M sv.c :040000 040000 0c3aae5a15ebe25f4e05ac42751605f417088df0 388c66cd3f2e52ddb982e51d1f92d760483b3db3 M t

adds these​:

op/sprintf2.t .. 1/? # Failed test 1489 - at op/sprintf2.t line 807 # got "0x8.4p-3" # expected "0x1.08p+0" # Failed test 1490 - at op/sprintf2.t line 808 # got "0x8.4p-3" # expected "0x1.0p+0" # Failed test 1491 - [rt.perl.org \#128888] at op/sprintf2.t line 809 # got "0x8p-3" # expected "0x1p+0" op/sprintf2.t .. Failed 3/1491 subtests   (less 34 skipped subtests​: 1454 okay)

Test Summary Report


op/sprintf2.t (Wstat​: 0 Tests​: 1491 Failed​: 3)   Failed tests​: 1489-1491 Files=1\, Tests=1491\, 0 wallclock secs ( 0.05 usr 0.00 sys + 0.06 cusr 0.18 csys = 0.29 CPU) Result​: FAIL

But more failing tests are added over the next few commits. If I understand the original bugs correctly\, I think the issue was fixed for normal builds\, but your tests have uncovered that the same problem still exists for long doubles.

-- Respectfully\, Dan Collins

p5pRT commented 8 years ago

From @dcollinsn

I forgot to add​: the following configure flags are sufficient to trigger this bug​:

./Configure -Dusedevel -Dcc='ccache gcc-6' -Duselongdouble -des && make -j4 test_prep

-- Respectfully\, Dan Collins

p5pRT commented 8 years ago

From [Unknown Contact. See original ticket]

I forgot to add​: the following configure flags are sufficient to trigger this bug​:

./Configure -Dusedevel -Dcc='ccache gcc-6' -Duselongdouble -des && make -j4 test_prep

-- Respectfully\, Dan Collins

p5pRT commented 8 years ago

From @jhi

But more failing tests are added over the next few commits. If I understand the original bugs correctly\, I think the issue was fixed for normal builds\, but your tests have uncovered that the same problem still exists for long doubles.

Not quite. The failures you are seeing are caused by your long doubles (x86 80-bit) being scaled differently​:

  perl -wle 'printf "%a\n"\, -1.5' # IEEE 754 64-bit   -0xcp-3   perl -wle 'printf "%a\n"\, -1.5' # x86 80-bit   -0x1.8+0

In any system​:

  perl -wle 'print -0x1.8p+0'   -1.5   perl -wle 'print -0xcp-3'   -1.5

I'll extend the block that limits the testing only for the expected systems\, sorry about not catching that earlier.

p5pRT commented 8 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 8 years ago

From @jkeenan

On Thu Aug 11 11​:31​:02 2016\, dcollinsn@​gmail.com wrote​:

I forgot to add​: the following configure flags are sufficient to trigger this bug​:

./Configure -Dusedevel -Dcc='ccache gcc-6' -Duselongdouble -des && make -j4 test_prep

The -Dcc='ccache gcc-6' is not necessary\, either. I triggered failures with simply '-des -Dusedevel -Duselongdouble'. See attachments.

Thank you very much. -- James E Keenan (jkeenan@​cpan.org)

p5pRT commented 8 years ago

From @jkeenan

# Failed test 1440 - '%.6a' '3.14' -> '0xc.8f5c38p-2' cf '0xc.8f5c29p-2' at op/sprintf2.t line 690 # Failed test 1489 - at op/sprintf2.t line 807 # got "0x8.4p-3" # expected "0x1.08p+0" # Failed test 1490 - at op/sprintf2.t line 808 # got "0x8.4p-3" # expected "0x1.0p+0" # Failed test 1491 - [rt.perl.org \#128888] at op/sprintf2.t line 809 # got "0x8p-3" # expected "0x1p+0" # Failed test 1492 - [rt.perl.org \#128889] at op/sprintf2.t line 812 # got "0x8.4p-3" # expected "0x1.08p+0" # Failed test 1493 - at op/sprintf2.t line 815 # got "0x8.cp-3" # expected "0x1.18p+0" # Failed test 1494 - at op/sprintf2.t line 816 # got "0x8.4p-3" # expected "0x1.0p+0" # Failed test 1495 - [rt.perl.org \#128890] at op/sprintf2.t line 817 # got "0x8.cp-3" # expected "0x1.2p+0" # Failed test 1496 - at op/sprintf2.t line 818 # got "0x9.4p-3" # expected "0x1.2p+0" # Failed test 1497 - at op/sprintf2.t line 819 # got "0x9.cp-3" # expected "0x1.4p+0" # Failed test 1498 - at op/sprintf2.t line 820 # got "0xa.4p-3" # expected "0x1.4p+0" # Failed test 1499 - at op/sprintf2.t line 821 # got "0xa.cp-3" # expected "0x1.6p+0" # Failed test 1500 - at op/sprintf2.t line 822 # got "0xb.4p-3" # expected "0x1.6p+0" # Failed test 1501 - at op/sprintf2.t line 823 # got "0xb.cp-3" # expected "0x1.8p+0" # Failed test 1502 - at op/sprintf2.t line 824 # got "0xc.4p-3" # expected "0x1.8p+0" # Failed test 1503 - at op/sprintf2.t line 825 # got "0xc.cp-3" # expected "0x1.ap+0" # Failed test 1504 - at op/sprintf2.t line 826 # got "0xd.4p-3" # expected "0x1.ap+0" # Failed test 1505 - at op/sprintf2.t line 827 # got "0xd.cp-3" # expected "0x1.cp+0" # Failed test 1506 - at op/sprintf2.t line 828 # got "0xe.4p-3" # expected "0x1.cp+0" # Failed test 1507 - at op/sprintf2.t line 829 # got "0xe.cp-3" # expected "0x1.ep+0" # Failed test 1508 - at op/sprintf2.t line 830 # got "0xf.4p-3" # expected "0x1.ep+0" # Failed test 1509 - at op/sprintf2.t line 831 # got "0xf.cp-3" # expected "0x2.0p+0" # Failed test 1510 - at op/sprintf2.t line 833 # got "0x8.8p-3" # expected "0x1.1p+0" # Failed test 1511 - at op/sprintf2.t line 834 # got "0x8.cp-3" # expected "0x1.1p+0" # Failed test 1512 - at op/sprintf2.t line 835 # got "0x8.cp-3" # expected "0x1.2p+0" # Failed test 1513 - at op/sprintf2.t line 836 # got "0x9.0p-3" # expected "0x1.2p+0" # Failed test 1514 - at op/sprintf2.t line 838 # got "0x0.00p-3" # expected "0x2.00p+0" # Failed test 1515 - at op/sprintf2.t line 839 # got "0x0.00p+0" # expected "0x2.00p+3" # Failed test 1516 - at op/sprintf2.t line 842 # got "0x00000000000000cp-3" # expected "0x0000000000001.8p+0" # Failed test 1517 - [rt.perl.org \#128893] at op/sprintf2.t line 843 # got "-0x0000000000000cp-3" # expected "-0x000000000001.8p+0" # Failed test 1518 - [rt.perl.org \#128893] at op/sprintf2.t line 844 # got "+0x0000000000000cp-3" # expected "+0x000000000001.8p+0" # Failed test 1519 - [rt.perl.org \#128893] at op/sprintf2.t line 845 # got " 0x0000000000000cp-3" # expected " 0x000000000001.8p+0" # Failed test 1520 - at op/sprintf2.t line 846 # got " -0xcp-3" # expected " -0x1.8p+0" # Failed test 1521 - at op/sprintf2.t line 847 # got " +0xcp-3" # expected " +0x1.8p+0" # Failed test 1522 - at op/sprintf2.t line 848 # got " 0xcp-3" # expected " 0x1.8p+0" op/sprintf2.t .. # uvsize = 8 # nvsize = 16 # nv_preserves_uv_bits = 64 # d_quad = define 1..1522 ok 1 - the sprintf "%.\g" optimization ok 2 - the sprintf "%.\f" optimization ok 3 - width calculation under utf8 upgrade\, length=1 ok 4 - width calculation under utf8 upgrade\, length=5 ok 5 - width calculation under utf8 upgrade\, length=10 ok 6 - width calculation under utf8 upgrade\, length=20 ok 7 - width calculation under utf8 upgrade\, length=50 ok 8 - width calculation under utf8 upgrade\, length=100 ok 9 - width & precision interplay with utf8 strings\, length=1 ok 10 - width & precision interplay with utf8 strings\, length=3 ok 11 - width & precision interplay with utf8 strings\, length=5 ok 12 - width & precision interplay with utf8 strings\, length=10 ok 13 - %n should not be able to modify read-only constants ok 14 - no sprintf result expected %9223372036854775808d ok 15 - overflow in sprintf ok 16 - no printf result expected %9223372036854775808d ok 17 - overflow in printf ok 18 - no sprintf result expected %18446744073709551615d ok 19 - overflow in sprintf ok 20 - no printf result expected %18446744073709551615d ok 21 - overflow in printf ok 22 - no sprintf result expected %9999999999999999999d ok 23 - overflow in sprintf ok 24 - no printf result expected %9999999999999999999d ok 25 - overflow in printf ok 26 - only four valid values in %1$s%2147483647$s%2$s%2147483646$s%3$s%2147483645$s%4$s%2147483644$s%5$s%2147483643$s%6$s%2147483642$s%7$s%2147483641$s%8$s%2147483640$s%9$s%2147483639$s%10$s%2147483638$s%11$s%2147483637$s%12$s%2147483636$s%13$s%2147483635$s%14$s%2147483634$s%15$s%2147483633$s%16$s%2147483632$s%17$s%2147483631$s%18$s%2147483630$s%19$s%2147483629$s%20$s%2147483628$s ok 27 - expected warnings ok 28 - unexpected warnings ok 29 - For format '' and arguments/result 'x'/'' got the right result ok 30 - For format '' and arguments/result 'x'/'' got '0' 'missing argument' warnings ok 31 - For format '' and arguments/result 'x'/'' got '1' 'redundant argument' warnings ok 32 - For format '' and arguments/result 'x'/'' No unknown warnings ok 33 - For format '%s' and arguments/result 'x y'/'x' got the right result ok 34 - For format '%s' and arguments/result 'x y'/'x' got '0' 'missing argument' warnings ok 35 - For format '%s' and arguments/result 'x y'/'x' got '1' 'redundant argument' warnings ok 36 - For format '%s' and arguments/result 'x y'/'x' No unknown warnings ok 37 - For format '%-p' and arguments/result 'x y'/'1861330' got the right result ok 38 - For format '%-p' and arguments/result 'x y'/'1861330' got '0' 'missing argument' warnings ok 39 - For format '%-p' and arguments/result 'x y'/'1861330' got '1' 'redundant argument' warnings ok 40 - For format '%-p' and arguments/result 'x y'/'1861330' No unknown warnings ok 41 - For format '%s : %s' and arguments/result 'a b c'/'a : b' got the right result ok 42 - For format '%s : %s' and arguments/result 'a b c'/'a : b' got '0' 'missing argument' warnings ok 43 - For format '%s : %s' and arguments/result 'a b c'/'a : b' got '1' 'redundant argument' warnings ok 44 - For format '%s : %s' and arguments/result 'a b c'/'a : b' No unknown warnings ok 45 - For format '%s : %s : %s' and arguments/result 'a b c d e'/'a : b : c' got the right result ok 46 - For format '%s : %s : %s' and arguments/result 'a b c d e'/'a : b : c' got '0' 'missing argument' warnings ok 47 - For format '%s : %s : %s' and arguments/result 'a b c d e'/'a : b : c' got '1' 'redundant argument' warnings ok 48 - For format '%s : %s : %s' and arguments/result 'a b c d e'/'a : b : c' No unknown warnings ok 49 - For format '%s : %s : %s' and arguments/result ''/' : : ' got the right result ok 50 - For format '%s : %s : %s' and arguments/result ''/' : : ' got '3' 'missing argument' warnings ok 51 - For format '%s : %s : %s' and arguments/result ''/' : : ' got '0' 'redundant argument' warnings ok 52 - For format '%s : %s : %s' and arguments/result ''/' : : ' No unknown warnings ok 53 - For format '%1$s : %2$s' and arguments/result 'x y z'/'x : y' got the right result ok 54 - For format '%1$s : %2$s' and arguments/result 'x y z'/'x : y' got '0' 'missing argument' warnings ok 55 - For format '%1$s : %2$s' and arguments/result 'x y z'/'x : y' got '0' 'redundant argument' warnings ok 56 - For format '%1$s : %2$s' and arguments/result 'x y z'/'x : y' No unknown warnings ok 57 - For format '%2$s : %4$s : %5$s' and arguments/result 'a b c d'/'b : d : ' got the right result ok 58 - For format '%2$s : %4$s : %5$s' and arguments/result 'a b c d'/'b : d : ' got '1' 'missing argument' warnings ok 59 - For format '%2$s : %4$s : %5$s' and arguments/result 'a b c d'/'b : d : ' got '0' 'redundant argument' warnings ok 60 - For format '%2$s : %4$s : %5$s' and arguments/result 'a b c d'/'b : d : ' No unknown warnings ok 61 - For format '%s : %1$s : %s' and arguments/result 'x y z'/'x : x : y' got the right result ok 62 - For format '%s : %1$s : %s' and arguments/result 'x y z'/'x : x : y' got '0' 'missing argument' warnings ok 63 - For format '%s : %1$s : %s' and arguments/result 'x y z'/'x : x : y' got '0' 'redundant argument' warnings ok 64 - For format '%s : %1$s : %s' and arguments/result 'x y z'/'x : x : y' No unknown warnings ok 65 - pattern '%v' . chr 0 ok 66 - pattern '%v' . chr 1 ok 67 - pattern '%v' . chr 2 ok 68 - pattern '%v' . chr 3 ok 69 - pattern '%v' . chr 4 ok 70 - pattern '%v' . chr 5 ok 71 - pattern '%v' . chr 6 ok 72 - pattern '%v' . chr 7 ok 73 - pattern '%v' . chr 8 ok 74 - pattern '%v' . chr 9 ok 75 - pattern '%v' . chr 10 ok 76 - pattern '%v' . chr 11 ok 77 - pattern '%v' . chr 12 ok 78 - pattern '%v' . chr 13 ok 79 - pattern '%v' . chr 14 ok 80 - pattern '%v' . chr 15 ok 81 - pattern '%v' . chr 16 ok 82 - pattern '%v' . chr 17 ok 83 - pattern '%v' . chr 18 ok 84 - pattern '%v' . chr 19 ok 85 - pattern '%v' . chr 20 ok 86 - pattern '%v' . chr 21 ok 87 - pattern '%v' . chr 22 ok 88 - pattern '%v' . chr 23 ok 89 - pattern '%v' . chr 24 ok 90 - pattern '%v' . chr 25 ok 91 - pattern '%v' . chr 26 ok 92 - pattern '%v' . chr 27 ok 93 - pattern '%v' . chr 28 ok 94 - pattern '%v' . chr 29 ok 95 - pattern '%v' . chr 30 ok 96 - pattern '%v' . chr 31 ok 97 - pattern '%v' . chr 32 ok 98 - pattern '%v' . chr 33 ok 99 - pattern '%v' . chr 34 ok 100 - pattern '%v' . chr 35 ok 101 - pattern '%v' . chr 36 ok 102 - pattern '%v' . chr 37 ok 103 - pattern '%v' . chr 38 ok 104 - pattern '%v' . chr 39 ok 105 - pattern '%v' . chr 40 ok 106 - pattern '%v' . chr 41 ok 107 - pattern '%v' . chr 42 ok 108 - pattern '%v' . chr 43 ok 109 - pattern '%v' . chr 44 ok 110 - pattern '%v' . chr 45 ok 111 - pattern '%v' . chr 46 ok 112 - pattern '%v' . chr 47 ok 113 - pattern '%v' . chr 48 ok 114 - pattern '%v' . chr 49 ok 115 - pattern '%v' . chr 50 ok 116 - pattern '%v' . chr 51 ok 117 - pattern '%v' . chr 52 ok 118 - pattern '%v' . chr 53 ok 119 - pattern '%v' . chr 54 ok 120 - pattern '%v' . chr 55 ok 121 - pattern '%v' . chr 56 ok 122 - pattern '%v' . chr 57 ok 123 - pattern '%v' . chr 58 ok 124 - pattern '%v' . chr 59 ok 125 - pattern '%v' . chr 60 ok 126 - pattern '%v' . chr 61 ok 127 - pattern '%v' . chr 62 ok 128 - pattern '%v' . chr 63 ok 129 - pattern '%v' . chr 64 ok 130 - pattern '%v' . chr 65 ok 131 - pattern '%v' . chr 66 ok 132 - pattern '%v' . chr 67 ok 133 - pattern '%v' . chr 68 ok 134 - pattern '%v' . chr 69 ok 135 - pattern '%v' . chr 70 ok 136 - pattern '%v' . chr 71 ok 137 - pattern '%v' . chr 72 ok 138 - pattern '%v' . chr 73 ok 139 - pattern '%v' . chr 74 ok 140 - pattern '%v' . chr 75 ok 141 - pattern '%v' . chr 76 ok 142 - pattern '%v' . chr 77 ok 143 - pattern '%v' . chr 78 ok 144 - pattern '%v' . chr 79 ok 145 - pattern '%v' . chr 80 ok 146 - pattern '%v' . chr 81 ok 147 - pattern '%v' . chr 82 ok 148 - pattern '%v' . chr 83 ok 149 - pattern '%v' . chr 84 ok 150 - pattern '%v' . chr 85 ok 151 - pattern '%v' . chr 86 ok 152 - pattern '%v' . chr 87 ok 153 - pattern '%v' . chr 88 ok 154 - pattern '%v' . chr 89 ok 155 - pattern '%v' . chr 90 ok 156 - pattern '%v' . chr 91 ok 157 - pattern '%v' . chr 92 ok 158 - pattern '%v' . chr 93 ok 159 - pattern '%v' . chr 94 ok 160 - pattern '%v' . chr 95 ok 161 - pattern '%v' . chr 96 ok 162 - pattern '%v' . chr 97 ok 163 - pattern '%v' . chr 98 ok 164 - pattern '%v' . chr 99 ok 165 - pattern '%v' . chr 100 ok 166 - pattern '%v' . chr 101 ok 167 - pattern '%v' . chr 102 ok 168 - pattern '%v' . chr 103 ok 169 - pattern '%v' . chr 104 ok 170 - pattern '%v' . chr 105 ok 171 - pattern '%v' . chr 106 ok 172 - pattern '%v' . chr 107 ok 173 - pattern '%v' . chr 108 ok 174 - pattern '%v' . chr 109 ok 175 - pattern '%v' . chr 110 ok 176 - pattern '%v' . chr 111 ok 177 - pattern '%v' . chr 112 ok 178 - pattern '%v' . chr 113 ok 179 - pattern '%v' . chr 114 ok 180 - pattern '%v' . chr 115 ok 181 - pattern '%v' . chr 116 ok 182 - pattern '%v' . chr 117 ok 183 - pattern '%v' . chr 118 ok 184 - pattern '%v' . chr 119 ok 185 - pattern '%v' . chr 120 ok 186 - pattern '%v' . chr 121 ok 187 - pattern '%v' . chr 122 ok 188 - pattern '%v' . chr 123 ok 189 - pattern '%v' . chr 124 ok 190 - pattern '%v' . chr 125 ok 191 - pattern '%v' . chr 126 ok 192 - pattern '%v' . chr 127 ok 193 - pattern '%v' . chr 128 ok 194 - pattern '%v' . chr 129 ok 195 - pattern '%v' . chr 130 ok 196 - pattern '%v' . chr 131 ok 197 - pattern '%v' . chr 132 ok 198 - pattern '%v' . chr 133 ok 199 - pattern '%v' . chr 134 ok 200 - pattern '%v' . chr 135 ok 201 - pattern '%v' . chr 136 ok 202 - pattern '%v' . chr 137 ok 203 - pattern '%v' . chr 138 ok 204 - pattern '%v' . chr 139 ok 205 - pattern '%v' . chr 140 ok 206 - pattern '%v' . chr 141 ok 207 - pattern '%v' . chr 142 ok 208 - pattern '%v' . chr 143 ok 209 - pattern '%v' . chr 144 ok 210 - pattern '%v' . chr 145 ok 211 - pattern '%v' . chr 146 ok 212 - pattern '%v' . chr 147 ok 213 - pattern '%v' . chr 148 ok 214 - pattern '%v' . chr 149 ok 215 - pattern '%v' . chr 150 ok 216 - pattern '%v' . chr 151 ok 217 - pattern '%v' . chr 152 ok 218 - pattern '%v' . chr 153 ok 219 - pattern '%v' . chr 154 ok 220 - pattern '%v' . chr 155 ok 221 - pattern '%v' . chr 156 ok 222 - pattern '%v' . chr 157 ok 223 - pattern '%v' . chr 158 ok 224 - pattern '%v' . chr 159 ok 225 - pattern '%v' . chr 160 ok 226 - pattern '%v' . chr 161 ok 227 - pattern '%v' . chr 162 ok 228 - pattern '%v' . chr 163 ok 229 - pattern '%v' . chr 164 ok 230 - pattern '%v' . chr 165 ok 231 - pattern '%v' . chr 166 ok 232 - pattern '%v' . chr 167 ok 233 - pattern '%v' . chr 168 ok 234 - pattern '%v' . chr 169 ok 235 - pattern '%v' . chr 170 ok 236 - pattern '%v' . chr 171 ok 237 - pattern '%v' . chr 172 ok 238 - pattern '%v' . chr 173 ok 239 - pattern '%v' . chr 174 ok 240 - pattern '%v' . chr 175 ok 241 - pattern '%v' . chr 176 ok 242 - pattern '%v' . chr 177 ok 243 - pattern '%v' . chr 178 ok 244 - pattern '%v' . chr 179 ok 245 - pattern '%v' . chr 180 ok 246 - pattern '%v' . chr 181 ok 247 - pattern '%v' . chr 182 ok 248 - pattern '%v' . chr 183 ok 249 - pattern '%v' . chr 184 ok 250 - pattern '%v' . chr 185 ok 251 - pattern '%v' . chr 186 ok 252 - pattern '%v' . chr 187 ok 253 - pattern '%v' . chr 188 ok 254 - pattern '%v' . chr 189 ok 255 - pattern '%v' . chr 190 ok 256 - pattern '%v' . chr 191 ok 257 - pattern '%v' . chr 192 ok 258 - pattern '%v' . chr 193 ok 259 - pattern '%v' . chr 194 ok 260 - pattern '%v' . chr 195 ok 261 - pattern '%v' . chr 196 ok 262 - pattern '%v' . chr 197 ok 263 - pattern '%v' . chr 198 ok 264 - pattern '%v' . chr 199 ok 265 - pattern '%v' . chr 200 ok 266 - pattern '%v' . chr 201 ok 267 - pattern '%v' . chr 202 ok 268 - pattern '%v' . chr 203 ok 269 - pattern '%v' . chr 204 ok 270 - pattern '%v' . chr 205 ok 271 - pattern '%v' . chr 206 ok 272 - pattern '%v' . chr 207 ok 273 - pattern '%v' . chr 208 ok 274 - pattern '%v' . chr 209 ok 275 - pattern '%v' . chr 210 ok 276 - pattern '%v' . chr 211 ok 277 - pattern '%v' . chr 212 ok 278 - pattern '%v' . chr 213 ok 279 - pattern '%v' . chr 214 ok 280 - pattern '%v' . chr 215 ok 281 - pattern '%v' . chr 216 ok 282 - pattern '%v' . chr 217 ok 283 - pattern '%v' . chr 218 ok 284 - pattern '%v' . chr 219 ok 285 - pattern '%v' . chr 220 ok 286 - pattern '%v' . chr 221 ok 287 - pattern '%v' . chr 222 ok 288 - pattern '%v' . chr 223 ok 289 - pattern '%v' . chr 224 ok 290 - pattern '%v' . chr 225 ok 291 - pattern '%v' . chr 226 ok 292 - pattern '%v' . chr 227 ok 293 - pattern '%v' . chr 228 ok 294 - pattern '%v' . chr 229 ok 295 - pattern '%v' . chr 230 ok 296 - pattern '%v' . chr 231 ok 297 - pattern '%v' . chr 232 ok 298 - pattern '%v' . chr 233 ok 299 - pattern '%v' . chr 234 ok 300 - pattern '%v' . chr 235 ok 301 - pattern '%v' . chr 236 ok 302 - pattern '%v' . chr 237 ok 303 - pattern '%v' . chr 238 ok 304 - pattern '%v' . chr 239 ok 305 - pattern '%v' . chr 240 ok 306 - pattern '%v' . chr 241 ok 307 - pattern '%v' . chr 242 ok 308 - pattern '%v' . chr 243 ok 309 - pattern '%v' . chr 244 ok 310 - pattern '%v' . chr 245 ok 311 - pattern '%v' . chr 246 ok 312 - pattern '%v' . chr 247 ok 313 - pattern '%v' . chr 248 ok 314 - pattern '%v' . chr 249 ok 315 - pattern '%v' . chr 250 ok 316 - pattern '%v' . chr 251 ok 317 - pattern '%v' . chr 252 ok 318 - pattern '%v' . chr 253 ok 319 - pattern '%v' . chr 254 ok 320 - pattern '%v' . chr 255 ok 321 - sprintf("%--4d"\,0) ok 322 - sprintf("%---4d"\,0) ok 323 - sprintf("%----4d"\,0) ok 324 - sprintf("%---+4d"\,0) ok 325 - sprintf("%--- 4d"\,0) ok 326 - sprintf("%---04d"\,0) ok 327 - sprintf("%--+4d"\,0) ok 328 - sprintf("%--+-4d"\,0) ok 329 - sprintf("%--++4d"\,0) ok 330 - sprintf("%--+ 4d"\,0) ok 331 - sprintf("%--+04d"\,0) ok 332 - sprintf("%-- 4d"\,0) ok 333 - sprintf("%-- -4d"\,0) ok 334 - sprintf("%-- +4d"\,0) ok 335 - sprintf("%-- 4d"\,0) ok 336 - sprintf("%-- 04d"\,0) ok 337 - sprintf("%--04d"\,0) ok 338 - sprintf("%--0-4d"\,0) ok 339 - sprintf("%--0+4d"\,0) ok 340 - sprintf("%--0 4d"\,0) ok 341 - sprintf("%--004d"\,0) ok 342 - sprintf("%-+4d"\,0) ok 343 - sprintf("%-+-4d"\,0) ok 344 - sprintf("%-+--4d"\,0) ok 345 - sprintf("%-+-+4d"\,0) ok 346 - sprintf("%-+- 4d"\,0) ok 347 - sprintf("%-+-04d"\,0) ok 348 - sprintf("%-++4d"\,0) ok 349 - sprintf("%-++-4d"\,0) ok 350 - sprintf("%-+++4d"\,0) ok 351 - sprintf("%-++ 4d"\,0) ok 352 - sprintf("%-++04d"\,0) ok 353 - sprintf("%-+ 4d"\,0) ok 354 - sprintf("%-+ -4d"\,0) ok 355 - sprintf("%-+ +4d"\,0) ok 356 - sprintf("%-+ 4d"\,0) ok 357 - sprintf("%-+ 04d"\,0) ok 358 - sprintf("%-+04d"\,0) ok 359 - sprintf("%-+0-4d"\,0) ok 360 - sprintf("%-+0+4d"\,0) ok 361 - sprintf("%-+0 4d"\,0) ok 362 - sprintf("%-+004d"\,0) ok 363 - sprintf("%- 4d"\,0) ok 364 - sprintf("%- -4d"\,0) ok 365 - sprintf("%- --4d"\,0) ok 366 - sprintf("%- -+4d"\,0) ok 367 - sprintf("%- - 4d"\,0) ok 368 - sprintf("%- -04d"\,0) ok 369 - sprintf("%- +4d"\,0) ok 370 - sprintf("%- +-4d"\,0) ok 371 - sprintf("%- ++4d"\,0) ok 372 - sprintf("%- + 4d"\,0) ok 373 - sprintf("%- +04d"\,0) ok 374 - sprintf("%- 4d"\,0) ok 375 - sprintf("%- -4d"\,0) ok 376 - sprintf("%- +4d"\,0) ok 377 - sprintf("%- 4d"\,0) ok 378 - sprintf("%- 04d"\,0) ok 379 - sprintf("%- 04d"\,0) ok 380 - sprintf("%- 0-4d"\,0) ok 381 - sprintf("%- 0+4d"\,0) ok 382 - sprintf("%- 0 4d"\,0) ok 383 - sprintf("%- 004d"\,0) ok 384 - sprintf("%-04d"\,0) ok 385 - sprintf("%-0-4d"\,0) ok 386 - sprintf("%-0--4d"\,0) ok 387 - sprintf("%-0-+4d"\,0) ok 388 - sprintf("%-0- 4d"\,0) ok 389 - sprintf("%-0-04d"\,0) ok 390 - sprintf("%-0+4d"\,0) ok 391 - sprintf("%-0+-4d"\,0) ok 392 - sprintf("%-0++4d"\,0) ok 393 - sprintf("%-0+ 4d"\,0) ok 394 - sprintf("%-0+04d"\,0) ok 395 - sprintf("%-0 4d"\,0) ok 396 - sprintf("%-0 -4d"\,0) ok 397 - sprintf("%-0 +4d"\,0) ok 398 - sprintf("%-0 4d"\,0) ok 399 - sprintf("%-0 04d"\,0) ok 400 - sprintf("%-004d"\,0) ok 401 - sprintf("%-00-4d"\,0) ok 402 - sprintf("%-00+4d"\,0) ok 403 - sprintf("%-00 4d"\,0) ok 404 - sprintf("%-0004d"\,0) ok 405 - sprintf("%+-4d"\,0) ok 406 - sprintf("%+--4d"\,0) ok 407 - sprintf("%+---4d"\,0) ok 408 - sprintf("%+--+4d"\,0) ok 409 - sprintf("%+-- 4d"\,0) ok 410 - sprintf("%+--04d"\,0) ok 411 - sprintf("%+-+4d"\,0) ok 412 - sprintf("%+-+-4d"\,0) ok 413 - sprintf("%+-++4d"\,0) ok 414 - sprintf("%+-+ 4d"\,0) ok 415 - sprintf("%+-+04d"\,0) ok 416 - sprintf("%+- 4d"\,0) ok 417 - sprintf("%+- -4d"\,0) ok 418 - sprintf("%+- +4d"\,0) ok 419 - sprintf("%+- 4d"\,0) ok 420 - sprintf("%+- 04d"\,0) ok 421 - sprintf("%+-04d"\,0) ok 422 - sprintf("%+-0-4d"\,0) ok 423 - sprintf("%+-0+4d"\,0) ok 424 - sprintf("%+-0 4d"\,0) ok 425 - sprintf("%+-004d"\,0) ok 426 - sprintf("%++4d"\,0) ok 427 - sprintf("%++-4d"\,0) ok 428 - sprintf("%++--4d"\,0) ok 429 - sprintf("%++-+4d"\,0) ok 430 - sprintf("%++- 4d"\,0) ok 431 - sprintf("%++-04d"\,0) ok 432 - sprintf("%+++4d"\,0) ok 433 - sprintf("%+++-4d"\,0) ok 434 - sprintf("%++++4d"\,0) ok 435 - sprintf("%+++ 4d"\,0) ok 436 - sprintf("%+++04d"\,0) ok 437 - sprintf("%++ 4d"\,0) ok 438 - sprintf("%++ -4d"\,0) ok 439 - sprintf("%++ +4d"\,0) ok 440 - sprintf("%++ 4d"\,0) ok 441 - sprintf("%++ 04d"\,0) ok 442 - sprintf("%++04d"\,0) ok 443 - sprintf("%++0-4d"\,0) ok 444 - sprintf("%++0+4d"\,0) ok 445 - sprintf("%++0 4d"\,0) ok 446 - sprintf("%++004d"\,0) ok 447 - sprintf("%+ 4d"\,0) ok 448 - sprintf("%+ -4d"\,0) ok 449 - sprintf("%+ --4d"\,0) ok 450 - sprintf("%+ -+4d"\,0) ok 451 - sprintf("%+ - 4d"\,0) ok 452 - sprintf("%+ -04d"\,0) ok 453 - sprintf("%+ +4d"\,0) ok 454 - sprintf("%+ +-4d"\,0) ok 455 - sprintf("%+ ++4d"\,0) ok 456 - sprintf("%+ + 4d"\,0) ok 457 - sprintf("%+ +04d"\,0) ok 458 - sprintf("%+ 4d"\,0) ok 459 - sprintf("%+ -4d"\,0) ok 460 - sprintf("%+ +4d"\,0) ok 461 - sprintf("%+ 4d"\,0) ok 462 - sprintf("%+ 04d"\,0) ok 463 - sprintf("%+ 04d"\,0) ok 464 - sprintf("%+ 0-4d"\,0) ok 465 - sprintf("%+ 0+4d"\,0) ok 466 - sprintf("%+ 0 4d"\,0) ok 467 - sprintf("%+ 004d"\,0) ok 468 - sprintf("%+04d"\,0) ok 469 - sprintf("%+0-4d"\,0) ok 470 - sprintf("%+0--4d"\,0) ok 471 - sprintf("%+0-+4d"\,0) ok 472 - sprintf("%+0- 4d"\,0) ok 473 - sprintf("%+0-04d"\,0) ok 474 - sprintf("%+0+4d"\,0) ok 475 - sprintf("%+0+-4d"\,0) ok 476 - sprintf("%+0++4d"\,0) ok 477 - sprintf("%+0+ 4d"\,0) ok 478 - sprintf("%+0+04d"\,0) ok 479 - sprintf("%+0 4d"\,0) ok 480 - sprintf("%+0 -4d"\,0) ok 481 - sprintf("%+0 +4d"\,0) ok 482 - sprintf("%+0 4d"\,0) ok 483 - sprintf("%+0 04d"\,0) ok 484 - sprintf("%+004d"\,0) ok 485 - sprintf("%+00-4d"\,0) ok 486 - sprintf("%+00+4d"\,0) ok 487 - sprintf("%+00 4d"\,0) ok 488 - sprintf("%+0004d"\,0) ok 489 - sprintf("% -4d"\,0) ok 490 - sprintf("% --4d"\,0) ok 491 - sprintf("% ---4d"\,0) ok 492 - sprintf("% --+4d"\,0) ok 493 - sprintf("% -- 4d"\,0) ok 494 - sprintf("% --04d"\,0) ok 495 - sprintf("% -+4d"\,0) ok 496 - sprintf("% -+-4d"\,0) ok 497 - sprintf("% -++4d"\,0) ok 498 - sprintf("% -+ 4d"\,0) ok 499 - sprintf("% -+04d"\,0) ok 500 - sprintf("% - 4d"\,0) ok 501 - sprintf("% - -4d"\,0) ok 502 - sprintf("% - +4d"\,0) ok 503 - sprintf("% - 4d"\,0) ok 504 - sprintf("% - 04d"\,0) ok 505 - sprintf("% -04d"\,0) ok 506 - sprintf("% -0-4d"\,0) ok 507 - sprintf("% -0+4d"\,0) ok 508 - sprintf("% -0 4d"\,0) ok 509 - sprintf("% -004d"\,0) ok 510 - sprintf("% +4d"\,0) ok 511 - sprintf("% +-4d"\,0) ok 512 - sprintf("% +--4d"\,0) ok 513 - sprintf("% +-+4d"\,0) ok 514 - sprintf("% +- 4d"\,0) ok 515 - sprintf("% +-04d"\,0) ok 516 - sprintf("% ++4d"\,0) ok 517 - sprintf("% ++-4d"\,0) ok 518 - sprintf("% +++4d"\,0) ok 519 - sprintf("% ++ 4d"\,0) ok 520 - sprintf("% ++04d"\,0) ok 521 - sprintf("% + 4d"\,0) ok 522 - sprintf("% + -4d"\,0) ok 523 - sprintf("% + +4d"\,0) ok 524 - sprintf("% + 4d"\,0) ok 525 - sprintf("% + 04d"\,0) ok 526 - sprintf("% +04d"\,0) ok 527 - sprintf("% +0-4d"\,0) ok 528 - sprintf("% +0+4d"\,0) ok 529 - sprintf("% +0 4d"\,0) ok 530 - sprintf("% +004d"\,0) ok 531 - sprintf("% 4d"\,0) ok 532 - sprintf("% -4d"\,0) ok 533 - sprintf("% --4d"\,0) ok 534 - sprintf("% -+4d"\,0) ok 535 - sprintf("% - 4d"\,0) ok 536 - sprintf("% -04d"\,0) ok 537 - sprintf("% +4d"\,0) ok 538 - sprintf("% +-4d"\,0) ok 539 - sprintf("% ++4d"\,0) ok 540 - sprintf("% + 4d"\,0) ok 541 - sprintf("% +04d"\,0) ok 542 - sprintf("% 4d"\,0) ok 543 - sprintf("% -4d"\,0) ok 544 - sprintf("% +4d"\,0) ok 545 - sprintf("% 4d"\,0) ok 546 - sprintf("% 04d"\,0) ok 547 - sprintf("% 04d"\,0) ok 548 - sprintf("% 0-4d"\,0) ok 549 - sprintf("% 0+4d"\,0) ok 550 - sprintf("% 0 4d"\,0) ok 551 - sprintf("% 004d"\,0) ok 552 - sprintf("% 04d"\,0) ok 553 - sprintf("% 0-4d"\,0) ok 554 - sprintf("% 0--4d"\,0) ok 555 - sprintf("% 0-+4d"\,0) ok 556 - sprintf("% 0- 4d"\,0) ok 557 - sprintf("% 0-04d"\,0) ok 558 - sprintf("% 0+4d"\,0) ok 559 - sprintf("% 0+-4d"\,0) ok 560 - sprintf("% 0++4d"\,0) ok 561 - sprintf("% 0+ 4d"\,0) ok 562 - sprintf("% 0+04d"\,0) ok 563 - sprintf("% 0 4d"\,0) ok 564 - sprintf("% 0 -4d"\,0) ok 565 - sprintf("% 0 +4d"\,0) ok 566 - sprintf("% 0 4d"\,0) ok 567 - sprintf("% 0 04d"\,0) ok 568 - sprintf("% 004d"\,0) ok 569 - sprintf("% 00-4d"\,0) ok 570 - sprintf("% 00+4d"\,0) ok 571 - sprintf("% 00 4d"\,0) ok 572 - sprintf("% 0004d"\,0) ok 573 - sprintf("%0-4d"\,0) ok 574 - sprintf("%0--4d"\,0) ok 575 - sprintf("%0---4d"\,0) ok 576 - sprintf("%0--+4d"\,0) ok 577 - sprintf("%0-- 4d"\,0) ok 578 - sprintf("%0--04d"\,0) ok 579 - sprintf("%0-+4d"\,0) ok 580 - sprintf("%0-+-4d"\,0) ok 581 - sprintf("%0-++4d"\,0) ok 582 - sprintf("%0-+ 4d"\,0) ok 583 - sprintf("%0-+04d"\,0) ok 584 - sprintf("%0- 4d"\,0) ok 585 - sprintf("%0- -4d"\,0) ok 586 - sprintf("%0- +4d"\,0) ok 587 - sprintf("%0- 4d"\,0) ok 588 - sprintf("%0- 04d"\,0) ok 589 - sprintf("%0-04d"\,0) ok 590 - sprintf("%0-0-4d"\,0) ok 591 - sprintf("%0-0+4d"\,0) ok 592 - sprintf("%0-0 4d"\,0) ok 593 - sprintf("%0-004d"\,0) ok 594 - sprintf("%0+4d"\,0) ok 595 - sprintf("%0+-4d"\,0) ok 596 - sprintf("%0+--4d"\,0) ok 597 - sprintf("%0+-+4d"\,0) ok 598 - sprintf("%0+- 4d"\,0) ok 599 - sprintf("%0+-04d"\,0) ok 600 - sprintf("%0++4d"\,0) ok 601 - sprintf("%0++-4d"\,0) ok 602 - sprintf("%0+++4d"\,0) ok 603 - sprintf("%0++ 4d"\,0) ok 604 - sprintf("%0++04d"\,0) ok 605 - sprintf("%0+ 4d"\,0) ok 606 - sprintf("%0+ -4d"\,0) ok 607 - sprintf("%0+ +4d"\,0) ok 608 - sprintf("%0+ 4d"\,0) ok 609 - sprintf("%0+ 04d"\,0) ok 610 - sprintf("%0+04d"\,0) ok 611 - sprintf("%0+0-4d"\,0) ok 612 - sprintf("%0+0+4d"\,0) ok 613 - sprintf("%0+0 4d"\,0) ok 614 - sprintf("%0+004d"\,0) ok 615 - sprintf("%0 4d"\,0) ok 616 - sprintf("%0 -4d"\,0) ok 617 - sprintf("%0 --4d"\,0) ok 618 - sprintf("%0 -+4d"\,0) ok 619 - sprintf("%0 - 4d"\,0) ok 620 - sprintf("%0 -04d"\,0) ok 621 - sprintf("%0 +4d"\,0) ok 622 - sprintf("%0 +-4d"\,0) ok 623 - sprintf("%0 ++4d"\,0) ok 624 - sprintf("%0 + 4d"\,0) ok 625 - sprintf("%0 +04d"\,0) ok 626 - sprintf("%0 4d"\,0) ok 627 - sprintf("%0 -4d"\,0) ok 628 - sprintf("%0 +4d"\,0) ok 629 - sprintf("%0 4d"\,0) ok 630 - sprintf("%0 04d"\,0) ok 631 - sprintf("%0 04d"\,0) ok 632 - sprintf("%0 0-4d"\,0) ok 633 - sprintf("%0 0+4d"\,0) ok 634 - sprintf("%0 0 4d"\,0) ok 635 - sprintf("%0 004d"\,0) ok 636 - sprintf("%004d"\,0) ok 637 - sprintf("%00-4d"\,0) ok 638 - sprintf("%00--4d"\,0) ok 639 - sprintf("%00-+4d"\,0) ok 640 - sprintf("%00- 4d"\,0) ok 641 - sprintf("%00-04d"\,0) ok 642 - sprintf("%00+4d"\,0) ok 643 - sprintf("%00+-4d"\,0) ok 644 - sprintf("%00++4d"\,0) ok 645 - sprintf("%00+ 4d"\,0) ok 646 - sprintf("%00+04d"\,0) ok 647 - sprintf("%00 4d"\,0) ok 648 - sprintf("%00 -4d"\,0) ok 649 - sprintf("%00 +4d"\,0) ok 650 - sprintf("%00 4d"\,0) ok 651 - sprintf("%00 04d"\,0) ok 652 - sprintf("%0004d"\,0) ok 653 - sprintf("%000-4d"\,0) ok 654 - sprintf("%000+4d"\,0) ok 655 - sprintf("%000 4d"\,0) ok 656 - sprintf("%00004d"\,0) ok 657 - sprintf("%--4d"\,-1) ok 658 - sprintf("%---4d"\,-1) ok 659 - sprintf("%----4d"\,-1) ok 660 - sprintf("%---+4d"\,-1) ok 661 - sprintf("%--- 4d"\,-1) ok 662 - sprintf("%---04d"\,-1) ok 663 - sprintf("%--+4d"\,-1) ok 664 - sprintf("%--+-4d"\,-1) ok 665 - sprintf("%--++4d"\,-1) ok 666 - sprintf("%--+ 4d"\,-1) ok 667 - sprintf("%--+04d"\,-1) ok 668 - sprintf("%-- 4d"\,-1) ok 669 - sprintf("%-- -4d"\,-1) ok 670 - sprintf("%-- +4d"\,-1) ok 671 - sprintf("%-- 4d"\,-1) ok 672 - sprintf("%-- 04d"\,-1) ok 673 - sprintf("%--04d"\,-1) ok 674 - sprintf("%--0-4d"\,-1) ok 675 - sprintf("%--0+4d"\,-1) ok 676 - sprintf("%--0 4d"\,-1) ok 677 - sprintf("%--004d"\,-1) ok 678 - sprintf("%-+4d"\,-1) ok 679 - sprintf("%-+-4d"\,-1) ok 680 - sprintf("%-+--4d"\,-1) ok 681 - sprintf("%-+-+4d"\,-1) ok 682 - sprintf("%-+- 4d"\,-1) ok 683 - sprintf("%-+-04d"\,-1) ok 684 - sprintf("%-++4d"\,-1) ok 685 - sprintf("%-++-4d"\,-1) ok 686 - sprintf("%-+++4d"\,-1) ok 687 - sprintf("%-++ 4d"\,-1) ok 688 - sprintf("%-++04d"\,-1) ok 689 - sprintf("%-+ 4d"\,-1) ok 690 - sprintf("%-+ -4d"\,-1) ok 691 - sprintf("%-+ +4d"\,-1) ok 692 - sprintf("%-+ 4d"\,-1) ok 693 - sprintf("%-+ 04d"\,-1) ok 694 - sprintf("%-+04d"\,-1) ok 695 - sprintf("%-+0-4d"\,-1) ok 696 - sprintf("%-+0+4d"\,-1) ok 697 - sprintf("%-+0 4d"\,-1) ok 698 - sprintf("%-+004d"\,-1) ok 699 - sprintf("%- 4d"\,-1) ok 700 - sprintf("%- -4d"\,-1) ok 701 - sprintf("%- --4d"\,-1) ok 702 - sprintf("%- -+4d"\,-1) ok 703 - sprintf("%- - 4d"\,-1) ok 704 - sprintf("%- -04d"\,-1) ok 705 - sprintf("%- +4d"\,-1) ok 706 - sprintf("%- +-4d"\,-1) ok 707 - sprintf("%- ++4d"\,-1) ok 708 - sprintf("%- + 4d"\,-1) ok 709 - sprintf("%- +04d"\,-1) ok 710 - sprintf("%- 4d"\,-1) ok 711 - sprintf("%- -4d"\,-1) ok 712 - sprintf("%- +4d"\,-1) ok 713 - sprintf("%- 4d"\,-1) ok 714 - sprintf("%- 04d"\,-1) ok 715 - sprintf("%- 04d"\,-1) ok 716 - sprintf("%- 0-4d"\,-1) ok 717 - sprintf("%- 0+4d"\,-1) ok 718 - sprintf("%- 0 4d"\,-1) ok 719 - sprintf("%- 004d"\,-1) ok 720 - sprintf("%-04d"\,-1) ok 721 - sprintf("%-0-4d"\,-1) ok 722 - sprintf("%-0--4d"\,-1) ok 723 - sprintf("%-0-+4d"\,-1) ok 724 - sprintf("%-0- 4d"\,-1) ok 725 - sprintf("%-0-04d"\,-1) ok 726 - sprintf("%-0+4d"\,-1) ok 727 - sprintf("%-0+-4d"\,-1) ok 728 - sprintf("%-0++4d"\,-1) ok 729 - sprintf("%-0+ 4d"\,-1) ok 730 - sprintf("%-0+04d"\,-1) ok 731 - sprintf("%-0 4d"\,-1) ok 732 - sprintf("%-0 -4d"\,-1) ok 733 - sprintf("%-0 +4d"\,-1) ok 734 - sprintf("%-0 4d"\,-1) ok 735 - sprintf("%-0 04d"\,-1) ok 736 - sprintf("%-004d"\,-1) ok 737 - sprintf("%-00-4d"\,-1) ok 738 - sprintf("%-00+4d"\,-1) ok 739 - sprintf("%-00 4d"\,-1) ok 740 - sprintf("%-0004d"\,-1) ok 741 - sprintf("%+-4d"\,-1) ok 742 - sprintf("%+--4d"\,-1) ok 743 - sprintf("%+---4d"\,-1) ok 744 - sprintf("%+--+4d"\,-1) ok 745 - sprintf("%+-- 4d"\,-1) ok 746 - sprintf("%+--04d"\,-1) ok 747 - sprintf("%+-+4d"\,-1) ok 748 - sprintf("%+-+-4d"\,-1) ok 749 - sprintf("%+-++4d"\,-1) ok 750 - sprintf("%+-+ 4d"\,-1) ok 751 - sprintf("%+-+04d"\,-1) ok 752 - sprintf("%+- 4d"\,-1) ok 753 - sprintf("%+- -4d"\,-1) ok 754 - sprintf("%+- +4d"\,-1) ok 755 - sprintf("%+- 4d"\,-1) ok 756 - sprintf("%+- 04d"\,-1) ok 757 - sprintf("%+-04d"\,-1) ok 758 - sprintf("%+-0-4d"\,-1) ok 759 - sprintf("%+-0+4d"\,-1) ok 760 - sprintf("%+-0 4d"\,-1) ok 761 - sprintf("%+-004d"\,-1) ok 762 - sprintf("%++4d"\,-1) ok 763 - sprintf("%++-4d"\,-1) ok 764 - sprintf("%++--4d"\,-1) ok 765 - sprintf("%++-+4d"\,-1) ok 766 - sprintf("%++- 4d"\,-1) ok 767 - sprintf("%++-04d"\,-1) ok 768 - sprintf("%+++4d"\,-1) ok 769 - sprintf("%+++-4d"\,-1) ok 770 - sprintf("%++++4d"\,-1) ok 771 - sprintf("%+++ 4d"\,-1) ok 772 - sprintf("%+++04d"\,-1) ok 773 - sprintf("%++ 4d"\,-1) ok 774 - sprintf("%++ -4d"\,-1) ok 775 - sprintf("%++ +4d"\,-1) ok 776 - sprintf("%++ 4d"\,-1) ok 777 - sprintf("%++ 04d"\,-1) ok 778 - sprintf("%++04d"\,-1) ok 779 - sprintf("%++0-4d"\,-1) ok 780 - sprintf("%++0+4d"\,-1) ok 781 - sprintf("%++0 4d"\,-1) ok 782 - sprintf("%++004d"\,-1) ok 783 - sprintf("%+ 4d"\,-1) ok 784 - sprintf("%+ -4d"\,-1) ok 785 - sprintf("%+ --4d"\,-1) ok 786 - sprintf("%+ -+4d"\,-1) ok 787 - sprintf("%+ - 4d"\,-1) ok 788 - sprintf("%+ -04d"\,-1) ok 789 - sprintf("%+ +4d"\,-1) ok 790 - sprintf("%+ +-4d"\,-1) ok 791 - sprintf("%+ ++4d"\,-1) ok 792 - sprintf("%+ + 4d"\,-1) ok 793 - sprintf("%+ +04d"\,-1) ok 794 - sprintf("%+ 4d"\,-1) ok 795 - sprintf("%+ -4d"\,-1) ok 796 - sprintf("%+ +4d"\,-1) ok 797 - sprintf("%+ 4d"\,-1) ok 798 - sprintf("%+ 04d"\,-1) ok 799 - sprintf("%+ 04d"\,-1) ok 800 - sprintf("%+ 0-4d"\,-1) ok 801 - sprintf("%+ 0+4d"\,-1) ok 802 - sprintf("%+ 0 4d"\,-1) ok 803 - sprintf("%+ 004d"\,-1) ok 804 - sprintf("%+04d"\,-1) ok 805 - sprintf("%+0-4d"\,-1) ok 806 - sprintf("%+0--4d"\,-1) ok 807 - sprintf("%+0-+4d"\,-1) ok 808 - sprintf("%+0- 4d"\,-1) ok 809 - sprintf("%+0-04d"\,-1) ok 810 - sprintf("%+0+4d"\,-1) ok 811 - sprintf("%+0+-4d"\,-1) ok 812 - sprintf("%+0++4d"\,-1) ok 813 - sprintf("%+0+ 4d"\,-1) ok 814 - sprintf("%+0+04d"\,-1) ok 815 - sprintf("%+0 4d"\,-1) ok 816 - sprintf("%+0 -4d"\,-1) ok 817 - sprintf("%+0 +4d"\,-1) ok 818 - sprintf("%+0 4d"\,-1) ok 819 - sprintf("%+0 04d"\,-1) ok 820 - sprintf("%+004d"\,-1) ok 821 - sprintf("%+00-4d"\,-1) ok 822 - sprintf("%+00+4d"\,-1) ok 823 - sprintf("%+00 4d"\,-1) ok 824 - sprintf("%+0004d"\,-1) ok 825 - sprintf("% -4d"\,-1) ok 826 - sprintf("% --4d"\,-1) ok 827 - sprintf("% ---4d"\,-1) ok 828 - sprintf("% --+4d"\,-1) ok 829 - sprintf("% -- 4d"\,-1) ok 830 - sprintf("% --04d"\,-1) ok 831 - sprintf("% -+4d"\,-1) ok 832 - sprintf("% -+-4d"\,-1) ok 833 - sprintf("% -++4d"\,-1) ok 834 - sprintf("% -+ 4d"\,-1) ok 835 - sprintf("% -+04d"\,-1) ok 836 - sprintf("% - 4d"\,-1) ok 837 - sprintf("% - -4d"\,-1) ok 838 - sprintf("% - +4d"\,-1) ok 839 - sprintf("% - 4d"\,-1) ok 840 - sprintf("% - 04d"\,-1) ok 841 - sprintf("% -04d"\,-1) ok 842 - sprintf("% -0-4d"\,-1) ok 843 - sprintf("% -0+4d"\,-1) ok 844 - sprintf("% -0 4d"\,-1) ok 845 - sprintf("% -004d"\,-1) ok 846 - sprintf("% +4d"\,-1) ok 847 - sprintf("% +-4d"\,-1) ok 848 - sprintf("% +--4d"\,-1) ok 849 - sprintf("% +-+4d"\,-1) ok 850 - sprintf("% +- 4d"\,-1) ok 851 - sprintf("% +-04d"\,-1) ok 852 - sprintf("% ++4d"\,-1) ok 853 - sprintf("% ++-4d"\,-1) ok 854 - sprintf("% +++4d"\,-1) ok 855 - sprintf("% ++ 4d"\,-1) ok 856 - sprintf("% ++04d"\,-1) ok 857 - sprintf("% + 4d"\,-1) ok 858 - sprintf("% + -4d"\,-1) ok 859 - sprintf("% + +4d"\,-1) ok 860 - sprintf("% + 4d"\,-1) ok 861 - sprintf("% + 04d"\,-1) ok 862 - sprintf("% +04d"\,-1) ok 863 - sprintf("% +0-4d"\,-1) ok 864 - sprintf("% +0+4d"\,-1) ok 865 - sprintf("% +0 4d"\,-1) ok 866 - sprintf("% +004d"\,-1) ok 867 - sprintf("% 4d"\,-1) ok 868 - sprintf("% -4d"\,-1) ok 869 - sprintf("% --4d"\,-1) ok 870 - sprintf("% -+4d"\,-1) ok 871 - sprintf("% - 4d"\,-1) ok 872 - sprintf("% -04d"\,-1) ok 873 - sprintf("% +4d"\,-1) ok 874 - sprintf("% +-4d"\,-1) ok 875 - sprintf("% ++4d"\,-1) ok 876 - sprintf("% + 4d"\,-1) ok 877 - sprintf("% +04d"\,-1) ok 878 - sprintf("% 4d"\,-1) ok 879 - sprintf("% -4d"\,-1) ok 880 - sprintf("% +4d"\,-1) ok 881 - sprintf("% 4d"\,-1) ok 882 - sprintf("% 04d"\,-1) ok 883 - sprintf("% 04d"\,-1) ok 884 - sprintf("% 0-4d"\,-1) ok 885 - sprintf("% 0+4d"\,-1) ok 886 - sprintf("% 0 4d"\,-1) ok 887 - sprintf("% 004d"\,-1) ok 888 - sprintf("% 04d"\,-1) ok 889 - sprintf("% 0-4d"\,-1) ok 890 - sprintf("% 0--4d"\,-1) ok 891 - sprintf("% 0-+4d"\,-1) ok 892 - sprintf("% 0- 4d"\,-1) ok 893 - sprintf("% 0-04d"\,-1) ok 894 - sprintf("% 0+4d"\,-1) ok 895 - sprintf("% 0+-4d"\,-1) ok 896 - sprintf("% 0++4d"\,-1) ok 897 - sprintf("% 0+ 4d"\,-1) ok 898 - sprintf("% 0+04d"\,-1) ok 899 - sprintf("% 0 4d"\,-1) ok 900 - sprintf("% 0 -4d"\,-1) ok 901 - sprintf("% 0 +4d"\,-1) ok 902 - sprintf("% 0 4d"\,-1) ok 903 - sprintf("% 0 04d"\,-1) ok 904 - sprintf("% 004d"\,-1) ok 905 - sprintf("% 00-4d"\,-1) ok 906 - sprintf("% 00+4d"\,-1) ok 907 - sprintf("% 00 4d"\,-1) ok 908 - sprintf("% 0004d"\,-1) ok 909 - sprintf("%0-4d"\,-1) ok 910 - sprintf("%0--4d"\,-1) ok 911 - sprintf("%0---4d"\,-1) ok 912 - sprintf("%0--+4d"\,-1) ok 913 - sprintf("%0-- 4d"\,-1) ok 914 - sprintf("%0--04d"\,-1) ok 915 - sprintf("%0-+4d"\,-1) ok 916 - sprintf("%0-+-4d"\,-1) ok 917 - sprintf("%0-++4d"\,-1) ok 918 - sprintf("%0-+ 4d"\,-1) ok 919 - sprintf("%0-+04d"\,-1) ok 920 - sprintf("%0- 4d"\,-1) ok 921 - sprintf("%0- -4d"\,-1) ok 922 - sprintf("%0- +4d"\,-1) ok 923 - sprintf("%0- 4d"\,-1) ok 924 - sprintf("%0- 04d"\,-1) ok 925 - sprintf("%0-04d"\,-1) ok 926 - sprintf("%0-0-4d"\,-1) ok 927 - sprintf("%0-0+4d"\,-1) ok 928 - sprintf("%0-0 4d"\,-1) ok 929 - sprintf("%0-004d"\,-1) ok 930 - sprintf("%0+4d"\,-1) ok 931 - sprintf("%0+-4d"\,-1) ok 932 - sprintf("%0+--4d"\,-1) ok 933 - sprintf("%0+-+4d"\,-1) ok 934 - sprintf("%0+- 4d"\,-1) ok 935 - sprintf("%0+-04d"\,-1) ok 936 - sprintf("%0++4d"\,-1) ok 937 - sprintf("%0++-4d"\,-1) ok 938 - sprintf("%0+++4d"\,-1) ok 939 - sprintf("%0++ 4d"\,-1) ok 940 - sprintf("%0++04d"\,-1) ok 941 - sprintf("%0+ 4d"\,-1) ok 942 - sprintf("%0+ -4d"\,-1) ok 943 - sprintf("%0+ +4d"\,-1) ok 944 - sprintf("%0+ 4d"\,-1) ok 945 - sprintf("%0+ 04d"\,-1) ok 946 - sprintf("%0+04d"\,-1) ok 947 - sprintf("%0+0-4d"\,-1) ok 948 - sprintf("%0+0+4d"\,-1) ok 949 - sprintf("%0+0 4d"\,-1) ok 950 - sprintf("%0+004d"\,-1) ok 951 - sprintf("%0 4d"\,-1) ok 952 - sprintf("%0 -4d"\,-1) ok 953 - sprintf("%0 --4d"\,-1) ok 954 - sprintf("%0 -+4d"\,-1) ok 955 - sprintf("%0 - 4d"\,-1) ok 956 - sprintf("%0 -04d"\,-1) ok 957 - sprintf("%0 +4d"\,-1) ok 958 - sprintf("%0 +-4d"\,-1) ok 959 - sprintf("%0 ++4d"\,-1) ok 960 - sprintf("%0 + 4d"\,-1) ok 961 - sprintf("%0 +04d"\,-1) ok 962 - sprintf("%0 4d"\,-1) ok 963 - sprintf("%0 -4d"\,-1) ok 964 - sprintf("%0 +4d"\,-1) ok 965 - sprintf("%0 4d"\,-1) ok 966 - sprintf("%0 04d"\,-1) ok 967 - sprintf("%0 04d"\,-1) ok 968 - sprintf("%0 0-4d"\,-1) ok 969 - sprintf("%0 0+4d"\,-1) ok 970 - sprintf("%0 0 4d"\,-1) ok 971 - sprintf("%0 004d"\,-1) ok 972 - sprintf("%004d"\,-1) ok 973 - sprintf("%00-4d"\,-1) ok 974 - sprintf("%00--4d"\,-1) ok 975 - sprintf("%00-+4d"\,-1) ok 976 - sprintf("%00- 4d"\,-1) ok 977 - sprintf("%00-04d"\,-1) ok 978 - sprintf("%00+4d"\,-1) ok 979 - sprintf("%00+-4d"\,-1) ok 980 - sprintf("%00++4d"\,-1) ok 981 - sprintf("%00+ 4d"\,-1) ok 982 - sprintf("%00+04d"\,-1) ok 983 - sprintf("%00 4d"\,-1) ok 984 - sprintf("%00 -4d"\,-1) ok 985 - sprintf("%00 +4d"\,-1) ok 986 - sprintf("%00 4d"\,-1) ok 987 - sprintf("%00 04d"\,-1) ok 988 - sprintf("%0004d"\,-1) ok 989 - sprintf("%000-4d"\,-1) ok 990 - sprintf("%000+4d"\,-1) ok 991 - sprintf("%000 4d"\,-1) ok 992 - sprintf("%00004d"\,-1) ok 993 - sprintf("%--4d"\,1) ok 994 - sprintf("%---4d"\,1) ok 995 - sprintf("%----4d"\,1) ok 996 - sprintf("%---+4d"\,1) ok 997 - sprintf("%--- 4d"\,1) ok 998 - sprintf("%---04d"\,1) ok 999 - sprintf("%--+4d"\,1) ok 1000 - sprintf("%--+-4d"\,1) ok 1001 - sprintf("%--++4d"\,1) ok 1002 - sprintf("%--+ 4d"\,1) ok 1003 - sprintf("%--+04d"\,1) ok 1004 - sprintf("%-- 4d"\,1) ok 1005 - sprintf("%-- -4d"\,1) ok 1006 - sprintf("%-- +4d"\,1) ok 1007 - sprintf("%-- 4d"\,1) ok 1008 - sprintf("%-- 04d"\,1) ok 1009 - sprintf("%--04d"\,1) ok 1010 - sprintf("%--0-4d"\,1) ok 1011 - sprintf("%--0+4d"\,1) ok 1012 - sprintf("%--0 4d"\,1) ok 1013 - sprintf("%--004d"\,1) ok 1014 - sprintf("%-+4d"\,1) ok 1015 - sprintf("%-+-4d"\,1) ok 1016 - sprintf("%-+--4d"\,1) ok 1017 - sprintf("%-+-+4d"\,1) ok 1018 - sprintf("%-+- 4d"\,1) ok 1019 - sprintf("%-+-04d"\,1) ok 1020 - sprintf("%-++4d"\,1) ok 1021 - sprintf("%-++-4d"\,1) ok 1022 - sprintf("%-+++4d"\,1) ok 1023 - sprintf("%-++ 4d"\,1) ok 1024 - sprintf("%-++04d"\,1) ok 1025 - sprintf("%-+ 4d"\,1) ok 1026 - sprintf("%-+ -4d"\,1) ok 1027 - sprintf("%-+ +4d"\,1) ok 1028 - sprintf("%-+ 4d"\,1) ok 1029 - sprintf("%-+ 04d"\,1) ok 1030 - sprintf("%-+04d"\,1) ok 1031 - sprintf("%-+0-4d"\,1) ok 1032 - sprintf("%-+0+4d"\,1) ok 1033 - sprintf("%-+0 4d"\,1) ok 1034 - sprintf("%-+004d"\,1) ok 1035 - sprintf("%- 4d"\,1) ok 1036 - sprintf("%- -4d"\,1) ok 1037 - sprintf("%- --4d"\,1) ok 1038 - sprintf("%- -+4d"\,1) ok 1039 - sprintf("%- - 4d"\,1) ok 1040 - sprintf("%- -04d"\,1) ok 1041 - sprintf("%- +4d"\,1) ok 1042 - sprintf("%- +-4d"\,1) ok 1043 - sprintf("%- ++4d"\,1) ok 1044 - sprintf("%- + 4d"\,1) ok 1045 - sprintf("%- +04d"\,1) ok 1046 - sprintf("%- 4d"\,1) ok 1047 - sprintf("%- -4d"\,1) ok 1048 - sprintf("%- +4d"\,1) ok 1049 - sprintf("%- 4d"\,1) ok 1050 - sprintf("%- 04d"\,1) ok 1051 - sprintf("%- 04d"\,1) ok 1052 - sprintf("%- 0-4d"\,1) ok 1053 - sprintf("%- 0+4d"\,1) ok 1054 - sprintf("%- 0 4d"\,1) ok 1055 - sprintf("%- 004d"\,1) ok 1056 - sprintf("%-04d"\,1) ok 1057 - sprintf("%-0-4d"\,1) ok 1058 - sprintf("%-0--4d"\,1) ok 1059 - sprintf("%-0-+4d"\,1) ok 1060 - sprintf("%-0- 4d"\,1) ok 1061 - sprintf("%-0-04d"\,1) ok 1062 - sprintf("%-0+4d"\,1) ok 1063 - sprintf("%-0+-4d"\,1) ok 1064 - sprintf("%-0++4d"\,1) ok 1065 - sprintf("%-0+ 4d"\,1) ok 1066 - sprintf("%-0+04d"\,1) ok 1067 - sprintf("%-0 4d"\,1) ok 1068 - sprintf("%-0 -4d"\,1) ok 1069 - sprintf("%-0 +4d"\,1) ok 1070 - sprintf("%-0 4d"\,1) ok 1071 - sprintf("%-0 04d"\,1) ok 1072 - sprintf("%-004d"\,1) ok 1073 - sprintf("%-00-4d"\,1) ok 1074 - sprintf("%-00+4d"\,1) ok 1075 - sprintf("%-00 4d"\,1) ok 1076 - sprintf("%-0004d"\,1) ok 1077 - sprintf("%+-4d"\,1) ok 1078 - sprintf("%+--4d"\,1) ok 1079 - sprintf("%+---4d"\,1) ok 1080 - sprintf("%+--+4d"\,1) ok 1081 - sprintf("%+-- 4d"\,1) ok 1082 - sprintf("%+--04d"\,1) ok 1083 - sprintf("%+-+4d"\,1) ok 1084 - sprintf("%+-+-4d"\,1) ok 1085 - sprintf("%+-++4d"\,1) ok 1086 - sprintf("%+-+ 4d"\,1) ok 1087 - sprintf("%+-+04d"\,1) ok 1088 - sprintf("%+- 4d"\,1) ok 1089 - sprintf("%+- -4d"\,1) ok 1090 - sprintf("%+- +4d"\,1) ok 1091 - sprintf("%+- 4d"\,1) ok 1092 - sprintf("%+- 04d"\,1) ok 1093 - sprintf("%+-04d"\,1) ok 1094 - sprintf("%+-0-4d"\,1) ok 1095 - sprintf("%+-0+4d"\,1) ok 1096 - sprintf("%+-0 4d"\,1) ok 1097 - sprintf("%+-004d"\,1) ok 1098 - sprintf("%++4d"\,1) ok 1099 - sprintf("%++-4d"\,1) ok 1100 - sprintf("%++--4d"\,1) ok 1101 - sprintf("%++-+4d"\,1) ok 1102 - sprintf("%++- 4d"\,1) ok 1103 - sprintf("%++-04d"\,1) ok 1104 - sprintf("%+++4d"\,1) ok 1105 - sprintf("%+++-4d"\,1) ok 1106 - sprintf("%++++4d"\,1) ok 1107 - sprintf("%+++ 4d"\,1) ok 1108 - sprintf("%+++04d"\,1) ok 1109 - sprintf("%++ 4d"\,1) ok 1110 - sprintf("%++ -4d"\,1) ok 1111 - sprintf("%++ +4d"\,1) ok 1112 - sprintf("%++ 4d"\,1) ok 1113 - sprintf("%++ 04d"\,1) ok 1114 - sprintf("%++04d"\,1) ok 1115 - sprintf("%++0-4d"\,1) ok 1116 - sprintf("%++0+4d"\,1) ok 1117 - sprintf("%++0 4d"\,1) ok 1118 - sprintf("%++004d"\,1) ok 1119 - sprintf("%+ 4d"\,1) ok 1120 - sprintf("%+ -4d"\,1) ok 1121 - sprintf("%+ --4d"\,1) ok 1122 - sprintf("%+ -+4d"\,1) ok 1123 - sprintf("%+ - 4d"\,1) ok 1124 - sprintf("%+ -04d"\,1) ok 1125 - sprintf("%+ +4d"\,1) ok 1126 - sprintf("%+ +-4d"\,1) ok 1127 - sprintf("%+ ++4d"\,1) ok 1128 - sprintf("%+ + 4d"\,1) ok 1129 - sprintf("%+ +04d"\,1) ok 1130 - sprintf("%+ 4d"\,1) ok 1131 - sprintf("%+ -4d"\,1) ok 1132 - sprintf("%+ +4d"\,1) ok 1133 - sprintf("%+ 4d"\,1) ok 1134 - sprintf("%+ 04d"\,1) ok 1135 - sprintf("%+ 04d"\,1) ok 1136 - sprintf("%+ 0-4d"\,1) ok 1137 - sprintf("%+ 0+4d"\,1) ok 1138 - sprintf("%+ 0 4d"\,1) ok 1139 - sprintf("%+ 004d"\,1) ok 1140 - sprintf("%+04d"\,1) ok 1141 - sprintf("%+0-4d"\,1) ok 1142 - sprintf("%+0--4d"\,1) ok 1143 - sprintf("%+0-+4d"\,1) ok 1144 - sprintf("%+0- 4d"\,1) ok 1145 - sprintf("%+0-04d"\,1) ok 1146 - sprintf("%+0+4d"\,1) ok 1147 - sprintf("%+0+-4d"\,1) ok 1148 - sprintf("%+0++4d"\,1) ok 1149 - sprintf("%+0+ 4d"\,1) ok 1150 - sprintf("%+0+04d"\,1) ok 1151 - sprintf("%+0 4d"\,1) ok 1152 - sprintf("%+0 -4d"\,1) ok 1153 - sprintf("%+0 +4d"\,1) ok 1154 - sprintf("%+0 4d"\,1) ok 1155 - sprintf("%+0 04d"\,1) ok 1156 - sprintf("%+004d"\,1) ok 1157 - sprintf("%+00-4d"\,1) ok 1158 - sprintf("%+00+4d"\,1) ok 1159 - sprintf("%+00 4d"\,1) ok 1160 - sprintf("%+0004d"\,1) ok 1161 - sprintf("% -4d"\,1) ok 1162 - sprintf("% --4d"\,1) ok 1163 - sprintf("% ---4d"\,1) ok 1164 - sprintf("% --+4d"\,1) ok 1165 - sprintf("% -- 4d"\,1) ok 1166 - sprintf("% --04d"\,1) ok 1167 - sprintf("% -+4d"\,1) ok 1168 - sprintf("% -+-4d"\,1) ok 1169 - sprintf("% -++4d"\,1) ok 1170 - sprintf("% -+ 4d"\,1) ok 1171 - sprintf("% -+04d"\,1) ok 1172 - sprintf("% - 4d"\,1) ok 1173 - sprintf("% - -4d"\,1) ok 1174 - sprintf("% - +4d"\,1) ok 1175 - sprintf("% - 4d"\,1) ok 1176 - sprintf("% - 04d"\,1) ok 1177 - sprintf("% -04d"\,1) ok 1178 - sprintf("% -0-4d"\,1) ok 1179 - sprintf("% -0+4d"\,1) ok 1180 - sprintf("% -0 4d"\,1) ok 1181 - sprintf("% -004d"\,1) ok 1182 - sprintf("% +4d"\,1) ok 1183 - sprintf("% +-4d"\,1) ok 1184 - sprintf("% +--4d"\,1) ok 1185 - sprintf("% +-+4d"\,1) ok 1186 - sprintf("% +- 4d"\,1) ok 1187 - sprintf("% +-04d"\,1) ok 1188 - sprintf("% ++4d"\,1) ok 1189 - sprintf("% ++-4d"\,1) ok 1190 - sprintf("% +++4d"\,1) ok 1191 - sprintf("% ++ 4d"\,1) ok 1192 - sprintf("% ++04d"\,1) ok 1193 - sprintf("% + 4d"\,1) ok 1194 - sprintf("% + -4d"\,1) ok 1195 - sprintf("% + +4d"\,1) ok 1196 - sprintf("% + 4d"\,1) ok 1197 - sprintf("% + 04d"\,1) ok 1198 - sprintf("% +04d"\,1) ok 1199 - sprintf("% +0-4d"\,1) ok 1200 - sprintf("% +0+4d"\,1) ok 1201 - sprintf("% +0 4d"\,1) ok 1202 - sprintf("% +004d"\,1) ok 1203 - sprintf("% 4d"\,1) ok 1204 - sprintf("% -4d"\,1) ok 1205 - sprintf("% --4d"\,1) ok 1206 - sprintf("% -+4d"\,1) ok 1207 - sprintf("% - 4d"\,1) ok 1208 - sprintf("% -04d"\,1) ok 1209 - sprintf("% +4d"\,1) ok 1210 - sprintf("% +-4d"\,1) ok 1211 - sprintf("% ++4d"\,1) ok 1212 - sprintf("% + 4d"\,1) ok 1213 - sprintf("% +04d"\,1) ok 1214 - sprintf("% 4d"\,1) ok 1215 - sprintf("% -4d"\,1) ok 1216 - sprintf("% +4d"\,1) ok 1217 - sprintf("% 4d"\,1) ok 1218 - sprintf("% 04d"\,1) ok 1219 - sprintf("% 04d"\,1) ok 1220 - sprintf("% 0-4d"\,1) ok 1221 - sprintf("% 0+4d"\,1) ok 1222 - sprintf("% 0 4d"\,1) ok 1223 - sprintf("% 004d"\,1) ok 1224 - sprintf("% 04d"\,1) ok 1225 - sprintf("% 0-4d"\,1) ok 1226 - sprintf("% 0--4d"\,1) ok 1227 - sprintf("% 0-+4d"\,1) ok 1228 - sprintf("% 0- 4d"\,1) ok 1229 - sprintf("% 0-04d"\,1) ok 1230 - sprintf("% 0+4d"\,1) ok 1231 - sprintf("% 0+-4d"\,1) ok 1232 - sprintf("% 0++4d"\,1) ok 1233 - sprintf("% 0+ 4d"\,1) ok 1234 - sprintf("% 0+04d"\,1) ok 1235 - sprintf("% 0 4d"\,1) ok 1236 - sprintf("% 0 -4d"\,1) ok 1237 - sprintf("% 0 +4d"\,1) ok 1238 - sprintf("% 0 4d"\,1) ok 1239 - sprintf("% 0 04d"\,1) ok 1240 - sprintf("% 004d"\,1) ok 1241 - sprintf("% 00-4d"\,1) ok 1242 - sprintf("% 00+4d"\,1) ok 1243 - sprintf("% 00 4d"\,1) ok 1244 - sprintf("% 0004d"\,1) ok 1245 - sprintf("%0-4d"\,1) ok 1246 - sprintf("%0--4d"\,1) ok 1247 - sprintf("%0---4d"\,1) ok 1248 - sprintf("%0--+4d"\,1) ok 1249 - sprintf("%0-- 4d"\,1) ok 1250 - sprintf("%0--04d"\,1) ok 1251 - sprintf("%0-+4d"\,1) ok 1252 - sprintf("%0-+-4d"\,1) ok 1253 - sprintf("%0-++4d"\,1) ok 1254 - sprintf("%0-+ 4d"\,1) ok 1255 - sprintf("%0-+04d"\,1) ok 1256 - sprintf("%0- 4d"\,1) ok 1257 - sprintf("%0- -4d"\,1) ok 1258 - sprintf("%0- +4d"\,1) ok 1259 - sprintf("%0- 4d"\,1) ok 1260 - sprintf("%0- 04d"\,1) ok 1261 - sprintf("%0-04d"\,1) ok 1262 - sprintf("%0-0-4d"\,1) ok 1263 - sprintf("%0-0+4d"\,1) ok 1264 - sprintf("%0-0 4d"\,1) ok 1265 - sprintf("%0-004d"\,1) ok 1266 - sprintf("%0+4d"\,1) ok 1267 - sprintf("%0+-4d"\,1) ok 1268 - sprintf("%0+--4d"\,1) ok 1269 - sprintf("%0+-+4d"\,1) ok 1270 - sprintf("%0+- 4d"\,1) ok 1271 - sprintf("%0+-04d"\,1) ok 1272 - sprintf("%0++4d"\,1) ok 1273 - sprintf("%0++-4d"\,1) ok 1274 - sprintf("%0+++4d"\,1) ok 1275 - sprintf("%0++ 4d"\,1) ok 1276 - sprintf("%0++04d"\,1) ok 1277 - sprintf("%0+ 4d"\,1) ok 1278 - sprintf("%0+ -4d"\,1) ok 1279 - sprintf("%0+ +4d"\,1) ok 1280 - sprintf("%0+ 4d"\,1) ok 1281 - sprintf("%0+ 04d"\,1) ok 1282 - sprintf("%0+04d"\,1) ok 1283 - sprintf("%0+0-4d"\,1) ok 1284 - sprintf("%0+0+4d"\,1) ok 1285 - sprintf("%0+0 4d"\,1) ok 1286 - sprintf("%0+004d"\,1) ok 1287 - sprintf("%0 4d"\,1) ok 1288 - sprintf("%0 -4d"\,1) ok 1289 - sprintf("%0 --4d"\,1) ok 1290 - sprintf("%0 -+4d"\,1) ok 1291 - sprintf("%0 - 4d"\,1) ok 1292 - sprintf("%0 -04d"\,1) ok 1293 - sprintf("%0 +4d"\,1) ok 1294 - sprintf("%0 +-4d"\,1) ok 1295 - sprintf("%0 ++4d"\,1) ok 1296 - sprintf("%0 + 4d"\,1) ok 1297 - sprintf("%0 +04d"\,1) ok 1298 - sprintf("%0 4d"\,1) ok 1299 - sprintf("%0 -4d"\,1) ok 1300 - sprintf("%0 +4d"\,1) ok 1301 - sprintf("%0 4d"\,1) ok 1302 - sprintf("%0 04d"\,1) ok 1303 - sprintf("%0 04d"\,1) ok 1304 - sprintf("%0 0-4d"\,1) ok 1305 - sprintf("%0 0+4d"\,1) ok 1306 - sprintf("%0 0 4d"\,1) ok 1307 - sprintf("%0 004d"\,1) ok 1308 - sprintf("%004d"\,1) ok 1309 - sprintf("%00-4d"\,1) ok 1310 - sprintf("%00--4d"\,1) ok 1311 - sprintf("%00-+4d"\,1) ok 1312 - sprintf("%00- 4d"\,1) ok 1313 - sprintf("%00-04d"\,1) ok 1314 - sprintf("%00+4d"\,1) ok 1315 - sprintf("%00+-4d"\,1) ok 1316 - sprintf("%00++4d"\,1) ok 1317 - sprintf("%00+ 4d"\,1) ok 1318 - sprintf("%00+04d"\,1) ok 1319 - sprintf("%00 4d"\,1) ok 1320 - sprintf("%00 -4d"\,1) ok 1321 - sprintf("%00 +4d"\,1) ok 1322 - sprintf("%00 4d"\,1) ok 1323 - sprintf("%00 04d"\,1) ok 1324 - sprintf("%0004d"\,1) ok 1325 - sprintf("%000-4d"\,1) ok 1326 - sprintf("%000+4d"\,1) ok 1327 - sprintf("%000 4d"\,1) ok 1328 - sprintf("%00004d"\,1) ok 1329 - sprintf("%f"\, 2**1e100) ok 1330 - sprintf("%f"\, -2**1e100) ok 1331 - sprintf("%f"\, 2**1e100/2**1e100) ok 1332 - quad​: %lld -> 4294967296 ok 1333 - no warnings for​: %lld -> 4294967296 ok 1334 - quad​: %lld -> -100000000000000 ok 1335 - no warnings for​: %lld -> -100000000000000 ok 1336 - quad​: %lli -> 4294967296 ok 1337 - no warnings for​: %lli -> 4294967296 ok 1338 - quad​: %lli -> -100000000000000 ok 1339 - no warnings for​: %lli -> -100000000000000 ok 1340 - quad​: %llu -> 4294967296 ok 1341 - no warnings for​: %llu -> 4294967296 ok 1342 - quad​: %llu -> 100000000000000 ok 1343 - no warnings for​: %llu -> 100000000000000 ok 1344 - quad​: %Ld -> 4294967296 ok 1345 - no warnings for​: %Ld -> 4294967296 ok 1346 - quad​: %Ld -> -100000000000000 ok 1347 - no warnings for​: %Ld -> -100000000000000 ok 1348 - quad​: %Li -> 4294967296 ok 1349 - no warnings for​: %Li -> 4294967296 ok 1350 - quad​: %Li -> -100000000000000 ok 1351 - no warnings for​: %Li -> -100000000000000 ok 1352 - quad​: %Lu -> 4294967296 ok 1353 - no warnings for​: %Lu -> 4294967296 ok 1354 - quad​: %Lu -> 100000000000000 ok 1355 - no warnings for​: %Lu -> 100000000000000 ok 1356 - sprintf "%1.1s"\, "\x{20ac}\x{20ac}" ok 1357 - sprintf "%1.2s"\, "\x{20ac}\x{20ac}" ok 1358 - sprintf "%1.3s"\, "\x{20ac}\x{20ac}" ok 1359 - sprintf "%1.4s"\, "\x{20ac}\x{20ac}" ok 1360 - sprintf "%1.5s"\, "\x{20ac}\x{20ac}" ok 1361 - sprintf "%1.6s"\, "\x{20ac}\x{20ac}" ok 1362 - sprintf "%1.7s"\, "\x{20ac}\x{20ac}" ok 1363 - sprintf "%2.1s"\, "\x{20ac}\x{20ac}" ok 1364 - sprintf "%2.2s"\, "\x{20ac}\x{20ac}" ok 1365 - sprintf "%2.3s"\, "\x{20ac}\x{20ac}" ok 1366 - sprintf "%2.4s"\, "\x{20ac}\x{20ac}" ok 1367 - sprintf "%2.5s"\, "\x{20ac}\x{20ac}" ok 1368 - sprintf "%2.6s"\, "\x{20ac}\x{20ac}" ok 1369 - sprintf "%2.7s"\, "\x{20ac}\x{20ac}" ok 1370 - sprintf "%3.1s"\, "\x{20ac}\x{20ac}" ok 1371 - sprintf "%3.2s"\, "\x{20ac}\x{20ac}" ok 1372 - sprintf "%3.3s"\, "\x{20ac}\x{20ac}" ok 1373 - sprintf "%3.4s"\, "\x{20ac}\x{20ac}" ok 1374 - sprintf "%3.5s"\, "\x{20ac}\x{20ac}" ok 1375 - sprintf "%3.6s"\, "\x{20ac}\x{20ac}" ok 1376 - sprintf "%3.7s"\, "\x{20ac}\x{20ac}" ok 1377 - sprintf "%4.1s"\, "\x{20ac}\x{20ac}" ok 1378 - sprintf "%4.2s"\, "\x{20ac}\x{20ac}" ok 1379 - sprintf "%4.3s"\, "\x{20ac}\x{20ac}" ok 1380 - sprintf "%4.4s"\, "\x{20ac}\x{20ac}" ok 1381 - sprintf "%4.5s"\, "\x{20ac}\x{20ac}" ok 1382 - sprintf "%4.6s"\, "\x{20ac}\x{20ac}" ok 1383 - sprintf "%4.7s"\, "\x{20ac}\x{20ac}" ok 1384 - sprintf "%5.1s"\, "\x{20ac}\x{20ac}" ok 1385 - sprintf "%5.2s"\, "\x{20ac}\x{20ac}" ok 1386 - sprintf "%5.3s"\, "\x{20ac}\x{20ac}" ok 1387 - sprintf "%5.4s"\, "\x{20ac}\x{20ac}" ok 1388 - sprintf "%5.5s"\, "\x{20ac}\x{20ac}" ok 1389 - sprintf "%5.6s"\, "\x{20ac}\x{20ac}" ok 1390 - sprintf "%5.7s"\, "\x{20ac}\x{20ac}" ok 1391 - sprintf "%6.1s"\, "\x{20ac}\x{20ac}" ok 1392 - sprintf "%6.2s"\, "\x{20ac}\x{20ac}" ok 1393 - sprintf "%6.3s"\, "\x{20ac}\x{20ac}" ok 1394 - sprintf "%6.4s"\, "\x{20ac}\x{20ac}" ok 1395 - sprintf "%6.5s"\, "\x{20ac}\x{20ac}" ok 1396 - sprintf "%6.6s"\, "\x{20ac}\x{20ac}" ok 1397 - sprintf "%6.7s"\, "\x{20ac}\x{20ac}" ok 1398 - sprintf "%7.1s"\, "\x{20ac}\x{20ac}" ok 1399 - sprintf "%7.2s"\, "\x{20ac}\x{20ac}" ok 1400 - sprintf "%7.3s"\, "\x{20ac}\x{20ac}" ok 1401 - sprintf "%7.4s"\, "\x{20ac}\x{20ac}" ok 1402 - sprintf "%7.5s"\, "\x{20ac}\x{20ac}" ok 1403 - sprintf "%7.6s"\, "\x{20ac}\x{20ac}" ok 1404 - sprintf "%7.7s"\, "\x{20ac}\x{20ac}" ok 1405 - sprinf %1s overload count ok 1406 - sprinf %.1s overload count ok 1407 - sprintf %d string overload count is 0 ok 1408 - sprintf %d number overload count is 1 ok 1409 - '%a' '0' -> '0x0p+0' cf '0x0p+0' ok 1410 - '%a' '1' -> '0x8p-3' cf '0x8p-3' ok 1411 - '%a' '1' -> '0x8p-3' cf '0x8p-3' ok 1412 - '%a' '0.5' -> '0x8p-4' cf '0x8p-4' ok 1413 - '%a' '0.25' -> '0x8p-5' cf '0x8p-5' ok 1414 - '%a' '0.75' -> '0xcp-4' cf '0xcp-4' ok 1415 - '%a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2' cf '0xc.8f5c28f5c28f5c3p-2' ok 1416 - '%a' '-1' -> '-0x8p-3' cf '-0x8p-3' ok 1417 - '%a' '-3.14' -> '-0xc.8f5c28f5c28f5c3p-2' cf '-0xc.8f5c28f5c28f5c3p-2' ok 1418 - '%a' '0.1' -> '0xc.ccccccccccccccdp-7' cf '0xc.ccccccccccccccdp-7' ok 1419 - '%a' '0.142857142857142857' -> '0x9.249249249249249p-6' cf '0x9.249249249249249p-6' ok 1420 - '%a' '1.41421356237309505' -> '0xb.504f333f9de6484p-3' cf '0xb.504f333f9de6484p-3' ok 1421 - '%a' '2.71828182845904524' -> '0xa.df85458a2bb4a9bp-2' cf '0xa.df85458a2bb4a9bp-2' ok 1422 - '%a' '0.0009765625' -> '0x8p-13' cf '0x8p-13' ok 1423 - '%a' '1024' -> '0x8p+7' cf '0x8p+7' ok 1424 - '%a' '1e-09' -> '0x8.9705f4136b4a597p-33' cf '0x8.9705f4136b4a597p-33' ok 1425 - '%a' '1000000000' -> '0xe.e6b28p+26' cf '0xe.e6b28p+26' ok 1426 - '%\#a' '1' -> '0x8.p-3' cf '0x8.p-3' ok 1427 - '%+a' '1' -> '+0x8p-3' cf '+0x8p-3' ok 1428 - '%+a' '-1' -> '-0x8p-3' cf '-0x8p-3' ok 1429 - '% a' '1' -> ' 0x8p-3' cf ' 0x8p-3' ok 1430 - '% a' '-1' -> '-0x8p-3' cf '-0x8p-3' ok 1431 - '%+ a' '1' -> '+0x8p-3' cf '+0x8p-3' ok 1432 - '%+ a' '-1' -> '-0x8p-3' cf '-0x8p-3' ok 1433 - '% +a' '1' -> '+0x8p-3' cf '+0x8p-3' ok 1434 - '% +a' '-1' -> '-0x8p-3' cf '-0x8p-3' ok 1435 - '%8a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2' cf '0xc.8f5c28f5c28f5c3p-2' ok 1436 - '%13a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2' cf '0xc.8f5c28f5c28f5c3p-2' ok 1437 - '%20a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2' cf '0xc.8f5c28f5c28f5c3p-2' ok 1438 - '%.4a' '3.14' -> '0xc.8f5cp-2' cf '0xc.8f5cp-2' # rp = 0xc.\, ep = 0xc. (rh 8f5c2p-2\, eh 8f5c3p-2) # re = p-2\, ee = p-2 (rh 8f5c2\, eh 8f5c3) # (rh 2\, eh 3) # (rh 2\, eh 3) ok 1439 - '%.5a' '3.14' -> '0xc.8f5c2p-2' cf '0xc.8f5c3p-2' # rp = 0xc.\, ep = 0xc. (rh 8f5c38p-2\, eh 8f5c29p-2) # re = p-2\, ee = p-2 (rh 8f5c38\, eh 8f5c29) # (rh 38\, eh 29) # (rh 38\, eh 29) not ok 1440 - '%.6a' '3.14' -> '0xc.8f5c38p-2' cf '0xc.8f5c29p-2' ok 1441 - '%.20a' '3.14' -> '0xc.8f5c28f5c28f5c300000p-2' cf '0xc.8f5c28f5c28f5c300000p-2' # rp = 0xc.\, ep = 0xc. (rh 8f5c28f5c2p-2\, eh 8f5c28f5c3p-2) # re = p-2\, ee = p-2 (rh 8f5c28f5c2\, eh 8f5c28f5c3) # (rh 2\, eh 3) # (rh 2\, eh 3) ok 1442 - '%20.10a' '3.14' -> ' 0xc.8f5c28f5c2p-2' cf ' 0xc.8f5c28f5c3p-2' ok 1443 - '%20.15a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2' cf '0xc.8f5c28f5c28f5c3p-2' # rp = 0xc.\, ep = 0xc. (rh 8f5c28f5c2p-2\, eh 8f5c28f5c3p-2) # re = p-2\, ee = p-2 (rh 8f5c28f5c2\, eh 8f5c28f5c3) # (rh 2\, eh 3) # (rh 2\, eh 3) ok 1444 - '% 20.10a' '3.14' -> ' 0xc.8f5c28f5c2p-2' cf ' 0xc.8f5c28f5c3p-2' # rp = 0x000c.\, ep = 0x000c. (rh 8f5c28f5c2p-2\, eh 8f5c28f5c3p-2) # re = p-2\, ee = p-2 (rh 8f5c28f5c2\, eh 8f5c28f5c3) # (rh 2\, eh 3) # (rh 2\, eh 3) ok 1445 - '%020.10a' '3.14' -> '0x000c.8f5c28f5c2p-2' cf '0x000c.8f5c28f5c3p-2' ok 1446 - '%30a' '3.14' -> ' 0xc.8f5c28f5c28f5c3p-2' cf ' 0xc.8f5c28f5c28f5c3p-2' ok 1447 - '%-30a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2 ' cf '0xc.8f5c28f5c28f5c3p-2 ' ok 1448 - '%030a' '3.14' -> '0x00000000c.8f5c28f5c28f5c3p-2' cf '0x00000000c.8f5c28f5c28f5c3p-2' ok 1449 - '%-030a' '3.14' -> '0xc.8f5c28f5c28f5c3p-2 ' cf '0xc.8f5c28f5c28f5c3p-2 ' ok 1450 - '%.40a' '3.14' -> '0xc.8f5c28f5c28f5c30000000000000000000000000p-2' cf '0xc.8f5c28f5c28f5c30000000000000000000000000p-2' ok 1451 - '%A' '3.14' -> '0XC.8F5C28F5C28F5C3P-2' cf '0XC.8F5C28F5C28F5C3P-2' ok 1452 # skip uselongdouble=define longdblkind=3 os=linux ok 1453 # skip uselongdouble=define longdblkind=3 os=linux ok 1454 # skip uselongdouble=define longdblkind=3 os=linux ok 1455 # skip uselongdouble=define longdblkind=3 os=linux ok 1456 # skip uselongdouble=define longdblkind=3 os=linux ok 1457 # skip uselongdouble=define longdblkind=3 os=linux ok 1458 - negative zero ok 1459 - negative zero ok 1460 - negative zero ok 1461 # skip nv_preserves_uv_bits is 64\, not 53 ok 1462 # skip nv_preserves_uv_bits is 64\, not 53 ok 1463 # skip nv_preserves_uv_bits is 64\, not 53 ok 1464 # skip nv_preserves_uv_bits is 64\, not 53 ok 1465 # skip nv_preserves_uv_bits is 64\, not 53 ok 1466 # skip nv_preserves_uv_bits is 64\, not 53 ok 1467 # skip nv_preserves_uv_bits is 64\, not 53 ok 1468 # skip nv_preserves_uv_bits is 64\, not 53 ok 1469 # skip nv_preserves_uv_bits is 64\, not 53 ok 1470 # skip nv_preserves_uv_bits is 64\, not 53 ok 1471 # skip nv_preserves_uv_bits is 64\, not 53 ok 1472 # skip nv_preserves_uv_bits is 64\, not 53 ok 1473 # skip nv_preserves_uv_bits is 64\, not 53 ok 1474 # skip nv_preserves_uv_bits is 64\, not 53 ok 1475 # skip nv_preserves_uv_bits is 64\, not 53 ok 1476 # skip nv_preserves_uv_bits is 64\, not 53 ok 1477 # skip nv_preserves_uv_bits is 64\, not 53 ok 1478 # skip nv_preserves_uv_bits is 64\, not 53 ok 1479 # skip nv_preserves_uv_bits is 64\, not 53 ok 1480 # skip nv_preserves_uv_bits is 64\, not 53 ok 1481 # skip nv_preserves_uv_bits is 64\, not 53 ok 1482 # skip nv_preserves_uv_bits is 64\, not 53 ok 1483 # skip nv_preserves_uv_bits is 64\, not 53 ok 1484 # skip nv_preserves_uv_bits is 64\, not 53 ok 1485 # skip nv_preserves_uv_bits is 64\, not 53 ok 1486 # skip nv_preserves_uv_bits is 64\, not 53 ok 1487 # skip nv_preserves_uv_bits is 64\, not 53 ok 1488 # skip nv_preserves_uv_bits is 64\, not 53 not ok 1489 not ok 1490 not ok 1491 - [rt.perl.org \#128888] not ok 1492 - [rt.perl.org \#128889] not ok 1493 not ok 1494 not ok 1495 - [rt.perl.org \#128890] not ok 1496 not ok 1497 not ok 1498 not ok 1499 not ok 1500 not ok 1501 not ok 1502 not ok 1503 not ok 1504 not ok 1505 not ok 1506 not ok 1507 not ok 1508 not ok 1509 not ok 1510 not ok 1511 not ok 1512 not ok 1513 not ok 1514 not ok 1515 not ok 1516 not ok 1517 - [rt.perl.org \#128893] not ok 1518 - [rt.perl.org \#128893] not ok 1519 - [rt.perl.org \#128893] not ok 1520 not ok 1521 not ok 1522 Failed 35/1522 subtests   (less 34 skipped subtests​: 1453 okay)

Test Summary Report


op/sprintf2.t (Wstat​: 0 Tests​: 1522 Failed​: 35)   Failed tests​: 1440\, 1489-1522 Files=1\, Tests=1522\, 0 wallclock secs ( 0.08 usr 0.00 sys + 0.03 cusr 0.00 csys = 0.11 CPU) Result​: FAIL

p5pRT commented 8 years ago

From @jkeenan

Summary of my perl5 (revision 5 version 25 subversion 4) configuration​:   Commit id​: 80a17ed4419aec102f46b22ce5ba9e9e074deffc   Platform​:   osname=linux   osvers=4.4.0-34-generic   archname=x86_64-linux-ld   uname='linux zareason 4.4.0-34-generic #53-ubuntu smp wed jul 27 16​:06​:39 utc 2016 x86_64 x86_64 x86_64 gnulinux '   config_args='-des -Dusedevel -Duselongdouble'   hint=recommended   useposix=true   d_sigaction=define   useithreads=undef   usemultiplicity=undef   use64bitint=define   use64bitall=define   uselongdouble=define   usemymalloc=n   bincompat5005=undef   Compiler​:   cc='cc'   ccflags ='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'   optimize='-O2'   cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include'   ccversion=''   gccversion='5.4.0 20160609'   gccosandvers=''   intsize=4   longsize=8   ptrsize=8   doublesize=8   byteorder=12345678   doublekind=3   d_longlong=define   longlongsize=8   d_longdbl=define   longdblsize=16   longdblkind=3   ivtype='long'   ivsize=8   nvtype='long double'   nvsize=16   Off_t='off_t'   lseeksize=8   alignbytes=16   prototype=define   Linker and Libraries​:   ld='cc'   ldflags =' -fstack-protector-strong -L/usr/local/lib'   libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /lib64 /usr/lib64   libs=-lpthread -lnsl -ldb -ldl -lm -lcrypt -lutil -lc   perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc   libc=libc-2.23.so   so=so   useshrplib=false   libperl=libperl.a   gnulibc_version='2.23'   Dynamic Linking​:   dlsrc=dl_dlopen.xs   dlext=so   d_dlsymun=undef   ccdlflags='-Wl\,-E'   cccdlflags='-fPIC'   lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'

Characteristics of this binary (from libperl)​:   Compile-time options​:   HAS_TIMES   PERLIO_LAYERS   PERL_COPY_ON_WRITE   PERL_DONT_CREATE_GVSV   PERL_HASH_FUNC_ONE_AT_A_TIME_HARD   PERL_MALLOC_WRAP   PERL_OP_PARENT   PERL_PRESERVE_IVUV   PERL_USE_DEVEL   USE_64_BIT_ALL   USE_64_BIT_INT   USE_LARGE_FILES   USE_LOCALE   USE_LOCALE_COLLATE   USE_LOCALE_CTYPE   USE_LOCALE_NUMERIC   USE_LOCALE_TIME   USE_LONG_DOUBLE   USE_PERLIO   USE_PERL_ATOF   Built under linux   Compiled at Aug 11 2016 21​:00​:53   %ENV​:   PERLBREW_BASHRC_VERSION="0.67"   PERLBREW_HOME="/home/jkeenan/.perlbrew"   PERLBREW_MANPATH="/home/jkeenan/perl5/perlbrew/perls/perl-5.24.0/man"   PERLBREW_PATH="/home/jkeenan/perl5/perlbrew/bin​:/home/jkeenan/perl5/perlbrew/perls/perl-5.24.0/bin"   PERLBREW_PERL="perl-5.24.0"   PERLBREW_ROOT="/home/jkeenan/perl5/perlbrew"   PERLBREW_VERSION="0.67"   PERL_WORKDIR="gitwork/perl"   @​INC​:   lib   /usr/local/lib/perl5/site_perl/5.25.4/x86_64-linux-ld   /usr/local/lib/perl5/site_perl/5.25.4   /usr/local/lib/perl5/5.25.4/x86_64-linux-ld   /usr/local/lib/perl5/5.25.4   .

p5pRT commented 8 years ago

From @jhi

Not quite. The failures you are seeing are caused by your long doubles (x86 80-bit) being scaled differently​:

perl -wle 'printf "%a\n"\, -1.5' # IEEE 754 64-bit -0xcp-3 perl -wle 'printf "%a\n"\, -1.5' # x86 80-bit -0x1.8+0

Duh. Got the comments the wrong way round.

perl -wle 'printf "%a\n"\, -1.5' # x86 80-bit -0xcp-3 perl -wle 'printf "%a\n"\, -1.5' # IEEE 754 64-bit -0x1.8+0

p5pRT commented 8 years ago

From zefram@fysh.org

Jarkko Hietaniemi via RT wrote​:

Not quite. The failures you are seeing are caused by your long doubles (x86 80-bit) being scaled differently​:

This different scaling is seen on any long-double build\, consistently since %a support was added. It's obviously based on arranging for the significand to end in the low-order bit of a hex digit\, rather than arranging for the integer part of a normalised significand to always be 1. This is legal per the C spec\, and glibc does the same. This behaviour minimises the number of required digits\, and aligns the digits with the bitwise structure of the long double type. The other behaviour better matches the numerical structure. I think the other behaviour would be better\, but this behaviour isn't a bug.

The tests failing is a bug. The tests obviously need to allow for the variation in behaviour.

-zefram

p5pRT commented 8 years ago

From @jhi

doubles (x86 80-bit) being scaled differently​:

This different scaling is seen on any long-double build\, consistently since %a support was added.

... consistent with how the said platforms' libcs do it. Not just glibc.

It's obviously based on arranging for the significand to end in the low-order bit of a hex digit\, rather than arranging for the integer part of a normalised significand to always be 1. This is legal per the C spec\, and glibc does the same. This behaviour minimises the number of required digits\, and aligns the digits with the bitwise structure of the long double type. The other behaviour better matches the numerical structure. I think the other behaviour would be better\, but this behaviour isn't a bug.

The tests failing is a bug. The tests obviously need to allow for the variation in behaviour.

I disagree with your use of the word since this is a platform difference\, but whatever.

p5pRT commented 8 years ago

From @jhi

http​://perl5.git.perl.org/perl.git/commitdiff/9e67a8c1b21482ed5fada053dd462eb23320dc86 or thereabouts.

p5pRT commented 6 years ago

From zefram@fysh.org

This ticket was fixed the day it was raised\, in commit 749d85343f3cdb65891a5fe3b9f55ef3a5b03ca8. The ticket can be closed now.

-zefram

p5pRT commented 6 years ago

@cpansprout - Status changed from 'open' to 'resolved'