Esempio n. 1
0
                                           static private Random random = new Random(); override public object runOneIteration()
                                           {
                                               int        number = random.Next(5);
                                               Cronometro cronometro = new Cronometro(); object value; var obj; if (number == 0)

                                               {
                                                   obj = new Derived0();
                                               }
                                               else if (number == 1)
                                               {
                                                   obj = new Derived1();
                                               }
                                               else if (number == 2)
                                               {
                                                   obj = new Derived2();
                                               }
                                               else if (number == 3)
                                               {
                                                   obj = new Derived3();
                                               }
                                               else
                                               {
                                                   obj = new Derived4();
                                               }

                                               cronometro.start(); for (int i = 0; i < 1000; i++)
                                               {
                                                   value = obj.m();
                                               }
                                               cronometro.stop(); this.microSeconds = this.microSeconds + cronometro.getMicroSeconds(); return(value);
                                           }
Esempio n. 2
0
    public static void Main()
    {
        Derived3  dOb = new Derived3();
        BaseClass baseRef; // a base-class reference

        baseRef = dOb;
        baseRef.who(); // calls Derived1's who()
    }
    static void Main()
    {
        Derived3 dOb = new Derived3();
        Base     baseRef; // a base class reference

        baseRef = dOb;
        baseRef.Who(); // calls Derived1's Who()
    }
Esempio n. 4
0
        static void Main()
        {
            Derived3 dOb = new Derived3();
            Base     baseRef; // ссылка на базовый класс

            baseRef = dOb;
            baseRef.Who(); // вызов метода Who() из класса Derived1
        }
Esempio n. 5
0
    public static void Main()
    {
        Derived3 dOb = new Derived3();
        Base     baseRef; // Ссылка на базовый класс.

        baseRef = dOb;
        baseRef.who(); // Вызывает метод who()
                       //из класса Derived1.
    }
Esempio n. 6
0
        static void Main()
        {
            Derived3 dOb = new Derived3();
            Base baseRef; // ссылка на базовый класс
            baseRef = dOb;
            baseRef.Who(); // вызов метода Who() из класса Derived1

            Console.ReadKey();
        }
        public static void Start()
        {
            var derived = new Derived3();

            derived.AbstractMethod();
            derived.MethodWithImplementation();

            //The code bellow Won't compile. Abstracts classes can't be instantiated
            //var baseClass = new Base3()
        }
Esempio n. 8
0
	static int Main () {
		Derived1 d1 = new Derived1 ();
		Derived2 d2 = new Derived2 ();
		Derived3 d3 = new Derived3 ();
		Base b1 = d1;
		Base b2 = d2;
		Base rb = new Base ();

		if (d1.Turn () != 4)
			return 1;
		
		if (((IVehicle)d1).Turn () != 4)
			return 2;

		if (((Base)d2).Turn () != 8)
			return 10;

		if (((IVehicle)d2).Turn () != 7)
			return 3;

		if (b2.Turn () != 8)
			return 4;
		
		if (((IVehicle)b2).Turn () != 7)
			return 5;
		
		if (((IVehicle)rb).Stop () != 2)
			return 6;

		if (((IVehicle)d1).Stop () != 2)
			return 7;

		if (((IVehicle)d2).Stop () != 6)
			return 8;

		if (d3.Walk () != 1)
			return 9;

		//Console.WriteLine ("TEST {0}", ((IVehicle)b2).Turn ());
		return 0;
	}
 public void DiscriminatedUnionThreeUsingThirdSwitchFuncWorking()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     bool ranThird = d.Switch(v => false, v => false, v => true);
     Assert.IsTrue(ranThird);
 }
Esempio n. 10
0
 public void DiscriminatedUnionThreeUsingThirdSwitchActionWorking()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     bool ranThird = false;
     d.Switch(v => { ranThird = false; }, v => { ranThird = false; }, v => { ranThird = true; });
     Assert.IsTrue(ranThird);
 }
Esempio n. 11
0
 public void DiscriminatedUnionThreeUsingThirdValueWorking()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     Assert.AreSame(d3, d.Value);
 }
Esempio n. 12
0
 public void DiscriminatedUnionThreeUsingThirdSecondWorking()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     Derived2 d2;
     try
     {
         d2 = d.Second;
     }
     catch
     {
         d2 = null;
     }
     Assert.IsNull(d2);
 }
Esempio n. 13
0
 public void DiscriminatedUnionThreeUsingThirdFirstWorking()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     Derived1 d1;
     try
     {
         d1 = d.First;
     }
     catch
     {
         d1 = null;
     }
     Assert.IsNull(d1);
 }
Esempio n. 14
0
        public static void Start()
        {
            var derived3 = new Derived3();

            derived3.MyMethod();
        }
Esempio n. 15
0
        static int Main(string[] args)
        {
            //управление доступом осуществляется  public, private, protected, internal
            //public  разрешает доступ разрешает доступ к члену откуда угодно
            //private разрешает доступ к члену только для методов внури этого класса
            //первый пример set, ger к приватной переменной

            /* MyClass firsttime = new MyClass();
             * //не видит переменнойальфа
             * firsttime.SetAlpha(6);
             * Console.WriteLine(firsttime.GetAlpha());
             * Console.ReadKey();*/

            //Создание стека
            Stack stk1 = new Stack(10);
            Stack stk2 = new Stack(10);
            Stack stk3 = new Stack(10);
            char  ch; int i;

            for (i = 0; !stk1.full(); i++)
            {
                stk1.push((char)('A' + i));
            }
            if (stk1.full())
            {
                Console.WriteLine("Стек stk1 полон.");
            }
            Console.Write("Содержимое стека stk1");
            while (!stk1.empty())
            {
                ch = stk1.pop();
                Console.Write(ch);
            }
            Console.WriteLine();
            if (stk1.empty())
            {
                Console.WriteLine("Стек stk1 пуст.\n");
            }


            //использование переменного количества аргументов

            Min ob = new Min();
            int min;
            int a = 10, b = 20;

            min = ob.minVal(a, b);
            Console.WriteLine("Минимум равен " + min);

            min = ob.minVal(a, b, -1);
            Console.WriteLine("Минимум равен " + min);

            //можно так е передать int массив
            int[] mass = { 1, 2, 3, 4, 5 };
            min = ob.minVal(mass);
            Console.WriteLine("Минимум равен " + min);

            //возвращение методами объектов
            Rect r1 = new Rect(4, 5);

            Console.Write("Размеры прямоугольника r1: ");
            r1.show();
            //прямоугольник, который в 2ое больше прямоугольника r1
            Rect r2 = r1.enlarge(2); //заместо new Rect(width * factor, height * factor)

            Console.Write("Размеры прямоугольника r2:");
            r2.show();
            Console.WriteLine("Площадь прямоугольника r2:" + r2.area());

            /*В фабриках класса применяются классовые типы значений*/
            /*Фабрик класса  - метод который используется для построения заданного класса */

            MyClass ob2 = new MyClass();
            int     ii, jj;

            //генерируем объекты с помощью фабрики класса
            for (ii = 0, jj = 10; ii < 10; ii++, jj++)
            {
                MyClass anotherOb = ob2.factory(ii, jj); //создаём объект
                anotherOb.show();
            }
            Console.WriteLine();

            //12.03.2019
            //Вызов перегруженного конструктора с помощью ссылки this

            /*имя_конструктора (список_параметров1): this(список параметров2)
             * //тело конструтора, которое может ыть пустым*/
            XYCoord t1 = new XYCoord();
            XYCoord t2 = new XYCoord(8, 9);
            XYCoord t3 = new XYCoord(t2);

            Console.WriteLine("t1.x, t1.y: " + t1.x + ", " + t1.y);
            Console.WriteLine("t2.x, t2.y: " + t2.x + ", " + t2.y);
            Console.WriteLine("t3.x, t3.y: " + t3.x + ", " + t3.y);

            //Возвращение значений из main
            //Main(): public static int Main();

            /*Для работы с аргументами командной строки
             * Main(): public static void Main(string[] args)  public static int Main(string[] args) */

            //пирмер
            //string[] args2 = new string[2];
            //string[] args2 = { "закодировать", "зако", "зако"};

            /*args2[0] = "закодировать";
             * args2[1] = "зако";
             * args2[2] = "зако";*/


            //перегрузка логических операторов
            ThreeD tre0 = new ThreeD();
            ThreeD tre1 = new ThreeD(1, 1, 1);
            ThreeD tre2 = new ThreeD(2, 2, 2);

            Console.WriteLine(tre0 | tre1);
            Console.WriteLine(tre0 | tre0);
            Console.WriteLine(tre0 & tre1);
            Console.WriteLine(!tre0);

            //Чтобы сделать учечённные нужно

            /*
             * 1. Класс доджен перегружать операторы & и |.
             * 2.  &- и |-методы должны возвращать объект класса
             * 3. каждый параметр должен представлять собой ссылку на объект класса
             * 4. класс должен перегружать операторы true и false
             */
            Console.WriteLine(tre0 && tre1);
            Console.WriteLine(tre0 || tre1);
            if (tre0 && tre1)
            {
                Console.WriteLine("True");
            }
            else
            {
                Console.WriteLine("Ложь");
            }
            if (tre0 || tre1)
            {
                Console.WriteLine("True");
            }
            else
            {
                Console.WriteLine("Ложь");
            }

            //Операторы преобразований

            /*
             * две формы операторов преобразования явная и неявная
             * public static explicit operator тип_результата(исходный_тип v) [return значение;]
             * public static implict operator тип_результата (исходный_тип v) [return значение;]
             * тип_результата тип в который нужно выполнить преобразование
             * исходный тип - объекто подлежащий преобразованию
             * элемент v значение класса после преобразования
             * если impluict - автомтоматически
             * если explict - выполняется при использовании операторов приведения типов
             */
            //неявное
            //int i3i = new ThreeD(10, 10, 10);

            //явное
            int i3i = (int)(new ThreeD(10, 10, 10));

            Console.WriteLine(i3i);

            int per1, per2;

            per1 = 9;
            per2 = 9;
            FailSoftArray2D ma2 = new FailSoftArray2D(per1, per2);

            for (int z = 7, x = 7; z < 10; z++, x++)
            {
                ma2[z, x] = z * x;
                if (ma2.svError)
                {
                    Console.WriteLine("fs[" + z + ", " + x + "] вне границ");
                }
            }
            for (int z = 7, x = 7; z < 10; z++, x++)
            {
                Console.WriteLine(ma2[z, x]);
                if (ma2.svError)
                {
                    Console.WriteLine("fs[" + z + ", " + x + "] вне границ");
                }
            }
            //свойства - поле и методы доступа к полю
            //свойства похожи на инексаторы имя и get set

            /*
             * тип имя
             * {
             *  get
             *  {
             *      //код аксессора чтения поля
             *  }
             *  set
             *  {
             *      //код аксессора записи поля тут есть value
             *  }
             * }
             * тип - это тип свойства  int, double  и т.д
             * имя - его имя
             * замето них можно использовать методы
             */

            SimpProp obj = new SimpProp();

            Console.WriteLine("Исходное значение ob.myprop: " + obj.mypop);
            obj.mypop = 10;
            Console.WriteLine("Присвоенно значение ob.myprop: " + obj.mypop);
            obj.mypop = -1;
            Console.WriteLine("-1 ob.myprop: " + obj.mypop);


            //наследование

            /*
             * class имя_производного_класса : имя_базового_класса {  // тело класса  }
             */
            Triangle tr = new Triangle();

            tr.Height = 10;
            tr.Width  = 10;
            tr.Style  = "ravnostoron";

            tr.showStype();

            tr.showDim();
            Console.WriteLine(tr.area());

            Rectangle kw = new Rectangle(1, 2);

            /*kw.Height = 1;
             * kw.Width = 2;*/
            Console.WriteLine("Площадь квадрата " + kw.area());


            Console.WriteLine("Виртуальные методы и их определение");
            Base     baseob = new Base();
            Derived1 dOb1   = new Derived1();
            Derived2 dOb2   = new Derived2();
            Derived3 dOb3   = new Derived3();
            Base     baseref; //ссылка на базовый подкласс

            baseref = baseob;
            baseref.who(); //взависимости от типа объекта выполняется своя версия
            baseref = dOb1;
            baseref.who();
            baseref = dOb2;
            baseref.who();
            baseref = dOb3;
            baseref.who(); //первый переопределеннный метод при просмотре иерархии сверху вниз
            //свойства можно можфицировать с помощью виртуал и оверрайд



            //Класс обжект
            Console.WriteLine(baseref.Equals(dOb1));        //определяет является ли вызвывающий объект таким же, как  объект, адрисуемый ссылкой ob
            Console.WriteLine(Equals(baseref, dOb1));       //Определяет является ли объект 1 таким же как и объект 2
            Console.WriteLine(baseref.GetHashCode());       //Возвращает хэш-код
            Console.WriteLine(baseref.GetType());           //получает тип оъекта во время выполнения программы
            Console.WriteLine(ReferenceEquals(dOb1, dOb2)); //определяет, ссылются ли 1 и 2 на один и тот же объект
            Console.WriteLine(dOb1.ToString());             //возращает строку, которая описывает объект

            Console.WriteLine(new MyClass().ToString());    //Возвращение пререопределенного метода из класса object


            //Приведение к объектному типу и восстановление значения
            int    xt;
            object obje;

            xt   = 10;
            obje = xt;          // Превращаем xt в объект
            Console.WriteLine(obje.ToString());
            int yt = (int)obje; //обратное превращение

            Console.WriteLine(yt);

            //Другой пример
            //приведение  значений к объектному типу возможно при передаче значений методами
            int xt2;

            xt2 = 10;
            Console.WriteLine("Значение x =" + xt2);
            //переменная xt2 автоматически приводится к объектому типу при передаче в sqr
            xt2 = Program.sqr(xt2);
            Console.WriteLine("Значение ч в квадрате рано" + xt2);

            //ещё пример
            Console.WriteLine(10.ToString()); //10 представляется как объект и выводится его строковое представдение 10


            object[] p1 = new object[9];
            //сохраняем int значения
            for (int i3 = 0; i3 < 3; i3++)
            {
                p1[i3] = i3;
            }
            //сохраняем double значениия
            for (int j3 = 3; j3 < 6; j3++)
            {
                p1[j3] = (double)j3;
            }
            //сохраняем bool, string и char значения
            p1[6] = true;
            p1[7] = 'x';
            p1[8] = "asf";


            for (int bb = 0; bb < p1.Length; bb++)
            {
                Console.WriteLine(p1[bb]);
            }

            //Интерфейсы

            /*interface имя
             * {
             * тип_возрата имя метода 1(сиксок параметров);
             * тип_возрата имя метода 2(сиксок параметров);
             * }*/
            /*интерфейс который генерирует ряд чисел
             * public interface ISeries
             * {
             * int getNext(); //Возвращает следующее число ряда
             * void reset(); //Выполняет перезапуск
             * void setStat(int x); //устанавливает начальные значения
             * }
             */
            /*класс который реализует интерефейс
             * class имя_класса : имя_интерфейса
             * {
             * //тело класса
             * }
             */
            ByTwos o1b1 = new ByTwos();

            for (int i3 = 0; i3 < 5; i3++)
            {
                Console.WriteLine("Следующее значение равно " + o1b1.getNext());
            }
            Console.WriteLine("\nПереход в исходное состояние.");
            o1b1.reset();
            for (int i3 = 0; i3 < 5; i3++)
            {
                Console.WriteLine("Следующее значение равно " + o1b1.getNext());
            }
            Console.WriteLine("\nНачинаем с числа 100.");
            o1b1.setStart(100);
            for (int i3 = 0; i3 < 5; i3++)
            {
                Console.WriteLine("Следующее значение равно " + o1b1.getNext());
            }

            Console.ReadKey();
            //рабочий вариант вызов черехз

            /*
             * cd C:\Users\Denis\source\repos\Lernclass\Lernclass\bin\Debug
             * Lernclass.exe
             */
            if (args.Length < 2)
            {
                Console.WriteLine("Использование+ " + "слово1: <<закодировать>>/<<раскодировать>> " + "[слово2... словоN]");
                return(1); //возврат значения признака неверного выполнения
            }

            if (args[0] != "закодировать" & args[0] != "раскодирвоать")
            {
                Console.WriteLine("Первым аргументом должно быть слово " + "\"закодировать\" или \"раскодировать\".");
                return(1); // Возврат признака неверного выполнения.
            }
            //Кодируем и декодируем сообщение
            for (int n = 1; n < args.Length; n++)
            {
                for (int i2 = 0; i2 < args[n].Length; i2++)
                {
                    if (args[0] == "закодировать")
                    {
                        Console.Write((char)(args[n][i2] + 1)); ///берём n слово i2 символ
                    }
                    else
                    {
                        Console.Write((char)(args[n][i2] - 1));
                    }
                }
                Console.Write(" ");
            }
            Console.WriteLine();

            return(0);
        }
 static void Main()
 {
     var d1 = new Derived1();
     var d2 = new Derived2();
     var d3 = new Derived3();
 }
Esempio n. 17
0
 public int Method(Derived3 param)
 {
     return(++param.field);
 }
    static int Main()
    {
        Derived1 d1 = new Derived1();
        Derived2 d2 = new Derived2();
        Derived3 d3 = new Derived3();
        Base     b1 = d1;
        Base     b2 = d2;
        Base     rb = new Base();

        if (d1.Turn() != 4)
        {
            return(1);
        }

        if (((IVehicle)d1).Turn() != 4)
        {
            return(2);
        }

        if (((Base)d2).Turn() != 8)
        {
            return(10);
        }

        if (((IVehicle)d2).Turn() != 7)
        {
            return(3);
        }

        if (b2.Turn() != 8)
        {
            return(4);
        }

        if (((IVehicle)b2).Turn() != 7)
        {
            return(5);
        }

        if (((IVehicle)rb).Stop() != 2)
        {
            return(6);
        }

        if (((IVehicle)d1).Stop() != 2)
        {
            return(7);
        }

        if (((IVehicle)d2).Stop() != 6)
        {
            return(8);
        }

        if (d3.Walk() != 1)
        {
            return(9);
        }

        //Console.WriteLine ("TEST {0}", ((IVehicle)b2).Turn ());
        return(0);
    }
Esempio n. 19
0
 public void DiscriminatedUnionThreeUsingThirdToString()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     Assert.AreEqual("{Third:" + d3 + "}", d.ToString());
 }
