Verified Commit 85e6bcd9 authored by Justin Carpentier's avatar Justin Carpentier
Browse files

test: enhance testing of user types

parent ac74a487
...@@ -5,8 +5,8 @@ import numpy as np ...@@ -5,8 +5,8 @@ import numpy as np
rows = 10 rows = 10
cols = 20 cols = 20
def test(mat): def test(dtype):
mat[:] = mat.dtype.type(10.) mat = np.ones((rows,cols),dtype=dtype)
mat_copy = mat.copy() mat_copy = mat.copy()
assert (mat == mat_copy).all() assert (mat == mat_copy).all()
assert not (mat != mat_copy).all() assert not (mat != mat_copy).all()
...@@ -25,18 +25,31 @@ def test(mat): ...@@ -25,18 +25,31 @@ def test(mat):
mat_op = mat.dot(mat.T) mat_op = mat.dot(mat.T)
mat_op = mat / mat mat_op = mat / mat
mat_op = -mat; mat_op = -mat
assert (mat >= mat).all() assert (mat >= mat).all()
assert (mat <= mat).all() assert (mat <= mat).all()
assert not (mat > mat).all() assert not (mat > mat).all()
assert not (mat < mat).all() assert not (mat < mat).all()
mat = user_type.create_double(rows,cols) def test_cast(from_dtype,to_dtype):
test(mat) np.can_cast(from_dtype,to_dtype)
mat = user_type.create_float(rows,cols) from_mat = np.zeros((rows,cols),dtype=from_dtype)
test(mat) to_mat = from_mat.astype(dtype=to_dtype)
test(user_type.CustomDouble)
test_cast(user_type.CustomDouble,np.double)
test_cast(np.double,user_type.CustomDouble)
test_cast(user_type.CustomDouble,np.int64)
test_cast(np.int64,user_type.CustomDouble)
test_cast(user_type.CustomDouble,np.int32)
test_cast(np.int32,user_type.CustomDouble)
test(user_type.CustomFloat)
v = user_type.CustomDouble(1) v = user_type.CustomDouble(1)
a = np.array(v) a = np.array(v)
......
...@@ -97,6 +97,11 @@ struct CustomType ...@@ -97,6 +97,11 @@ struct CustomType
CustomType operator-() const { return CustomType(-m_value); } CustomType operator-() const { return CustomType(-m_value); }
operator Scalar () const
{
return m_value;
}
std::string print() const std::string print() const
{ {
std::stringstream ss; std::stringstream ss;
...@@ -110,7 +115,7 @@ struct CustomType ...@@ -110,7 +115,7 @@ struct CustomType
return os; return os;
} }
protected: //protected:
Scalar m_value; Scalar m_value;
}; };
...@@ -186,4 +191,16 @@ BOOST_PYTHON_MODULE(user_type) ...@@ -186,4 +191,16 @@ BOOST_PYTHON_MODULE(user_type)
bp::def("build_matrix",build_matrix<double>); bp::def("build_matrix",build_matrix<double>);
bp::def("print",print<double>); bp::def("print",print<double>);
bp::def("print",print<float>); bp::def("print",print<float>);
eigenpy::registerCast<DoubleType,double>(true);
eigenpy::registerCast<double,DoubleType>(true);
eigenpy::registerCast<DoubleType,int32_t>(false);
eigenpy::registerCast<int32_t,DoubleType>(true);
eigenpy::registerCast<DoubleType,int64_t>(false);
eigenpy::registerCast<int64_t,DoubleType>(true);
eigenpy::registerCast<FloatType,int64_t>(false);
eigenpy::registerCast<int64_t,FloatType>(true);
bp::implicitly_convertible<double,DoubleType>();
bp::implicitly_convertible<DoubleType,double>();
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment