From: Robert Bradshaw Date: Fri, 15 Jan 2010 01:22:18 +0000 (-0800) Subject: Running C++ operator tests. X-Git-Tag: 0.13.beta0~353^2~19 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=4b0a144f8c9134d475ba61b85ef157db14d1e22b;p=cython.git Running C++ operator tests. --- diff --git a/tests/run/cpp_operators.pyx b/tests/run/cpp_operators.pyx new file mode 100644 index 00000000..338b355f --- /dev/null +++ b/tests/run/cpp_operators.pyx @@ -0,0 +1,68 @@ +cimport cython +from cython cimport dereference as deref + +cdef extern from "cpp_operators_helper.h": + cdef cppclass TestOps: + + char* operator+() + char* operator-() + char* operator*() + char* operator~() + + char* operator++() + char* operator--() + char* operator++(int) + char* operator--(int) + + char* operator+(int) + char* operator-(int) + char* operator*(int) + char* operator/(int) + char* operator%(int) + +def test_unops(): + """ + >>> test_unops() + unary+ + unary- + unary~ + unary* + """ + cdef TestOps* t = new TestOps() + print +t[0] + print -t[0] + print ~t[0] + print deref(t[0]) + del t + +def test_incdec(): + """ + >>> test_incdec() + unary++ + unary-- + post++ + post-- + """ + cdef TestOps* t = new TestOps() + print cython.preincrement(t[0]) + print cython.predecrement(t[0]) + print cython.postincrement(t[0]) + print cython.postdecrement(t[0]) + del t + +def test_binop(): + """ + >>> test_binop() + binary+ + binary- + binary* + binary/ + binary% + """ + cdef TestOps* t = new TestOps() + print t[0] + 1 + print t[0] - 1 + print t[0] * 1 + print t[0] / 1 + print t[0] % 1 + del t diff --git a/tests/run/cpp_operators_helper.h b/tests/run/cpp_operators_helper.h new file mode 100644 index 00000000..545266af --- /dev/null +++ b/tests/run/cpp_operators_helper.h @@ -0,0 +1,27 @@ +#define UN_OP(op) const char* operator op () { return "unary"#op; } +#define POST_UN_OP(op) const char* operator op (int x) { return "post"#op; } +#define BIN_OP(op) const char* operator op (int x) { return "binary"#op; } + +class TestOps { + +public: + + UN_OP(-); + UN_OP(+); + UN_OP(*); + UN_OP(~); + UN_OP(!); + UN_OP(&); + + UN_OP(++); + UN_OP(--); + POST_UN_OP(++); + POST_UN_OP(--); + + BIN_OP(+); + BIN_OP(-); + BIN_OP(*); + BIN_OP(/); + BIN_OP(%); + +};