diff options
author | myrtle <gatecat@ds0.me> | 2022-09-15 09:06:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-15 09:06:35 +0200 |
commit | 3983d4fe53e2c609a5c76510aff8e998a4c22285 (patch) | |
tree | 1c4a543f661dd1b281aecf4660388491702fa8d8 /3rdparty/pybind11/tests/test_buffers.cpp | |
parent | f1349e114f3a16ccd002e8513339e18f5be4d31b (diff) | |
parent | a72f898ff4c4237424c468044a6db9d6953b541e (diff) | |
download | nextpnr-3983d4fe53e2c609a5c76510aff8e998a4c22285.tar.gz nextpnr-3983d4fe53e2c609a5c76510aff8e998a4c22285.tar.bz2 nextpnr-3983d4fe53e2c609a5c76510aff8e998a4c22285.zip |
Merge pull request #1024 from YosysHQ/gatecat/pybind11-bump
3rdparty: Bump vendored pybind11 version for py3.11 support
Diffstat (limited to '3rdparty/pybind11/tests/test_buffers.cpp')
-rw-r--r-- | 3rdparty/pybind11/tests/test_buffers.cpp | 134 |
1 files changed, 72 insertions, 62 deletions
diff --git a/3rdparty/pybind11/tests/test_buffers.cpp b/3rdparty/pybind11/tests/test_buffers.cpp index 46eabf39..6b6e8cba 100644 --- a/3rdparty/pybind11/tests/test_buffers.cpp +++ b/3rdparty/pybind11/tests/test_buffers.cpp @@ -7,27 +7,31 @@ BSD-style license that can be found in the LICENSE file. */ -#include "pybind11_tests.h" -#include "constructor_stats.h" #include <pybind11/stl.h> +#include "constructor_stats.h" +#include "pybind11_tests.h" + TEST_SUBMODULE(buffers, m) { // test_from_python / test_to_python: class Matrix { public: Matrix(py::ssize_t rows, py::ssize_t cols) : m_rows(rows), m_cols(cols) { print_created(this, std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); - m_data = new float[(size_t) (rows*cols)]; + // NOLINTNEXTLINE(cppcoreguidelines-prefer-member-initializer) + m_data = new float[(size_t) (rows * cols)]; memset(m_data, 0, sizeof(float) * (size_t) (rows * cols)); } Matrix(const Matrix &s) : m_rows(s.m_rows), m_cols(s.m_cols) { - print_copy_created(this, std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); + print_copy_created(this, + std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); + // NOLINTNEXTLINE(cppcoreguidelines-prefer-member-initializer) m_data = new float[(size_t) (m_rows * m_cols)]; memcpy(m_data, s.m_data, sizeof(float) * (size_t) (m_rows * m_cols)); } - Matrix(Matrix &&s) : m_rows(s.m_rows), m_cols(s.m_cols), m_data(s.m_data) { + Matrix(Matrix &&s) noexcept : m_rows(s.m_rows), m_cols(s.m_cols), m_data(s.m_data) { print_move_created(this); s.m_rows = 0; s.m_cols = 0; @@ -35,12 +39,17 @@ TEST_SUBMODULE(buffers, m) { } ~Matrix() { - print_destroyed(this, std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); + print_destroyed(this, + std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); delete[] m_data; } Matrix &operator=(const Matrix &s) { - print_copy_assigned(this, std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); + if (this == &s) { + return *this; + } + print_copy_assigned(this, + std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); delete[] m_data; m_rows = s.m_rows; m_cols = s.m_cols; @@ -49,28 +58,34 @@ TEST_SUBMODULE(buffers, m) { return *this; } - Matrix &operator=(Matrix &&s) { - print_move_assigned(this, std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); + Matrix &operator=(Matrix &&s) noexcept { + print_move_assigned(this, + std::to_string(m_rows) + "x" + std::to_string(m_cols) + " matrix"); if (&s != this) { delete[] m_data; - m_rows = s.m_rows; m_cols = s.m_cols; m_data = s.m_data; - s.m_rows = 0; s.m_cols = 0; s.m_data = nullptr; + m_rows = s.m_rows; + m_cols = s.m_cols; + m_data = s.m_data; + s.m_rows = 0; + s.m_cols = 0; + s.m_data = nullptr; } return *this; } float operator()(py::ssize_t i, py::ssize_t j) const { - return m_data[(size_t) (i*m_cols + j)]; + return m_data[(size_t) (i * m_cols + j)]; } float &operator()(py::ssize_t i, py::ssize_t j) { - return m_data[(size_t) (i*m_cols + j)]; + return m_data[(size_t) (i * m_cols + j)]; } float *data() { return m_data; } py::ssize_t rows() const { return m_rows; } py::ssize_t cols() const { return m_cols; } + private: py::ssize_t m_rows; py::ssize_t m_cols; @@ -79,51 +94,51 @@ TEST_SUBMODULE(buffers, m) { py::class_<Matrix>(m, "Matrix", py::buffer_protocol()) .def(py::init<py::ssize_t, py::ssize_t>()) /// Construct from a buffer - .def(py::init([](py::buffer const b) { + .def(py::init([](const py::buffer &b) { py::buffer_info info = b.request(); - if (info.format != py::format_descriptor<float>::format() || info.ndim != 2) + if (info.format != py::format_descriptor<float>::format() || info.ndim != 2) { throw std::runtime_error("Incompatible buffer format!"); + } - auto v = new Matrix(info.shape[0], info.shape[1]); + auto *v = new Matrix(info.shape[0], info.shape[1]); memcpy(v->data(), info.ptr, sizeof(float) * (size_t) (v->rows() * v->cols())); return v; })) - .def("rows", &Matrix::rows) - .def("cols", &Matrix::cols) + .def("rows", &Matrix::rows) + .def("cols", &Matrix::cols) /// Bare bones interface - .def("__getitem__", [](const Matrix &m, std::pair<py::ssize_t, py::ssize_t> i) { - if (i.first >= m.rows() || i.second >= m.cols()) - throw py::index_error(); - return m(i.first, i.second); - }) - .def("__setitem__", [](Matrix &m, std::pair<py::ssize_t, py::ssize_t> i, float v) { - if (i.first >= m.rows() || i.second >= m.cols()) - throw py::index_error(); - m(i.first, i.second) = v; - }) - /// Provide buffer access - .def_buffer([](Matrix &m) -> py::buffer_info { + .def("__getitem__", + [](const Matrix &m, std::pair<py::ssize_t, py::ssize_t> i) { + if (i.first >= m.rows() || i.second >= m.cols()) { + throw py::index_error(); + } + return m(i.first, i.second); + }) + .def("__setitem__", + [](Matrix &m, std::pair<py::ssize_t, py::ssize_t> i, float v) { + if (i.first >= m.rows() || i.second >= m.cols()) { + throw py::index_error(); + } + m(i.first, i.second) = v; + }) + /// Provide buffer access + .def_buffer([](Matrix &m) -> py::buffer_info { return py::buffer_info( - m.data(), /* Pointer to buffer */ - { m.rows(), m.cols() }, /* Buffer dimensions */ - { sizeof(float) * size_t(m.cols()), /* Strides (in bytes) for each index */ - sizeof(float) } - ); - }) - ; - + m.data(), /* Pointer to buffer */ + {m.rows(), m.cols()}, /* Buffer dimensions */ + {sizeof(float) * size_t(m.cols()), /* Strides (in bytes) for each index */ + sizeof(float)}); + }); // test_inherited_protocol class SquareMatrix : public Matrix { public: - SquareMatrix(py::ssize_t n) : Matrix(n, n) { } + explicit SquareMatrix(py::ssize_t n) : Matrix(n, n) {} }; // Derived classes inherit the buffer protocol and the buffer access function - py::class_<SquareMatrix, Matrix>(m, "SquareMatrix") - .def(py::init<py::ssize_t>()); - + py::class_<SquareMatrix, Matrix>(m, "SquareMatrix").def(py::init<py::ssize_t>()); // test_pointer_to_member_fn // Tests that passing a pointer to member to the base class works in @@ -132,8 +147,8 @@ TEST_SUBMODULE(buffers, m) { int32_t value = 0; py::buffer_info get_buffer_info() { - return py::buffer_info(&value, sizeof(value), - py::format_descriptor<int32_t>::format(), 1); + return py::buffer_info( + &value, sizeof(value), py::format_descriptor<int32_t>::format(), 1); } }; py::class_<Buffer>(m, "Buffer", py::buffer_protocol()) @@ -141,7 +156,6 @@ TEST_SUBMODULE(buffers, m) { .def_readwrite("value", &Buffer::value) .def_buffer(&Buffer::get_buffer_info); - class ConstBuffer { std::unique_ptr<int32_t> value; @@ -150,18 +164,18 @@ TEST_SUBMODULE(buffers, m) { void set_value(int32_t v) { *value = v; } py::buffer_info get_buffer_info() const { - return py::buffer_info(value.get(), sizeof(*value), - py::format_descriptor<int32_t>::format(), 1); + return py::buffer_info( + value.get(), sizeof(*value), py::format_descriptor<int32_t>::format(), 1); } - ConstBuffer() : value(new int32_t{0}) { }; + ConstBuffer() : value(new int32_t{0}) {} }; py::class_<ConstBuffer>(m, "ConstBuffer", py::buffer_protocol()) .def(py::init<>()) .def_property("value", &ConstBuffer::get_value, &ConstBuffer::set_value) .def_buffer(&ConstBuffer::get_buffer_info); - struct DerivedBuffer : public Buffer { }; + struct DerivedBuffer : public Buffer {}; py::class_<DerivedBuffer>(m, "DerivedBuffer", py::buffer_protocol()) .def(py::init<>()) .def_readwrite("value", (int32_t DerivedBuffer::*) &DerivedBuffer::value) @@ -169,11 +183,9 @@ TEST_SUBMODULE(buffers, m) { struct BufferReadOnly { const uint8_t value = 0; - BufferReadOnly(uint8_t value): value(value) {} + explicit BufferReadOnly(uint8_t value) : value(value) {} - py::buffer_info get_buffer_info() { - return py::buffer_info(&value, 1); - } + py::buffer_info get_buffer_info() { return py::buffer_info(&value, 1); } }; py::class_<BufferReadOnly>(m, "BufferReadOnly", py::buffer_protocol()) .def(py::init<uint8_t>()) @@ -183,9 +195,7 @@ TEST_SUBMODULE(buffers, m) { uint8_t value = 0; bool readonly = false; - py::buffer_info get_buffer_info() { - return py::buffer_info(&value, 1, readonly); - } + py::buffer_info get_buffer_info() { return py::buffer_info(&value, 1, readonly); } }; py::class_<BufferReadOnlySelect>(m, "BufferReadOnlySelect", py::buffer_protocol()) .def(py::init<>()) @@ -204,11 +214,11 @@ TEST_SUBMODULE(buffers, m) { .def_readonly("strides", &py::buffer_info::strides) .def_readonly("readonly", &py::buffer_info::readonly) .def("__repr__", [](py::handle self) { - return py::str("itemsize={0.itemsize!r}, size={0.size!r}, format={0.format!r}, ndim={0.ndim!r}, shape={0.shape!r}, strides={0.strides!r}, readonly={0.readonly!r}").format(self); - }) - ; + return py::str("itemsize={0.itemsize!r}, size={0.size!r}, format={0.format!r}, " + "ndim={0.ndim!r}, shape={0.shape!r}, strides={0.strides!r}, " + "readonly={0.readonly!r}") + .format(self); + }); - m.def("get_buffer_info", [](py::buffer buffer) { - return buffer.request(); - }); + m.def("get_buffer_info", [](const py::buffer &buffer) { return buffer.request(); }); } |