printf( "Starting the assignment test...\n" );

assert = function( t ) {
    if ( !test(t) ) {
        printf( "...failed.\a\n" );
        exception();
    }
};

ck = function( a; b )
{
  ck1( a; 1:a.nr; 1:a.nc; b );
  ck1( a; a.nr:1; 1:a.nc; b );
  ck1( a; 1:a.nr; a.nc:1; b );
};

ck1 = function( a; r; c; b )
{
  local( d );
  a[r;c] = b;
  d = a[r;c]-b;
  if ( d )
  {
    for ( i in seq(d.nr) )
    {
      if ( norm( d[i;] ) )
      {
        q = find( r[i]; r );
        assert( q.ne > 1 & i != q[q.ne] );
      }
    }
    for ( j in seq(d.nc) )
    {
      if ( norm( d[;j] ) )
      {
        q = find( c[j]; c );
        assert( q.ne > 1 & i != q[q.ne] );
      }
    }
  }
};

ck( rand(5,3); rand(5,3) );
ck( magic(10); diag(1:10) );
ck( sparse(bdiag(diag(1:12);4;4));bdiag(diag(101:112);4;4) );

v=1:5; v[3,2,3]=9;
assert( equal( v; 1,9,9,4,5 ) );

v=zero(9); v[2]=1; v[8,4]=2,3;
assert( equal( v; 0,1,0,3,0,0,0,2,0 ) );

m = { i = { y = 1, 2 } };
m.i.y.eid = 1, 2;

d = function( v ) {
    v.eid[1] = v.eid[1] + 1;
    return v.eid;
};

t = function() {
    local( i );
    i = m.i;
    d( i.y );
};

t();

a = { v = 1,2 };
q = a;
q.v[1] = 99;

b = { m = [ 1, 2 ] };
q = b;
q.m[1;1] = 99;

if ( m.i.y.eid[1] != 1 |
     a.v[1] != 1 |
     b.m[1;1] != 1 ) {
    printf( "...failed!\a\n" );
    exception();
else
    printf( "...passed.\n" );
}



syntax highlighted by Code2HTML, v. 0.9.1