Results for nameref.test.sh

statusbashmkshkshtoyshsushbrushosh
pass 25131322325
ok 2900000
N-I 2600000
BUG 3400000
FAIL 00193030297
total32323232323232
casebashmkshkshtoyshsushbrushoshdescription
0pass pass pass FAIL FAIL FAIL pass pass array by reference
detailsdetailsdetails
1pass pass pass FAIL FAIL FAIL pass mutate array by reference
detailsdetailsdetails
2pass BUG FAIL FAIL FAIL FAIL pass pass assoc array by reference
detailsdetailsdetailsdetailsdetails
3pass BUG FAIL FAIL FAIL FAIL pass pass local array by reference, relying on DYNAMIC SCOPING
detailsdetailsdetailsdetailsdetails
4pass pass pass FAIL FAIL FAIL pass flag -n and +n
detailsdetailsdetails
5pass pass pass FAIL FAIL FAIL pass mutating through nameref: ref=
detailsdetailsdetails
6pass N-I FAIL FAIL FAIL FAIL FAIL flag -n combined ${!ref} -- bash INVERTS
detailsdetailsdetailsdetailsdetailsdetails
7pass ok FAIL pass pass pass pass named ref with $# doesn't work
detailsdetails
8N-I N-I FAIL FAIL FAIL FAIL pass named ref with $# and shopt -s strict_nameref
detailsdetailsdetailsdetailsdetailsdetails
9pass BUG FAIL FAIL FAIL FAIL pass named ref with 1 $1 etc.
detailsdetailsdetailsdetailsdetails
10pass ok FAIL pass pass pass pass assign to invalid ref
detailsdetails
11N-I N-I FAIL FAIL FAIL FAIL pass assign to invalid ref with strict_nameref
detailsdetailsdetailsdetailsdetailsdetails
12pass ok pass FAIL FAIL FAIL pass name ref on Undef cell
detailsdetailsdetailsdetails
13pass ok FAIL FAIL FAIL FAIL pass assign to empty nameref and invalid nameref
detailsdetailsdetailsdetailsdetails
14pass N-I FAIL FAIL FAIL FAIL pass -n attribute before it has a value
detailsdetailsdetailsdetailsdetails
15BUG N-I FAIL FAIL FAIL FAIL pass -n attribute on array is hard error, not a warning
detailsdetailsdetailsdetailsdetailsdetails
16pass ok FAIL FAIL FAIL pass pass exported nameref
detailsdetailsdetailsdetails
17pass pass pass FAIL FAIL FAIL pass readonly nameref doesn't prevent assigning through it
detailsdetailsdetails
18ok ok FAIL FAIL FAIL FAIL pass readonly var can't be assigned through nameref
detailsdetailsdetailsdetailsdetailsdetails
19pass pass pass FAIL FAIL FAIL pass unset nameref
detailsdetailsdetails
20pass pass pass FAIL FAIL FAIL pass Chain of namerefs
detailsdetailsdetails
21BUG ok FAIL FAIL FAIL FAIL pass Mutually recursive namerefs detected on READ
detailsdetailsdetailsdetailsdetailsdetails
22BUG ok FAIL FAIL FAIL FAIL pass Mutually recursive namerefs detected on WRITE
detailsdetailsdetailsdetailsdetailsdetails
23pass pass pass FAIL FAIL FAIL pass Dynamic scope with namerefs
detailsdetailsdetails
24pass pass pass FAIL FAIL FAIL pass change reference itself
detailsdetailsdetails
25pass pass pass FAIL FAIL FAIL FAIL a[2] in nameref
detailsdetailsdetailsdetails
26pass pass pass FAIL FAIL FAIL FAIL a[expr] in nameref
detailsdetailsdetailsdetails
27pass ok FAIL FAIL FAIL FAIL FAIL a[@] in nameref
detailsdetailsdetailsdetailsdetailsdetails
28pass pass pass FAIL FAIL FAIL pass mutate through nameref: ref[0]=
detailsdetailsdetails
29pass BUG FAIL FAIL FAIL FAIL FAIL bad mutation through nameref: ref[0]= where ref is array[0]
detailsdetailsdetailsdetailsdetailsdetails
30ok pass FAIL FAIL FAIL FAIL FAIL @ in nameref isn't supported, unlike in ${!ref}
detailsdetailsdetailsdetailsdetailsdetails
31pass N-I FAIL FAIL FAIL FAIL FAIL Unquoted assoc reference on RHS
detailsdetailsdetailsdetailsdetailsdetails
83 passed, 11 OK, 8 not implemented, 7 BUG, 115 failed, 0 timeouts, 0 cases skipped
7 failed under osh

Details on runs that didn't PASS

toysh0 pass array by reference

[toysh stdout] Expected 'zo\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 6: sh: syntax error: ga
sush0 pass array by reference

