@@ -51,27 +51,31 @@ class BatchDataGenerator {
5151 auto generate (RowTypePtr& rowType,
5252 int rowVectorSize,
5353 vector_size_t vectorSize,
54+ bool withZero,
5455 bool withNull) {
56+ std::mt19937 gen{std::mt19937::default_seed};
5557 std::vector<RowVectorPtr> batches;
5658 for (int i = 0 ; i < rowVectorSize; ++i) {
57- auto batch =
58- createRowVector ( rowType, vectorSize, withNull ? randomNulls (7 ) : nullptr );
59+ auto batch = createRowVector (
60+ rowType, vectorSize, gen, withZero , withNull ? randomNulls (7 ) : nullptr );
5961 batches.push_back (batch);
6062 }
6163 return batches;
6264 }
6365
6466 RowVectorPtr createRowVector (RowTypePtr& rowType,
6567 vector_size_t vectorSize,
68+ std::mt19937& gen,
69+ bool withZero,
6670 std::function<bool (vector_size_t )> isNullAt = nullptr) {
67- std::mt19937 gen{std::mt19937::default_seed};
6871 std::vector<VectorPtr> children;
6972 for (uint32_t i = 0 ; i < rowType->size (); ++i) {
7073 auto vectorPtr = VELOX_DYNAMIC_SCALAR_TYPE_DISPATCH (createScalar,
7174 rowType->childAt (i)->kind (),
7275 rowType->childAt (i),
7376 vectorSize,
7477 gen,
78+ withZero,
7579 isNullAt);
7680 children.emplace_back (vectorPtr);
7781 }
@@ -88,10 +92,30 @@ class BatchDataGenerator {
8892 template <typename T>
8993 T gen_value (std::mt19937& gen);
9094
95+ template <typename T>
96+ static constexpr bool is_integral_type =
97+ std::is_same_v<int8_t , T> || std::is_same_v<int16_t , T> ||
98+ std::is_same_v<int32_t , T> || std::is_same_v<int64_t , T>;
99+
100+ template <typename T, typename std::enable_if_t <is_integral_type<T>, bool > = true >
101+ T gen_value (std::mt19937& gen, bool withZero) {
102+ T v = gen_value<T>(gen);
103+ while (!withZero && v == 0 ) {
104+ v = gen_value<T>(gen);
105+ }
106+ return v;
107+ }
108+
109+ template <typename T, typename std::enable_if_t <!is_integral_type<T>, bool > = true >
110+ T gen_value (std::mt19937& gen, bool withZero) {
111+ return gen_value<T>(gen);
112+ }
113+
91114 template <TypeKind KIND>
92115 VectorPtr createScalar (TypePtr type,
93116 vector_size_t size,
94117 std::mt19937& gen,
118+ bool withZero,
95119 std::function<bool (vector_size_t )> isNullAt = nullptr) {
96120 using T = facebook::velox::TypeTraits<KIND>::NativeType;
97121 auto flatVector =
@@ -100,7 +124,7 @@ class BatchDataGenerator {
100124 if (isNullAt && isNullAt (i)) {
101125 flatVector->setNull (i, true );
102126 } else {
103- flatVector->set (i, gen_value<T>(gen));
127+ flatVector->set (i, gen_value<T>(gen, withZero ));
104128 }
105129 }
106130 return flatVector;
0 commit comments