www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 16338] New: sort variantArray bug

https://issues.dlang.org/show_bug.cgi?id=16338

          Issue ID: 16338
           Summary: sort variantArray bug
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: kapblc mail.ru

import std.stdio;
import std.variant;
import std.algorithm;

void main(){

    struct Trava {
        long a, b, c;
    }

    Trava n1, n2, n3, n4, n5, n6;
    n1.a = 1;
    n2.a = 2;
    n3.a = 3;
    n4.a = -1;
    n5.a = 5;
    n6.a = 6;


    auto M = [n1, n2, n3, n4, n5, n6];
    writeln("input:", M);
    M.sort!((a, b) => a.a < b.a);
    writeln("output:", M); // [n4, n1, n2, n3, n5, n6] ok


    auto m = variantArray(n1, n2, n3, n4, n5, n6);
    writeln("input:", m);
    m.sort!((a, b){
        auto A = a.peek!Trava;
        auto B = b.peek!Trava;
        return A.a < B.a;
    });
    writeln("output:", m); // [n4, n4, n4, n4, n5, n6] bug

    struct Trava2 {
        long a, b;
    }

    Trava2 v1, v2, v3, v4, v5, v6;
    v1.a = 1;
    v2.a = 2;
    v3.a = 3;
    v4.a = -1;
    v5.a = 5;
    v6.a = 6;

    auto w = variantArray(v1, v2, v3, v4, v5, v6);
    writeln("input:", w);
    w.sort!((a, b){
        auto A = a.peek!Trava2;
        auto B = b.peek!Trava2;
        return A.a < B.a;
    });
    writeln("output:", w); // [v4, v1, v2, v3, v5, v6] ok
}

--
Jul 30 2016