Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
DRILL-2776: add extensive tests for empty population coverage
- Loading branch information
Hanifi Gunes
committed
May 12, 2015
1 parent
c8769ed
commit 27b4aae
Showing
18 changed files
with
362 additions
and
86 deletions.
There are no files selected for viewing
314 changes: 314 additions & 0 deletions
314
exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/TestEmptyPopulation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,314 @@ | ||
/** | ||
* 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.drill.exec.vector.complex; | ||
|
||
import static org.apache.drill.TestBuilder.listOf; | ||
import static org.apache.drill.TestBuilder.mapOf; | ||
import org.apache.drill.BaseTestQuery; | ||
import org.apache.drill.exec.memory.BufferAllocator; | ||
import org.apache.drill.exec.memory.TopLevelAllocator; | ||
import org.apache.drill.exec.vector.UInt4Vector; | ||
import org.junit.Assert; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.mockito.runners.MockitoJUnitRunner; | ||
|
||
@RunWith(MockitoJUnitRunner.class) | ||
public class TestEmptyPopulation extends BaseTestQuery { | ||
|
||
private UInt4Vector offsets; | ||
private UInt4Vector.Accessor accessor; | ||
private UInt4Vector.Mutator mutator; | ||
private EmptyValuePopulator populator; | ||
private BufferAllocator allocator = new TopLevelAllocator(); | ||
|
||
|
||
@Before | ||
public void initialize() { | ||
offsets = new UInt4Vector(null, allocator); | ||
offsets.allocateNewSafe(); | ||
accessor = offsets.getAccessor(); | ||
mutator = offsets.getMutator(); | ||
mutator.set(0, 0); | ||
mutator.setValueCount(1); | ||
Assert.assertTrue("offsets must have one value", accessor.getValueCount() == 1); | ||
populator = new EmptyValuePopulator(offsets); | ||
} | ||
|
||
@Test(expected = IndexOutOfBoundsException.class) | ||
public void testNegativeValuesThrowException() { | ||
populator.populate(-1); | ||
} | ||
|
||
@Test | ||
public void testZeroHasNoEffect() { | ||
populator.populate(0); | ||
Assert.assertTrue("offset must have one value", accessor.getValueCount() == 1); | ||
} | ||
|
||
@Test | ||
public void testEmptyPopulationWorks() { | ||
populator.populate(1); | ||
Assert.assertEquals("offset must have valid size", 2, accessor.getValueCount()); | ||
Assert.assertEquals("value must match", 0, accessor.get(1)); | ||
|
||
mutator.set(1, 10); | ||
populator.populate(2); | ||
Assert.assertEquals("offset must have valid size", 3, accessor.getValueCount()); | ||
Assert.assertEquals("value must match", 10, accessor.get(1)); | ||
|
||
mutator.set(2, 20); | ||
populator.populate(5); | ||
Assert.assertEquals("offset must have valid size", 6, accessor.getValueCount()); | ||
for (int i=2; i<=5;i++) { | ||
Assert.assertEquals(String.format("value at index[%s] must match", i), 20, accessor.get(i)); | ||
} | ||
|
||
populator.populate(0); | ||
Assert.assertEquals("offset must have valid size", 1, accessor.getValueCount()); | ||
Assert.assertEquals("value must match", 0, accessor.get(0)); | ||
} | ||
|
||
@Test | ||
public void testRepeatedScalarEmptyFirst() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-scalar-empty-first.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(1L)) | ||
.baselineValues(listOf(2L)) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedScalarEmptyLast() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-scalar-empty-last.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(1L)) | ||
.baselineValues(listOf(2L)) | ||
.baselineValues(listOf()) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedScalarEmptyInBetween() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-scalar-empty-between.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(1L)) | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(2L)) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedListEmptyFirst() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-list-empty-first.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(listOf(1L))) | ||
.baselineValues(listOf(listOf(2L))) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedListEmptyLast() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-list-empty-last.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(listOf(1L))) | ||
.baselineValues(listOf(listOf(2L))) | ||
.baselineValues(listOf()) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedListEmptyBetween() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-list-empty-between.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(listOf(1L))) | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(listOf(2L))) | ||
.go(); | ||
} | ||
|
||
|
||
@Test | ||
public void testRepeatedMapEmptyFirst() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-map-empty-first.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(mapOf("b", 1L))) | ||
.baselineValues(listOf(mapOf("b", 2L))) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedMapEmptyLast() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-map-empty-last.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(mapOf("b", 1L))) | ||
.baselineValues(listOf(mapOf("b", 2L))) | ||
.baselineValues(listOf()) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testRepeatedMapEmptyBetween() throws Exception { | ||
final String query = "select * from cp.`vector/complex/repeated-map-empty-between.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(mapOf("b", 1L))) | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(mapOf("b", 2L))) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testMapEmptyFirst() throws Exception { | ||
final String query = "select * from cp.`vector/complex/map-empty-first.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a", "c") | ||
.baselineValues(mapOf(), 1L) | ||
.baselineValues(mapOf("b", 1L), null) | ||
.baselineValues(mapOf("b", 2L), null) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testMapEmptyLast() throws Exception { | ||
final String query = "select * from cp.`vector/complex/map-empty-last.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a", "c") | ||
.baselineValues(mapOf("b", 1L), null) | ||
.baselineValues(mapOf("b", 2L), null) | ||
.baselineValues(mapOf(), 1L) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testMapEmptyBetween() throws Exception { | ||
final String query = "select * from cp.`vector/complex/map-empty-between.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a", "c") | ||
.baselineValues(mapOf("b", 1L), null) | ||
.baselineValues(mapOf(), 1L) | ||
.baselineValues(mapOf("b", 2L), null) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testMultiLevelRepeatedListEmptyFirst() throws Exception { | ||
final String query = "select * from cp.`vector/complex/multi-repeated-list-empty-first.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(listOf(listOf(1L), listOf(3L)), listOf(listOf(5L, 7L)))) | ||
.baselineValues(listOf(listOf(listOf(2L), listOf(4L)))) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testMultiLevelRepeatedListEmptyLast() throws Exception { | ||
final String query = "select * from cp.`vector/complex/multi-repeated-list-empty-last.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(listOf(listOf(1L), listOf(3L)), listOf(listOf(5L, 7L)))) | ||
.baselineValues(listOf(listOf(listOf(2L), listOf(4L)))) | ||
.baselineValues(listOf()) | ||
.go(); | ||
} | ||
|
||
@Test | ||
public void testMultiLevelRepeatedListEmptyBetween() throws Exception { | ||
final String query = "select * from cp.`vector/complex/multi-repeated-list-empty-between.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf(listOf(listOf(1L), listOf(3L)), listOf(listOf(5L, 7L)))) | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(listOf(listOf(2L), listOf(4L)))) | ||
.go(); | ||
} | ||
|
||
|
||
@Test | ||
public void testMultiLevelRepeatedListWithMultipleEmpties() throws Exception { | ||
final String query = "select * from cp.`vector/complex/multi-repeated-list-multi-empty.json`"; | ||
|
||
testBuilder() | ||
.sqlQuery(query) | ||
.ordered() | ||
.baselineColumns("a") | ||
.baselineValues(listOf()) | ||
.baselineValues(listOf(listOf(listOf(1L), listOf(3L)), listOf(listOf()))) | ||
.baselineValues(listOf(listOf(listOf(2L), listOf()), listOf())) | ||
.go(); | ||
} | ||
|
||
} |
Oops, something went wrong.