in c/validation/adbc_validation_util.h [337:399]
void CompareArray(struct ArrowArrayView* array,
const std::vector<std::optional<T>>& values) {
ASSERT_EQ(static_cast<int64_t>(values.size()), array->array->length);
int64_t i = 0;
for (const auto& v : values) {
SCOPED_TRACE("Array index " + std::to_string(i));
if (v.has_value()) {
ASSERT_FALSE(ArrowArrayViewIsNull(array, i));
if constexpr (std::is_same<T, float>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_float[i]);
} else if constexpr (std::is_same<T, double>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_double[i]);
} else if constexpr (std::is_same<T, float>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_float[i]);
} else if constexpr (std::is_same<T, int8_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_int8[i]);
} else if constexpr (std::is_same<T, int16_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_int16[i]);
} else if constexpr (std::is_same<T, int32_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_int32[i]);
} else if constexpr (std::is_same<T, int64_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_int64[i]);
} else if constexpr (std::is_same<T, uint8_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_uint8[i]);
} else if constexpr (std::is_same<T, uint16_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_uint16[i]);
} else if constexpr (std::is_same<T, uint32_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_uint32[i]);
} else if constexpr (std::is_same<T, uint64_t>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
ASSERT_EQ(*v, array->buffer_views[1].data.as_uint64[i]);
} else if constexpr (std::is_same<T, std::string>::value) {
struct ArrowStringView view = ArrowArrayViewGetStringUnsafe(array, i);
std::string str(view.data, view.size_bytes);
ASSERT_EQ(*v, str);
} else if constexpr (std::is_same<T, ArrowInterval*>::value) {
ASSERT_NE(array->buffer_views[1].data.data, nullptr);
struct ArrowInterval interval;
ArrowIntervalInit(&interval, ArrowType::NANOARROW_TYPE_INTERVAL_MONTH_DAY_NANO);
ArrowArrayViewGetIntervalUnsafe(array, i, &interval);
ASSERT_EQ(interval.months, (*v)->months);
ASSERT_EQ(interval.days, (*v)->days);
ASSERT_EQ(interval.ns, (*v)->ns);
} else {
static_assert(!sizeof(T), "Not yet implemented");
}
} else {
ASSERT_TRUE(ArrowArrayViewIsNull(array, i));
}
i++;
}
}