void run()
        {
            director_basic_MyFoo a = new director_basic_MyFoo();

            if (a.ping() != "director_basic_MyFoo::ping()")
            {
                throw new Exception("a.ping()");
            }

            if (a.pong() != "Foo::pong();director_basic_MyFoo::ping()")
            {
                throw new Exception("a.pong()");
            }

            Foo b = new Foo();

            if (b.ping() != "Foo::ping()")
            {
                throw new Exception("b.ping()");
            }

            if (b.pong() != "Foo::pong();Foo::ping()")
            {
                throw new Exception("b.pong()");
            }

            A1 a1 = new A1(1, false);

            a1.Dispose();

            {
                MyOverriddenClass my = new MyOverriddenClass();

                my.expectNull = true;
                if (MyClass.call_pmethod(my, null) != null)
                {
                    throw new Exception("null pointer marshalling problem");
                }

                Bar myBar = new Bar();
                my.expectNull = false;
                Bar myNewBar = MyClass.call_pmethod(my, myBar);
                if (myNewBar == null)
                {
                    throw new Exception("non-null pointer marshalling problem");
                }
                myNewBar.x = 10;
            }
        }
  void run()
  {
    director_basic_MyFoo a = new director_basic_MyFoo();

    if (a.ping() != "director_basic_MyFoo::ping()") {
      throw new Exception ( "a.ping()" );
    }

    if (a.pong() != "Foo::pong();director_basic_MyFoo::ping()") {
      throw new Exception ( "a.pong()" );
    }

    Foo b = new Foo();

    if (b.ping() != "Foo::ping()") {
      throw new Exception ( "b.ping()" );
    }

    if (b.pong() != "Foo::pong();Foo::ping()") {
      throw new Exception ( "b.pong()" );
    }

    A1 a1 = new A1(1, false);
    a1.Dispose();

    {
      MyOverriddenClass my = new MyOverriddenClass();

      my.expectNull = true;
      if (MyClass.call_pmethod(my, null) != null)
        throw new Exception("null pointer marshalling problem");

      Bar myBar = new Bar();
      my.expectNull = false;
      Bar myNewBar = MyClass.call_pmethod(my, myBar);
      if (myNewBar == null)
        throw new Exception("non-null pointer marshalling problem");
      myNewBar.x = 10;
    }
  }
        void run()
        {
            director_basic_MyFoo a = new director_basic_MyFoo();

            if (a.ping() != "director_basic_MyFoo::ping()")
            {
                throw new Exception("a.ping()");
            }

            if (a.pong() != "Foo::pong();director_basic_MyFoo::ping()")
            {
                throw new Exception("a.pong()");
            }

            Foo b = new Foo();

            if (b.ping() != "Foo::ping()")
            {
                throw new Exception("b.ping()");
            }

            if (b.pong() != "Foo::pong();Foo::ping()")
            {
                throw new Exception("b.pong()");
            }

            A1 a1 = new A1(1, false);

            a1.Dispose();

            {
                MyOverriddenClass my = new MyOverriddenClass();

                my.expectNull = true;
                if (MyClass.call_pmethod(my, null) != null)
                {
                    throw new Exception("null pointer marshalling problem");
                }

                Bar myBar = new Bar();
                my.expectNull = false;
                Bar myNewBar = MyClass.call_pmethod(my, myBar);
                if (myNewBar == null)
                {
                    throw new Exception("non-null pointer marshalling problem");
                }
                myNewBar.x = 10;

                // Low level implementation check
//      my.testSwigDerivedClassHasMethod();

                // These should not call the C# implementations as they are not overridden
                int v;
                v = MyClass.call_nonVirtual(my);
                if (v != 100)
                {
                    throw new Exception("call_nonVirtual broken() " + v);
                }

                v = MyClass.call_nonOverride(my);
                if (v != 101)
                {
                    throw new Exception("call_nonOverride broken() " + v);
                }

                // A mix of overridden and non-overridden
                MyClassEnd myend = new MyClassEnd();
                MyClass    mc    = myend;

                v = mc.nonVirtual();
                if (v != 202)
                {
                    throw new Exception("mc.nonVirtual() broken " + v);
                }

                v = MyClass.call_nonVirtual(mc);
                if (v != 202)
                {
                    throw new Exception("call_nonVirtual(mc) broken " + v);
                }

                v = MyClass.call_nonVirtual(myend);
                if (v != 202)
                {
                    throw new Exception("call_nonVirtual(myend) broken" + v);
                }

                v = MyClass.call_nonOverride(mc);
                if (v != 101)
                {
                    throw new Exception("call_nonOverride(mc) broken" + v);
                }

                v = MyClass.call_nonOverride(myend);
                if (v != 101)
                {
                    throw new Exception("call_nonOverride(myend) broken" + v);
                }
            }
        }