import core.stdc.stdio;

/*******************************************/

interface IStream
{
    int read();
}

interface OStream
{
    int write();
}

class IO : IStream, OStream
{
    int read() { return 7; }
    int write() { return 267; }
}

void foo(IStream i, OStream o)
{
    printf("foo(i = %p, o = %p)\n", i, o);
    assert(i.read() == 7);
    assert(o.write() == 267);
}

void test1()
{
    IO io = new IO();
    printf("io = %p\n", io);
    foo(io, io);
    destroy(io);
}

/*******************************************/

interface I { }
class C : I
{
    ~this() { printf("~C()\n"); }
}

void test2()
{
    I i = new C();
    destroy(i);

  {
    scope I j = new C();
  }
}

/*******************************************/

interface I3 {
    void h();
}
interface K3 {
    void f();
}

interface J3 : I3, K3 {}

class A3 : J3 {
    short x = 3;

    void f(){ assert(x == 3); }
    void h(){ assert(x == 3); }
}

void test3()
{
    auto a = new A3();
    a.f();
    a.h();
    J3 j = a;
    j.f();
    K3 k = a;
    k.f();
    assert(&j.f == &k.f); // https://issues.dlang.org/show_bug.cgi?id=3706
}

/*******************************************/

int main()
{
    test1();
    test2();
    test3();

    printf("Success\n");
    return 0;
}
