Fix C# increment/decrement operator wrappers

Add in runtime test to check increment/decrement operators are working correctly (pure C++ test)
Expose the function that checks all C++ operators so it can be called from target language


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8269 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2006-01-07 01:05:46 +00:00
commit 01b07443ff

View file

@ -50,16 +50,24 @@ see bottom for a set of possible tests
%csmethodmodifiers operator--(int) "protected";
%typemap(cscode) Op %{
public static Op operator++(Op op) {
return op.PlusPlusPostfix(0);
// Unlike C++, operator++ must not modify the parameter and both prefix and postfix operations call this method
Op newOp = new Op(op.i);
newOp.PlusPlusPostfix(0);
return newOp;
}
public static Op operator--(Op op) {
return op.MinusMinusPrefix();
// Unlike C++, operator-- must not modify the parameter and both prefix and postfix operations call this method
Op newOp = new Op(op.i);
newOp.MinusMinusPrefix();
return newOp;
}
%}
#endif
%inline %{
#include <assert.h>
class Op{
public:
int i;
@ -114,6 +122,9 @@ public:
Op operator--(int) {Op o = *this; --(*this); return o;} // postfix --
// TODO: <<,<<=
// This method just checks that the operators are implemented correctly
static void sanity_check();
};
// just to complicate matters
@ -185,12 +196,11 @@ __concat__ for contatenation (if language supports)
*/
/* Sample test code in C++
%{
#include <assert.h>
#include <stdio.h>
int main(int argc,char** argv)
void Op::sanity_check()
{
// test routine:
Op a;
@ -261,6 +271,34 @@ int main(int argc,char** argv)
//assert(str(Op(1))=="Op(1)");
//assert(str(Op(-3))=="Op(-3)");
printf("ok\n");
// test ++ and --
Op j(100);
int original = j.i;
{
Op newOp = j++;
int newInt = original++;
assert(j.i == original);
assert(newOp.i == newInt);
}
{
Op newOp = j--;
int newInt = original--;
assert(j.i == original);
assert(newOp.i == newInt);
}
{
Op newOp = ++j;
int newInt = ++original;
assert(j.i == original);
assert(newOp.i == newInt);
}
{
Op newOp = --j;
int newInt = --original;
assert(j.i == original);
assert(newOp.i == newInt);
}
}
*/
%}