[sush stdout] Expected 'zo\n', got '\n'

stdout:
stderr: 
brush0 pass array by reference

[brush stdout] Expected 'zo\n', got '\n'

stdout:
stderr: 
toysh1 mutate array by reference

[toysh stdout] Expected 'a ZZZ c d\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 6: sh: syntax error: a
sush1 mutate array by reference

[sush stdout] Expected 'a ZZZ c d\n', got 'a b c d\n'

stdout:
a b c d
stderr:
brush1 mutate array by reference

[brush stdout] Expected 'a ZZZ c d\n', got 'a b c d\n'

stdout:
a b c d
stderr:
mksh2 pass assoc array by reference

stdout:
[monday]=eggs
stderr:
ksh2 pass assoc array by reference

[ksh stdout] Expected 'jam\n', got '[monday]=eggs\n'

stdout:
[monday]=eggs
stderr:
toysh2 pass assoc array by reference

[toysh stdout] Expected 'jam\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 6: sh: syntax error: [monday]=eggs
sush2 pass assoc array by reference

[sush stdout] Expected 'jam\n', got 'days\n'

stdout:
days
stderr:
brush2 pass assoc array by reference

[brush stdout] Expected 'jam\n', got 'days\n'

stdout:
days
stderr:
mksh3 pass local array by reference, relying on DYNAMIC SCOPING

stdout:
stderr: 
mksh: <stdin>[7]: syntax error: '(' unexpected
ksh3 pass local array by reference, relying on DYNAMIC SCOPING

[ksh stdout] Expected 'zo\n', got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[7]: syntax error: unexpected '('
toysh3 pass local array by reference, relying on DYNAMIC SCOPING

[toysh stdout] Expected 'zo\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 6: sh: syntax error: )
sush3 pass local array by reference, relying on DYNAMIC SCOPING

[sush stdout] Expected 'zo\n', got '\n'

stdout:
stderr: 
brush3 pass local array by reference, relying on DYNAMIC SCOPING

[brush stdout] Expected 'zo\n', got '\n'

stdout:
stderr: 
toysh4 flag -n and +n

[toysh stdout] Expected 'ref=x\nref=foo\nref=bar\nref=x\n', got 'ref=x\nref=x\nref=x\nref=x\n'

stdout:
ref=x
ref=x
ref=x
ref=x
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush4 flag -n and +n

[sush stdout] Expected 'ref=x\nref=foo\nref=bar\nref=x\n', got 'ref=x\nref=x\nref=x\nref=x\n'

stdout:
ref=x
ref=x
ref=x
ref=x
stderr:
brush4 flag -n and +n

[brush stdout] Expected 'ref=x\nref=foo\nref=bar\nref=x\n', got 'ref=x\nref=x\nref=x\nref=x\n'

stdout:
ref=x
ref=x
ref=x
ref=x
stderr:
toysh5 mutating through nameref: ref=

[toysh stdout] Expected '1 ref=y\n2 ref=YY\n3 ref=XXXX\n4 y=XXXX\n', got '1 ref=y\n2 ref=y\n3 ref=XXXX\n4 y=YY\n'

stdout:
1 ref=y
2 ref=y
3 ref=XXXX
4 y=YY
stderr:
sh: typeset: No such file or directory
sush5 mutating through nameref: ref=

[sush stdout] Expected '1 ref=y\n2 ref=YY\n3 ref=XXXX\n4 y=XXXX\n', got '1 ref=y\n2 ref=y\n3 ref=XXXX\n4 y=YY\n'

stdout:
1 ref=y
2 ref=y
3 ref=XXXX
4 y=YY
stderr:
brush5 mutating through nameref: ref=

[brush stdout] Expected '1 ref=y\n2 ref=YY\n3 ref=XXXX\n4 y=XXXX\n', got '1 ref=y\n2 ref=y\n3 ref=XXXX\n4 y=YY\n'

stdout:
1 ref=y
2 ref=y
3 ref=XXXX
4 y=YY
stderr:
mksh6 flag -n combined ${!ref} -- bash INVERTS

stdout:
ref=x
!ref=ref
NOW A NAMEREF
ref=foo
!ref=x
stderr:
ksh6 flag -n combined ${!ref} -- bash INVERTS

[ksh stdout] Expected 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=foo\n!ref=x\n' Got 'ref=x\n!ref=ref\nNOW A NAMEREF\nref=foo\n!ref=x\n'

stdout:
ref=x
!ref=ref
NOW A NAMEREF
ref=foo
!ref=x
stderr:
toysh6 flag -n combined ${!ref} -- bash INVERTS

[toysh stdout] Expected 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=foo\n!ref=x\n' Got 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=x\n!ref=foo\n'

stdout:
ref=x
!ref=foo
NOW A NAMEREF
ref=x
!ref=foo
stderr:
sh: typeset: No such file or directory
sush6 flag -n combined ${!ref} -- bash INVERTS

[sush stdout] Expected 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=foo\n!ref=x\n' Got 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=x\n!ref=foo\n'

stdout:
ref=x
!ref=foo
NOW A NAMEREF
ref=x
!ref=foo
stderr:
brush6 flag -n combined ${!ref} -- bash INVERTS

[brush stdout] Expected 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=foo\n!ref=x\n' Got 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=x\n!ref=foo\n'

stdout:
ref=x
!ref=foo
NOW A NAMEREF
ref=x
!ref=foo
stderr:
osh6 flag -n combined ${!ref} -- bash INVERTS

[osh stdout] Expected 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=foo\n!ref=x\n' Got 'ref=x\n!ref=foo\nNOW A NAMEREF\nref=foo\n!ref=FOO\n'

stdout:
ref=x
!ref=foo
NOW A NAMEREF
ref=foo
!ref=FOO
stderr:
mksh7 named ref with $# doesn't work

stdout:
ref=#
ref=3
stderr:
ksh7 named ref with $# doesn't work

[ksh stdout] Expected 'ref=#\nref=#\n', got 'ref=#\nref=3\n'

stdout:
ref=#
ref=3
stderr:
bash8 named ref with $# and shopt -s strict_nameref

stdout:
ref=#
ref=#
stderr:
bash: line 1: shopt: strict_nameref: invalid shell option name
bash: line 5: typeset: `#': invalid variable name for name reference
mksh8 named ref with $# and shopt -s strict_nameref

stdout:
ref=#
ref=0
stderr:
mksh: <stdin>[1]: shopt: not found
ksh8 named ref with $# and shopt -s strict_nameref

[ksh stdout] Expected 'ref=#\n', got 'ref=#\nref=0\n'
[ksh status] Expected 1, got 0

stdout:
ref=#
ref=0
stderr:
E: ksh: <stdin>[1]: shopt: inaccessible or not found
toysh8 named ref with $# and shopt -s strict_nameref

[toysh stdout] Expected 'ref=#\n', got 'ref=#\nref=#\n'
[toysh status] Expected 1, got 0

stdout:
ref=#
ref=#
stderr:
sh: shopt: No such file or directory
sh: typeset: No such file or directory
sush8 named ref with $# and shopt -s strict_nameref

[sush stdout] Expected 'ref=#\n', got 'ref=#\nref=#\n'
[sush status] Expected 1, got 0

stdout:
ref=#
ref=#
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 1: shopt: strict_nameref: not supported yet
brush8 named ref with $# and shopt -s strict_nameref

[brush stdout] Expected 'ref=#\n', got 'ref=#\nref=#\n'
[brush status] Expected 1, got 0

stdout:
ref=#
ref=#
stderr:
shopt: strict_nameref: invalid shell option name
mksh9 named ref with 1 $1 etc.

stdout:
ref=1
ref=one
ref2=$1
stderr:
mksh: <stdin>[12]: ref2: empty nameref target
ksh9 named ref with 1 $1 etc.

[ksh stdout] Expected 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=foo\n' Got 'ref=1\nref=one\nref2=$1\nref2=$1\nref3=x\nref3=foo\n'

stdout:
ref=1
ref=one
ref2=$1
ref2=$1
ref3=x
ref3=foo
stderr:
E: ksh: <stdin>[12]: typeset: ref2: empty nameref target
toysh9 named ref with 1 $1 etc.

[toysh stdout] Expected 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=foo\n' Got 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=x\n'

stdout:
ref=1
ref=1
ref2=$1
ref2=$1
ref3=x
ref3=x
stderr:
set: bad --
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush9 named ref with 1 $1 etc.

[sush stdout] Expected 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=foo\n' Got 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=x\n'

stdout:
ref=1
ref=1
ref2=$1
ref2=$1
ref3=x
ref3=x
stderr:
brush9 named ref with 1 $1 etc.

[brush stdout] Expected 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=foo\n' Got 'ref=1\nref=1\nref2=$1\nref2=$1\nref3=x\nref3=x\n'

stdout:
ref=1
ref=1
ref2=$1
ref2=$1
ref3=x
ref3=x
stderr:
mksh10 assign to invalid ref

stdout:
ref=1
ref=
stderr:
mksh: <stdin>[7]: read-only: ref
ksh10 assign to invalid ref

[ksh stdout] Expected 'ref=1\nref=1\nref=foo\n', got 'ref=1\nref=\n'
[ksh status] Expected 0, got 2

stdout:
ref=1
ref=
stderr:
E: ksh: <stdin>[7]: read-only: ref
bash11 assign to invalid ref with strict_nameref

stdout:
stderr: 
mksh11 assign to invalid ref with strict_nameref

stdout:
stderr: 
ksh11 assign to invalid ref with strict_nameref

[ksh stdout] Expected 'ref=1\n', got 'ref=1\nref=\n'
[ksh status] Expected 1, got 2

stdout:
ref=1
ref=
stderr:
E: ksh: <stdin>[3]: shopt: inaccessible or not found
E: ksh: <stdin>[11]: read-only: ref
toysh11 assign to invalid ref with strict_nameref

[toysh stdout] Expected 'ref=1\n', got ''
[toysh status] Expected 1, got -6

stdout:
stderr: 
munmap_chunk(): invalid pointer
sush11 assign to invalid ref with strict_nameref

[sush stdout] Expected 'ref=1\n', got 'ref=1\nref=1\nref=foo\n'
[sush status] Expected 1, got 0

stdout:
ref=1
ref=1
ref=foo
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 3: shopt: strict_nameref: not supported yet
brush11 assign to invalid ref with strict_nameref

[brush stdout] Expected 'ref=1\n', got 'ref=1\nref=1\nref=foo\n'
[brush status] Expected 1, got 0

stdout:
ref=1
ref=1
ref=foo
stderr:
shopt: strict_nameref: invalid shell option name
mksh12 name ref on Undef cell

stdout:
stderr: 
mksh: <stdin>[1]: ref: empty nameref target
toysh12 name ref on Undef cell

[toysh stdout] Expected 'ref=\nnounset\n', got 'ref=\nnounset\nref=\n'
[toysh status] Expected 1, got 0

stdout:
ref=
nounset
ref=
stderr:
sh: typeset: No such file or directory
set: bad -o nounset
sush12 name ref on Undef cell

[sush stdout] Expected 'ref=\nnounset\n', got 'ref=\nnounset\nref=\n'
[sush status] Expected 1, got 0

stdout:
ref=
nounset
ref=
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 6: set: nounset: invalid option name
brush12 name ref on Undef cell

[brush stdout] Expected 'ref=\nnounset\n', got 'ref=\nnounset\nref=\n'
[brush status] Expected 1, got 0

stdout:
ref=
nounset
ref=
stderr:
mksh13 assign to empty nameref and invalid nameref

stdout:
stderr: 
mksh: <stdin>[1]: ref: empty nameref target
ksh13 assign to empty nameref and invalid nameref

[ksh stdout] Expected 'ref=\nref=\nref2=\nref2=x\n', got 'ref=\nref=x\nref2=\nref2=x\n'

stdout:
ref=
ref=x
ref2=
ref2=x
stderr:
E: ksh: <stdin>[1]: typeset: ref: empty nameref target
toysh13 assign to empty nameref and invalid nameref

[toysh stdout] Expected 'ref=\nref=\nref2=\nref2=x\n', got 'ref=\nref=x\nref2=\nref2=x\n'

stdout:
ref=
ref=x
ref2=
ref2=x
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush13 assign to empty nameref and invalid nameref

[sush stdout] Expected 'ref=\nref=\nref2=\nref2=x\n', got 'ref=\nref=x\nref2=undef\nref2=x\n'

stdout:
ref=
ref=x
ref2=undef
ref2=x
stderr:
brush13 assign to empty nameref and invalid nameref

[brush stdout] Expected 'ref=\nref=\nref2=\nref2=x\n', got 'ref=\nref=x\nref2=undef\nref2=x\n'

stdout:
ref=
ref=x
ref2=undef
ref2=x
stderr:
mksh14 -n attribute before it has a value

stdout:
stderr: 
mksh: <stdin>[1]: ref: empty nameref target
ksh14 -n attribute before it has a value

[ksh stdout] Expected 'ref=\nref=XX\n', got 'ref=\nref=x\n'

stdout:
ref=
ref=x
stderr:
E: ksh: <stdin>[1]: typeset: ref: empty nameref target
toysh14 -n attribute before it has a value

[toysh stdout] Expected 'ref=\nref=XX\n', got 'ref=\nref=x\n'

stdout:
ref=
ref=x
stderr:
sh: typeset: No such file or directory
sush14 -n attribute before it has a value

[sush stdout] Expected 'ref=\nref=XX\n', got 'ref=\nref=x\n'

stdout:
ref=
ref=x
stderr:
brush14 -n attribute before it has a value

[brush stdout] Expected 'ref=\nref=XX\n', got 'ref=\nref=x\n'

stdout:
ref=
ref=x
stderr:
bash15 -n attribute on array is hard error, not a warning

stdout:
hi
ref=x
stderr:
bash: line 5: warning: ref: removing nameref attribute
mksh15 -n attribute on array is hard error, not a warning

stdout:
stderr: 
mksh: <stdin>[2]: ref: empty nameref target
ksh15 -n attribute on array is hard error, not a warning

[ksh stdout] Expected 'hi\n', got 'hi\nref=x\n'
[ksh status] Expected 1, got 0

stdout:
hi
ref=x
stderr:
E: ksh: <stdin>[2]: typeset: ref: empty nameref target
toysh15 -n attribute on array is hard error, not a warning

[toysh status] Expected 1, got 2

stdout:
hi
stderr:
sh: typeset: No such file or directory
main: line 5: sh: syntax error: x
sush15 -n attribute on array is hard error, not a warning

[sush stdout] Expected 'hi\n', got 'hi\nref=x\n'
[sush status] Expected 1, got 0

stdout:
hi
ref=x
stderr:
brush15 -n attribute on array is hard error, not a warning

[brush stdout] Expected 'hi\n', got 'hi\nref=x\n'
[brush status] Expected 1, got 0

stdout:
hi
ref=x
stderr:
mksh16 exported nameref

stdout:
None
None
---
foo
None
stderr:
ksh16 exported nameref

[ksh stdout] Expected 'None\nx\n---\nfoo\nx\n', got 'None\nNone\n---\nfoo\nNone\n'

stdout:
None
None
---
foo
None
stderr:
toysh16 exported nameref

[toysh stdout] Expected 'None\nx\n---\nfoo\nx\n', got 'None\nNone\n---\nfoo\nNone\n'

stdout:
None
None
---
foo
None
stderr:
sh: typeset: No such file or directory
sush16 exported nameref

[sush stdout] Expected 'None\nx\n---\nfoo\nx\n', got 'None\nNone\n---\nfoo\nNone\n'

stdout:
None
None
---
foo
None
stderr:
toysh17 readonly nameref doesn't prevent assigning through it

[toysh stdout] Expected 'ref=XX\nref=XXXX\nx=X\n', got 'ref=\nref=XXXX\nx=X\n'

stdout:
ref=
ref=XXXX
x=X
stderr:
sh: typeset: No such file or directory
sush17 readonly nameref doesn't prevent assigning through it

[sush stdout] Expected 'ref=XX\nref=XXXX\nx=X\n', got 'ref=x\nref=x\nx=X\n'

stdout:
ref=x
ref=x
x=X
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 6: ref: readonly variable
brush17 readonly nameref doesn't prevent assigning through it

[brush stdout] Expected 'ref=XX\nref=XXXX\nx=X\n', got 'ref=x\nref=x\nx=X\n'

stdout:
ref=x
ref=x
x=X
stderr:
ERROR error: cannot mutate readonly variable
bash18 readonly var can't be assigned through nameref

stdout:
ref=X
ref=XX
ref=XX
x=XX
stderr:
bash: line 11: x: readonly variable
mksh18 readonly var can't be assigned through nameref

stdout:
ref=X
ref=XX
stderr:
mksh: <stdin>[11]: read-only: ref
ksh18 readonly var can't be assigned through nameref

[ksh status] Expected 1, got 2

stdout:
ref=X
ref=XX
stderr:
E: ksh: <stdin>[11]: read-only: ref
toysh18 readonly var can't be assigned through nameref

[toysh stdout] Expected 'ref=X\nref=XX\n', got 'ref=\nref=XX\nref=XXX\nx=X\n'
[toysh status] Expected 1, got 0

stdout:
ref=
ref=XX
ref=XXX
x=X
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush18 readonly var can't be assigned through nameref

[sush stdout] Expected 'ref=X\nref=XX\n', got 'ref=x\nref=x\nref=x\nx=X\n'
[sush status] Expected 1, got 0

stdout:
ref=x
ref=x
ref=x
x=X
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 6: ref: readonly variable
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 11: ref: readonly variable
brush18 readonly var can't be assigned through nameref

[brush stdout] Expected 'ref=X\nref=XX\n', got 'ref=x\nref=x\nref=x\nx=X\n'
[brush status] Expected 1, got 0

stdout:
ref=x
ref=x
ref=x
x=X
stderr:
ERROR error: cannot mutate readonly variable
ERROR error: cannot mutate readonly variable
toysh19 unset nameref

[toysh stdout] Expected 'ref=X\nref=\nx=\n', got 'ref=\nref=\nx=X\n'

stdout:
ref=
ref=
x=X
stderr:
sh: typeset: No such file or directory
sush19 unset nameref

[sush stdout] Expected 'ref=X\nref=\nx=\n', got 'ref=x\nref=\nx=X\n'

stdout:
ref=x
ref=
x=X
stderr:
brush19 unset nameref

[brush stdout] Expected 'ref=X\nref=\nx=\n', got 'ref=x\nref=\nx=X\n'

stdout:
ref=x
ref=
x=X
stderr:
toysh20 Chain of namerefs

[toysh stdout] Expected 'ref_to_ref=foo\nref=foo\n', got 'ref_to_ref=\nref=\n'

stdout:
ref_to_ref=
ref=
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush20 Chain of namerefs

[sush stdout] Expected 'ref_to_ref=foo\nref=foo\n', got 'ref_to_ref=ref\nref=x\n'

stdout:
ref_to_ref=ref
ref=x
stderr:
brush20 Chain of namerefs

[brush stdout] Expected 'ref_to_ref=foo\nref=foo\n', got 'ref_to_ref=ref\nref=x\n'

stdout:
ref_to_ref=ref
ref=x
stderr:
bash21 Mutually recursive namerefs detected on READ

stdout:
defined
ref1=
ref2=
stderr:
bash: line 4: warning: ref1: circular name reference
bash: line 5: warning: ref1: circular name reference
mksh21 Mutually recursive namerefs detected on READ

stdout:
stderr: 
mksh: <stdin>[2]: ref2: expression recurses on parameter
ksh21 Mutually recursive namerefs detected on READ

[ksh stdout] Expected 'defined\n', got 'defined\nref1=\nref2=\n'
[ksh status] Expected 1, got 0

stdout:
defined
ref1=
ref2=
stderr:
E: ksh: <stdin>[2]: typeset: ref2: expression recurses on parameter
toysh21 Mutually recursive namerefs detected on READ

[toysh stdout] Expected 'defined\n', got 'defined\nref1=\nref2=\n'
[toysh status] Expected 1, got 0

stdout:
defined
ref1=
ref2=
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush21 Mutually recursive namerefs detected on READ

[sush stdout] Expected 'defined\n', got 'defined\nref1=ref2\nref2=ref2\n'
[sush status] Expected 1, got 0

stdout:
defined
ref1=ref2
ref2=ref2
stderr:
brush21 Mutually recursive namerefs detected on READ

[brush stdout] Expected 'defined\n', got 'defined\nref1=ref2\nref2=ref2\n'
[brush status] Expected 1, got 0

stdout:
defined
ref1=ref2
ref2=ref2
stderr:
bash22 Mutually recursive namerefs detected on WRITE

stdout:
defined 0
mutated 1
stderr:
bash: line 4: warning: ref1: circular name reference
mksh22 Mutually recursive namerefs detected on WRITE

stdout:
stderr: 
mksh: <stdin>[2]: ref2: expression recurses on parameter
ksh22 Mutually recursive namerefs detected on WRITE

[ksh stdout] Expected 'defined 0\n', got 'defined 1\nmutated 0\n'
[ksh status] Expected 1, got 0

stdout:
defined 1
mutated 0
stderr:
E: ksh: <stdin>[2]: typeset: ref2: expression recurses on parameter
toysh22 Mutually recursive namerefs detected on WRITE

[toysh stdout] Expected 'defined 0\n', got 'defined 127\nmutated 0\n'
[toysh status] Expected 1, got 0

stdout:
defined 127
mutated 0
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush22 Mutually recursive namerefs detected on WRITE

[sush stdout] Expected 'defined 0\n', got 'defined 0\nmutated 0\n'
[sush status] Expected 1, got 0

stdout:
defined 0
mutated 0
stderr:
brush22 Mutually recursive namerefs detected on WRITE

[brush stdout] Expected 'defined 0\n', got 'defined 0\nmutated 0\n'
[brush status] Expected 1, got 0

stdout:
defined 0
mutated 0
stderr:
toysh23 Dynamic scope with namerefs

[toysh stdout] Expected 'F1=F1\nF1=x\n', got 'F1=F1\nF1=F1\n'

stdout:
F1=F1
F1=F1
stderr:
local: bad -n
sush23 Dynamic scope with namerefs

[sush stdout] Expected 'F1=F1\nF1=x\n', got 'F1=F1\nF1=F1\n'

stdout:
F1=F1
F1=F1
stderr:
brush23 Dynamic scope with namerefs

[brush stdout] Expected 'F1=F1\nF1=x\n', got 'F1=F1\nF1=F1\n'

stdout:
F1=F1
F1=F1
stderr:
toysh24 change reference itself

[toysh stdout] Expected 'ref=XX\nx=XX\ny=YY\n----\nref=YY\nx=XX\ny=YY\n----\nref=z\nx=XX\ny=z\n' Got 'ref=\nx=XX\ny=YY\n----\nref=\nx=XX\ny=YY\n----\nref=z\nx=XX\ny=YY\n'

stdout:
ref=
x=XX
y=YY
----
ref=
x=XX
y=YY
----
ref=z
x=XX
y=YY
stderr:
sh: typeset: No such file or directory
sh: typeset: No such file or directory
sush24 change reference itself

[sush stdout] Expected 'ref=XX\nx=XX\ny=YY\n----\nref=YY\nx=XX\ny=YY\n----\nref=z\nx=XX\ny=z\n' Got 'ref=x\nx=XX\ny=YY\n----\nref=y\nx=XX\ny=YY\n----\nref=z\nx=XX\ny=YY\n'

stdout:
ref=x
x=XX
y=YY
----
ref=y
x=XX
y=YY
----
ref=z
x=XX
y=YY
stderr:
brush24 change reference itself

[brush stdout] Expected 'ref=XX\nx=XX\ny=YY\n----\nref=YY\nx=XX\ny=YY\n----\nref=z\nx=XX\ny=z\n' Got 'ref=x\nx=XX\ny=YY\n----\nref=y\nx=XX\ny=YY\n----\nref=z\nx=XX\ny=YY\n'

stdout:
ref=x
x=XX
y=YY
----
ref=y
x=XX
y=YY
----
ref=z
x=XX
y=YY
stderr:
toysh25 a[2] in nameref

[toysh stdout] Expected 'ref=two\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
sh: typeset: No such file or directory
main: line 2: sh: syntax error: zero
sush25 a[2] in nameref

[sush stdout] Expected 'ref=two\n', got 'ref=a[2]\n'

stdout:
ref=a[2]
stderr:
brush25 a[2] in nameref

[brush stdout] Expected 'ref=two\n', got 'ref=a[2]\n'

stdout:
ref=a[2]
stderr:
osh25 a[2] in nameref

[osh stdout] Expected 'ref=two\n', got 'ref=a[2]\n'

stdout:
ref=a[2]
stderr:
toysh26 a[expr] in nameref

[toysh stdout] Expected 'ref=three\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
sh: typeset: No such file or directory
main: line 2: sh: syntax error: zero
sush26 a[expr] in nameref

[sush stdout] Expected 'ref=three\n', got 'ref=a[$(echo 2) + 1]\n'

stdout:
ref=a[$(echo 2) + 1]
stderr:
brush26 a[expr] in nameref

[brush stdout] Expected 'ref=three\n', got 'ref=a[$(echo 2) + 1]\n'

stdout:
ref=a[$(echo 2) + 1]
stderr:
osh26 a[expr] in nameref

[osh stdout] Expected 'ref=three\n', got 'ref=a[$(echo 2) + 1]\n'

stdout:
ref=a[$(echo 2) + 1]
stderr:
mksh27 a[@] in nameref

stdout:
stderr: 
mksh: <stdin>[3]: @: unexpected '@'
ksh27 a[@] in nameref

[ksh stdout] Expected "['ref', 'A B', 'C']\nstatus=1\n['ref[@]']\n['ref', 'A B', 'C']\n['a[@]', 'A B', 'C']\n" Got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
W: ksh: <stdin>[3]: @: unexpected '@'
toysh27 a[@] in nameref

[toysh stdout] Expected "['ref', 'A B', 'C']\nstatus=1\n['ref[@]']\n['ref', 'A B', 'C']\n['a[@]', 'A B', 'C']\n" Got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
sh: typeset: No such file or directory
main: line 2: sh: syntax error: 'A B'
sush27 a[@] in nameref

[sush stdout] Expected "['ref', 'A B', 'C']\nstatus=1\n['ref[@]']\n['ref', 'A B', 'C']\n['a[@]', 'A B', 'C']\n" Got "['ref', 'a[@]']\nstatus=0\n['ref[@]', 'X', 'Y', 'Z']\n['ref', 'X']\n['a[@]', 'A B', 'C']\n"

stdout:
['ref', 'a[@]']
status=0
['ref[@]', 'X', 'Y', 'Z']
['ref', 'X']
['a[@]', 'A B', 'C']
stderr:
brush27 a[@] in nameref

[brush stdout] Expected "['ref', 'A B', 'C']\nstatus=1\n['ref[@]']\n['ref', 'A B', 'C']\n['a[@]', 'A B', 'C']\n" Got "['ref', 'a[@]']\nstatus=0\n['ref[@]', 'X', 'Y', 'Z']\n['ref', 'X']\n['a[@]', 'A B', 'C']\n"

stdout:
['ref', 'a[@]']
status=0
['ref[@]', 'X', 'Y', 'Z']
['ref', 'X']
['a[@]', 'A B', 'C']
stderr:
osh27 a[@] in nameref

[osh stdout] Expected "['ref', 'A B', 'C']\nstatus=1\n['ref[@]']\n['ref', 'A B', 'C']\n['a[@]', 'A B', 'C']\n" Got "['ref', 'a[@]']\nstatus=0\n['ref[@]', 'X', 'Y', 'Z']\n['ref', 'X']\n['a[@]', 'A B', 'C']\n"

stdout:
['ref', 'a[@]']
status=0
['ref[@]', 'X', 'Y', 'Z']
['ref', 'X']
['a[@]', 'A B', 'C']
stderr:
toysh28 mutate through nameref: ref[0]=

[toysh stdout] Expected 'xx Y Z\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: X
sush28 mutate through nameref: ref[0]=

[sush stdout] Expected 'xx Y Z\n', got 'X Y Z\n'

stdout:
X Y Z
stderr:
brush28 mutate through nameref: ref[0]=

[brush stdout] Expected 'xx Y Z\n', got 'X Y Z\n'

stdout:
X Y Z
stderr:
mksh29 bad mutation through nameref: ref[0]= where ref is array[0]

stdout:
status=0
foo Y Z
stderr:
ksh29 bad mutation through nameref: ref[0]= where ref is array[0]

[ksh stdout] Expected 'status=1\nX Y Z\n', got 'status=0\nfoo Y Z\n'

stdout:
status=0
foo Y Z
stderr:
toysh29 bad mutation through nameref: ref[0]= where ref is array[0]

[toysh stdout] Expected 'status=1\nX Y Z\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: X
sush29 bad mutation through nameref: ref[0]= where ref is array[0]

[sush stdout] Expected 'status=1\nX Y Z\n', got 'status=0\nX Y Z\n'

stdout:
status=0
X Y Z
stderr:
brush29 bad mutation through nameref: ref[0]= where ref is array[0]

[brush stdout] Expected 'status=1\nX Y Z\n', got 'status=0\nX Y Z\n'

stdout:
status=0
X Y Z
stderr:
osh29 bad mutation through nameref: ref[0]= where ref is array[0]

[osh stdout] Expected 'status=1\nX Y Z\n', got ''
[osh status] Expected 0, got 1

stdout:
stderr: 
  ref[0]=foo  # error in bash: 'array[0]': not a valid identifier
  ^~~~
[ stdin ]:3: fatal: Can't assign to items in a string
bash30 @ in nameref isn't supported, unlike in ${!ref}

stdout:
status=1
ref=
status=0
stderr:
bash: line 2: typeset: `@': invalid variable name for name reference
ksh30 @ in nameref isn't supported, unlike in ${!ref}

[ksh stdout] Expected u'', got 'status=1\nref=\nstatus=0\n'
[ksh status] Expected 1, got 0

stdout:
status=1
ref=
status=0
stderr:
E: ksh: <stdin>[2]: typeset: ref=@: empty nameref target
toysh30 @ in nameref isn't supported, unlike in ${!ref}

[toysh stdout] Expected u'', got 'status=127\nref=\nstatus=0\n'
[toysh status] Expected 1, got 0

stdout:
status=127
ref=
status=0
stderr:
set: bad --
sh: typeset: No such file or directory
sush30 @ in nameref isn't supported, unlike in ${!ref}

[sush stdout] Expected u'', got 'status=0\nref=@\nstatus=0\n'
[sush status] Expected 1, got 0

stdout:
status=0
ref=@
status=0
stderr:
brush30 @ in nameref isn't supported, unlike in ${!ref}

[brush stdout] Expected u'', got 'status=0\nref=@\nstatus=0\n'
[brush status] Expected 1, got 0

stdout:
status=0
ref=@
status=0
stderr:
osh30 @ in nameref isn't supported, unlike in ${!ref}

[osh stdout] Expected u'', got 'status=0\nref=@\nstatus=0\n'
[osh status] Expected 1, got 0

stdout:
status=0
ref=@
status=0
stderr:
mksh31 Unquoted assoc reference on RHS

stdout:
stderr: 
mksh: <stdin>[1]: typeset: -A: unknown option
mksh: <stdin>[2]: 'foo': multi-character character constant
ksh31 Unquoted assoc reference on RHS

[ksh stdout] Expected "['bar']\n", got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[1]: typeset: -A: unknown option
W: ksh: <stdin>[2]: 'foo': multi-character character constant
toysh31 Unquoted assoc reference on RHS

[toysh stdout] Expected "['bar']\n", got "['bashup_ev_r[foo]']\n"

stdout:
['bashup_ev_r[foo]']
stderr:
sh: typeset: No such file or directory
sh: bashup_ev_r[foo]=bar: No such file or directory
local: bad -n
sush31 Unquoted assoc reference on RHS

[sush stdout] Expected "['bar']\n", got "['bashup_ev_r[foo]']\n"

stdout:
['bashup_ev_r[foo]']
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 2: 'foo': syntax error: operand expected (error token is "'foo'")
brush31 Unquoted assoc reference on RHS

[brush stdout] Expected "['bar']\n", got "['bashup_ev_r[foo]']\n"

stdout:
['bashup_ev_r[foo]']
stderr:
osh31 Unquoted assoc reference on RHS

[osh stdout] Expected "['bar']\n", got "['bashup_ev_r[foo]']\n"

stdout:
['bashup_ev_r[foo]']
stderr: