From 669e14269d58620a75ec85bd8cdb93776769a8ae Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Tue, 21 Jun 2016 21:05:29 +0100 Subject: [PATCH] Add test for a function accepting recarray (WIP) --- example/example20.cpp | 22 ++++++++++++++++++++++ example/example20.py | 10 +++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/example/example20.cpp b/example/example20.cpp index 7066e321..1d4088fd 100644 --- a/example/example20.cpp +++ b/example/example20.cpp @@ -21,17 +21,29 @@ struct Struct { float z; }; +std::ostream& operator<<(std::ostream& os, const Struct& v) { + return os << v.x << "," << v.y << "," << v.z; +} + struct PackedStruct { bool x; uint32_t y; float z; } __attribute__((packed)); +std::ostream& operator<<(std::ostream& os, const PackedStruct& v) { + return os << v.x << "," << v.y << "," << v.z; +} + struct NestedStruct { Struct a; PackedStruct b; } __attribute__((packed)); +std::ostream& operator<<(std::ostream& os, const NestedStruct& v) { + return os << v.a << "|" << v.b; +} + template py::array mkarray_via_buffer(size_t n) { return py::array(py::buffer_info(nullptr, sizeof(T), @@ -59,6 +71,13 @@ py::array_t create_nested(size_t n) { return arr; } +template +void print_recarray(py::array_t arr) { + auto buf = arr.request(); + auto ptr = static_cast(buf.ptr); + for (size_t i = 0; i < buf.size; i++) + std::cout << ptr[i] << std::endl; +} void print_format_descriptors() { std::cout << py::format_descriptor::value() << std::endl; @@ -75,4 +94,7 @@ void init_ex20(py::module &m) { m.def("create_rec_packed", &create_recarray); m.def("create_rec_nested", &create_nested); m.def("print_format_descriptors", &print_format_descriptors); + m.def("print_rec_simple", &print_recarray); + m.def("print_rec_packed", &print_recarray); + m.def("print_rec_nested", &print_recarray); } diff --git a/example/example20.py b/example/example20.py index 83a914c2..78e717d9 100644 --- a/example/example20.py +++ b/example/example20.py @@ -3,7 +3,8 @@ from __future__ import print_function import numpy as np from example import ( - create_rec_simple, create_rec_packed, create_rec_nested, print_format_descriptors + create_rec_simple, create_rec_packed, create_rec_nested, print_format_descriptors, + print_rec_simple, print_rec_packed, print_rec_nested ) @@ -28,6 +29,12 @@ for func, dtype in [(create_rec_simple, simple_dtype), (create_rec_packed, packe check_eq(arr, [(False, 0, 0.0), (True, 1, 1.5), (False, 2, 3.0)], simple_dtype) check_eq(arr, [(False, 0, 0.0), (True, 1, 1.5), (False, 2, 3.0)], packed_dtype) + # uncomment lines below to cause a segfault upon exit in Py_Finalize :( + + # if dtype == simple_dtype: + # print_rec_simple(arr) + # else: + # print_rec_packed(arr) nested_dtype = np.dtype([('a', simple_dtype), ('b', packed_dtype)]) @@ -40,3 +47,4 @@ assert arr.dtype == nested_dtype check_eq(arr, [((False, 0, 0.0), (True, 1, 1.5)), ((True, 1, 1.5), (False, 2, 3.0)), ((False, 2, 3.0), (True, 3, 4.5))], nested_dtype) +# print_rec_nested(arr)