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 N-I N-I printf %6.4s is overspecified, behaves like %6s
detailsdetails
12pass pass pass pass pass N-I N-I %u prints unsigned integers
detailsdetails
13pass pass pass pass pass N-I N-I integer octal hex
detailsdetails
14pass pass pass pass pass N-I N-I printf floating point (not required, but they all implement it)
detailsdetails
15pass pass pass pass pass N-I N-I printf floating point with - and 0
detailsdetails
16pass pass pass pass pass N-I N-I printf eE fF gG
detailsdetails
17N-I pass pass pass pass pass pass printf backslash escapes
details
18pass pass pass pass pass pass pass printf octal backslash escapes
19N-I pass pass pass N-I pass pass printf unicode backslash escapes
detailsdetails
20pass pass pass pass pass pass pass printf invalid backslash escape (is ignored)
21pass pass pass pass pass pass pass printf % escapes
22pass pass pass pass pass N-I N-I printf %b backslash escaping
detailsdetails
23N-I pass pass pass N-I N-I N-I printf %c -- doesn't respect UTF-8! Bad.
detailsdetailsdetailsdetails
24pass pass pass pass BUG ok ok printf invalid format
detailsdetailsdetails
25N-I ok pass ok N-I pass pass printf %q
detailsdetailsdetailsdetails
26N-I ok N-I ok N-I pass pass printf %6q (width)
detailsdetailsdetailsdetailsdetails
27pass pass pass pass pass N-I N-I printf + and space flags
detailsdetails
28pass pass pass pass pass N-I N-I printf # flag
detailsdetails
29pass pass pass BUG BUG ok ok Runtime error for invalid integer
detailsdetailsdetailsdetails
30N-I pass N-I N-I N-I N-I N-I %(strftime format)T
detailsdetailsdetailsdetailsdetailsdetails

137 passed, 10 ok, 63 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 type isn't floating point
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 type isn't floating point
osh11 printf %6.4s is overspecified, behaves like %6s

stdout:
[    42]
status=2
stderr:
  [%6.4s]\n
      ^
(source.ArgvWord word_spid:17):1: precision can't be specified when type isn't floating point
osh_ALT11 printf %6.4s is overspecified, behaves like %6s

stdout:
[    42]
status=2
stderr:
  [%6.4s]\n
      ^
(source.ArgvWord word_spid:17):1: precision can't be specified when type isn't floating point
osh12 %u prints unsigned integers

stdout:
stderr: 
  [%u]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't supported unsigned integers
osh_ALT12 %u prints unsigned integers

stdout:
stderr: 
  [%u]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't supported unsigned integers
osh13 integer octal hex

stdout:
---
stderr:
  [%o]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support 'o' (because it implies unsigned integers)
  [%x]\n
    ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support 'x' (because it implies unsigned integers)
  [%X]\n
    ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support 'X' (because it implies unsigned integers)
  [%o]\n
    ^
(source.ArgvWord word_spid:39):1: osh printf doesn't support 'o' (because it implies unsigned integers)
  [%x]\n
    ^
(source.ArgvWord word_spid:50):1: osh printf doesn't support 'x' (because it implies unsigned integers)
  [%X]\n
    ^
(source.ArgvWord word_spid:61):1: osh printf doesn't support 'X' (because it implies unsigned integers)
osh_ALT13 integer octal hex

stdout:
---
stderr:
  [%o]\n
    ^
(source.ArgvWord word_spid:2):1: osh printf doesn't support 'o' (because it implies unsigned integers)
  [%x]\n
    ^
(source.ArgvWord word_spid:13):1: osh printf doesn't support 'x' (because it implies unsigned integers)
  [%X]\n
    ^
(source.ArgvWord word_spid:24):1: osh printf doesn't support 'X' (because it implies unsigned integers)
  [%o]\n
    ^
(source.ArgvWord word_spid:39):1: osh printf doesn't support 'o' (because it implies unsigned integers)
  [%x]\n
    ^
(source.ArgvWord word_spid:50):1: osh printf doesn't support 'x' (because it implies unsigned integers)
  [%X]\n
    ^
(source.ArgvWord word_spid:61):1: osh printf doesn't support 'X' (because it implies unsigned integers)
osh14 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_ALT14 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
osh15 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_ALT15 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
osh16 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_ALT16 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
dash17 printf backslash escapes

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

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

stdout:
['\\u2620']
['\\U0000065f']
stderr:
osh22 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_ALT22 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')
dash23 printf %c -- doesn't respect UTF-8! Bad.

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

stdout:
[\u03bc\u03bc]
1
stderr:
osh23 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_ALT23 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)
ash24 printf invalid format

stdout:
status=0
status=0
stderr:
osh24 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_ALT24 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
dash25 printf %q

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

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

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

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

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

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

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

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

stdout:
[
stderr:
ash: %6q]\n: invalid format
osh27 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_ALT27 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
osh28 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_ALT28 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
zsh29 Runtime error for invalid integer

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

stdout:
0
status=1
0
status=1
stderr:
ash: invalid number '3abc'
ash: invalid number 'xyz'
osh29 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_ALT29 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'
dash30 %(strftime format)T

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

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

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

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

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

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