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