MCPcopy Create free account
hub / github.com/bytedance/bolt / TEST_F

Function TEST_F

bolt/vector/tests/EnsureWritableVectorTest.cpp:45–171  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43};
44
45TEST_F(EnsureWritableVectorTest, flat) {
46 SelectivityVector rows(1'000);
47
48 VectorPtr result;
49 BaseVector::ensureWritable(rows, BIGINT(), pool(), result);
50 ASSERT_TRUE(result);
51 ASSERT_EQ(rows.size(), result->size());
52 ASSERT_EQ(TypeKind::BIGINT, result->typeKind());
53 ASSERT_EQ(VectorEncoding::Simple::FLAT, result->encoding());
54 ASSERT_TRUE(result->mayChangeContentUnderSameAddress());
55
56 auto* flatResult = result->asFlatVector<int64_t>();
57 for (vector_size_t i = 0; i < rows.size(); i++) {
58 if (i % 5 == 0) {
59 flatResult->setNull(i, true);
60 } else {
61 flatResult->set(i, i);
62 }
63 }
64
65 // Singly referenced vector with singly referenced buffers should be reused
66 // as-is
67 auto* rawNulls = flatResult->nulls().get();
68 auto* rawValues = flatResult->values().get();
69 BaseVector::ensureWritable(rows, BIGINT(), pool(), result);
70 ASSERT_EQ(flatResult, result.get());
71 ASSERT_EQ(rawNulls, flatResult->nulls().get());
72 ASSERT_EQ(rawValues, flatResult->values().get());
73
74 // Resize upwards singly-referenced vector with singly referenced buffers
75 rows.resize(2'000);
76 BaseVector::ensureWritable(rows, BIGINT(), pool(), result);
77 ASSERT_EQ(rows.size(), result->size());
78 ASSERT_EQ(flatResult, result.get());
79 rawNulls = flatResult->nulls().get();
80 rawValues = flatResult->values().get();
81
82 for (vector_size_t i = 0; i < rows.size(); i++) {
83 if (i % 5 == 0) {
84 flatResult->setNull(i, true);
85 } else {
86 flatResult->set(i, i);
87 }
88 }
89
90 // Resize downwards
91 rows.resize(1'024);
92 BaseVector::ensureWritable(rows, BIGINT(), pool(), result);
93 ASSERT_EQ(2'000, result->size());
94 ASSERT_EQ(rawNulls, flatResult->nulls().get());
95 ASSERT_EQ(rawValues, flatResult->values().get());
96
97 // Add second reference to the vector -> new vector should be allocated
98 auto resultCopy = result;
99
100 BaseVector::ensureWritable(rows, BIGINT(), pool(), result);
101 ASSERT_NE(flatResult, result.get());
102 ASSERT_TRUE(result->mayChangeContentUnderSameAddress());

Callers

nothing calls this directly

Calls 15

ensureWritableFunction · 0.85
isBitNullFunction · 0.85
wrapInDictionaryFunction · 0.85
selectOddRowsFunction · 0.85
ARRAYFunction · 0.85
MAPFunction · 0.85
checkVectorFlagsResetFunction · 0.85
strMethod · 0.80
setValidMethod · 0.80
updateBoundsMethod · 0.80
kindEqualsMethod · 0.80

Tested by

no test coverage detected