# Tests the mod (%) operator. printf( "Starting the modulus test...\n" ); assert = function( ex ) { if ( !ex ) { printf( "...failed.\a\n" ); exception(); } }; assert( 23 % 4 == 3 ); assert( -5 % 2 == -1 ); assert( abs( 13.2089 % 0.2283 - 0.1958 ) < 0.0001 ); assert( equal( 7 % ( 5:9 ); ( 2, 1, 0, 7, 7 ) ) ); v = 0.4237, 0.46119, -0.519, 0.322; assert( norm( 6 % v - ( 0.0682, 0.00453, 0.291, 0.204 ) ) < 0.0001 ); assert( norm( 6 % sparse(v) - ( 6-(14,13,-11,18)@v ) ) < 1e-10 ); assert( equal( v % 5; v ) ); assert( norm( v % 0.0123 - ( v-(34,37,-42,26)*0.0123 ) ) < 1e-10 ); v = 0, v[1:3], 0, 0, v[2:4], 0; assert( equal( v % 2; v ) ); assert( equal( sparse( v ) % 2; v ) ); assert( equal( 17*sparse( v ) % 2; 17*v-(0,3,3,-4,0,0,3,-4,2,0)*2 ) ); u = 16, 13, 1, -7, 123, 5; w = -2, 6, 88, 0, 12, 1; assert( equal( w%u; -2, 6, 0, 0, 12, 1 ) ); assert( equal( sparse(w)%u; -2, 6, 0, 0, 12, 1 ) ); assert( norm( (w+0.123)%u - ( -1.877, 6.123, 0.123, 0.123, 12.123, 1.123 ) ) < 0.000001 ); A = magic( 5 ) + 1; assert( !test( (A+1)%A-1 ) ); assert( norm( A%3; "frob" ) - 6.63325 < 0.000001 ); assert( norm( 7%A; "inf" ) == 31 ); assert( norm( A@(A<18)%(A-12.5); "frob" ) - 11.1915 < 0.0001 ); assert( norm( A@(A<18)%(A-12.5) - sparse(A@(A<18))%(A-12.5); "frob" ) < 1e-10 ); A = symmetric( A ); A = A @ ( A != 18 ) @ ( A != 14 ); A = sparse( A ); assert( equal( A%10; dense(A)%10 ) ); printf( "...passed.\n" );