Esempio n. 20
0
    public static void Main()
    {
        //Test Derived1
        Derived1 d1 = new Derived1();

        check(d1.cbase1y() != 3, "Derived1::cbase1y() failed");
        check(d1.cbase2() != 4, "Derived1::cbase2() failed");

        //Test Derived2
        Derived2 d2 = new Derived2();

        check(d2.cbase1y() != 6, "Derived2::cbase1y() failed");
        check(d2.abase1() != 5, "Derived2::abase1() failed");

        //Test Derived3
        Derived3 d3 = new Derived3();

        check(d3.cbase1y() != 7, "Derived3::cbase1y() failed");
        check(d3.cbase2() != 8, "Derived3::cbase2() failed");
        check(d3.abase1() != 9, "Derived3::abase1() failed");

        //Test Bottom1
        Bottom1 b1 = new Bottom1();

        check(b1.cbase1y() != 103, "Bottom1::cbase1y() failed");
        check(b1.cbase2() != 104, "Bottom1::cbase2() failed");

        //Test Bottom2
        Bottom2 b2 = new Bottom2();

        check(b2.cbase1y() != 206, "Bottom2::cbase1y() failed");
        check(b2.abase1() != 205, "Bottom2::abase1() failed");

        //Test Bottom3
        Bottom3 b3 = new Bottom3();

        check(b3.cbase1y() != 307, "Bottom3::cbase1y() failed");
        check(b3.cbase2() != 308, "Bottom3::cbase2() failed");
        check(b3.abase1() != 309, "Bottom3::abase1() failed");

        //Test interfaces from c++ classes
        CBase1alaqilInterface cb1 = new CBase1();
        CBase2alaqilInterface cb2 = new CBase2();

        check(cb1.cbase1y() != 1, "CBase1::cbase1y() failed");
        check(cb2.cbase2() != 2, "CBase2::cbase2() failed");

        //Test nspace class as return value
        ABase1alaqilInterface ab1 = d3.cloneit();

        check(ab1.abase1() != 9, "Derived3::abase1() through ABase1 failed");

        //Test concrete base class as return value
        CBase1alaqilInterface cb6 = d2.cloneit();
        CBase2alaqilInterface cb7 = d1.cloneit();

        check(cb6.cbase1y() != 6, "Derived2::cbase1y() through CBase1 failed");
        check(cb7.cbase2() != 4, "Derived1:cbase2() through ABase1 failed");

        //Test multi inheritance
        CBase1alaqilInterface cb3 = new Derived1();
        CBase1alaqilInterface cb4 = new Derived3();
        CBase2alaqilInterface cb5 = new Derived3();
        ABase1alaqilInterface ab6 = new Derived2();

        check(cb3.cbase1y() != 3, "Derived1::cbase1y() through CBase1 failed");
        check(cb4.cbase1y() != 7, "Derived3::cbase1y() through CBase1 failed");
        check(cb5.cbase2() != 8, "Derived3::cbase2() through CBase2 failed");
        check(ab6.abase1() != 5, "Derived2::abase1() through ABase1 failed");

        //Test base classes as parameter in C#
        multiple_inheritance_nspace_runme mhar = new multiple_inheritance_nspace_runme();

        check(mhar.jcbase1b(d1) != 3, "jcbase1b() through Derived1 as parameter failed");
        check(mhar.jcbase1b(d2) != 6, "jcbase1b() through Derived2 as parameter failed");
        check(mhar.jcbase1b(d3) != 7, "jcbase1b() through Derived3 as parameter failed");
        check(mhar.jcbase2(d1) != 4, "jcbase2() through Derived1 as parameter failed");
        check(mhar.jcbase2(d3) != 8, "jcbase2() through Derived3 as parameter failed");
        check(mhar.jabase1(d2) != 5, "jabase1() through Derived2 as parameter failed");
        check(mhar.jabase1(d3) != 9, "jabase1() through Derived3 as parameter failed");

        //Value parameters
        //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
        check(multiple_inheritance_nspace.InputValCBase1(d1) != 1, "InputValCBase1(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase1(d2) != 1, "InputValCBase1(), Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase1(d3) != 1, "InputValCBase1(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase2(d3) != 2, "InputValCBase2(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase2(d1) != 2, "InputValCBase2(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase1(cb1) != 1, "InputValCBase1(), CBase1 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase2(cb2) != 2, "InputValCBase2(), CBase2 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase1(b1) != 1, "InputValCBase1(), Bottom1 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase1(b2) != 1, "InputValCBase1(), Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase1(b3) != 1, "InputValCBase1(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase2(b3) != 2, "InputValCBase2(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputValCBase2(b1) != 2, "InputValCBase2(), Bottom1 as a parameter failed");

        //Pointer parameters
        //Test ABase1 as a parameter
        check(multiple_inheritance_nspace.InputPtrABase1(d2) != 5, "InputPtrABase1() through Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrABase1(d3) != 9, "InputPtrABase1() through Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrABase1(b2) != 205, "InputPtrABase1() through Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrABase1(b3) != 309, "InputPtrABase1() through Bottom3 as a parameter failed");

        //Test CBase1 CBase2 as parameters
        check(multiple_inheritance_nspace.InputPtrCBase1(d1) != 3, "InputPtrCBase1(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase1(d2) != 6, "InputPtrCBase1(), Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase1(d3) != 7, "InputPtrCBase1(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase2(d3) != 8, "InputPtrCBase2(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase2(d1) != 4, "InputPtrCBase2(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase1(cb1) != 1, "InputPtrCBase1(), CBase1 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase2(cb2) != 2, "InputPtrCBase2(), CBase2 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase1(b1) != 103, "InputPtrCBase1(), Bottom1 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase1(b2) != 206, "InputPtrCBase1(), Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase1(b3) != 307, "InputPtrCBase1(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase2(b3) != 308, "InputPtrCBase2(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputPtrCBase2(b1) != 104, "InputPtrCBase2(), Bottom1 as a parameter failed");

        //Reference parameters
        //Test ABase1 as a parameter
        check(multiple_inheritance_nspace.InputRefABase1(d2) != 5, "InputRefABase1() through Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefABase1(d3) != 9, "InputRefABase1() through Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefABase1(b2) != 205, "InputRefABase1() through Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefABase1(b3) != 309, "InputRefABase1() through Bottom3 as a parameter failed");

        //Test CBase1 CBase2 as parameters
        check(multiple_inheritance_nspace.InputRefCBase1(d1) != 3, "InputRefCBase1(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase1(d2) != 6, "InputRefCBase1(), Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase1(d3) != 7, "InputRefCBase1(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase2(d3) != 8, "InputRefCBase2(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase2(d1) != 4, "InputRefCBase2(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase1(cb1) != 1, "InputRefCBase1(), CBase1 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase2(cb2) != 2, "InputRefCBase2(), CBase2 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase1(b1) != 103, "InputRefCBase1(), Bottom1 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase1(b2) != 206, "InputRefCBase1(), Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase1(b3) != 307, "InputRefCBase1(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase2(b3) != 308, "InputRefCBase2(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputRefCBase2(b1) != 104, "InputRefCBase2(), Bottom1 as a parameter failed");

        //Const reference pointer parameters
        //Test ABase1 as a parameter
        check(multiple_inheritance_nspace.InputCPtrRefABase1(d2) != 5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefABase1(d3) != 9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefABase1(b2) != 205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefABase1(b3) != 309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");

        //Test CBase1 CBase2 as parameters
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(d1) != 3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(d2) != 6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(d3) != 7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase2(d3) != 8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase2(d1) != 4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(cb1) != 1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase2(cb2) != 2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(b1) != 103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(b2) != 206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase1(b3) != 307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase2(b3) != 308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
        check(multiple_inheritance_nspace.InputCPtrRefCBase2(b1) != 104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");

        //Derived classes as parameters
        check(multiple_inheritance_nspace.InputValDerived1(d1) != 3 + 4, "InputValDerived1() failed");
        check(multiple_inheritance_nspace.InputValDerived2(d2) != 6 + 5, "InputValDerived2() failed");
        check(multiple_inheritance_nspace.InputValDerived3(d3) != 7 + 8 + 9, "InputValDerived3() failed");

        check(multiple_inheritance_nspace.InputRefDerived1(d1) != 3 + 4, "InputRefDerived1() failed");
        check(multiple_inheritance_nspace.InputRefDerived2(d2) != 6 + 5, "InputRefDerived2() failed");
        check(multiple_inheritance_nspace.InputRefDerived3(d3) != 7 + 8 + 9, "InputRefDerived3() failed");

        check(multiple_inheritance_nspace.InputPtrDerived1(d1) != 3 + 4, "InputPtrDerived1() failed");
        check(multiple_inheritance_nspace.InputPtrDerived2(d2) != 6 + 5, "InputPtrDerived2() failed");
        check(multiple_inheritance_nspace.InputPtrDerived3(d3) != 7 + 8 + 9, "InputPtrDerived3() failed");

        check(multiple_inheritance_nspace.InputCPtrRefDerived1(d1) != 3 + 4, "InputCPtrRefDerived1() failed");
        check(multiple_inheritance_nspace.InputCPtrRefDerived2(d2) != 6 + 5, "InputCPtrRefDerived2() failed");
        check(multiple_inheritance_nspace.InputCPtrRefDerived3(d3) != 7 + 8 + 9, "InputCPtrRefDerived3() failed");

        //Bottom classes as Derived parameters
        check(multiple_inheritance_nspace.InputValDerived1(b1) != 3 + 4, "InputValDerived1() failed");
        check(multiple_inheritance_nspace.InputValDerived2(b2) != 6 + 5, "InputValDerived2() failed");
        check(multiple_inheritance_nspace.InputValDerived3(b3) != 7 + 8 + 9, "InputValDerived3() failed");

        check(multiple_inheritance_nspace.InputRefDerived1(b1) != 103 + 104, "InputRefDerived1() failed");
        check(multiple_inheritance_nspace.InputRefDerived2(b2) != 206 + 205, "InputRefDerived2() failed");
        check(multiple_inheritance_nspace.InputRefDerived3(b3) != 307 + 308 + 309, "InputRefDerived3() failed");

        check(multiple_inheritance_nspace.InputPtrDerived1(b1) != 103 + 104, "InputPtrDerived1() failed");
        check(multiple_inheritance_nspace.InputPtrDerived2(b2) != 206 + 205, "InputPtrDerived2() failed");
        check(multiple_inheritance_nspace.InputPtrDerived3(b3) != 307 + 308 + 309, "InputPtrDerived3() failed");

        check(multiple_inheritance_nspace.InputCPtrRefDerived1(b1) != 103 + 104, "InputCPtrRefDerived1() failed");
        check(multiple_inheritance_nspace.InputCPtrRefDerived2(b2) != 206 + 205, "InputCPtrRefDerived2() failed");
        check(multiple_inheritance_nspace.InputCPtrRefDerived3(b3) != 307 + 308 + 309, "InputCPtrRefDerived3() failed");

        //Bottom classes as Bottom parameters
        check(multiple_inheritance_nspace.InputValBottom1(b1) != 103 + 104, "InputValBottom1() failed");
        check(multiple_inheritance_nspace.InputValBottom2(b2) != 206 + 205, "InputValBottom2() failed");
        check(multiple_inheritance_nspace.InputValBottom3(b3) != 307 + 308 + 309, "InputValBottom3() failed");

        check(multiple_inheritance_nspace.InputRefBottom1(b1) != 103 + 104, "InputRefBottom1() failed");
        check(multiple_inheritance_nspace.InputRefBottom2(b2) != 206 + 205, "InputRefBottom2() failed");
        check(multiple_inheritance_nspace.InputRefBottom3(b3) != 307 + 308 + 309, "InputRefBottom3() failed");

        check(multiple_inheritance_nspace.InputPtrBottom1(b1) != 103 + 104, "InputPtrBottom1() failed");
        check(multiple_inheritance_nspace.InputPtrBottom2(b2) != 206 + 205, "InputPtrBottom2() failed");
        check(multiple_inheritance_nspace.InputPtrBottom3(b3) != 307 + 308 + 309, "InputPtrBottom3() failed");

        check(multiple_inheritance_nspace.InputCPtrRefBottom1(b1) != 103 + 104, "InputCPtrRefBottom1() failed");
        check(multiple_inheritance_nspace.InputCPtrRefBottom2(b2) != 206 + 205, "InputCPtrRefBottom2() failed");
        check(multiple_inheritance_nspace.InputCPtrRefBottom3(b3) != 307 + 308 + 309, "InputCPtrRefBottom3() failed");
        // Return pointers
        check(multiple_inheritance_nspace.MakePtrDerived1_CBase1().cbase1y() != 3, "MakePtrDerived1_CBase1 failed");
        check(multiple_inheritance_nspace.MakePtrDerived1_CBase2().cbase2() != 4, "MakePtrDerived1_CBase2 failed");
        check(multiple_inheritance_nspace.MakePtrDerived2_CBase1().cbase1y() != 6, "MakePtrDerived2_CBase1 failed");
        check(multiple_inheritance_nspace.MakePtrDerived2_ABase1().abase1() != 5, "MakePtrDerived2_ABase1 failed");
        check(multiple_inheritance_nspace.MakePtrDerived3_ABase1().abase1() != 9, "MakePtrDerived3_ABase1 failed");
        check(multiple_inheritance_nspace.MakePtrDerived3_CBase1().cbase1y() != 7, "MakePtrDerived3_CBase1 failed");
        check(multiple_inheritance_nspace.MakePtrDerived3_CBase2().cbase2() != 8, "MakePtrDerived3_CBase2 failed");

        // Return references
        check(multiple_inheritance_nspace.MakeRefDerived1_CBase1().cbase1y() != 3, "MakeRefDerived1_CBase1 failed");
        check(multiple_inheritance_nspace.MakeRefDerived1_CBase2().cbase2() != 4, "MakeRefDerived1_CBase2 failed");
        check(multiple_inheritance_nspace.MakeRefDerived2_CBase1().cbase1y() != 6, "MakeRefDerived2_CBase1 failed");
        check(multiple_inheritance_nspace.MakeRefDerived2_ABase1().abase1() != 5, "MakeRefDerived2_ABase1 failed");
        check(multiple_inheritance_nspace.MakeRefDerived3_ABase1().abase1() != 9, "MakeRefDerived3_ABase1 failed");
        check(multiple_inheritance_nspace.MakeRefDerived3_CBase1().cbase1y() != 7, "MakeRefDerived3_CBase1 failed");
        check(multiple_inheritance_nspace.MakeRefDerived3_CBase2().cbase2() != 8, "MakeRefDerived3_CBase2 failed");

        // Return by value (sliced objects)
        check(multiple_inheritance_nspace.MakeValDerived1_CBase1().cbase1y() != 1, "MakeValDerived1_CBase1 failed");
        check(multiple_inheritance_nspace.MakeValDerived1_CBase2().cbase2() != 2, "MakeValDerived1_CBase2 failed");
        check(multiple_inheritance_nspace.MakeValDerived2_CBase1().cbase1y() != 1, "MakeValDerived2_CBase1 failed");
        check(multiple_inheritance_nspace.MakeValDerived3_CBase1().cbase1y() != 1, "MakeValDerived3_CBase1 failed");
        check(multiple_inheritance_nspace.MakeValDerived3_CBase2().cbase2() != 2, "MakeValDerived3_CBase2 failed");
    }
Esempio n. 21
0
 public void DiscriminatedUnionThreeUsingThirdCreateThirdWorks()
 {
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(new Derived3());
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> dd = d.CreateThird(d3);
     Assert.AreNotSame(d, dd);
     Assert.AreNotSame(d.Value, dd.Value);
     Assert.AreSame(d3, dd.Value);
     Assert.IsTrue(dd.IsThird);
 }
Esempio n. 22
0
 public void DiscriminatedUnionThreeUsingThirdIsThirdWorking()
 {
     Derived3 d3 = new Derived3();
     IDiscriminatedUnion<Base, Derived1, Derived2, Derived3> d = DiscriminatedUnion.Third<Base, Derived1, Derived2, Derived3>(d3);
     Assert.IsTrue(d.IsThird);
 }
    override public object runOneIteration()
    {
        int number = random.Next(100);

        var obj;

        if (number == 0)
        {
            obj = new Derived0();
        }

        else if (number == 1)
        {
            obj = new Derived1();
        }

        else if (number == 2)
        {
            obj = new Derived2();
        }

        else if (number == 3)
        {
            obj = new Derived3();
        }

        else if (number == 4)
        {
            obj = new Derived4();
        }

        else if (number == 5)
        {
            obj = new Derived5();
        }

        else if (number == 6)
        {
            obj = new Derived6();
        }

        else if (number == 7)
        {
            obj = new Derived7();
        }

        else if (number == 8)
        {
            obj = new Derived8();
        }

        else if (number == 9)
        {
            obj = new Derived9();
        }

        else if (number == 10)
        {
            obj = new Derived10();
        }

        else if (number == 11)
        {
            obj = new Derived11();
        }

        else if (number == 12)
        {
            obj = new Derived12();
        }

        else if (number == 13)
        {
            obj = new Derived13();
        }

        else if (number == 14)
        {
            obj = new Derived14();
        }

        else if (number == 15)
        {
            obj = new Derived15();
        }

        else if (number == 16)
        {
            obj = new Derived16();
        }

        else if (number == 17)
        {
            obj = new Derived17();
        }

        else if (number == 18)
        {
            obj = new Derived18();
        }

        else if (number == 19)
        {
            obj = new Derived19();
        }

        else if (number == 20)
        {
            obj = new Derived20();
        }

        else if (number == 21)
        {
            obj = new Derived21();
        }

        else if (number == 22)
        {
            obj = new Derived22();
        }

        else if (number == 23)
        {
            obj = new Derived23();
        }

        else if (number == 24)
        {
            obj = new Derived24();
        }

        else if (number == 25)
        {
            obj = new Derived25();
        }

        else if (number == 26)
        {
            obj = new Derived26();
        }

        else if (number == 27)
        {
            obj = new Derived27();
        }

        else if (number == 28)
        {
            obj = new Derived28();
        }

        else if (number == 29)
        {
            obj = new Derived29();
        }

        else if (number == 30)
        {
            obj = new Derived30();
        }

        else if (number == 31)
        {
            obj = new Derived31();
        }

        else if (number == 32)
        {
            obj = new Derived32();
        }

        else if (number == 33)
        {
            obj = new Derived33();
        }

        else if (number == 34)
        {
            obj = new Derived34();
        }

        else if (number == 35)
        {
            obj = new Derived35();
        }

        else if (number == 36)
        {
            obj = new Derived36();
        }

        else if (number == 37)
        {
            obj = new Derived37();
        }

        else if (number == 38)
        {
            obj = new Derived38();
        }

        else if (number == 39)
        {
            obj = new Derived39();
        }

        else if (number == 40)
        {
            obj = new Derived40();
        }

        else if (number == 41)
        {
            obj = new Derived41();
        }

        else if (number == 42)
        {
            obj = new Derived42();
        }

        else if (number == 43)
        {
            obj = new Derived43();
        }

        else if (number == 44)
        {
            obj = new Derived44();
        }

        else if (number == 45)
        {
            obj = new Derived45();
        }

        else if (number == 46)
        {
            obj = new Derived46();
        }

        else if (number == 47)
        {
            obj = new Derived47();
        }

        else if (number == 48)
        {
            obj = new Derived48();
        }

        else if (number == 49)
        {
            obj = new Derived49();
        }

        else if (number == 50)
        {
            obj = new Derived50();
        }

        else if (number == 51)
        {
            obj = new Derived51();
        }

        else if (number == 52)
        {
            obj = new Derived52();
        }

        else if (number == 53)
        {
            obj = new Derived53();
        }

        else if (number == 54)
        {
            obj = new Derived54();
        }

        else if (number == 55)
        {
            obj = new Derived55();
        }

        else if (number == 56)
        {
            obj = new Derived56();
        }

        else if (number == 57)
        {
            obj = new Derived57();
        }

        else if (number == 58)
        {
            obj = new Derived58();
        }

        else if (number == 59)
        {
            obj = new Derived59();
        }

        else if (number == 60)
        {
            obj = new Derived60();
        }

        else if (number == 61)
        {
            obj = new Derived61();
        }

        else if (number == 62)
        {
            obj = new Derived62();
        }

        else if (number == 63)
        {
            obj = new Derived63();
        }

        else if (number == 64)
        {
            obj = new Derived64();
        }

        else if (number == 65)
        {
            obj = new Derived65();
        }

        else if (number == 66)
        {
            obj = new Derived66();
        }

        else if (number == 67)
        {
            obj = new Derived67();
        }

        else if (number == 68)
        {
            obj = new Derived68();
        }

        else if (number == 69)
        {
            obj = new Derived69();
        }

        else if (number == 70)
        {
            obj = new Derived70();
        }

        else if (number == 71)
        {
            obj = new Derived71();
        }

        else if (number == 72)
        {
            obj = new Derived72();
        }

        else if (number == 73)
        {
            obj = new Derived73();
        }

        else if (number == 74)
        {
            obj = new Derived74();
        }

        else if (number == 75)
        {
            obj = new Derived75();
        }

        else if (number == 76)
        {
            obj = new Derived76();
        }

        else if (number == 77)
        {
            obj = new Derived77();
        }

        else if (number == 78)
        {
            obj = new Derived78();
        }

        else if (number == 79)
        {
            obj = new Derived79();
        }

        else if (number == 80)
        {
            obj = new Derived80();
        }

        else if (number == 81)
        {
            obj = new Derived81();
        }

        else if (number == 82)
        {
            obj = new Derived82();
        }

        else if (number == 83)
        {
            obj = new Derived83();
        }

        else if (number == 84)
        {
            obj = new Derived84();
        }

        else if (number == 85)
        {
            obj = new Derived85();
        }

        else if (number == 86)
        {
            obj = new Derived86();
        }

        else if (number == 87)
        {
            obj = new Derived87();
        }

        else if (number == 88)
        {
            obj = new Derived88();
        }

        else if (number == 89)
        {
            obj = new Derived89();
        }

        else if (number == 90)
        {
            obj = new Derived90();
        }

        else if (number == 91)
        {
            obj = new Derived91();
        }

        else if (number == 92)
        {
            obj = new Derived92();
        }

        else if (number == 93)
        {
            obj = new Derived93();
        }

        else if (number == 94)
        {
            obj = new Derived94();
        }

        else if (number == 95)
        {
            obj = new Derived95();
        }

        else if (number == 96)
        {
            obj = new Derived96();
        }

        else if (number == 97)
        {
            obj = new Derived97();
        }

        else if (number == 98)
        {
            obj = new Derived98();
        }

        else
        {
            obj = new Derived99();
        }

        return(this.runWithNoInference(obj));
    }
  public static void Main() {
    //Test Derived1
    Derived1 d1=new Derived1();
    check(d1.cbase1y()!=3, "Derived1::cbase1y() failed");
    check(d1.cbase2()!=4, "Derived1::cbase2() failed");

    //Test Derived2
    Derived2 d2=new Derived2();
    check(d2.cbase1y()!=6, "Derived2::cbase1y() failed");
    check(d2.abase1()!=5, "Derived2::abase1() failed");

    //Test Derived3
    Derived3 d3=new Derived3();
    check(d3.cbase1y()!=7, "Derived3::cbase1y() failed");
    check(d3.cbase2()!=8, "Derived3::cbase2() failed");
    check(d3.abase1()!=9, "Derived3::abase1() failed");

    //Test Bottom1
    Bottom1 b1=new Bottom1();
    check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
    check(b1.cbase2()!=104, "Bottom1::cbase2() failed");

    //Test Bottom2
    Bottom2 b2=new Bottom2();
    check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
    check(b2.abase1()!=205, "Bottom2::abase1() failed");

    //Test Bottom3
    Bottom3 b3=new Bottom3();
    check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
    check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
    check(b3.abase1()!=309, "Bottom3::abase1() failed");

    //Test interfaces from c++ classes 
    CBase1 cb1=new CBase1SwigImpl();
    CBase2 cb2=new CBase2SwigImpl();
    check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed");
    check(cb2.cbase2()!=2, "CBase2::cbase2() failed");

    //Test abstract class as return value
    ABase1 ab1=d3.cloneit();
    check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed");

    //Test concrete base class as return value
    CBase1 cb6=d2.cloneit();
    CBase2 cb7=d1.cloneit();
    check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed");
    check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed");

    //Test multi inheritance 
    CBase1 cb3=new Derived1();
    CBase1 cb4=new Derived3();
    CBase2 cb5=new Derived3();
    ABase1 ab6=new Derived2();
    check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed");
    check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed");
    check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed");
    check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed");  

    //Test base classes as parameter in C# 
    multiple_inheritance_abstract_runme mhar=new multiple_inheritance_abstract_runme();
    check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed");
    check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed");
    check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed");
    check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed");
    check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed");
    check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed");
    check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed");

    //Value parameters
    //Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
    check(multiple_inheritance_abstract.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed");

    //Pointer parameters
    //Test ABase1 as a parameter
    check(multiple_inheritance_abstract.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed");

    //Test CBase1 CBase2 as parameters
    check(multiple_inheritance_abstract.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed");

    //Reference parameters
    //Test ABase1 as a parameter
    check(multiple_inheritance_abstract.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed");

    //Test CBase1 CBase2 as parameters
    check(multiple_inheritance_abstract.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed");

    //Const reference pointer parameters
    //Test ABase1 as a parameter
    check(multiple_inheritance_abstract.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed");

    //Test CBase1 CBase2 as parameters
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed");
    check(multiple_inheritance_abstract.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed");

    //Derived classes as parameters
    check(multiple_inheritance_abstract.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
    check(multiple_inheritance_abstract.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
    check(multiple_inheritance_abstract.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");

    check(multiple_inheritance_abstract.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
    check(multiple_inheritance_abstract.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
    check(multiple_inheritance_abstract.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");

    check(multiple_inheritance_abstract.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
    check(multiple_inheritance_abstract.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
    check(multiple_inheritance_abstract.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");

    check(multiple_inheritance_abstract.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
    check(multiple_inheritance_abstract.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
    check(multiple_inheritance_abstract.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");

    //Bottom classes as Derived parameters
    check(multiple_inheritance_abstract.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
    check(multiple_inheritance_abstract.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
    check(multiple_inheritance_abstract.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");

    check(multiple_inheritance_abstract.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
    check(multiple_inheritance_abstract.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
    check(multiple_inheritance_abstract.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");

    check(multiple_inheritance_abstract.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
    check(multiple_inheritance_abstract.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
    check(multiple_inheritance_abstract.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");

    check(multiple_inheritance_abstract.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
    check(multiple_inheritance_abstract.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
    check(multiple_inheritance_abstract.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");

    //Bottom classes as Bottom parameters
    check(multiple_inheritance_abstract.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
    check(multiple_inheritance_abstract.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
    check(multiple_inheritance_abstract.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");

    check(multiple_inheritance_abstract.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
    check(multiple_inheritance_abstract.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
    check(multiple_inheritance_abstract.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");

    check(multiple_inheritance_abstract.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
    check(multiple_inheritance_abstract.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
    check(multiple_inheritance_abstract.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");

    check(multiple_inheritance_abstract.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
    check(multiple_inheritance_abstract.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
    check(multiple_inheritance_abstract.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
    // Return pointers
    check(multiple_inheritance_abstract.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
    check(multiple_inheritance_abstract.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
    check(multiple_inheritance_abstract.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
    check(multiple_inheritance_abstract.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
    check(multiple_inheritance_abstract.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
    check(multiple_inheritance_abstract.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
    check(multiple_inheritance_abstract.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");

    // Return references
    check(multiple_inheritance_abstract.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
    check(multiple_inheritance_abstract.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
    check(multiple_inheritance_abstract.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
    check(multiple_inheritance_abstract.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
    check(multiple_inheritance_abstract.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
    check(multiple_inheritance_abstract.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
    check(multiple_inheritance_abstract.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");

    // Return by value (sliced objects)
    check(multiple_inheritance_abstract.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
    check(multiple_inheritance_abstract.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
    check(multiple_inheritance_abstract.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
    check(multiple_inheritance_abstract.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
    check(multiple_inheritance_abstract.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");

  }