mirror of https://github.com/mono/CppSharp.git
6 changed files with 227 additions and 21 deletions
@ -0,0 +1,63 @@ |
|||||||
|
|
||||||
|
#include "VirtualTests.h" |
||||||
|
|
||||||
|
NumberClass::NumberClass (int n) |
||||||
|
: num (n) |
||||||
|
{ |
||||||
|
} |
||||||
|
int NumberClass::Number () const |
||||||
|
{ |
||||||
|
return this->num; |
||||||
|
} |
||||||
|
int NumberClass::NegativeNumber () const |
||||||
|
{ |
||||||
|
return -(this->num); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
AdderClass::AdderClass (int n) |
||||||
|
: NumberClass (n) |
||||||
|
{ |
||||||
|
} |
||||||
|
void AdderClass::Add (int n) |
||||||
|
{ |
||||||
|
this->num += n; |
||||||
|
} |
||||||
|
|
||||||
|
AdderClassWithVirtualBase::AdderClassWithVirtualBase (int n) |
||||||
|
: NumberClass (n) |
||||||
|
{ |
||||||
|
} |
||||||
|
void AdderClassWithVirtualBase::Add (int n) |
||||||
|
{ |
||||||
|
this->num += n; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
MultiplierClass::MultiplierClass (int n) |
||||||
|
: NumberClass (n) |
||||||
|
{ |
||||||
|
} |
||||||
|
void MultiplierClass::Multiply (int n) |
||||||
|
{ |
||||||
|
this->num *= n; |
||||||
|
} |
||||||
|
|
||||||
|
MultiplierClassWithVirtualBase::MultiplierClassWithVirtualBase (int n) |
||||||
|
: NumberClass (n) |
||||||
|
{ |
||||||
|
} |
||||||
|
void MultiplierClassWithVirtualBase::Multiply (int n) |
||||||
|
{ |
||||||
|
this->num *= n; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
ClassThatOverridesStuff::ClassThatOverridesStuff (int num, int my) |
||||||
|
: NumberClass (num), myNum (my) |
||||||
|
{ |
||||||
|
} |
||||||
|
int ClassThatOverridesStuff::Number () const |
||||||
|
{ |
||||||
|
return this->myNum; |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
|
||||||
|
class NumberClass { |
||||||
|
protected: |
||||||
|
int num; |
||||||
|
public: |
||||||
|
NumberClass (int n); |
||||||
|
virtual int Number () const; |
||||||
|
virtual int NegativeNumber () const; |
||||||
|
}; |
||||||
|
|
||||||
|
class AdderClass : public NumberClass { |
||||||
|
public: |
||||||
|
AdderClass (int n); |
||||||
|
virtual void Add (int n); |
||||||
|
}; |
||||||
|
class AdderClassWithVirtualBase : public virtual NumberClass { |
||||||
|
public: |
||||||
|
AdderClassWithVirtualBase (int n); |
||||||
|
virtual void Add (int n); |
||||||
|
}; |
||||||
|
|
||||||
|
class MultiplierClass : public NumberClass { |
||||||
|
public: |
||||||
|
MultiplierClass (int n); |
||||||
|
virtual void Multiply (int n); |
||||||
|
}; |
||||||
|
class MultiplierClassWithVirtualBase : public virtual NumberClass { |
||||||
|
public: |
||||||
|
MultiplierClassWithVirtualBase (int n); |
||||||
|
virtual void Multiply (int n); |
||||||
|
}; |
||||||
|
|
||||||
|
class ClassWithNonVirtualBases : public AdderClass, public MultiplierClass { |
||||||
|
public: |
||||||
|
// num is not shared between AdderClass and MultiplierClass; Add and Multiply should operate on different numbers
|
||||||
|
ClassWithNonVirtualBases (int addN, int multN) : AdderClass (addN), MultiplierClass (multN) {} |
||||||
|
}; |
||||||
|
class ClassWithVirtualBases : public AdderClassWithVirtualBase, public MultiplierClassWithVirtualBase { |
||||||
|
public: |
||||||
|
// num is shared between AdderClass and MultiplierClass; Add and Multiply should both operate on n
|
||||||
|
ClassWithVirtualBases (int n) : NumberClass (n-2), AdderClassWithVirtualBase (n-1), MultiplierClassWithVirtualBase (n) {} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
class ClassThatOverridesStuff : public NumberClass { |
||||||
|
protected: |
||||||
|
int myNum; |
||||||
|
public: |
||||||
|
ClassThatOverridesStuff (int num, int my); |
||||||
|
virtual int Number () const; |
||||||
|
}; |
@ -0,0 +1,83 @@ |
|||||||
|
using System; |
||||||
|
using NUnit.Framework; |
||||||
|
|
||||||
|
namespace Tests { |
||||||
|
|
||||||
|
[TestFixture] |
||||||
|
public class VirtualTests { |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TestVirtualCall () |
||||||
|
{ |
||||||
|
var cls = new NumberClass (5); |
||||||
|
Assert.AreEqual (5, cls.Number, "#1"); |
||||||
|
Assert.AreEqual (-5, cls.NegativeNumber, "#2"); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TestVirtualCallOnBaseClass () |
||||||
|
{ |
||||||
|
var cls = new AdderClass (8); |
||||||
|
Assert.AreEqual (8, cls.Number, "#1"); |
||||||
|
|
||||||
|
cls.Add (2); |
||||||
|
Assert.AreEqual (10, ((NumberClass)cls).Number, "#2"); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
[Ignore ("virtual inheritance not implemented yet")] |
||||||
|
public void TestVirtualCallOnVirtualBaseClass () |
||||||
|
{ |
||||||
|
var cls = new AdderClassWithVirtualBase (8); |
||||||
|
Assert.AreEqual (8, cls.Number, "#1"); |
||||||
|
|
||||||
|
cls.Add (2); |
||||||
|
Assert.AreEqual (10, ((NumberClass)cls).Number, "#2"); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TestMultipleBases () |
||||||
|
{ |
||||||
|
var cls = new ClassWithNonVirtualBases (5, 3); |
||||||
|
Assert.AreEqual (5, cls.Number, "#1"); |
||||||
|
Assert.AreEqual (3, ((MultiplierClass)cls).Number, "#2"); |
||||||
|
|
||||||
|
cls.Add (4); |
||||||
|
Assert.AreEqual (9, cls.Number, "#3"); |
||||||
|
Assert.AreEqual (3, ((MultiplierClass)cls).Number, "#4"); |
||||||
|
|
||||||
|
cls.Multiply (10); |
||||||
|
Assert.AreEqual (9, cls.Number, "#5"); |
||||||
|
Assert.AreEqual (30, ((MultiplierClass)cls).Number, "#6"); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
[Ignore ("virtual inheritance not implemented yet")] |
||||||
|
public void TestMultipleVirtualBases () |
||||||
|
{ |
||||||
|
var cls = new ClassWithVirtualBases (4); |
||||||
|
Assert.AreEqual (4, cls.Number, "#1"); |
||||||
|
Assert.AreEqual (4, ((MultiplierClassWithVirtualBase)cls).Number, "#2"); |
||||||
|
|
||||||
|
cls.Add (5); |
||||||
|
Assert.AreEqual (9, cls.Number, "#3"); |
||||||
|
Assert.AreEqual (9, ((MultiplierClassWithVirtualBase)cls).Number, "#4"); |
||||||
|
|
||||||
|
cls.Multiply (6); |
||||||
|
Assert.AreEqual (30, cls.Number, "#5"); |
||||||
|
Assert.AreEqual (30, ((MultiplierClassWithVirtualBase)cls).Number, "#6"); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TestClassThatOverridesStuff () |
||||||
|
{ |
||||||
|
var cls = new ClassThatOverridesStuff (5, 3); |
||||||
|
Assert.AreEqual (3, cls.Number, "#1"); |
||||||
|
Assert.AreEqual (3, ((NumberClass)cls).Number, "#2"); |
||||||
|
Assert.AreEqual (-5, cls.NegativeNumber, "#3"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue