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

Reply via email to