test_enum.cpp revision 11986
112027Sjungma@eit.uni-kl.de/* 212027Sjungma@eit.uni-kl.de tests/test_enums.cpp -- enumerations 312027Sjungma@eit.uni-kl.de 412027Sjungma@eit.uni-kl.de Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch> 512027Sjungma@eit.uni-kl.de 612027Sjungma@eit.uni-kl.de All rights reserved. Use of this source code is governed by a 712027Sjungma@eit.uni-kl.de BSD-style license that can be found in the LICENSE file. 812027Sjungma@eit.uni-kl.de*/ 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de#include "pybind11_tests.h" 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.deenum UnscopedEnum { 1312027Sjungma@eit.uni-kl.de EOne = 1, 1412027Sjungma@eit.uni-kl.de ETwo 1512027Sjungma@eit.uni-kl.de}; 1612027Sjungma@eit.uni-kl.de 1712027Sjungma@eit.uni-kl.deenum class ScopedEnum { 1812027Sjungma@eit.uni-kl.de Two = 2, 1912027Sjungma@eit.uni-kl.de Three 2012027Sjungma@eit.uni-kl.de}; 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.deenum Flags { 2312027Sjungma@eit.uni-kl.de Read = 4, 2412027Sjungma@eit.uni-kl.de Write = 2, 2512027Sjungma@eit.uni-kl.de Execute = 1 2612027Sjungma@eit.uni-kl.de}; 2712027Sjungma@eit.uni-kl.de 2812027Sjungma@eit.uni-kl.declass ClassWithUnscopedEnum { 2912027Sjungma@eit.uni-kl.depublic: 3012027Sjungma@eit.uni-kl.de enum EMode { 3112027Sjungma@eit.uni-kl.de EFirstMode = 1, 3212027Sjungma@eit.uni-kl.de ESecondMode 3312027Sjungma@eit.uni-kl.de }; 3412027Sjungma@eit.uni-kl.de 3512027Sjungma@eit.uni-kl.de static EMode test_function(EMode mode) { 3612027Sjungma@eit.uni-kl.de return mode; 3712027Sjungma@eit.uni-kl.de } 3812027Sjungma@eit.uni-kl.de}; 3912027Sjungma@eit.uni-kl.de 4012027Sjungma@eit.uni-kl.destd::string test_scoped_enum(ScopedEnum z) { 4112027Sjungma@eit.uni-kl.de return "ScopedEnum::" + std::string(z == ScopedEnum::Two ? "Two" : "Three"); 4212027Sjungma@eit.uni-kl.de} 4312027Sjungma@eit.uni-kl.de 4412027Sjungma@eit.uni-kl.detest_initializer enums([](py::module &m) { 4512027Sjungma@eit.uni-kl.de m.def("test_scoped_enum", &test_scoped_enum); 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.de py::enum_<UnscopedEnum>(m, "UnscopedEnum", py::arithmetic()) 4812027Sjungma@eit.uni-kl.de .value("EOne", EOne) 4912027Sjungma@eit.uni-kl.de .value("ETwo", ETwo) 5012027Sjungma@eit.uni-kl.de .export_values(); 5112027Sjungma@eit.uni-kl.de 5212027Sjungma@eit.uni-kl.de py::enum_<ScopedEnum>(m, "ScopedEnum", py::arithmetic()) 5312027Sjungma@eit.uni-kl.de .value("Two", ScopedEnum::Two) 5412027Sjungma@eit.uni-kl.de .value("Three", ScopedEnum::Three); 5512027Sjungma@eit.uni-kl.de 5612027Sjungma@eit.uni-kl.de py::enum_<Flags>(m, "Flags", py::arithmetic()) 5712027Sjungma@eit.uni-kl.de .value("Read", Flags::Read) 5812027Sjungma@eit.uni-kl.de .value("Write", Flags::Write) 5912027Sjungma@eit.uni-kl.de .value("Execute", Flags::Execute) 6012027Sjungma@eit.uni-kl.de .export_values(); 6112027Sjungma@eit.uni-kl.de 6212027Sjungma@eit.uni-kl.de py::class_<ClassWithUnscopedEnum> exenum_class(m, "ClassWithUnscopedEnum"); 6312027Sjungma@eit.uni-kl.de exenum_class.def_static("test_function", &ClassWithUnscopedEnum::test_function); 6412027Sjungma@eit.uni-kl.de py::enum_<ClassWithUnscopedEnum::EMode>(exenum_class, "EMode") 6512027Sjungma@eit.uni-kl.de .value("EFirstMode", ClassWithUnscopedEnum::EFirstMode) 6612027Sjungma@eit.uni-kl.de .value("ESecondMode", ClassWithUnscopedEnum::ESecondMode) 6712027Sjungma@eit.uni-kl.de .export_values(); 6812027Sjungma@eit.uni-kl.de}); 6912027Sjungma@eit.uni-kl.de