|
10 | 10 |
|
11 | 11 | namespace sparrow_ipc |
12 | 12 | { |
13 | | - namespace sp = sparrow; |
14 | | - |
15 | | - using testing_types = std::tuple< |
16 | | - int, |
17 | | - float, |
18 | | - double>; |
19 | | - |
20 | | - template <typename T> |
21 | | - void compare_bitmap(sparrow::primitive_array<T>& pa1, sparrow::primitive_array<T>& pa2) |
22 | | - { |
23 | | - const auto pa1_bitmap = pa1.bitmap(); |
24 | | - const auto pa2_bitmap = pa2.bitmap(); |
25 | | - |
26 | | - CHECK_EQ(pa1_bitmap.size(), pa2_bitmap.size()); |
27 | | - auto pa1_it = pa1_bitmap.begin(); |
28 | | - auto pa2_it = pa2_bitmap.begin(); |
29 | | - for (size_t i = 0; i < pa1_bitmap.size(); ++i) |
30 | | - { |
31 | | - CHECK_EQ(*pa1_it, *pa2_it); |
32 | | - ++pa1_it; |
33 | | - ++pa2_it; |
34 | | - } |
35 | | - } |
36 | | - |
37 | | - template <typename T> |
38 | | - void compare_metadata(sparrow::primitive_array<T>& pa1, sparrow::primitive_array<T>& pa2) |
39 | | - { |
40 | | - if (!pa1.metadata().has_value()) |
41 | | - { |
42 | | - CHECK(!pa2.metadata().has_value()); |
43 | | - return; |
44 | | - } |
45 | | - |
46 | | - CHECK(pa2.metadata().has_value()); |
47 | | - sparrow::key_value_view kvs1_view = *(pa1.metadata()); |
48 | | - sparrow::key_value_view kvs2_view = *(pa2.metadata()); |
49 | | - |
50 | | - CHECK_EQ(kvs1_view.size(), kvs2_view.size()); |
51 | | - std::vector<std::pair<std::string, std::string>> kvs1, kvs2; |
52 | | - auto kvs1_it = kvs1_view.cbegin(); |
53 | | - auto kvs2_it = kvs2_view.cbegin(); |
54 | | - for (auto i = 0; i < kvs1_view.size(); ++i) |
55 | | - { |
56 | | - CHECK_EQ(*kvs1_it, *kvs2_it); |
57 | | - ++kvs1_it; |
58 | | - ++kvs2_it; |
59 | | - } |
60 | | - } |
61 | | - |
62 | | - TEST_CASE_TEMPLATE_DEFINE("Serialize and Deserialize primitive_array", T, primitive_array_types) |
63 | | - { |
64 | | - auto create_primitive_array = []() -> sp::primitive_array<T> { |
65 | | - if constexpr (std::is_same_v<T, int>) |
66 | | - { |
67 | | - return {10, 20, 30, 40, 50}; |
68 | | - } |
69 | | - else if constexpr (std::is_same_v<T, float>) |
70 | | - { |
71 | | - return {10.5f, 20.5f, 30.5f, 40.5f, 50.5f}; |
72 | | - } |
73 | | - else if constexpr (std::is_same_v<T, double>) |
74 | | - { |
75 | | - return {10.1, 20.2, 30.3, 40.4, 50.5}; |
76 | | - } |
77 | | - else |
78 | | - { |
79 | | - FAIL("Unsupported type for templated test case"); |
80 | | - } |
81 | | - }; |
82 | | - |
83 | | - sp::primitive_array<T> ar = create_primitive_array(); |
84 | | - |
85 | | - std::vector<uint8_t> serialized_data = serialize_primitive_array(ar); |
86 | | - |
87 | | - CHECK(serialized_data.size() > 0); |
88 | | - |
89 | | - sp::primitive_array<T> deserialized_ar = deserialize_primitive_array<T>(serialized_data); |
90 | | - |
91 | | - CHECK_EQ(ar, deserialized_ar); |
92 | | - |
93 | | - compare_bitmap<T>(ar, deserialized_ar); |
94 | | - compare_metadata<T>(ar, deserialized_ar); |
95 | | - } |
96 | | - |
97 | | - TEST_CASE_TEMPLATE_APPLY(primitive_array_types, testing_types); |
98 | | - |
99 | | - TEST_CASE("Serialize and Deserialize primitive_array - int with nulls") |
100 | | - { |
101 | | - // Data buffer |
102 | | - sp::u8_buffer<int> data_buffer = {100, 200, 300, 400, 500}; |
103 | | - |
104 | | - // Validity bitmap: 100 (valid), 200 (valid), 300 (null), 400 (valid), 500 (null) |
105 | | - sp::validity_bitmap validity(5, true); // All valid initially |
106 | | - validity.set(2, false); // Set index 2 to null |
107 | | - validity.set(4, false); // Set index 4 to null |
108 | | - |
109 | | - sp::primitive_array<int> ar(std::move(data_buffer), std::move(validity)); |
110 | | - |
111 | | - std::vector<uint8_t> serialized_data = serialize_primitive_array(ar); |
112 | | - |
113 | | - CHECK(serialized_data.size() > 0); |
114 | | - |
115 | | - sp::primitive_array<int> deserialized_ar = deserialize_primitive_array<int>(serialized_data); |
116 | | - |
117 | | - CHECK_EQ(ar, deserialized_ar); |
118 | | - |
119 | | - compare_bitmap<int>(ar, deserialized_ar); |
120 | | - compare_metadata<int>(ar, deserialized_ar); |
121 | | - } |
122 | | - |
123 | | - TEST_CASE("Serialize and Deserialize primitive_array - with name and metadata") |
124 | | - { |
125 | | - // Data buffer |
126 | | - sp::u8_buffer<int> data_buffer = {1, 2, 3}; |
127 | | - |
128 | | - // Validity bitmap: All valid |
129 | | - sp::validity_bitmap validity(3, true); |
130 | | - |
131 | | - // Custom metadata |
132 | | - std::vector<sp::metadata_pair> metadata = { |
133 | | - {"key1", "value1"}, |
134 | | - {"key2", "value2"} |
135 | | - }; |
136 | | - |
137 | | - sp::primitive_array<int> ar( |
138 | | - std::move(data_buffer), |
139 | | - std::move(validity), |
140 | | - "my_named_array", // name |
141 | | - std::make_optional(std::vector<sparrow::metadata_pair>{{"key1", "value1"}, {"key2", "value2"}}) |
142 | | - ); |
143 | | - |
144 | | - std::vector<uint8_t> serialized_data = serialize_primitive_array(ar); |
145 | | - |
146 | | - CHECK(serialized_data.size() > 0); |
147 | | - |
148 | | - sp::primitive_array<int> deserialized_ar = deserialize_primitive_array<int>(serialized_data); |
149 | | - |
150 | | - CHECK_EQ(ar, deserialized_ar); |
151 | | - |
152 | | - compare_bitmap<int>(ar, deserialized_ar); |
153 | | - compare_metadata<int>(ar, deserialized_ar); |
154 | | - } |
| 13 | +// namespace sp = sparrow; |
| 14 | +// |
| 15 | +// using testing_types = std::tuple< |
| 16 | +// int, |
| 17 | +// float, |
| 18 | +// double>; |
| 19 | +// |
| 20 | +// template <typename T> |
| 21 | +// void compare_bitmap(sparrow::primitive_array<T>& pa1, sparrow::primitive_array<T>& pa2) |
| 22 | +// { |
| 23 | +// const auto pa1_bitmap = pa1.bitmap(); |
| 24 | +// const auto pa2_bitmap = pa2.bitmap(); |
| 25 | +// |
| 26 | +// CHECK_EQ(pa1_bitmap.size(), pa2_bitmap.size()); |
| 27 | +// auto pa1_it = pa1_bitmap.begin(); |
| 28 | +// auto pa2_it = pa2_bitmap.begin(); |
| 29 | +// for (size_t i = 0; i < pa1_bitmap.size(); ++i) |
| 30 | +// { |
| 31 | +// CHECK_EQ(*pa1_it, *pa2_it); |
| 32 | +// ++pa1_it; |
| 33 | +// ++pa2_it; |
| 34 | +// } |
| 35 | +// } |
| 36 | +// |
| 37 | +// template <typename T> |
| 38 | +// void compare_metadata(sparrow::primitive_array<T>& pa1, sparrow::primitive_array<T>& pa2) |
| 39 | +// { |
| 40 | +// if (!pa1.metadata().has_value()) |
| 41 | +// { |
| 42 | +// CHECK(!pa2.metadata().has_value()); |
| 43 | +// return; |
| 44 | +// } |
| 45 | +// |
| 46 | +// CHECK(pa2.metadata().has_value()); |
| 47 | +// sparrow::key_value_view kvs1_view = *(pa1.metadata()); |
| 48 | +// sparrow::key_value_view kvs2_view = *(pa2.metadata()); |
| 49 | +// |
| 50 | +// CHECK_EQ(kvs1_view.size(), kvs2_view.size()); |
| 51 | +// std::vector<std::pair<std::string, std::string>> kvs1, kvs2; |
| 52 | +// auto kvs1_it = kvs1_view.cbegin(); |
| 53 | +// auto kvs2_it = kvs2_view.cbegin(); |
| 54 | +// for (auto i = 0; i < kvs1_view.size(); ++i) |
| 55 | +// { |
| 56 | +// CHECK_EQ(*kvs1_it, *kvs2_it); |
| 57 | +// ++kvs1_it; |
| 58 | +// ++kvs2_it; |
| 59 | +// } |
| 60 | +// } |
| 61 | +// |
| 62 | +// TEST_CASE_TEMPLATE_DEFINE("Serialize and Deserialize primitive_array", T, primitive_array_types) |
| 63 | +// { |
| 64 | +// auto create_primitive_array = []() -> sp::primitive_array<T> { |
| 65 | +// if constexpr (std::is_same_v<T, int>) |
| 66 | +// { |
| 67 | +// return {10, 20, 30, 40, 50}; |
| 68 | +// } |
| 69 | +// else if constexpr (std::is_same_v<T, float>) |
| 70 | +// { |
| 71 | +// return {10.5f, 20.5f, 30.5f, 40.5f, 50.5f}; |
| 72 | +// } |
| 73 | +// else if constexpr (std::is_same_v<T, double>) |
| 74 | +// { |
| 75 | +// return {10.1, 20.2, 30.3, 40.4, 50.5}; |
| 76 | +// } |
| 77 | +// else |
| 78 | +// { |
| 79 | +// FAIL("Unsupported type for templated test case"); |
| 80 | +// } |
| 81 | +// }; |
| 82 | +// |
| 83 | +// sp::primitive_array<T> ar = create_primitive_array(); |
| 84 | +// |
| 85 | +// std::vector<uint8_t> serialized_data = serialize_primitive_array(ar); |
| 86 | +// |
| 87 | +// CHECK(serialized_data.size() > 0); |
| 88 | +// |
| 89 | +// sp::primitive_array<T> deserialized_ar = deserialize_primitive_array<T>(serialized_data); |
| 90 | +// |
| 91 | +// CHECK_EQ(ar, deserialized_ar); |
| 92 | +// |
| 93 | +// compare_bitmap<T>(ar, deserialized_ar); |
| 94 | +// compare_metadata<T>(ar, deserialized_ar); |
| 95 | +// } |
| 96 | +// |
| 97 | +// TEST_CASE_TEMPLATE_APPLY(primitive_array_types, testing_types); |
| 98 | +// |
| 99 | +// TEST_CASE("Serialize and Deserialize primitive_array - int with nulls") |
| 100 | +// { |
| 101 | +// // Data buffer |
| 102 | +// sp::u8_buffer<int> data_buffer = {100, 200, 300, 400, 500}; |
| 103 | +// |
| 104 | +// // Validity bitmap: 100 (valid), 200 (valid), 300 (null), 400 (valid), 500 (null) |
| 105 | +// sp::validity_bitmap validity(5, true); // All valid initially |
| 106 | +// validity.set(2, false); // Set index 2 to null |
| 107 | +// validity.set(4, false); // Set index 4 to null |
| 108 | +// |
| 109 | +// sp::primitive_array<int> ar(std::move(data_buffer), std::move(validity)); |
| 110 | +// |
| 111 | +// std::vector<uint8_t> serialized_data = serialize_primitive_array(ar); |
| 112 | +// |
| 113 | +// CHECK(serialized_data.size() > 0); |
| 114 | +// |
| 115 | +// sp::primitive_array<int> deserialized_ar = deserialize_primitive_array<int>(serialized_data); |
| 116 | +// |
| 117 | +// CHECK_EQ(ar, deserialized_ar); |
| 118 | +// |
| 119 | +// compare_bitmap<int>(ar, deserialized_ar); |
| 120 | +// compare_metadata<int>(ar, deserialized_ar); |
| 121 | +// } |
| 122 | +// |
| 123 | +// TEST_CASE("Serialize and Deserialize primitive_array - with name and metadata") |
| 124 | +// { |
| 125 | +// // Data buffer |
| 126 | +// sp::u8_buffer<int> data_buffer = {1, 2, 3}; |
| 127 | +// |
| 128 | +// // Validity bitmap: All valid |
| 129 | +// sp::validity_bitmap validity(3, true); |
| 130 | +// |
| 131 | +// // Custom metadata |
| 132 | +// std::vector<sp::metadata_pair> metadata = { |
| 133 | +// {"key1", "value1"}, |
| 134 | +// {"key2", "value2"} |
| 135 | +// }; |
| 136 | +// |
| 137 | +// sp::primitive_array<int> ar( |
| 138 | +// std::move(data_buffer), |
| 139 | +// std::move(validity), |
| 140 | +// "my_named_array", // name |
| 141 | +// std::make_optional(std::vector<sparrow::metadata_pair>{{"key1", "value1"}, {"key2", "value2"}}) |
| 142 | +// ); |
| 143 | +// |
| 144 | +// std::vector<uint8_t> serialized_data = serialize_primitive_array(ar); |
| 145 | +// |
| 146 | +// CHECK(serialized_data.size() > 0); |
| 147 | +// |
| 148 | +// sp::primitive_array<int> deserialized_ar = deserialize_primitive_array<int>(serialized_data); |
| 149 | +// |
| 150 | +// CHECK_EQ(ar, deserialized_ar); |
| 151 | +// |
| 152 | +// compare_bitmap<int>(ar, deserialized_ar); |
| 153 | +// compare_metadata<int>(ar, deserialized_ar); |
| 154 | +// } |
155 | 155 | } |
0 commit comments