mirror of https://github.com/mono/CppSharp.git
6 changed files with 227 additions and 21 deletions
@ -0,0 +1,63 @@
@@ -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 @@
@@ -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 @@
@@ -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