Results for builtin-printf.test.sh

statusoshosh_.pyosh_.cc
pass 353526
ok 666
N-I 776
FAIL 1111
total494949
caseoshosh_.pyosh_.ccdescription
0pass pass pass printf with no args
1pass pass pass printf -v %s
2pass pass pass printf -v %q
3pass pass FAIL printf -v a[1]
details
4pass pass pass printf -v syntax error
5pass pass pass dynamic declare instead of %s
6ok ok ok dynamic declare instead of %q
detailsdetailsdetails
7ok ok ok printf -v dynamic scope
detailsdetailsdetails
8pass pass pass printf with too few arguments
9pass pass pass printf with too many arguments
10pass pass pass printf width strings
11pass pass pass printf integer
12pass pass pass printf %6.4d -- "precision" does padding for integers
13pass pass pass printf %6.4x X o
14pass pass pass %06d zero padding vs. %6.6d
15pass pass pass %06x %06X %06o
16pass pass pass %06s is no-op
17pass pass FAIL printf %6.4s does both truncation and padding
details
18pass pass pass printf %6.0s and %0.0s
19pass pass pass printf %6.s and %0.s
20pass pass pass printf %*.*s (width/precision from args)
21pass pass pass unsigned / octal / hex
22ok ok ok empty string (osh is more strict)
detailsdetailsdetails
23pass pass pass No char after ' (osh is more strict)
24FAIL FAIL FAIL Unicode char with ' (osh is more strict)
detailsdetailsdetails
25N-I N-I N-I negative numbers with unsigned / octal / hex
detailsdetailsdetails
26N-I N-I N-I printf floating point (not required, but they all implement it)
detailsdetailsdetails
27N-I N-I N-I printf floating point with - and 0
detailsdetailsdetails
28N-I N-I N-I printf eE fF gG
detailsdetailsdetails
29pass pass FAIL printf backslash escapes
details
30pass pass FAIL printf octal backslash escapes
details
31pass pass FAIL printf unicode backslash escapes
details
32pass pass pass printf invalid backslash escape (is ignored)
33pass pass pass printf % escapes
34pass pass pass printf %b backslash escaping
35pass pass pass printf %b with \c early return
36N-I N-I FAIL printf %c -- doesn't respect UTF-8! Bad.
detailsdetailsdetails
37ok ok ok printf invalid format
detailsdetailsdetails
38pass pass pass printf %q
39pass pass pass printf %6q (width)
40ok ok ok printf negative numbers
detailsdetailsdetails
41N-I N-I N-I printf + and space flags
detailsdetailsdetails
42N-I N-I N-I printf # flag
detailsdetailsdetails
43ok ok ok Runtime error for invalid integer
detailsdetailsdetails
44pass pass FAIL %(strftime format)T
details
45pass pass FAIL %(strftime format)T doesn't respect TZ if not exported
details
46pass pass FAIL %(strftime format)T TZ in environ but not in shell's memory
details
47pass pass FAIL %10.5(strftime format)T
details
48pass pass pass Regression for 'printf x y'
96 passed, 18 OK, 20 not implemented, 0 BUG, 13 failed, 0 timeouts, 0 cases skipped
1 failed under osh

Details on runs that didn't PASS

osh_.cc3 printf -v a[1]

[osh_.cc stdout] Expected "status=0\n['a', 'foo', 'c']\n", got "['a', 'foo', 'c']\nstatus=0\n"

stdout:
['a', 'foo', 'c']
status=0
stderr:
dumb_alloc:
	gNumNew = 2450
	gNumDelete = 241
	gMemPos = 81312

	gNumMalloc = 308
	gNumFree = 0
	gMemPos2 = 14224
osh6 dynamic declare instead of %q

stdout:
$'"quoted" with spaces and \\'
stderr:
osh_.py6 dynamic declare instead of %q

stdout:
$'"quoted" with spaces and \\'
stderr:
osh_.cc6 dynamic declare instead of %q

stdout:
$'"quoted" with spaces and \\'
stderr:
dumb_alloc:
	gNumNew = 1981
	gNumDelete = 165
	gMemPos = 68288

	gNumMalloc = 132
	gNumFree = 0
	gMemPos2 = 11472
osh7 printf -v dynamic scope

stdout:
dollar=dollar
--
dollar='$'
mylocal=mylocal
--
dollar='$'
mylocal=
stderr:
osh_.py7 printf -v dynamic scope

stdout:
dollar=dollar
--
dollar='$'
mylocal=mylocal
--
dollar='$'
mylocal=
stderr:
osh_.cc7 printf -v dynamic scope

stdout:
dollar=dollar
--
dollar='$'
mylocal=mylocal
--
dollar='$'
mylocal=
stderr:
dumb_alloc:
	gNumNew = 3405
	gNumDelete = 380
	gMemPos = 107968

	gNumMalloc = 635
	gNumFree = 0
	gMemPos2 = 19408
osh_.cc17 printf %6.4s does both truncation and padding

[osh_.cc stdout] Expected '[ foo]\n[ foo]\n[foo ]\n[spam-eggs]\n[ spam]\n[spam ]\n', got '[ foo]\n[ foo\x00]\n[foo\x00 ]\n[spam-eggs]\n[ spam]\n[spam ]\n'

stdout:
[   foo]
[  foo]
[foo  ]
[spam-eggs]
[  spam]
[spam  ]
stderr:
dumb_alloc:
	gNumNew = 2610
	gNumDelete = 274
	gMemPos = 86144

	gNumMalloc = 397
	gNumFree = 0
	gMemPos2 = 15600
osh22 empty string (osh is more strict)

stdout:
stderr: 
  printf '%d\n' ''
                ^
[ stdin ]:1: printf expected an integer, got ''
osh_.py22 empty string (osh is more strict)

stdout:
stderr: 
  printf '%d\n' ''
                ^
[ stdin ]:1: printf expected an integer, got ''
osh_.cc22 empty string (osh is more strict)

stdout:
stderr: 
  printf '%d\n' ''
                ^
[ stdin ]:1: printf expected an integer, got ''

dumb_alloc:
	gNumNew = 1764
	gNumDelete = 123
	gMemPos = 61440

	gNumMalloc = 79
	gNumFree = 0
	gMemPos2 = 10480
osh24 Unicode char with ' (osh is more strict)

[osh stdout] Expected '3bc\n', got 'ce\n'

stdout:
ce
stderr:
osh_.py24 Unicode char with ' (osh is more strict)

[osh_.py stdout] Expected '3bc\n', got 'ce\n'

stdout:
ce
stderr:
osh_.cc24 Unicode char with ' (osh is more strict)

[osh_.cc stdout] Expected '3bc\n', got 'ce\n'

stdout:
ce
stderr:
dumb_alloc:
	gNumNew = 1777
	gNumDelete = 129
	gMemPos = 61728

	gNumMalloc = 84
	gNumFree = 0
	gMemPos2 = 10544
osh25 negative numbers with unsigned / octal / hex

stdout:
stderr: 
  [%u]\n
    ^
(source.ArgvWord word_spid:2):1: fatal: Can't format negative number -42 with %u
osh_.py25 negative numbers with unsigned / octal / hex

stdout:
stderr: 
  [%u]\n
    ^
(source.ArgvWord word_spid:2):1: fatal: Can't format negative number -42 with %u
osh_.cc25 negative numbers with unsigned / octal / hex

stdout:
stderr: 
  printf '[%u]\n' -42
  ^~~~~~
[ stdin ]:1: fatal: Can't format negative number -42 with %u

dumb_alloc:
	gNumNew = 1770
	gNumDelete = 125
	gMemPos = 61616

	gNumMalloc = 80
	gNumFree = 0
	gMemPos2 = 10496
osh26 printf floating point (not required, but they all implement it)

stdout:
stderr: 
  [%f]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support floating point
  [%.2f]\n
      ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support floating point
  [%8.2f]\n
       ^
(source.ArgvWord word_spid:26):1: osh printf doesn't support floating point
  [%-8.2f]\n
        ^
(source.ArgvWord word_spid:40):1: osh printf doesn't support floating point
  [%-f]\n
     ^
(source.ArgvWord word_spid:55):1: osh printf doesn't support floating point
  [%-f]\n
     ^
(source.ArgvWord word_spid:67):1: osh printf doesn't support floating point
osh_.py26 printf floating point (not required, but they all implement it)

stdout:
stderr: 
  [%f]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support floating point
  [%.2f]\n
      ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support floating point
  [%8.2f]\n
       ^
(source.ArgvWord word_spid:26):1: osh printf doesn't support floating point
  [%-8.2f]\n
        ^
(source.ArgvWord word_spid:40):1: osh printf doesn't support floating point
  [%-f]\n
     ^
(source.ArgvWord word_spid:55):1: osh printf doesn't support floating point
  [%-f]\n
     ^
(source.ArgvWord word_spid:67):1: osh printf doesn't support floating point
osh_.cc26 printf floating point (not required, but they all implement it)

stdout:
stderr: 
  [%f]\n
    ^
TODO:1: osh printf doesn't support floating point
  [%.2f]\n
      ^
TODO:1: osh printf doesn't support floating point
  [%8.2f]\n
       ^
TODO:1: osh printf doesn't support floating point
  [%-8.2f]\n
        ^
TODO:1: osh printf doesn't support floating point
  [%-f]\n
     ^
TODO:1: osh printf doesn't support floating point
  [%-f]\n
     ^
TODO:1: osh printf doesn't support floating point

dumb_alloc:
	gNumNew = 2632
	gNumDelete = 253
	gMemPos = 86896

	gNumMalloc = 423
	gNumFree = 0
	gMemPos2 = 15968
osh27 printf floating point with - and 0

stdout:
---
stderr:
  [%8.4f]\n
       ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support floating point
  [%08.4f]\n
        ^
(source.ArgvWord word_spid:16):1: osh printf doesn't support floating point
  [%8.04f]\n
       ^
(source.ArgvWord word_spid:31):1: Expected a printf format character
  [%08.04f]\n
        ^
(source.ArgvWord word_spid:48):1: Expected a printf format character
  [%-8.4f]\n
        ^
(source.ArgvWord word_spid:67):1: osh printf doesn't support floating point
  [%-08.4f]\n
         ^
(source.ArgvWord word_spid:82):1: osh printf doesn't support floating point
  [%-8.04f]\n
        ^
(source.ArgvWord word_spid:98):1: Expected a printf format character
  [%-08.04f]\n
         ^
(source.ArgvWord word_spid:113):1: Expected a printf format character
osh_.py27 printf floating point with - and 0

stdout:
---
stderr:
  [%8.4f]\n
       ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support floating point
  [%08.4f]\n
        ^
(source.ArgvWord word_spid:16):1: osh printf doesn't support floating point
  [%8.04f]\n
       ^
(source.ArgvWord word_spid:31):1: Expected a printf format character
  [%08.04f]\n
        ^
(source.ArgvWord word_spid:48):1: Expected a printf format character
  [%-8.4f]\n
        ^
(source.ArgvWord word_spid:67):1: osh printf doesn't support floating point
  [%-08.4f]\n
         ^
(source.ArgvWord word_spid:82):1: osh printf doesn't support floating point
  [%-8.04f]\n
        ^
(source.ArgvWord word_spid:98):1: Expected a printf format character
  [%-08.04f]\n
         ^
(source.ArgvWord word_spid:113):1: Expected a printf format character
osh_.cc27 printf floating point with - and 0

stdout:
---
stderr:
  [%8.4f]\n
       ^
TODO:1: osh printf doesn't support floating point
  [%08.4f]\n
        ^
TODO:1: osh printf doesn't support floating point
  [%8.04f]\n
       ^
TODO:1: Expected a printf format character
  [%08.04f]\n
        ^
TODO:1: Expected a printf format character
  [%-8.4f]\n
        ^
TODO:1: osh printf doesn't support floating point
  [%-08.4f]\n
         ^
TODO:1: osh printf doesn't support floating point
  [%-8.04f]\n
        ^
TODO:1: Expected a printf format character
  [%-08.04f]\n
         ^
TODO:1: Expected a printf format character

dumb_alloc:
	gNumNew = 3058
	gNumDelete = 313
	gMemPos = 98336

	gNumMalloc = 567
	gNumFree = 0
	gMemPos2 = 18272
osh28 printf eE fF gG

stdout:
stderr: 
  [%e]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support floating point
  [%E]\n
    ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support floating point
  [%f]\n
    ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support floating point
  [%g]\n
    ^
(source.ArgvWord word_spid:35):1: osh printf doesn't support floating point
  [%G]\n
    ^
(source.ArgvWord word_spid:46):1: osh printf doesn't support floating point
osh_.py28 printf eE fF gG

stdout:
stderr: 
  [%e]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support floating point
  [%E]\n
    ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support floating point
  [%f]\n
    ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support floating point
  [%g]\n
    ^
(source.ArgvWord word_spid:35):1: osh printf doesn't support floating point
  [%G]\n
    ^
(source.ArgvWord word_spid:46):1: osh printf doesn't support floating point
osh_.cc28 printf eE fF gG

stdout:
stderr: 
  [%e]\n
    ^
TODO:1: osh printf doesn't support floating point
  [%E]\n
    ^
TODO:1: osh printf doesn't support floating point
  [%f]\n
    ^
TODO:1: osh printf doesn't support floating point
  [%g]\n
    ^
TODO:1: osh printf doesn't support floating point
  [%G]\n
    ^
TODO:1: osh printf doesn't support floating point

dumb_alloc:
	gNumNew = 2401
	gNumDelete = 225
	gMemPos = 79280

	gNumMalloc = 301
	gNumFree = 0
	gMemPos2 = 14016
osh_.cc29 printf backslash escapes

[osh_.cc stdout] Expected "['a\\tb']\n['\\xe2\\x98\\xa0']\n['$e']\n['\\x1f7']\n", got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed.
osh_.cc30 printf octal backslash escapes

[osh_.cc stdout] Expected "['\\x1f7']\n['\\xff']\n", got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed.
osh_.cc31 printf unicode backslash escapes

[osh_.cc stdout] Expected "['\\xe2\\x98\\xa0']\n['\\xd9\\x9f']\n", got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed.
osh36 printf %c -- doesn't respect UTF-8! Bad.

stdout:
[μμ]
0
stderr:
  %c
   ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support single characters (bytes)
osh_.py36 printf %c -- doesn't respect UTF-8! Bad.

stdout:
[μμ]
0
stderr:
  %c
   ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support single characters (bytes)
osh_.cc36 printf %c -- doesn't respect UTF-8! Bad.

[osh_.cc stdout] Expected '[\xce\xbc\xce\xbc]\n0\n', got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed.
osh37 printf invalid format

stdout:
status=2
status=2
stderr:
  %z
   ^
(source.ArgvWord word_spid:2):1: Invalid printf format character
  %-z
    ^
(source.ArgvWord word_spid:17):1: Invalid printf format character
osh_.py37 printf invalid format

stdout:
status=2
status=2
stderr:
  %z
   ^
(source.ArgvWord word_spid:2):1: Invalid printf format character
  %-z
    ^
(source.ArgvWord word_spid:17):1: Invalid printf format character
osh_.cc37 printf invalid format

stdout:
status=2
status=2
stderr:
  %z
   ^
TODO:1: Invalid printf format character
  %-z
    ^
TODO:1: Invalid printf format character

dumb_alloc:
	gNumNew = 2184
	gNumDelete = 192
	gMemPos = 72688

	gNumMalloc = 226
	gNumFree = 0
	gMemPos2 = 12816
osh40 printf negative numbers

stdout:
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
status=1
status=1
stderr:
  printf '[%d] ' ' -42z'
                 ^
[ stdin ]:13: printf expected an integer, got ' -42z'
  printf '[%i] ' ' -42z'
                 ^
[ stdin ]:15: printf expected an integer, got ' -42z'
osh_.py40 printf negative numbers

stdout:
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
status=1
status=1
stderr:
  printf '[%d] ' ' -42z'
                 ^
[ stdin ]:13: printf expected an integer, got ' -42z'
  printf '[%i] ' ' -42z'
                 ^
[ stdin ]:15: printf expected an integer, got ' -42z'
osh_.cc40 printf negative numbers

stdout:
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
[-42] status=0
status=1
status=1
stderr:
  printf '[%d] ' ' -42z'
                 ^
[ stdin ]:13: printf expected an integer, got ' -42z'
  printf '[%i] ' ' -42z'
                 ^
[ stdin ]:15: printf expected an integer, got ' -42z'

dumb_alloc:
	gNumNew = 3880
	gNumDelete = 477
	gMemPos = 120592

	gNumMalloc = 804
	gNumFree = 0
	gMemPos2 = 22096
osh41 printf + and space flags

stdout:
stderr: 
  [%+d]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support the '+' flag
  [%+d]\n
    ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support the '+' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support the ' ' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:35):1: osh printf doesn't support the ' ' flag
osh_.py41 printf + and space flags

stdout:
stderr: 
  [%+d]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support the '+' flag
  [%+d]\n
    ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support the '+' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support the ' ' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:35):1: osh printf doesn't support the ' ' flag
osh_.cc41 printf + and space flags

stdout:
stderr: 
  [%+d]\n
    ^
TODO:1: osh printf doesn't support the '+' flag
  [%+d]\n
    ^
TODO:1: osh printf doesn't support the '+' flag
  [% d]\n
    ^
TODO:1: osh printf doesn't support the ' ' flag
  [% d]\n
    ^
TODO:1: osh printf doesn't support the ' ' flag

dumb_alloc:
	gNumNew = 2222
	gNumDelete = 197
	gMemPos = 74208

	gNumMalloc = 228
	gNumFree = 0
	gMemPos2 = 12848
osh42 printf # flag

stdout:
---
stderr:
  [%#o][%#o]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support the '#' flag
  [%#x][%#x]\n
    ^
(source.ArgvWord word_spid:15):1: osh printf doesn't support the '#' flag
  [%#X][%#X]\n
    ^
(source.ArgvWord word_spid:28):1: osh printf doesn't support the '#' flag
  [%.0f][%#.0f]\n
      ^
(source.ArgvWord word_spid:45):1: osh printf doesn't support floating point
  [%g][%#g]\n
    ^
(source.ArgvWord word_spid:60):1: osh printf doesn't support floating point
osh_.py42 printf # flag

stdout:
---
stderr:
  [%#o][%#o]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support the '#' flag
  [%#x][%#x]\n
    ^
(source.ArgvWord word_spid:15):1: osh printf doesn't support the '#' flag
  [%#X][%#X]\n
    ^
(source.ArgvWord word_spid:28):1: osh printf doesn't support the '#' flag
  [%.0f][%#.0f]\n
      ^
(source.ArgvWord word_spid:45):1: osh printf doesn't support floating point
  [%g][%#g]\n
    ^
(source.ArgvWord word_spid:60):1: osh printf doesn't support floating point
osh_.cc42 printf # flag

stdout:
---
stderr:
  [%#o][%#o]\n
    ^
TODO:1: osh printf doesn't support the '#' flag
  [%#x][%#x]\n
    ^
TODO:1: osh printf doesn't support the '#' flag
  [%#X][%#X]\n
    ^
TODO:1: osh printf doesn't support the '#' flag
  [%.0f][%#.0f]\n
      ^
TODO:1: osh printf doesn't support floating point
  [%g][%#g]\n
    ^
TODO:1: osh printf doesn't support floating point

dumb_alloc:
	gNumNew = 2592
	gNumDelete = 244
	gMemPos = 84688

	gNumMalloc = 350
	gNumFree = 0
	gMemPos2 = 14800
osh43 Runtime error for invalid integer

stdout:
status=1
status=1
stderr:
  printf '%d\n' $x
                ^~
[ stdin ]:2: printf expected an integer, got '3abc'
  printf '%d\n' xyz
                ^~~
[ stdin ]:4: printf expected an integer, got 'xyz'
osh_.py43 Runtime error for invalid integer

stdout:
status=1
status=1
stderr:
  printf '%d\n' $x
                ^~
[ stdin ]:2: printf expected an integer, got '3abc'
  printf '%d\n' xyz
                ^~~
[ stdin ]:4: printf expected an integer, got 'xyz'
osh_.cc43 Runtime error for invalid integer

stdout:
status=1
status=1
stderr:
  printf '%d\n' $x
                ^~
[ stdin ]:2: printf expected an integer, got '3abc'
  printf '%d\n' xyz
                ^~~
[ stdin ]:4: printf expected an integer, got 'xyz'

dumb_alloc:
	gNumNew = 2258
	gNumDelete = 199
	gMemPos = 75152

	gNumMalloc = 268
	gNumFree = 0
	gMemPos2 = 13520
osh_.cc44 %(strftime format)T

[osh_.cc stdout] Expected '2019-05-16\n2019-05-15\nstatus=0\n', got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:115: int posix::putenv(Str*, Str*): Assertion `0' failed.
osh_.cc45 %(strftime format)T doesn't respect TZ if not exported

[osh_.cc stdout] Expected 'not equal\n', got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed.
osh_.cc46 %(strftime format)T TZ in environ but not in shell's memory

[osh_.cc stdout] Expected 'not equal\n', got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:106: Tuple2<int, int> posix::pipe(): Assertion `0' failed.
osh_.cc47 %10.5(strftime format)T

[osh_.cc stdout] Expected '[ 2019-]\n[ 2019-]\nstatus=0\n', got ''
[osh_.cc status] Expected 0, got -6

stdout:
stderr: 
osh_eval.opt: cpp/posix.h:115: int posix::putenv(Str*, Str*): Assertion `0' failed.