Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
p5pRT opened this issue Aug 11, 2016 · 15 comments
Closed

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

p5pRT opened this issue Aug 11, 2016 · 15 comments

Comments

@p5pRT
Copy link

p5pRT commented Aug 11, 2016

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

Searchable as RT128899$

@p5pRT
Copy link
Author

p5pRT commented Aug 11, 2016

From @dcollinsn

Greetings!

Somewhere in the following stack of commits to blead​:

commit be93048
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 75326c4
Author​: Jarkko Hietaniemi <jhi@​iki.fi>
Date​: Thu Aug 11 09​:15​:21 2016 -0400

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

commit a9ce335
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 82229f9
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 520f3e5
Author​: Jarkko Hietaniemi <jhi@​iki.fi>
Date​: Wed Aug 10 19​:47​:19 2016 -0400

  Comment fix for b6d9b42

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

  Add rt.perl.org reference for b6d9b42

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​: be93048
  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
Copy link
Author

p5pRT commented Aug 11, 2016

From @dcollinsn

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

82229f9 is the first bad commit
commit 82229f9
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
Copy link
Author

p5pRT commented Aug 11, 2016

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
Copy link
Author

p5pRT commented Aug 11, 2016

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
Copy link
Author

p5pRT commented Aug 11, 2016

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
Copy link
Author

p5pRT commented Aug 11, 2016

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

@p5pRT
Copy link
Author

p5pRT commented Aug 12, 2016

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
Copy link
Author

p5pRT commented Aug 12, 2016

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 "%.<number>g" optimization
ok 2 - the sprintf "%.<number>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
Copy link
Author

p5pRT commented Aug 12, 2016

From @jkeenan

Summary of my perl5 (revision 5 version 25 subversion 4) configuration​:
  Commit id​: 80a17ed
  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
Copy link
Author

p5pRT commented Aug 12, 2016

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
Copy link
Author

p5pRT commented Aug 12, 2016

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
Copy link
Author

p5pRT commented Aug 12, 2016

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
Copy link
Author

p5pRT commented Aug 14, 2016

From @jhi

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

@p5pRT
Copy link
Author

p5pRT commented Dec 2, 2017

From zefram@fysh.org

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

-zefram

@p5pRT
Copy link
Author

p5pRT commented Dec 3, 2017

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant