Hi!
----
I stumbled over an issue with indexed compound arrays when the same
array is accessed within one comparison using two different variable
("i" and "j" below) indexes.
The testcase looks like this:
-- snip --
integer i j
if false ; then
compound c=(
compound -a cax=(
( pid=0 )
( pid=1 )
( pid=2 )
( pid=2 )
( pid=4 )
)
)
nameref ca=c.cax
else
compound -a ca=(
( pid=0 )
( pid=1 )
( pid=2 )
( pid=2 )
( pid=4 )
)
fi
bool dup1 dup2
typeset res=""
set -o nounset
for ((i=0 ; i < ${#ca[@]} ; i++ )) ; do
for ((j=0 ; j < ${#ca[@]} ; j++ )) ; do
dup1=false
dup2=false
if (( (ca[i].pid == ca[j].pid) && (i != j) )) ; then
dup1=true
fi
if [[ ("${ca[i].pid}" == "${ca[j].pid}") &&
("$i" != "$j") ]] ; then
dup2=true
fi
(( dup1 == dup2 )) || printf 'ASSERT: fail for %d/%d\n' i j
if (( dup1 || dup2 )) ; then
res+="{ $i, $j }"
fi
done
done
printf "#duplicates=%q\n" "${res}"
exit 0
-- snip --
AFAIK the testcase should print...
-- snip --
#duplicates='{ 2, 3 }{ 3, 2 }'
-- snip --
... but ast-ksh.2013-04-09 prints this:
-- snip --
ASSERT: fail for 0/1
ASSERT: fail for 0/2
ASSERT: fail for 0/3
ASSERT: fail for 0/4
ASSERT: fail for 1/0
ASSERT: fail for 1/2
ASSERT: fail for 1/3
ASSERT: fail for 1/4
ASSERT: fail for 2/0
ASSERT: fail for 2/1
ASSERT: fail for 2/4
ASSERT: fail for 3/0
ASSERT: fail for 3/1
ASSERT: fail for 3/4
ASSERT: fail for 4/0
ASSERT: fail for 4/1
ASSERT: fail for 4/2
ASSERT: fail for 4/3
#duplicates='{ 0, 1 }{ 0, 2 }{ 0, 3 }{ 0, 4 }{ 1, 0 }{ 1, 2 }{ 1, 3 }{
1, 4 }{ 2, 0 }{ 2, 1 }{ 2, 3 }{ 2, 4 }{ 3, 0 }{ 3, 1 }{ 3, 2 }{ 3, 4
}{ 4, 0 }{ 4, 1 }{ 4, 2 }{ 4, 3 }'
-- snip --
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [email protected]
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 3992797
(;O/ \/ \O;)
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers