view test/typeinfo10.d @ 304:3ebc136702dd trunk

[svn r325] Removed dead code. Added license info to code from GDC (David Friedman permitted us to use the files under the Artistic License). Added asmLabel check to DtoGoto to avoid jumping into inline asm. Doesn't work currently as LabelDsymbol::asmLabel is never set to true.
author ChristianK
date Wed, 25 Jun 2008 23:42:38 +0200
parents d7e764e62462
children
line wrap: on
line source

module typeinfo10;

struct S
{
    long l;
    float f;
    void* vp;

    hash_t toHash()
    {
        return l + cast(size_t)f;
    }

    int opEquals(S s)
    {
        return (s.l == l) && (s.f == f);
    }

    int opCmp(S a)
    {
        if (l == a.l) {
            return (f < a.f) ? -1 : (f > a.f) ? 1 : 0;
        }
        return (l < a.l) ? -1 : 1;
    }

    char[] toString()
    {
        return "S instance";
    }
}

void main()
{
    S s=S(-1, 0);
    S t=S(-1, 1);
    S u=S(11,-1);
    S v=S(12,13);

    {
        assert(s == s);
        assert(s != t);
        assert(s != v);
        assert(s < t);
        assert(u > s);
        assert(v > u);
    }

    {
        auto ti = typeid(S);
        assert(ti.getHash(&s) == s.toHash());
        assert(ti.equals(&s,&s));
        assert(!ti.equals(&s,&t));
        assert(!ti.equals(&s,&v));
        assert(ti.compare(&s,&s) == 0);
        assert(ti.compare(&s,&t) < 0);
        assert(ti.compare(&u,&s) > 0);
        assert(ti.compare(&v,&u) > 0);
        {
            auto tis = cast(TypeInfo_Struct)ti;
            assert(tis.xtoString(&s) == s.toString());
        }
    }
}