| 1486 | namespace { |
| 1487 | |
| 1488 | void DoBitmapVisitAndWrite(int64_t part, bool with_offset) { |
| 1489 | int64_t bits = part * 4; |
| 1490 | |
| 1491 | random::RandomArrayGenerator rand(/*seed=*/0); |
| 1492 | auto arrow_data = rand.ArrayOf(boolean(), bits, 0); |
| 1493 | |
| 1494 | std::shared_ptr<Buffer>& arrow_buffer = arrow_data->data()->buffers[1]; |
| 1495 | |
| 1496 | Bitmap bm0(arrow_buffer, 0, part); |
| 1497 | Bitmap bm1(arrow_buffer, part * 1, part); |
| 1498 | Bitmap bm2(arrow_buffer, part * 2, part); |
| 1499 | |
| 1500 | std::array<Bitmap, 2> out_bms; |
| 1501 | std::shared_ptr<Buffer> out, out0, out1; |
| 1502 | if (with_offset) { |
| 1503 | ASSERT_OK_AND_ASSIGN(out, AllocateBitmap(part * 4)); |
| 1504 | out_bms[0] = Bitmap(out, part, part); |
| 1505 | out_bms[1] = Bitmap(out, part * 2, part); |
| 1506 | } else { |
| 1507 | ASSERT_OK_AND_ASSIGN(out0, AllocateBitmap(part)); |
| 1508 | ASSERT_OK_AND_ASSIGN(out1, AllocateBitmap(part)); |
| 1509 | out_bms[0] = Bitmap(out0, 0, part); |
| 1510 | out_bms[1] = Bitmap(out1, 0, part); |
| 1511 | } |
| 1512 | |
| 1513 | // out0 = bm0 & bm1, out1= bm0 | bm2 |
| 1514 | std::array<Bitmap, 3> in_bms{bm0, bm1, bm2}; |
| 1515 | Bitmap::VisitWordsAndWrite( |
| 1516 | in_bms, &out_bms, |
| 1517 | [](const std::array<uint64_t, 3>& in, std::array<uint64_t, 2>* out) { |
| 1518 | out->at(0) = in[0] & in[1]; |
| 1519 | out->at(1) = in[0] | in[2]; |
| 1520 | }); |
| 1521 | |
| 1522 | auto pool = MemoryPool::CreateDefault(); |
| 1523 | ASSERT_OK_AND_ASSIGN(auto exp_0, BitmapAnd(pool.get(), bm0.data(), bm0.offset(), |
| 1524 | bm1.data(), bm1.offset(), part, 0)); |
| 1525 | ASSERT_OK_AND_ASSIGN(auto exp_1, BitmapOr(pool.get(), bm0.data(), bm0.offset(), |
| 1526 | bm2.data(), bm2.offset(), part, 0)); |
| 1527 | |
| 1528 | ASSERT_TRUE( |
| 1529 | BitmapEquals(exp_0->data(), 0, out_bms[0].data(), out_bms[0].offset(), part)) |
| 1530 | << "exp: " << Bitmap(exp_0->data(), 0, part).ToString() << std::endl |
| 1531 | << "got: " << out_bms[0].ToString(); |
| 1532 | |
| 1533 | ASSERT_TRUE( |
| 1534 | BitmapEquals(exp_1->data(), 0, out_bms[1].data(), out_bms[1].offset(), part)) |
| 1535 | << "exp: " << Bitmap(exp_1->data(), 0, part).ToString() << std::endl |
| 1536 | << "got: " << out_bms[1].ToString(); |
| 1537 | } |
| 1538 | |
| 1539 | } // namespace |
| 1540 |
no test coverage detected