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

Function TEST

cpp/src/arrow/array/array_binary_test.cc:386–461  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

384}
385
386TEST(StringViewArray, Validate) {
387 // Since this is a test of validation, we need to be able to construct invalid arrays.
388 auto buffer_s = Buffer::FromString("supercalifragilistic(sp?)");
389 auto buffer_y = Buffer::FromString("yyyyyyyyyyyyyyyyyyyyyyyyy");
390
391 // empty array is valid
392 EXPECT_THAT(MakeBinaryViewArray({}, {}), Ok());
393
394 // empty array with some data buffers is valid
395 EXPECT_THAT(MakeBinaryViewArray({buffer_s, buffer_y}, {}), Ok());
396
397 // inline views need not have a corresponding buffer
398 EXPECT_THAT(MakeBinaryViewArray({},
399 {
400 util::ToInlineBinaryView("hello"),
401 util::ToInlineBinaryView("world"),
402 util::ToInlineBinaryView("inline me"),
403 }),
404 Ok());
405
406 // non-inline views are expected to reference only buffers managed by the array
407 EXPECT_THAT(
408 MakeBinaryViewArray(
409 {buffer_s, buffer_y},
410 {util::ToBinaryView("supe", static_cast<int32_t>(buffer_s->size()), 0, 0),
411 util::ToBinaryView("yyyy", static_cast<int32_t>(buffer_y->size()), 1, 0)}),
412 Ok());
413
414 // views may not reference data buffers not present in the array
415 EXPECT_THAT(
416 MakeBinaryViewArray(
417 {}, {util::ToBinaryView("supe", static_cast<int32_t>(buffer_s->size()), 0, 0)}),
418 Raises(StatusCode::IndexError));
419 // ... or ranges which overflow the referenced data buffer
420 EXPECT_THAT(
421 MakeBinaryViewArray(
422 {buffer_s}, {util::ToBinaryView(
423 "supe", static_cast<int32_t>(buffer_s->size() + 50), 0, 0)}),
424 Raises(StatusCode::IndexError));
425
426 // Additionally, the prefixes of non-inline views must match the data buffer
427 EXPECT_THAT(
428 MakeBinaryViewArray(
429 {buffer_s, buffer_y},
430 {util::ToBinaryView("SUPE", static_cast<int32_t>(buffer_s->size()), 0, 0),
431 util::ToBinaryView("yyyy", static_cast<int32_t>(buffer_y->size()), 1, 0)}),
432 Raises(StatusCode::Invalid));
433
434 // Invalid string views which are masked by a null bit do not cause validation to fail
435 auto invalid_but_masked =
436 MakeBinaryViewArray(
437 {buffer_s},
438 {util::ToBinaryView("SUPE", static_cast<int32_t>(buffer_s->size()), 0, 0),
439 util::ToBinaryView("yyyy", 50, 40, 30)},
440 /*validate=*/false)
441 .ValueOrDie()
442 ->data();
443 invalid_but_masked->null_count = 2;

Callers

nothing calls this directly

Calls 15

FromStringFunction · 0.85
MakeBinaryViewArrayFunction · 0.85
OkFunction · 0.85
ToInlineBinaryViewFunction · 0.85
ToBinaryViewFunction · 0.85
RaisesFunction · 0.85
AllocateEmptyBitmapFunction · 0.85
ValidateArrayFullFunction · 0.85
ValueOrDieMethod · 0.80
sizeMethod · 0.45
dataMethod · 0.45
AppendMethod · 0.45

Tested by

no test coverage detected