Github user viirya commented on a diff in the pull request:
https://github.com/apache/spark/pull/19230#discussion_r139278205
--- Diff:
sql/core/src/test/scala/org/apache/spark/sql/execution/vectorized/ColumnVectorSuite.scala
---
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.spark.sql.execution.vectorized
+
+import org.scalatest.BeforeAndAfterEach
+
+import org.apache.spark.SparkFunSuite
+import org.apache.spark.sql.catalyst.util.ArrayData
+import org.apache.spark.sql.types._
+import org.apache.spark.unsafe.types.UTF8String
+
+class ColumnVectorSuite extends SparkFunSuite with BeforeAndAfterEach {
+
+ var testVector: WritableColumnVector = _
+
+ private def allocate(capacity: Int, dt: DataType): WritableColumnVector
= {
+ new OnHeapColumnVector(capacity, dt)
+ }
+
+ override def afterEach(): Unit = {
+ testVector.close()
+ }
+
+ test("boolean") {
+ testVector = allocate(10, BooleanType)
+ (0 until 10).foreach { i =>
+ testVector.appendBoolean(i % 2 == 0)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, BooleanType) === (i % 2 == 0))
+ }
+ }
+
+ test("byte") {
+ testVector = allocate(10, ByteType)
+ (0 until 10).foreach { i =>
+ testVector.appendByte(i.toByte)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, ByteType) === (i.toByte))
+ }
+ }
+
+ test("short") {
+ testVector = allocate(10, ShortType)
+ (0 until 10).foreach { i =>
+ testVector.appendShort(i.toShort)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, ShortType) === (i.toShort))
+ }
+ }
+
+ test("int") {
+ testVector = allocate(10, IntegerType)
+ (0 until 10).foreach { i =>
+ testVector.appendInt(i)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, IntegerType) === i)
+ }
+ }
+
+ test("long") {
+ testVector = allocate(10, LongType)
+ (0 until 10).foreach { i =>
+ testVector.appendLong(i)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, LongType) === i)
+ }
+ }
+
+ test("float") {
+ testVector = allocate(10, FloatType)
+ (0 until 10).foreach { i =>
+ testVector.appendFloat(i.toFloat)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, FloatType) === i.toFloat)
+ }
+ }
+
+ test("double") {
+ testVector = allocate(10, DoubleType)
+ (0 until 10).foreach { i =>
+ testVector.appendDouble(i.toDouble)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, DoubleType) === i.toDouble)
+ }
+ }
+
+ test("string") {
+ testVector = allocate(10, StringType)
+ (0 until 10).map { i =>
+ val utf8 = s"str$i".getBytes("utf8")
+ testVector.appendByteArray(utf8, 0, utf8.length)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ assert(array.get(i, StringType) === UTF8String.fromString(s"str$i"))
+ }
+ }
+
+ test("binary") {
+ testVector = allocate(10, BinaryType)
+ (0 until 10).map { i =>
+ val utf8 = s"str$i".getBytes("utf8")
+ testVector.appendByteArray(utf8, 0, utf8.length)
+ }
+
+ val array = new ColumnVector.Array(testVector)
+
+ (0 until 10).foreach { i =>
+ val utf8 = s"str$i".getBytes("utf8")
+ assert(array.get(i, BinaryType) === utf8)
+ }
+ }
+
+ test("array") {
+ val arrayType = ArrayType(IntegerType, true)
+ testVector = allocate(10, arrayType)
+
+ // set the first element of the testVector
+ val data = testVector.arrayData()
+ var i = 0
+ while (i < 6) {
+ data.putInt(i, i)
+ i += 1
+ }
+
+ // Populate it with arrays [0], [1, 2], [], [3, 4, 5]
+ testVector.putArray(0, 0, 1)
+ testVector.putArray(1, 1, 2)
+ testVector.putArray(2, 2, 0)
--- End diff --
I think it doesn't affect the result. But looks like the third array should
be `testVector.putArray(2, 3, 0)`?
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]