MCPcopy Create free account
hub / github.com/apache/arrow / TEST

Function TEST

cpp/src/arrow/compute/row/row_encoder_internal_test.cc:31–66  ·  view source on GitHub ↗

GH-43733: Test that the key encoder can handle boolean scalar values well.

Source from the content-addressed store, hash-verified

29
30// GH-43733: Test that the key encoder can handle boolean scalar values well.
31TEST(TestKeyEncoder, BooleanScalar) {
32 for (auto scalar : {BooleanScalar{}, BooleanScalar{true}, BooleanScalar{false}}) {
33 BooleanKeyEncoder key_encoder;
34 SCOPED_TRACE("scalar " + scalar.ToString());
35 constexpr int64_t kBatchLength = 10;
36 std::array<int32_t, kBatchLength> lengths{};
37 key_encoder.AddLength(ExecValue{&scalar}, kBatchLength, lengths.data());
38 // Check that the lengths are all 2.
39 constexpr int32_t kPayloadWidth =
40 BooleanKeyEncoder::kByteWidth + BooleanKeyEncoder::kExtraByteForNull;
41 for (int i = 0; i < kBatchLength; ++i) {
42 ASSERT_EQ(kPayloadWidth, lengths[i]);
43 }
44 std::array<std::array<uint8_t, kPayloadWidth>, kBatchLength> payloads{};
45 std::array<uint8_t*, kBatchLength> payload_ptrs{};
46 // Reset the payload pointers to point to the beginning of each payload.
47 // This is necessary because the key encoder may have modified the pointers.
48 auto reset_payload_ptrs = [&payload_ptrs, &payloads]() {
49 std::transform(payloads.begin(), payloads.end(), payload_ptrs.begin(),
50 [](auto& payload) -> uint8_t* { return payload.data(); });
51 };
52 reset_payload_ptrs();
53 ASSERT_OK(key_encoder.Encode(ExecValue{&scalar}, kBatchLength, payload_ptrs.data()));
54 reset_payload_ptrs();
55 ASSERT_OK_AND_ASSIGN(auto array_data,
56 key_encoder.Decode(payload_ptrs.data(), kBatchLength,
57 ::arrow::default_memory_pool()));
58 ASSERT_EQ(kBatchLength, array_data->length);
59 auto boolean_array = std::make_shared<BooleanArray>(array_data);
60 ASSERT_OK(arrow::internal::ValidateArrayFull(*array_data));
61 ASSERT_OK_AND_ASSIGN(
62 auto expected_array,
63 MakeArrayFromScalar(scalar, kBatchLength, ::arrow::default_memory_pool()));
64 AssertArraysEqual(*expected_array, *boolean_array);
65 }
66}
67
68} // namespace arrow::compute::internal

Callers

nothing calls this directly

Calls 8

ValidateArrayFullFunction · 0.85
AssertArraysEqualFunction · 0.85
ToStringMethod · 0.45
AddLengthMethod · 0.45
dataMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
EncodeMethod · 0.45

Tested by

no test coverage detected