| 10 | #include "pybind11_tests.h" |
| 11 | |
| 12 | TEST_SUBMODULE(enums, m) { |
| 13 | // test_unscoped_enum |
| 14 | enum UnscopedEnum { EOne = 1, ETwo, EThree }; |
| 15 | py::enum_<UnscopedEnum>(m, "UnscopedEnum", py::arithmetic(), "An unscoped enumeration") |
| 16 | .value("EOne", EOne, "Docstring for EOne") |
| 17 | .value("ETwo", ETwo, "Docstring for ETwo") |
| 18 | .value("EThree", EThree, "Docstring for EThree") |
| 19 | .export_values(); |
| 20 | |
| 21 | // test_scoped_enum |
| 22 | enum class ScopedEnum { Two = 2, Three }; |
| 23 | py::enum_<ScopedEnum>(m, "ScopedEnum", py::arithmetic()) |
| 24 | .value("Two", ScopedEnum::Two) |
| 25 | .value("Three", ScopedEnum::Three); |
| 26 | |
| 27 | m.def("test_scoped_enum", [](ScopedEnum z) { |
| 28 | return "ScopedEnum::" + std::string(z == ScopedEnum::Two ? "Two" : "Three"); |
| 29 | }); |
| 30 | |
| 31 | // test_binary_operators |
| 32 | enum Flags { Read = 4, Write = 2, Execute = 1 }; |
| 33 | py::enum_<Flags>(m, "Flags", py::arithmetic()) |
| 34 | .value("Read", Flags::Read) |
| 35 | .value("Write", Flags::Write) |
| 36 | .value("Execute", Flags::Execute) |
| 37 | .export_values(); |
| 38 | |
| 39 | // test_implicit_conversion |
| 40 | class ClassWithUnscopedEnum { |
| 41 | public: |
| 42 | enum EMode { EFirstMode = 1, ESecondMode }; |
| 43 | |
| 44 | static EMode test_function(EMode mode) { return mode; } |
| 45 | }; |
| 46 | py::class_<ClassWithUnscopedEnum> exenum_class(m, "ClassWithUnscopedEnum"); |
| 47 | exenum_class.def_static("test_function", &ClassWithUnscopedEnum::test_function); |
| 48 | py::enum_<ClassWithUnscopedEnum::EMode>(exenum_class, "EMode") |
| 49 | .value("EFirstMode", ClassWithUnscopedEnum::EFirstMode) |
| 50 | .value("ESecondMode", ClassWithUnscopedEnum::ESecondMode) |
| 51 | .export_values(); |
| 52 | |
| 53 | // test_enum_to_int |
| 54 | m.def("test_enum_to_int", [](int) {}); |
| 55 | m.def("test_enum_to_uint", [](uint32_t) {}); |
| 56 | m.def("test_enum_to_long_long", [](long long) {}); |
| 57 | |
| 58 | // test_duplicate_enum_name |
| 59 | enum SimpleEnum { ONE, TWO, THREE }; |
| 60 | |
| 61 | m.def("register_bad_enum", [m]() { |
| 62 | py::enum_<SimpleEnum>(m, "SimpleEnum") |
| 63 | .value("ONE", SimpleEnum::ONE) // NOTE: all value function calls are called with the |
| 64 | // same first parameter value |
| 65 | .value("ONE", SimpleEnum::TWO) |
| 66 | .value("ONE", SimpleEnum::THREE) |
| 67 | .export_values(); |
| 68 | }); |
| 69 |
nothing calls this directly
no test coverage detected