test_enum.cpp revision 11986
111986Sandreas.sandberg@arm.com/* 211986Sandreas.sandberg@arm.com tests/test_enums.cpp -- enumerations 311986Sandreas.sandberg@arm.com 411986Sandreas.sandberg@arm.com Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch> 511986Sandreas.sandberg@arm.com 611986Sandreas.sandberg@arm.com All rights reserved. Use of this source code is governed by a 711986Sandreas.sandberg@arm.com BSD-style license that can be found in the LICENSE file. 811986Sandreas.sandberg@arm.com*/ 911986Sandreas.sandberg@arm.com 1011986Sandreas.sandberg@arm.com#include "pybind11_tests.h" 1111986Sandreas.sandberg@arm.com 1211986Sandreas.sandberg@arm.comenum UnscopedEnum { 1311986Sandreas.sandberg@arm.com EOne = 1, 1411986Sandreas.sandberg@arm.com ETwo 1511986Sandreas.sandberg@arm.com}; 1611986Sandreas.sandberg@arm.com 1711986Sandreas.sandberg@arm.comenum class ScopedEnum { 1811986Sandreas.sandberg@arm.com Two = 2, 1911986Sandreas.sandberg@arm.com Three 2011986Sandreas.sandberg@arm.com}; 2111986Sandreas.sandberg@arm.com 2211986Sandreas.sandberg@arm.comenum Flags { 2311986Sandreas.sandberg@arm.com Read = 4, 2411986Sandreas.sandberg@arm.com Write = 2, 2511986Sandreas.sandberg@arm.com Execute = 1 2611986Sandreas.sandberg@arm.com}; 2711986Sandreas.sandberg@arm.com 2811986Sandreas.sandberg@arm.comclass ClassWithUnscopedEnum { 2911986Sandreas.sandberg@arm.compublic: 3011986Sandreas.sandberg@arm.com enum EMode { 3111986Sandreas.sandberg@arm.com EFirstMode = 1, 3211986Sandreas.sandberg@arm.com ESecondMode 3311986Sandreas.sandberg@arm.com }; 3411986Sandreas.sandberg@arm.com 3511986Sandreas.sandberg@arm.com static EMode test_function(EMode mode) { 3611986Sandreas.sandberg@arm.com return mode; 3711986Sandreas.sandberg@arm.com } 3811986Sandreas.sandberg@arm.com}; 3911986Sandreas.sandberg@arm.com 4011986Sandreas.sandberg@arm.comstd::string test_scoped_enum(ScopedEnum z) { 4111986Sandreas.sandberg@arm.com return "ScopedEnum::" + std::string(z == ScopedEnum::Two ? "Two" : "Three"); 4211986Sandreas.sandberg@arm.com} 4311986Sandreas.sandberg@arm.com 4411986Sandreas.sandberg@arm.comtest_initializer enums([](py::module &m) { 4511986Sandreas.sandberg@arm.com m.def("test_scoped_enum", &test_scoped_enum); 4611986Sandreas.sandberg@arm.com 4711986Sandreas.sandberg@arm.com py::enum_<UnscopedEnum>(m, "UnscopedEnum", py::arithmetic()) 4811986Sandreas.sandberg@arm.com .value("EOne", EOne) 4911986Sandreas.sandberg@arm.com .value("ETwo", ETwo) 5011986Sandreas.sandberg@arm.com .export_values(); 5111986Sandreas.sandberg@arm.com 5211986Sandreas.sandberg@arm.com py::enum_<ScopedEnum>(m, "ScopedEnum", py::arithmetic()) 5311986Sandreas.sandberg@arm.com .value("Two", ScopedEnum::Two) 5411986Sandreas.sandberg@arm.com .value("Three", ScopedEnum::Three); 5511986Sandreas.sandberg@arm.com 5611986Sandreas.sandberg@arm.com py::enum_<Flags>(m, "Flags", py::arithmetic()) 5711986Sandreas.sandberg@arm.com .value("Read", Flags::Read) 5811986Sandreas.sandberg@arm.com .value("Write", Flags::Write) 5911986Sandreas.sandberg@arm.com .value("Execute", Flags::Execute) 6011986Sandreas.sandberg@arm.com .export_values(); 6111986Sandreas.sandberg@arm.com 6211986Sandreas.sandberg@arm.com py::class_<ClassWithUnscopedEnum> exenum_class(m, "ClassWithUnscopedEnum"); 6311986Sandreas.sandberg@arm.com exenum_class.def_static("test_function", &ClassWithUnscopedEnum::test_function); 6411986Sandreas.sandberg@arm.com py::enum_<ClassWithUnscopedEnum::EMode>(exenum_class, "EMode") 6511986Sandreas.sandberg@arm.com .value("EFirstMode", ClassWithUnscopedEnum::EFirstMode) 6611986Sandreas.sandberg@arm.com .value("ESecondMode", ClassWithUnscopedEnum::ESecondMode) 6711986Sandreas.sandberg@arm.com .export_values(); 6811986Sandreas.sandberg@arm.com}); 69