[Issue 1861] (D1 only) .sort fails if opCmp takes a ref param
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 5 01:01:48 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=1861
Yao Gomez <yao.gomez at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |yao.gomez at gmail.com
Version|1.027 |D1
Summary|.sort fails if opCmp takes |(D1 only) .sort fails if
|a ref param |opCmp takes a ref param
--- Comment #4 from Yao Gomez <yao.gomez at gmail.com> 2012-02-05 01:01:46 PST ---
Marking this as D1 only, as the built-in, AA.sort method is going to be
deprecated.
With a slight modification, your test example passes and prints the correct
result with the std.algorithm.sort function (D2 only).
------
module opcmpref;
import std.stdio, std.algorithm;
struct Pair
{
int a, b;
// Sort by b first then a
// Sorting fails if rhs is a 'ref' param. Ok if ref removed.
int opCmp(ref Pair rhs) {
if (b!=rhs.b) return b-rhs.b;
return a-rhs.a;
}
@property string toString()
{
return std.string.format("(%s,%s)",a,b);
}
}
void main()
{
// Single comparisons are all fine
assert( !(Pair(0,0)<Pair(0,0)) );
assert( !(Pair(1,0)<Pair(0,0)) );
assert( !(Pair(0,1)<Pair(0,0)) );
assert( !(Pair(1,1)<Pair(0,0)) );
assert( (Pair(0,0)<Pair(1,0)) );
assert( !(Pair(1,0)<Pair(1,0)) );
assert( !(Pair(0,1)<Pair(1,0)) );
assert( !(Pair(1,1)<Pair(1,0)) );
assert( (Pair(0,0)<Pair(0,1)) );
assert( (Pair(1,0)<Pair(0,1)) );
assert( !(Pair(0,1)<Pair(0,1)) );
assert( !(Pair(1,1)<Pair(0,1)) );
assert( (Pair(0,0)<Pair(1,1)) );
assert( (Pair(1,0)<Pair(1,1)) );
assert( (Pair(0,1)<Pair(1,1)) );
assert( !(Pair(1,1)<Pair(1,1)) );
auto p = [Pair(0,0), Pair(3,0), Pair(2,1), Pair(1,4)];
std.algorithm.sort(p);
// prints 'p=[(0,0), (3,0), (2,1), (1,4)]'
writefln("p=%s",p);
assert(p[0] == Pair(0,0));
assert(p[1] == Pair(3,0));
assert(p[2] == Pair(2,1));
assert(p[3] == Pair(1,4));
}
------
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list