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