Skip to content

Commit a75379e

Browse files
committed
variant: Test str and complex type support
1 parent 558e391 commit a75379e

File tree

2 files changed

+59
-5
lines changed

2 files changed

+59
-5
lines changed

unittest/python/test_variant.py.in

+42-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ V2 = variant_module.V2
66
VariantHolder = variant_module.VariantHolder
77
VariantFullHolder = variant_module.VariantFullHolder
88
make_variant = variant_module.make_variant
9-
make_variant_full = variant_module.make_variant_full
9+
make_variant_full_none = variant_module.make_variant_full_none
10+
make_variant_full_float = variant_module.make_variant_full_float
11+
make_variant_full_int = variant_module.make_variant_full_int
12+
make_variant_full_bool = variant_module.make_variant_full_bool
13+
make_variant_full_str = variant_module.make_variant_full_str
14+
make_variant_full_complex = variant_module.make_variant_full_complex
1015

1116
variant = make_variant()
1217
assert isinstance(variant, V1)
@@ -44,9 +49,34 @@ assert isinstance(variant_holder.variant, V2)
4449
assert variant_holder.variant.v == v2.v
4550

4651
# Test variant that hold a None value
47-
v_full = make_variant_full()
52+
v_full = make_variant_full_none()
4853
assert v_full is None
4954

55+
# Test variant that hold a float value
56+
v_full = make_variant_full_float()
57+
assert v_full == 3.14
58+
assert isinstance(v_full, float)
59+
60+
# Test variant that hold a int value
61+
v_full = make_variant_full_int()
62+
assert v_full == 3
63+
assert isinstance(v_full, int)
64+
65+
# Test variant that hold a bool value
66+
v_full = make_variant_full_bool()
67+
assert not v_full
68+
assert isinstance(v_full, bool)
69+
70+
# Test variant that hold a str value
71+
v_full = make_variant_full_str()
72+
assert v_full == "str"
73+
assert isinstance(v_full, str)
74+
75+
# Test variant that hold a complex value
76+
v_full = make_variant_full_complex()
77+
assert v_full == 1 + 0j
78+
assert isinstance(v_full, complex)
79+
5080
variant_full_holder = VariantFullHolder()
5181

5282
# Test None
@@ -81,3 +111,13 @@ assert isinstance(variant_full_holder.variant, int)
81111
variant_full_holder.variant = 3.14
82112
assert variant_full_holder.variant == 3.14
83113
assert isinstance(variant_full_holder.variant, float)
114+
115+
# Test str
116+
variant_full_holder.variant = "str"
117+
assert variant_full_holder.variant == "str"
118+
assert isinstance(variant_full_holder.variant, str)
119+
120+
# Test complex
121+
variant_full_holder.variant = 1 + 0j
122+
assert variant_full_holder.variant == 1 + 0j
123+
assert isinstance(variant_full_holder.variant, complex)

unittest/variant.cpp.in

+17-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
#include <eigenpy/eigenpy.hpp>
55
#include <eigenpy/variant.hpp>
66

7+
#include <string>
8+
#include <complex>
9+
710
#cmakedefine TEST_TYPE @TEST_TYPE@
811
#define VARIANT TEST_TYPE
912

@@ -32,12 +35,18 @@ struct MyVariantNoneHelper<std::variant<Alternatives...> > {
3235
};
3336
#endif
3437

35-
typedef typename MyVariantNoneHelper<VARIANT<V1, bool, int, double> >::type
38+
typedef typename MyVariantNoneHelper<
39+
VARIANT<V1, bool, int, double, std::string, std::complex<double> > >::type
3640
MyVariantFull;
3741

3842
MyVariant make_variant() { return V1(); }
3943

40-
MyVariantFull make_variant_full() { return MyVariantFull(); }
44+
MyVariantFull make_variant_full_none() { return MyVariantFull(); }
45+
MyVariantFull make_variant_full_float() { return 3.14; }
46+
MyVariantFull make_variant_full_int() { return 3; }
47+
MyVariantFull make_variant_full_bool() { return false; }
48+
MyVariantFull make_variant_full_str() { return std::string("str"); }
49+
MyVariantFull make_variant_full_complex() { return std::complex<double>(1., 0.); }
4150

4251
struct VariantHolder {
4352
MyVariant variant;
@@ -68,7 +77,12 @@ BOOST_PYTHON_MODULE(@MODNAME@) {
6877

6978
typedef eigenpy::VariantConverter<MyVariantFull> ConverterFull;
7079
ConverterFull::registration();
71-
bp::def("make_variant_full", make_variant_full);
80+
bp::def("make_variant_full_none", make_variant_full_none);
81+
bp::def("make_variant_full_float", make_variant_full_float);
82+
bp::def("make_variant_full_int", make_variant_full_int);
83+
bp::def("make_variant_full_bool", make_variant_full_bool);
84+
bp::def("make_variant_full_str", make_variant_full_str);
85+
bp::def("make_variant_full_complex", make_variant_full_complex);
7286

7387
boost::python::class_<VariantFullHolder>("VariantFullHolder", bp::init<>())
7488
.add_property("variant",

0 commit comments

Comments
 (0)