[0.3.x] added : numVariantL::__float__ method ( automatic convert to float values )

git-svn-id: https://pykd.svn.codeplex.com/svn@89569 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\ussrhero_cp 2015-01-04 23:56:22 +00:00 committed by Mikhail I. Izmestev
parent 8d92470b1d
commit 1f8b79e6c4
3 changed files with 22 additions and 6 deletions

View File

@ -489,6 +489,7 @@ BOOST_PYTHON_MODULE( pykd )
.def( "__int__", &NumVariantAdaptor::int_ ) .def( "__int__", &NumVariantAdaptor::int_ )
.def( "__index__", &NumVariantAdaptor::long_ ) .def( "__index__", &NumVariantAdaptor::long_ )
.def( "__hash__", &NumVariantAdaptor::long_ ) .def( "__hash__", &NumVariantAdaptor::long_ )
.def( "__float__", &NumVariantAdaptor::float_)
.def( "isInteger", &NumVariantAdaptor::isInteger ) .def( "isInteger", &NumVariantAdaptor::isInteger )
; ;

View File

@ -26,6 +26,12 @@ public:
return var; return var;
} }
if (PyFloat_Check(obj.ptr()))
{
var->m_variant.setDouble(PyFloat_AsDouble(obj.ptr()));
return var;
}
if ( PyInt_CheckExact( obj.ptr() ) ) if ( PyInt_CheckExact( obj.ptr() ) )
{ {
var->m_variant.setLong( PyLong_AsLong( obj.ptr() ) ); var->m_variant.setLong( PyLong_AsLong( obj.ptr() ) );
@ -73,10 +79,10 @@ public:
return python::object( var.asUInt() ); return python::object( var.asUInt() );
if ( var.isFloat() ) if ( var.isFloat() )
return python::object( var.asFloat() ); return python::object( var.asInt() );
if ( var.isDouble() ) if ( var.isDouble() )
return python::object( var.asDouble() ); return python::object( var.asInt() );
return python::object( var.asInt() ); return python::object( var.asInt() );
} }
@ -214,6 +220,10 @@ public:
return convertToPython(var); return convertToPython(var);
} }
static python::object float_(kdlib::NumBehavior& var) {
return python::object(var.asDouble());
}
static python::object int_(kdlib::NumBehavior& var) { static python::object int_(kdlib::NumBehavior& var) {
return convertToPython(var); return convertToPython(var);
} }

View File

@ -161,17 +161,22 @@ class IntBaseTest( unittest.TestCase ):
def testLongConvert( self ): def testLongConvert( self ):
self.assertEqual( "100", "%d" % numVariant(100) ) self.assertEqual( "100", "%d" % numVariant(100) )
self.assertEqual( "64", "%x" % numVariant(100) )
self.assertEqual( "FFFF", "%X" % numVariant(0xFFFF) ) self.assertEqual( "FFFF", "%X" % numVariant(0xFFFF) )
self.assertEqual( "-70000000000", "%d" % numVariant(-70000000000) ) self.assertEqual( "-70000000000", "%d" % numVariant(-70000000000) )
self.assertEqual( "FFFFFFFFFFFFFF", "%X" % numVariant(0xFFFFFFFFFFFFFF) ) self.assertEqual( "FFFFFFFFFFFFFF", "%X" % numVariant(0xFFFFFFFFFFFFFF) )
self.assertEqual( "0", "%d" % numVariant(False) ) self.assertEqual( "0", "%d" % numVariant(False) )
def testConvert( self ): def testFloatConvert(self):
self.assertEqual( "100", "%d" % numVariant(100) ) self.assertEqual( "1.0", "%1.1f" % float(numVariant(1.0)))
self.assertEqual( "64", "%x" % numVariant(100) ) self.assertEqual( "1", "%d" % int(numVariant(1.0)))
self.assertEqual( "1.0", "%1.1f" % numVariant(1.0))
self.assertEqual( "1", "%d" % numVariant(1.0))
def testStr(self): def testStr(self):
self.assertEqual( "100", str(numVariant(100)) ) self.assertEqual( "100", str(numVariant(100)) )
def testHex(self): def testHex(self):
self.assertEqual( "0x64", hex(numVariant(100)) ) self.assertEqual( "0x64", hex(numVariant(100)) )