printf( "Starting the vector partition test...\n" );

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

drop = function( x ) {
    x.eid = NULL;
    return x;
};

ck = function( v ) {

    # `v' is a vector for which the following expressions are true:
    #     v[i] == v[v.ne-i+1]
    #     v.ne > 16

    assert( v[3] == v[v.ne-2] & v[7].class == "scalar" );
    assert( equal( drop(v[5:7]); drop(v[v.ne-(5:7)+1]) ) );
    assert( v[13,1].class == "vector" );
    assert( equal( drop(v[6,2]); drop(v[[6,2]]) ) );
    assert( v[2] == v[vector(2)] );
    assert( v[8] == v[8.1] & v[15] == v[15+sqrt(-1)] );
    assert( equal( drop(v[v.ne:1]); drop(v) ) );

    if ( v.eid != NULL ) {

        assert( v[sprintf("%s";v.eid[7]),sprintf("%s";v.eid[9])] == v[7] );
        assert( v[vector(sprintf("%s";v.eid[3]))].class == "vector" );
        assert( v[vector(sprintf("%s";v.eid[3]))].ne > 0 );
        assert( v[vector(sprintf("%s";v.eid[8]))].eid[1] == v[vector(8)].eid );
        assert( v[vector(sprintf("%s";v.eid[14]))].eid[1] == v[vector(14)].eid );
        assert( equal( drop(v[10:4].eid); drop(v.eid[10:4]) ) );

    }

};

# dense, integer

ck( abs(-9:9) );
v = (1:9),(9:1);
ck( v );
v.eid = v;
ck( v );
v.eid += acos(-1);
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = ( "a", "bb", "ccc", "dddd", "eee", "ff", "g", "", "1",
          "a", "bb", "ccc", "dddd", "eee", "ff", "g", "", "1" );
ck( v );

# sparse, integer

v = zero(45);
v[3,6,7] = v[46-(3,6,7)] = 2:4;
ck( v );
v.eid = v;
ck( v );
v.eid += acos(v/10);
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( 45; "a", "bb", "cc", "d", "" );
ck( v );

# dense, real

ck( abs(-9.5:9.5:.5) );
v = 1.1:9.1;
v = v, v[v.ne:1];
ck( v );
v.eid = v;
ck( v );
v.eid += acos(-1);
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( v.ne; "a", "bb", "ccc", "dddd", "eee", "ff", "g", "", "1" );
ck( v );

# sparse, real

v = zero(45);
v[3,6,7] = v[46-(3,6,7)] = 2.3:4.3;
ck( v );
v.eid = v;
ck( v );
v.eid += acos(v/10);
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( v.ne; "a", "bb", "cc", "d", "" );
ck( v );

# dense, complex

ck( abs(-9.5:9.5:.5)+sqrt(-1) );
v = acos( 1.1:9.1 );
v = v, v[v.ne:1];
ck( v );
v.eid = real( v );
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( v.ne; "a", "bb", "ccc", "dddd", "eee", "ff", "g", "", "1" );
ck( v );

# sparse, real

v = zero(45);
v[3,6,7] = v[46-(3,6,7)] = 2.3:4.3+sqrt(-1);
ck( v );
v.eid = imag( v );
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( v.ne; "a", "bb", "cc", "d", "" );
ck( v );

# dense, character

v = members(1,2),"","1";
v = v, v[v.ne:1];
ck( v );
v.eid = v;
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( v.ne; "a", "bb", "ccc", "dddd", "eee", "ff", "g", "", "1" );
ck( v );

# sparse, character

v = sparse( fill( 45; "" ) );
v[3,6,7] = v[46-(3,6,7)] = "b", "c", "d";
ck( v );
v.eid = v;
ck( v );
v.eid = fill( v.ne; "abc" );
ck( v );
v.eid = v.ne:1;
ck( v );
v.eid = fill( 45; "a", "bb", "cc", "d", "" );
ck( v );

printf( "...passed.\n" );


syntax highlighted by Code2HTML, v. 0.9.1