test_enum.cpp
Go to the documentation of this file.
1 /*
2  tests/test_enums.cpp -- enumerations
3 
4  Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
5 
6  All rights reserved. Use of this source code is governed by a
7  BSD-style license that can be found in the LICENSE file.
8 */
9 
10 #include "pybind11_tests.h"
11 
12 TEST_SUBMODULE(enums, m) {
13  // test_unscoped_enum
14  enum UnscopedEnum {
15  EOne = 1,
16  ETwo,
17  EThree
18  };
19  py::enum_<UnscopedEnum>(m, "UnscopedEnum", py::arithmetic(), "An unscoped enumeration")
20  .value("EOne", EOne, "Docstring for EOne")
21  .value("ETwo", ETwo, "Docstring for ETwo")
22  .value("EThree", EThree, "Docstring for EThree")
23  .export_values();
24 
25  // test_scoped_enum
26  enum class ScopedEnum {
27  Two = 2,
28  Three
29  };
30  py::enum_<ScopedEnum>(m, "ScopedEnum", py::arithmetic())
31  .value("Two", ScopedEnum::Two)
32  .value("Three", ScopedEnum::Three);
33 
34  m.def("test_scoped_enum", [](ScopedEnum z) {
35  return "ScopedEnum::" + std::string(z == ScopedEnum::Two ? "Two" : "Three");
36  });
37 
38  // test_binary_operators
39  enum Flags {
40  Read = 4,
41  Write = 2,
42  Execute = 1
43  };
44  py::enum_<Flags>(m, "Flags", py::arithmetic())
45  .value("Read", Flags::Read)
46  .value("Write", Flags::Write)
47  .value("Execute", Flags::Execute)
48  .export_values();
49 
50  // test_implicit_conversion
51  class ClassWithUnscopedEnum {
52  public:
53  enum EMode {
54  EFirstMode = 1,
55  ESecondMode
56  };
57 
58  static EMode test_function(EMode mode) {
59  return mode;
60  }
61  };
62  py::class_<ClassWithUnscopedEnum> exenum_class(m, "ClassWithUnscopedEnum");
63  exenum_class.def_static("test_function", &ClassWithUnscopedEnum::test_function);
64  py::enum_<ClassWithUnscopedEnum::EMode>(exenum_class, "EMode")
65  .value("EFirstMode", ClassWithUnscopedEnum::EFirstMode)
66  .value("ESecondMode", ClassWithUnscopedEnum::ESecondMode)
67  .export_values();
68 
69  // test_enum_to_int
70  m.def("test_enum_to_int", [](int) { });
71  m.def("test_enum_to_uint", [](uint32_t) { });
72  m.def("test_enum_to_long_long", [](long long) { });
73 
74  // test_duplicate_enum_name
75  enum SimpleEnum
76  {
77  ONE, TWO, THREE
78  };
79 
80  m.def("register_bad_enum", [m]() {
81  py::enum_<SimpleEnum>(m, "SimpleEnum")
82  .value("ONE", SimpleEnum::ONE) //NOTE: all value function calls are called with the same first parameter value
83  .value("ONE", SimpleEnum::TWO)
84  .value("ONE", SimpleEnum::THREE)
85  .export_values();
86  });
87 }
Matrix3f m
unsigned int uint32_t
Definition: ms_stdint.h:85
TEST_SUBMODULE(enums, m)
Definition: test_enum.cpp:12


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:46:03