From 4b0a144f8c9134d475ba61b85ef157db14d1e22b Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Thu, 14 Jan 2010 17:22:18 -0800 Subject: [PATCH] Running C++ operator tests. --- tests/run/cpp_operators.pyx | 68 ++++++++++++++++++++++++++++++++ tests/run/cpp_operators_helper.h | 27 +++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 tests/run/cpp_operators.pyx create mode 100644 tests/run/cpp_operators_helper.h 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(%); + +}; -- 2.26.2