Results for builtin-printf.test.sh

casedashbashmkshzshashoshosh_ALTdescription
0N-I pass N-I N-I N-I pass pass printf -v %s
detailsdetailsdetailsdetails
1N-I pass N-I N-I N-I pass pass printf -v %q
detailsdetailsdetailsdetails
2N-I pass N-I N-I N-I N-I N-I printf -v a[1]
detailsdetailsdetailsdetailsdetailsdetails
3N-I pass N-I pass N-I FAIL FAIL dynamic declare instead of %s
detailsdetailsdetailsdetailsdetails
4N-I pass N-I N-I N-I FAIL FAIL dynamic declare instead of %q
detailsdetailsdetailsdetailsdetailsdetails
5N-I pass N-I N-I N-I ok ok printf -v dynamic scope
detailsdetailsdetailsdetailsdetailsdetails
6pass pass pass pass pass pass pass printf with too few arguments
7pass pass pass pass pass pass pass printf with too many arguments
8pass pass pass pass pass pass pass printf width strings
9pass pass pass pass pass pass pass printf integer
10pass pass pass pass pass N-I N-I printf %6.4d -- precision means something different for integers !?
detailsdetails
11pass pass pass pass pass pass pass printf %6.4s does both truncation and padding
12pass pass N-I pass pass pass pass printf %6.0s and %0.0s
details
13pass pass pass pass pass pass pass unsigned / octal / hex
14pass pass pass pass pass N-I N-I negative numbers with unsigned / octal / hex
detailsdetails
15pass pass pass pass pass N-I N-I printf floating point (not required, but they all implement it)
detailsdetails
16pass pass pass pass pass N-I N-I printf floating point with - and 0
detailsdetails
17pass pass pass pass pass N-I N-I printf eE fF gG
detailsdetails
18N-I pass pass pass pass pass pass printf backslash escapes
details
19pass pass pass pass pass pass pass printf octal backslash escapes
20N-I pass pass pass N-I pass pass printf unicode backslash escapes
detailsdetails
21pass pass pass pass pass pass pass printf invalid backslash escape (is ignored)
22pass pass pass pass pass pass pass printf % escapes
23pass pass pass pass pass N-I N-I printf %b backslash escaping
detailsdetails
24N-I pass pass pass N-I N-I N-I printf %c -- doesn't respect UTF-8! Bad.
detailsdetailsdetailsdetails
25pass pass pass pass BUG ok ok printf invalid format
detailsdetailsdetails
26N-I ok pass ok N-I pass pass printf %q
detailsdetailsdetailsdetails
27N-I ok N-I ok N-I pass pass printf %6q (width)
detailsdetailsdetailsdetailsdetails
28pass pass pass pass pass N-I N-I printf + and space flags
detailsdetails
29pass pass pass pass pass N-I N-I printf # flag
detailsdetails
30pass pass pass BUG BUG ok ok Runtime error for invalid integer
detailsdetailsdetailsdetails
31N-I pass N-I N-I N-I N-I N-I %(strftime format)T
detailsdetailsdetailsdetailsdetailsdetails

147 passed, 10 ok, 60 known unimplemented, 3 known bugs, 2 failed, 0 skipped

Details on runs that didn't PASS

dash0 printf -v %s

stdout:
['']
stderr:
_tmp/spec-bin/dash: 2: printf: Illegal option -v
mksh0 printf -v %s

stdout:
-v['']
stderr:
printf: warning: ignoring excess arguments, starting with ‘foo’
zsh0 printf -v %s

stdout:
-v['']
stderr:
ash0 printf -v %s

stdout:
-v['']
stderr:
dash1 printf -v %q

stdout:
stderr: 
_tmp/spec-bin/dash: 2: printf: Illegal option -v
mksh1 printf -v %q

stdout:
-v
stderr:
printf: warning: ignoring excess arguments, starting with ‘foo’
zsh1 printf -v %q

stdout:
-v
stderr:
ash1 printf -v %q

stdout:
-v
stderr:
dash2 printf -v a[1]

stdout:
stderr: 
_tmp/spec-bin/dash: 1: Syntax error: "(" unexpected
mksh2 printf -v a[1]

stdout:
-vstatus=0
['a', 'b', 'c']
stderr:
printf: warning: ignoring excess arguments, starting with ‘a[1]’
zsh2 printf -v a[1]

stdout:
-vstatus=0
['a', 'b', 'c']
stderr:
ash2 printf -v a[1]

stdout:
stderr: 
_tmp/spec-bin/ash: syntax error: unexpected "("
osh2 printf -v a[1]

stdout:
status=2
['a', 'b', 'c']
stderr:
  printf -v 'a[1]' %s 'foo'
  ^~~~~~
[ stdin ]:2: 'printf' got invalid variable name 'a[1]'
osh_ALT2 printf -v a[1]

