Skip to content
Snippets Groups Projects
Unverified Commit a75379e0 authored by Joris Vaillant's avatar Joris Vaillant
Browse files

variant: Test str and complex type support

parent 558e3919
No related branches found
No related tags found
No related merge requests found
Pipeline #36063 passed with warnings
...@@ -6,7 +6,12 @@ V2 = variant_module.V2 ...@@ -6,7 +6,12 @@ V2 = variant_module.V2
VariantHolder = variant_module.VariantHolder VariantHolder = variant_module.VariantHolder
VariantFullHolder = variant_module.VariantFullHolder VariantFullHolder = variant_module.VariantFullHolder
make_variant = variant_module.make_variant make_variant = variant_module.make_variant
make_variant_full = variant_module.make_variant_full make_variant_full_none = variant_module.make_variant_full_none
make_variant_full_float = variant_module.make_variant_full_float
make_variant_full_int = variant_module.make_variant_full_int
make_variant_full_bool = variant_module.make_variant_full_bool
make_variant_full_str = variant_module.make_variant_full_str
make_variant_full_complex = variant_module.make_variant_full_complex
variant = make_variant() variant = make_variant()
assert isinstance(variant, V1) assert isinstance(variant, V1)
...@@ -44,9 +49,34 @@ assert isinstance(variant_holder.variant, V2) ...@@ -44,9 +49,34 @@ assert isinstance(variant_holder.variant, V2)
assert variant_holder.variant.v == v2.v assert variant_holder.variant.v == v2.v
# Test variant that hold a None value # Test variant that hold a None value
v_full = make_variant_full() v_full = make_variant_full_none()
assert v_full is None assert v_full is None
# Test variant that hold a float value
v_full = make_variant_full_float()
assert v_full == 3.14
assert isinstance(v_full, float)
# Test variant that hold a int value
v_full = make_variant_full_int()
assert v_full == 3
assert isinstance(v_full, int)
# Test variant that hold a bool value
v_full = make_variant_full_bool()
assert not v_full
assert isinstance(v_full, bool)
# Test variant that hold a str value
v_full = make_variant_full_str()
assert v_full == "str"
assert isinstance(v_full, str)
# Test variant that hold a complex value
v_full = make_variant_full_complex()
assert v_full == 1 + 0j
assert isinstance(v_full, complex)
variant_full_holder = VariantFullHolder() variant_full_holder = VariantFullHolder()
# Test None # Test None
...@@ -81,3 +111,13 @@ assert isinstance(variant_full_holder.variant, int) ...@@ -81,3 +111,13 @@ assert isinstance(variant_full_holder.variant, int)
variant_full_holder.variant = 3.14 variant_full_holder.variant = 3.14
assert variant_full_holder.variant == 3.14 assert variant_full_holder.variant == 3.14
assert isinstance(variant_full_holder.variant, float) assert isinstance(variant_full_holder.variant, float)
# Test str
variant_full_holder.variant = "str"
assert variant_full_holder.variant == "str"
assert isinstance(variant_full_holder.variant, str)
# Test complex
variant_full_holder.variant = 1 + 0j
assert variant_full_holder.variant == 1 + 0j
assert isinstance(variant_full_holder.variant, complex)
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
#include <eigenpy/eigenpy.hpp> #include <eigenpy/eigenpy.hpp>
#include <eigenpy/variant.hpp> #include <eigenpy/variant.hpp>
#include <string>
#include <complex>
#cmakedefine TEST_TYPE @TEST_TYPE@ #cmakedefine TEST_TYPE @TEST_TYPE@
#define VARIANT TEST_TYPE #define VARIANT TEST_TYPE
...@@ -32,12 +35,18 @@ struct MyVariantNoneHelper<std::variant<Alternatives...> > { ...@@ -32,12 +35,18 @@ struct MyVariantNoneHelper<std::variant<Alternatives...> > {
}; };
#endif #endif
typedef typename MyVariantNoneHelper<VARIANT<V1, bool, int, double> >::type typedef typename MyVariantNoneHelper<
VARIANT<V1, bool, int, double, std::string, std::complex<double> > >::type
MyVariantFull; MyVariantFull;
MyVariant make_variant() { return V1(); } MyVariant make_variant() { return V1(); }
MyVariantFull make_variant_full() { return MyVariantFull(); } MyVariantFull make_variant_full_none() { return MyVariantFull(); }
MyVariantFull make_variant_full_float() { return 3.14; }
MyVariantFull make_variant_full_int() { return 3; }
MyVariantFull make_variant_full_bool() { return false; }
MyVariantFull make_variant_full_str() { return std::string("str"); }
MyVariantFull make_variant_full_complex() { return std::complex<double>(1., 0.); }
struct VariantHolder { struct VariantHolder {
MyVariant variant; MyVariant variant;
...@@ -68,7 +77,12 @@ BOOST_PYTHON_MODULE(@MODNAME@) { ...@@ -68,7 +77,12 @@ BOOST_PYTHON_MODULE(@MODNAME@) {
typedef eigenpy::VariantConverter<MyVariantFull> ConverterFull; typedef eigenpy::VariantConverter<MyVariantFull> ConverterFull;
ConverterFull::registration(); ConverterFull::registration();
bp::def("make_variant_full", make_variant_full); bp::def("make_variant_full_none", make_variant_full_none);
bp::def("make_variant_full_float", make_variant_full_float);
bp::def("make_variant_full_int", make_variant_full_int);
bp::def("make_variant_full_bool", make_variant_full_bool);
bp::def("make_variant_full_str", make_variant_full_str);
bp::def("make_variant_full_complex", make_variant_full_complex);
boost::python::class_<VariantFullHolder>("VariantFullHolder", bp::init<>()) boost::python::class_<VariantFullHolder>("VariantFullHolder", bp::init<>())
.add_property("variant", .add_property("variant",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment