test_constants_and_functions.cpp revision 11986
1/* 2 tests/test_constants_and_functions.cpp -- global constants and functions, enumerations, raw byte strings 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 12enum MyEnum { EFirstEntry = 1, ESecondEntry }; 13 14std::string test_function1() { 15 return "test_function()"; 16} 17 18std::string test_function2(MyEnum k) { 19 return "test_function(enum=" + std::to_string(k) + ")"; 20} 21 22std::string test_function3(int i) { 23 return "test_function(" + std::to_string(i) + ")"; 24} 25 26py::str test_function4(int, float) { return "test_function(int, float)"; } 27py::str test_function4(float, int) { return "test_function(float, int)"; } 28 29py::bytes return_bytes() { 30 const char *data = "\x01\x00\x02\x00"; 31 return std::string(data, 4); 32} 33 34std::string print_bytes(py::bytes bytes) { 35 std::string ret = "bytes["; 36 const auto value = static_cast<std::string>(bytes); 37 for (size_t i = 0; i < value.length(); ++i) { 38 ret += std::to_string(static_cast<int>(value[i])) + " "; 39 } 40 ret.back() = ']'; 41 return ret; 42} 43 44test_initializer constants_and_functions([](py::module &m) { 45 m.attr("some_constant") = py::int_(14); 46 47 m.def("test_function", &test_function1); 48 m.def("test_function", &test_function2); 49 m.def("test_function", &test_function3); 50 51#if defined(PYBIND11_OVERLOAD_CAST) 52 m.def("test_function", py::overload_cast<int, float>(&test_function4)); 53 m.def("test_function", py::overload_cast<float, int>(&test_function4)); 54#else 55 m.def("test_function", static_cast<py::str (*)(int, float)>(&test_function4)); 56 m.def("test_function", static_cast<py::str (*)(float, int)>(&test_function4)); 57#endif 58 59 py::enum_<MyEnum>(m, "MyEnum") 60 .value("EFirstEntry", EFirstEntry) 61 .value("ESecondEntry", ESecondEntry) 62 .export_values(); 63 64 m.def("return_bytes", &return_bytes); 65 m.def("print_bytes", &print_bytes); 66}); 67