@@ -37,6 +37,23 @@ class ClassWithUnscopedEnum {
3737 }
3838};
3939
40+ enum Py3Enum {
41+ A = -42 ,
42+ B = 1 ,
43+ C = 42 ,
44+ };
45+
46+ enum class Py3EnumScoped : short {
47+ X = 10 ,
48+ Y = -1024 ,
49+ };
50+
51+ enum class Py3EnumEmpty {};
52+
53+ enum class Py3EnumNonUnique {
54+ X = 1
55+ };
56+
4057std::string test_scoped_enum (ScopedEnum z) {
4158 return " ScopedEnum::" + std::string (z == ScopedEnum::Two ? " Two" : " Three" );
4259}
@@ -59,6 +76,33 @@ test_initializer enums([](py::module &m) {
5976 .value (" Execute" , Flags::Execute)
6077 .export_values ();
6178
79+ #if PY_VERSION_HEX >= 0x03000000
80+ py::py3_enum<Py3EnumEmpty>(m, " Py3EnumEmpty" );
81+
82+ py::py3_enum<Py3Enum>(m, " Py3Enum" )
83+ .value (" A" , Py3Enum::A)
84+ .value (" B" , Py3Enum::B)
85+ .value (" C" , Py3Enum::C);
86+
87+ py::py3_enum<Py3EnumScoped>(m, " Py3EnumScoped" )
88+ .value (" X" , Py3EnumScoped::X)
89+ .value (" Y" , Py3EnumScoped::Y);
90+
91+ m.def (" make_py3_enum" , [](bool x) {
92+ return x ? Py3EnumScoped::X : Py3EnumScoped::Y;
93+ });
94+
95+ m.def (" take_py3_enum" , [](Py3EnumScoped x) {
96+ return x == Py3EnumScoped::X;
97+ });
98+
99+ m.def (" non_unique_py3_enum" , [=]() {
100+ py::py3_enum<Py3EnumNonUnique>(m, " Py3EnumNonUnique" )
101+ .value (" X" , Py3EnumNonUnique::X)
102+ .value (" Y" , Py3EnumNonUnique::X);
103+ });
104+ #endif
105+
62106 py::class_<ClassWithUnscopedEnum> exenum_class (m, " ClassWithUnscopedEnum" );
63107 exenum_class.def_static (" test_function" , &ClassWithUnscopedEnum::test_function);
64108 py::enum_<ClassWithUnscopedEnum::EMode>(exenum_class, " EMode" )
0 commit comments