test_enum.cpp revision 12391
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 1212391Sjason@lowepower.comTEST_SUBMODULE(enums, m) { 1312391Sjason@lowepower.com // test_unscoped_enum 1412391Sjason@lowepower.com enum UnscopedEnum { 1512391Sjason@lowepower.com EOne = 1, 1612391Sjason@lowepower.com ETwo 1711986Sandreas.sandberg@arm.com }; 1811986Sandreas.sandberg@arm.com py::enum_<UnscopedEnum>(m, "UnscopedEnum", py::arithmetic()) 1911986Sandreas.sandberg@arm.com .value("EOne", EOne) 2011986Sandreas.sandberg@arm.com .value("ETwo", ETwo) 2111986Sandreas.sandberg@arm.com .export_values(); 2211986Sandreas.sandberg@arm.com 2312391Sjason@lowepower.com // test_scoped_enum 2412391Sjason@lowepower.com enum class ScopedEnum { 2512391Sjason@lowepower.com Two = 2, 2612391Sjason@lowepower.com Three 2712391Sjason@lowepower.com }; 2811986Sandreas.sandberg@arm.com py::enum_<ScopedEnum>(m, "ScopedEnum", py::arithmetic()) 2911986Sandreas.sandberg@arm.com .value("Two", ScopedEnum::Two) 3011986Sandreas.sandberg@arm.com .value("Three", ScopedEnum::Three); 3111986Sandreas.sandberg@arm.com 3212391Sjason@lowepower.com m.def("test_scoped_enum", [](ScopedEnum z) { 3312391Sjason@lowepower.com return "ScopedEnum::" + std::string(z == ScopedEnum::Two ? "Two" : "Three"); 3412391Sjason@lowepower.com }); 3512391Sjason@lowepower.com 3612391Sjason@lowepower.com // test_binary_operators 3712391Sjason@lowepower.com enum Flags { 3812391Sjason@lowepower.com Read = 4, 3912391Sjason@lowepower.com Write = 2, 4012391Sjason@lowepower.com Execute = 1 4112391Sjason@lowepower.com }; 4211986Sandreas.sandberg@arm.com py::enum_<Flags>(m, "Flags", py::arithmetic()) 4311986Sandreas.sandberg@arm.com .value("Read", Flags::Read) 4411986Sandreas.sandberg@arm.com .value("Write", Flags::Write) 4511986Sandreas.sandberg@arm.com .value("Execute", Flags::Execute) 4611986Sandreas.sandberg@arm.com .export_values(); 4711986Sandreas.sandberg@arm.com 4812391Sjason@lowepower.com // test_implicit_conversion 4912391Sjason@lowepower.com class ClassWithUnscopedEnum { 5012391Sjason@lowepower.com public: 5112391Sjason@lowepower.com enum EMode { 5212391Sjason@lowepower.com EFirstMode = 1, 5312391Sjason@lowepower.com ESecondMode 5412391Sjason@lowepower.com }; 5512391Sjason@lowepower.com 5612391Sjason@lowepower.com static EMode test_function(EMode mode) { 5712391Sjason@lowepower.com return mode; 5812391Sjason@lowepower.com } 5912391Sjason@lowepower.com }; 6011986Sandreas.sandberg@arm.com py::class_<ClassWithUnscopedEnum> exenum_class(m, "ClassWithUnscopedEnum"); 6111986Sandreas.sandberg@arm.com exenum_class.def_static("test_function", &ClassWithUnscopedEnum::test_function); 6211986Sandreas.sandberg@arm.com py::enum_<ClassWithUnscopedEnum::EMode>(exenum_class, "EMode") 6311986Sandreas.sandberg@arm.com .value("EFirstMode", ClassWithUnscopedEnum::EFirstMode) 6411986Sandreas.sandberg@arm.com .value("ESecondMode", ClassWithUnscopedEnum::ESecondMode) 6511986Sandreas.sandberg@arm.com .export_values(); 6612391Sjason@lowepower.com 6712391Sjason@lowepower.com // test_enum_to_int 6812391Sjason@lowepower.com m.def("test_enum_to_int", [](int) { }); 6912391Sjason@lowepower.com m.def("test_enum_to_uint", [](uint32_t) { }); 7012391Sjason@lowepower.com m.def("test_enum_to_long_long", [](long long) { }); 7112391Sjason@lowepower.com} 72