Reappearing error with sorting

div0 div0 at users.sourceforge.net
Sat Dec 26 06:30:52 PST 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

nnk wrote:
> It is quite strange, but the following code sometimes produces a
> "core.exception.AssertError at C:\d\dmd2\src\phobos\std\array.d(253): Attempting
> to fetch the front of an empty array" while trying to sort the array and
> sometimes runs just fine:
> 
> import std.stdio,
>        std.random,
>        std.math,
>        std.algorithm;
> 
> struct Point {
>     double x, y;
>     static Point opCall( double x, double y ) {
>         Point nPoint;
>         nPoint.x = x;
>         nPoint.y = y;
>         return nPoint;
>     }
>     double angle() {
>         return (atan2( y, x ) / PI * 180);
>     }
> }
> 
> void printAngles( Point[] contour ) {
>     foreach( Point p; contour )
>         writef( "%0.1f ", p.angle() );
>     writeln();
> }
> 
> int main()
> {
>     Point[] path;
>     path.length = 5;
>     foreach( inout p; path )
>         p = Point( uniform( 0, 100 ), uniform( 0, 100 ) );
> 
>     printAngles( path );
>     sort!("a.angle() < b.angle()")(path);
>     printAngles( path );
> 
>     return 0;
> }
> 
> Using "a.x < b.x" as a sorting criterium produces normal behavior, so I guess
> the problem is caused by using a function there. I'm new to D, and so I have
> no idea, where exactly the source of this problem lies. Can somebody point me
> in the right direction, please?
> 
> I'm using the version 2.037 of the compiler with phobos.

It's a compiler bug.

change Point.angle to

    double angle() {
	double rv = atan2( y, x ) / PI * 180;
        return rv;
    }

and the problem goes away.

However use a real or the direct return and it happens.

    double angle() {
	real rv = atan2( y, x ) / PI * 180;
        return rv;
    }
Some how it must be returning NaN, which will then bugger the sort.

- --
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iD8DBQFLNh4cT9LetA9XoXwRAniHAKCu/h1oeyHgvI9Fhnpw714zoQeq+ACePCM+
WSYB5f3UNzhjQEyJ0/eeUTg=
=Qmst
-----END PGP SIGNATURE-----


More information about the Digitalmars-d-learn mailing list