stdout:
status=2
['a', 'b', 'c']
stderr:
  printf -v 'a[1]' %s 'foo'
  ^~~~~~
[ stdin ]:2: 'printf' got invalid variable name 'a[1]'
dash3 dynamic declare instead of %s

stdout:
['']
stderr:
_tmp/spec-bin/dash: 2: declare: not found
mksh3 dynamic declare instead of %s

stdout:
['']
stderr:
_tmp/spec-bin/mksh: <stdin>[2]: declare: not found
ash3 dynamic declare instead of %s

stdout:
['']
stderr:
_tmp/spec-bin/ash: declare: not found
osh3 dynamic declare instead of %s

[osh stdout] Expected "['hello there']\n", got ''
[osh status] Expected 0, got 2

stdout:
stderr: 
  declare $var='hello there'
          ^~~~
[ stdin ]:2: Variable names must be unquoted constants
osh_ALT3 dynamic declare instead of %s

[osh_ALT stdout] Expected "['hello there']\n", got ''
[osh_ALT status] Expected 0, got 2

stdout:
stderr: 
  declare $var='hello there'
          ^~~~
[ stdin ]:2: Variable names must be unquoted constants
dash4 dynamic declare instead of %q

stdout:
stderr: 
_tmp/spec-bin/dash: 3: Bad substitution
mksh4 dynamic declare instead of %q

stdout:
stderr: 
_tmp/spec-bin/mksh: <stdin>[3]: declare: not found
zsh4 dynamic declare instead of %q

stdout:
stderr: 
zsh: bad substitution
ash4 dynamic declare instead of %q

stdout:
stderr: 
_tmp/spec-bin/ash: syntax error: bad substitution
osh4 dynamic declare instead of %q

[osh stdout] Expected '\'"quoted" with spaces and \\\'\n', got ''
[osh status] Expected 0, got 2

stdout:
stderr: 
  declare $var="${val@Q}"
          ^~~~
[ stdin ]:3: Variable names must be unquoted constants
osh_ALT4 dynamic declare instead of %q

[osh_ALT stdout] Expected '\'"quoted" with spaces and \\\'\n', got ''
[osh_ALT status] Expected 0, got 2

stdout:
stderr: 
  declare $var="${val@Q}"
          ^~~~
[ stdin ]:3: Variable names must be unquoted constants
dash5 printf -v dynamic scope

stdout:
not implemented
stderr:
mksh5 printf -v dynamic scope

stdout:
not implemented
stderr:
zsh5 printf -v dynamic scope

stdout:
not implemented
stderr:
ash5 printf -v dynamic scope

stdout:
not implemented
stderr:
osh5 printf -v dynamic scope

stdout:
dollar=dollar
--
dollar='$'
mylocal='mylocal'
--
dollar='$'
mylocal=
stderr:
osh_ALT5 printf -v dynamic scope

stdout:
dollar=dollar
--
dollar='$'
mylocal='mylocal'
--
dollar='$'
mylocal=
stderr:
osh10 printf %6.4d -- precision means something different for integers !?

stdout:
stderr: 
  [%6.4d]\n
      ^
(source.ArgvWord word_spid:2):1: precision can't be specified when here
osh_ALT10 printf %6.4d -- precision means something different for integers !?

stdout:
stderr: 
  [%6.4d]\n
      ^
(source.ArgvWord word_spid:2):1: precision can't be specified when here
mksh12 printf %6.0s and %0.0s

stdout:
[      ]
[
stderr:
printf: %0.0s: invalid conversion specification
osh14 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_ALT14 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
osh15 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_ALT15 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
osh16 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: Invalid printf format character
  [%08.04f]\n
        ^
(source.ArgvWord word_spid:48):1: Invalid 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: Invalid printf format character
  [%-8.04f]\n
        ^
(source.ArgvWord word_spid:94):1: Invalid printf format character
  [%-08.04f]\n
     ^
(source.ArgvWord word_spid:109):1: Invalid printf format character
osh_ALT16 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: Invalid printf format character
  [%08.04f]\n
        ^
(source.ArgvWord word_spid:48):1: Invalid 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: Invalid printf format character
  [%-8.04f]\n
        ^
(source.ArgvWord word_spid:94):1: Invalid printf format character
  [%-08.04f]\n
     ^
(source.ArgvWord word_spid:109):1: Invalid printf format character
osh17 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_ALT17 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
dash18 printf backslash escapes

stdout:
['a\tb']
['\\xE2\\x98\\xA0']
['$e']
['\x1f7']
stderr:
dash20 printf unicode backslash escapes

stdout:
['\\u2620']
['\\U0000065f']
stderr:
ash20 printf unicode backslash escapes

stdout:
['\\u2620']
['\\U0000065f']
stderr:
osh23 printf %b backslash escaping

stdout:
[\044]
status=2
stderr:
  [%b]\n
    ^
(source.ArgvWord word_spid:21):1: osh printf doesn't support backslash escaping (try $'\n')
osh_ALT23 printf %b backslash escaping

stdout:
[\044]
status=2
stderr:
  [%b]\n
    ^
(source.ArgvWord word_spid:21):1: osh printf doesn't support backslash escaping (try $'\n')
dash24 printf %c -- doesn't respect UTF-8! Bad.

stdout:
[$\u03bc\u03bc]
1
stderr:
ash24 printf %c -- doesn't respect UTF-8! Bad.

stdout:
[\u03bc\u03bc]
1
stderr:
osh24 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_ALT24 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)
ash25 printf invalid format

stdout:
status=0
status=0
stderr:
osh25 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_ALT25 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
dash26 printf %q

stdout:
[
stderr:
_tmp/spec-bin/dash: 2: printf: %q: invalid directive
bash26 printf %q

stdout:
[a\ b]
stderr:
zsh26 printf %q

stdout:
[a\ b]
stderr:
ash26 printf %q

stdout:
[
stderr:
ash: %q]\n: invalid format
dash27 printf %6q (width)

stdout:
[
stderr:
_tmp/spec-bin/dash: 2: printf: %6q: invalid directive
bash27 printf %6q (width)

stdout:
[  a\ b]
stderr:
mksh27 printf %6q (width)

stdout:
[
stderr:
printf: %6q: invalid conversion specification
zsh27 printf %6q (width)

stdout:
[  a\ b]
stderr:
ash27 printf %6q (width)

stdout:
[
stderr:
ash: %6q]\n: invalid format
osh28 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:14):1: osh printf doesn't support the '+' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:26):1: osh printf doesn't support the ' ' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:38):1: osh printf doesn't support the ' ' flag
osh_ALT28 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:14):1: osh printf doesn't support the '+' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:26):1: osh printf doesn't support the ' ' flag
  [% d]\n
    ^
(source.ArgvWord word_spid:38):1: osh printf doesn't support the ' ' flag
osh29 printf # flag

stdout:
---
stderr:
  [%#o]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support the '#' flag
  [%#x]\n
    ^
(source.ArgvWord word_spid:14):1: osh printf doesn't support the '#' flag
  [%#X]\n
    ^
(source.ArgvWord word_spid:26):1: osh printf doesn't support the '#' flag
  [%#f]\n
    ^
(source.ArgvWord word_spid:42):1: osh printf doesn't support the '#' flag
osh_ALT29 printf # flag

stdout:
---
stderr:
  [%#o]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support the '#' flag
  [%#x]\n
    ^
(source.ArgvWord word_spid:14):1: osh printf doesn't support the '#' flag
  [%#X]\n
    ^
(source.ArgvWord word_spid:26):1: osh printf doesn't support the '#' flag
  [%#f]\n
    ^
(source.ArgvWord word_spid:42):1: osh printf doesn't support the '#' flag
zsh30 Runtime error for invalid integer

stdout:
0
status=1
0
status=0
stderr:
zsh: bad math expression: operator expected at `abc'
ash30 Runtime error for invalid integer

stdout:
0
status=1
0
status=1
stderr:
ash: invalid number '3abc'
ash: invalid number 'xyz'
osh30 Runtime error for invalid integer

stdout:
status=1
status=1
stderr:
  printf '%d\n' $x
                ^~
[ stdin ]:2: printf got invalid number '3abc'
  printf '%d\n' xyz
                ^~~
[ stdin ]:4: printf got invalid number 'xyz'
osh_ALT30 Runtime error for invalid integer

stdout:
status=1
status=1
stderr:
  printf '%d\n' $x
                ^~
[ stdin ]:2: printf got invalid number '3abc'
  printf '%d\n' xyz
                ^~~
[ stdin ]:4: printf got invalid number 'xyz'
dash31 %(strftime format)T

stdout:
status=1
stderr:
_tmp/spec-bin/dash: 1: printf: %(: invalid directive
mksh31 %(strftime format)T

stdout:
status=1
stderr:
printf: %(: invalid conversion specification
zsh31 %(strftime format)T

stdout:
status=1
stderr:
printf: %(: invalid directive
ash31 %(strftime format)T

stdout:
status=1
stderr:
ash: %(%Y-%m-%d)T\n: invalid format
osh31 %(strftime format)T

stdout:
status=2
stderr:
  %(%Y-%m-%d)T\n
   ^
(source.ArgvWord word_spid:2):1: Invalid printf format character
osh_ALT31 %(strftime format)T

stdout:
status=2
stderr:
  %(%Y-%m-%d)T\n
   ^
(source.ArgvWord word_spid:2):1: Invalid printf format character