MCPcopy Create free account
hub / github.com/pybind/pybind11 / TEST_SUBMODULE

Function TEST_SUBMODULE

tests/test_builtin_casters.cpp:75–393  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73PYBIND11_NAMESPACE_END(pybind11)
74
75TEST_SUBMODULE(builtin_casters, m) {
76 PYBIND11_WARNING_PUSH
77 PYBIND11_WARNING_DISABLE_MSVC(4127)
78
79 // test_simple_string
80 m.def("string_roundtrip", [](const char *s) { return s; });
81
82 // test_unicode_conversion
83 // Some test characters in utf16 and utf32 encodings. The last one (the 𝐀) contains a null
84 // byte
85 char32_t a32 = 0x61 /*a*/, z32 = 0x7a /*z*/, ib32 = 0x203d /*‽*/, cake32 = 0x1f382 /*🎂*/,
86 mathbfA32 = 0x1d400 /*𝐀*/;
87 char16_t b16 = 0x62 /*b*/, z16 = 0x7a, ib16 = 0x203d, cake16_1 = 0xd83c, cake16_2 = 0xdf82,
88 mathbfA16_1 = 0xd835, mathbfA16_2 = 0xdc00;
89 std::wstring wstr;
90 wstr.push_back(0x61); // a
91 wstr.push_back(0x2e18); // ⸘
92 if (sizeof(wchar_t) == 2) {
93 wstr.push_back(mathbfA16_1);
94 wstr.push_back(mathbfA16_2);
95 } // 𝐀, utf16
96 else {
97 wstr.push_back((wchar_t) mathbfA32);
98 } // 𝐀, utf32
99 wstr.push_back(0x7a); // z
100
101 m.def("good_utf8_string", []() {
102 return std::string((const char *) u8"Say utf8\u203d \U0001f382 \U0001d400");
103 }); // Say utf8‽ 🎂 𝐀
104 m.def("good_utf16_string", [=]() {
105 return std::u16string({b16, ib16, cake16_1, cake16_2, mathbfA16_1, mathbfA16_2, z16});
106 }); // b‽🎂𝐀z
107 m.def("good_utf32_string",
108 [=]() { return std::u32string({a32, mathbfA32, cake32, ib32, z32}); }); // a𝐀🎂‽z
109 m.def("good_wchar_string", [=]() { return wstr; }); // a‽𝐀z
110 m.def("bad_utf8_string", []() {
111 return std::string("abc\xd0"
112 "def");
113 });
114 m.def("bad_utf16_string", [=]() { return std::u16string({b16, char16_t(0xd800), z16}); });
115 // Under Python 2.7, invalid unicode UTF-32 characters didn't appear to trigger
116 // UnicodeDecodeError
117 m.def("bad_utf32_string", [=]() { return std::u32string({a32, char32_t(0xd800), z32}); });
118 if (sizeof(wchar_t) == 2) {
119 m.def("bad_wchar_string",
120 [=]() { return std::wstring({wchar_t(0x61), wchar_t(0xd800)}); });
121 }
122 m.def("u8_Z", []() -> char { return 'Z'; });
123 m.def("u8_eacute", []() -> char { return '\xe9'; });
124 m.def("u16_ibang", [=]() -> char16_t { return ib16; });
125 m.def("u32_mathbfA", [=]() -> char32_t { return mathbfA32; });
126 m.def("wchar_heart", []() -> wchar_t { return 0x2665; });
127
128 // test_single_char_arguments
129 m.attr("wchar_size") = py::cast(sizeof(wchar_t));
130 m.def("ord_char", [](char c) -> int { return static_cast<unsigned char>(c); });
131 m.def("ord_char_lv", [](char &c) -> int { return static_cast<unsigned char>(c); });
132 m.def("ord_char16", [](char16_t c) -> uint16_t { return c; });

Callers

nothing calls this directly

Calls 15

printFunction · 0.85
bytesClass · 0.85
strClass · 0.85
make_tupleFunction · 0.85
refClass · 0.85
fFunction · 0.85
attrMethod · 0.80
castFunction · 0.70
argClass · 0.50
push_backMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected