From 0df2fba54f1418e925d7435259253e268da22b11 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Mon, 21 Mar 2016 09:13:12 +0000 Subject: [PATCH] [0.3.x] fixed : division for python3 git-svn-id: https://pykd.svn.codeplex.com/svn@90965 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/pymod.cpp | 7 +++++++ pykd/variant.h | 8 ++++++++ test/scripts/intbase.py | 24 +++++++----------------- test/scripts/typeinfo.py | 2 +- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 9180b79..f9b64c2 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -508,8 +508,15 @@ BOOST_PYTHON_MODULE( pykd ) .def( "__rsub__", &NumVariantAdaptor::rsub ) .def( "__mul__", &NumVariantAdaptor::mul ) .def( "__rmul__", &NumVariantAdaptor::mul ) +#if PY_VERSION_HEX < 0x03000000 .def( "__div__", &NumVariantAdaptor::div ) .def( "__rdiv__", &NumVariantAdaptor::rdiv ) +#else + .def("__truediv__", &NumVariantAdaptor::truediv) + .def("__rtruediv__", &NumVariantAdaptor::rtruediv) +#endif + .def("__floordiv__", &NumVariantAdaptor::div) + .def("__rfloordiv__", &NumVariantAdaptor::rdiv) .def( "__mod__", &NumVariantAdaptor::mod ) .def( "__rmod__", &NumVariantAdaptor::rmod ) .def( "__rshift__", &NumVariantAdaptor::rshift ) diff --git a/pykd/variant.h b/pykd/variant.h index ab606c5..3637db3 100644 --- a/pykd/variant.h +++ b/pykd/variant.h @@ -169,6 +169,14 @@ public: return convertToPython(var) / obj; } + static python::object truediv(kdlib::NumBehavior& var, python::object& obj) { + return convertToPython(var) / obj; + } + + static python::object rtruediv(kdlib::NumBehavior& var, python::object& obj) { + return obj / convertToPython(var); + } + static python::object rdiv( kdlib::NumBehavior& var, python::object& obj ) { return obj / convertToPython(var); } diff --git a/test/scripts/intbase.py b/test/scripts/intbase.py index f6ca1a7..d79245d 100644 --- a/test/scripts/intbase.py +++ b/test/scripts/intbase.py @@ -108,24 +108,14 @@ class IntBaseTest( unittest.TestCase ): self.assertEqual( -1, 2 / numVariant(-2) ) self.assertEqual( 1, -2 / numVariant(-2) ) self.assertEqual( 3, numVariant(7)/numVariant(2) ) - - try: - -2 / numVariant(0) - self.assertTrue( False ) - except ZeroDivisionError: - self.assertTrue( True ) - try: - numVariant(2)/0 - self.assertTrue( False ) - except ZeroDivisionError: - self.assertTrue( True ) - - try: - numVariant(0)/numVariant(0) - self.assertTrue( False ) - except ZeroDivisionError: - self.assertTrue( True ) + self.assertRaises(ZeroDivisionError, lambda x: -2 / numVariant(0), 0 ) + self.assertRaises(ZeroDivisionError, lambda x: numVariant(2)/0, 0 ) + self.assertRaises(ZeroDivisionError, lambda x: numVariant(0)/numVariant(0), 0 ) + + def testDivFloor(self): + self.assertEqual(0, numVariant(1) // 2 ) + self.assertEqual(numVariant(1) // 2, 0 ) def testMod( self ): self.assertEqual( 1, numVariant(3) % 2 ) diff --git a/test/scripts/typeinfo.py b/test/scripts/typeinfo.py index 5bd9e8d..0120f20 100644 --- a/test/scripts/typeinfo.py +++ b/test/scripts/typeinfo.py @@ -222,7 +222,7 @@ class TypeInfoTest( unittest.TestCase ): def testEnumSubscribe(self): ti = pykd.typeInfo( "enumType" ) self.assertEqual( 3, len(ti) ) - self.assertEqual( [ 1, 2, 3], [ long(field) for field in ti ] ) + self.assertEqual( [ 1, 2, 3], [ int(field) for field in ti ] ) self.assertEqual( [ ( "ONE", 1), ("TWO", 2), ("THREE", 3) ], ti.fields() ) def testStructNullSize(self):