import director_basic


class PyFoo(director_basic.Foo):

    def ping(self):
        return "PyFoo::ping()"


a = PyFoo()

if a.ping() != "PyFoo::ping()":
    raise RuntimeError(a.ping())

if a.pong() != "Foo::pong();PyFoo::ping()":
    raise RuntimeError(a.pong())

b = director_basic.Foo()

if b.ping() != "Foo::ping()":
    raise RuntimeError(b.ping())

if b.pong() != "Foo::pong();Foo::ping()":
    raise RuntimeError(b.pong())

a = director_basic.A1(1)

if a.rg(2) != 2:
    raise RuntimeError


class PyClass(director_basic.MyClass):

    def method(self, vptr):
        self.cmethod = 7
        pass

    def vmethod(self, b):
        b.x = b.x + 31
        return b


b = director_basic.Bar(3)
d = director_basic.MyClass()
c = PyClass()

cc = director_basic.MyClass.get_self(c)
dd = director_basic.MyClass.get_self(d)

bc = cc.cmethod(b)
bd = dd.cmethod(b)

cc.method(b)
if c.cmethod != 7:
    raise RuntimeError

if bc.x != 34:
    raise RuntimeError


if bd.x != 16:
    raise RuntimeError


class PyMulti(director_basic.Foo, director_basic.MyClass):

    def __init__(self):
        director_basic.Foo.__init__(self)
        director_basic.MyClass.__init__(self)
        pass

    def vmethod(self, b):
        b.x = b.x + 31
        return b

    def ping(self):
        return "PyFoo::ping()"

a = 0
for i in range(0, 100):
    pymult = PyMulti()
    pymult.pong()
    del pymult


pymult = PyMulti()


p1 = director_basic.Foo.get_self(pymult)
p2 = director_basic.MyClass.get_self(pymult)

p1.ping()
p2.vmethod(bc)
