/* * Licensed 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 com.facebook.presto.raptor.storage.organization; import com.facebook.presto.spi.type.Type; import com.google.common.collect.ImmutableList; import org.testng.annotations.Test; import java.util.List; import static com.facebook.presto.spi.type.BigintType.BIGINT; import static com.facebook.presto.spi.type.BooleanType.BOOLEAN; import static com.facebook.presto.spi.type.TimestampType.TIMESTAMP; import static com.facebook.presto.spi.type.VarcharType.VARCHAR; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; public class TestShardRange { @Test public void testEnclosesIsSymmetric() throws Exception { List<Type> types = ImmutableList.of(BIGINT, VARCHAR, BOOLEAN, TIMESTAMP); ShardRange range = ShardRange.of(new Tuple(types, 2L, "aaa", true, 1L), new Tuple(types, 5L, "ccc", false, 2L)); assertTrue(range.encloses(range)); } @Test public void testEnclosingRange() throws Exception { List<Type> types1 = ImmutableList.of(BIGINT); ShardRange range1 = ShardRange.of(new Tuple(types1, 2L), new Tuple(types1, 5L)); ShardRange enclosesRange1 = ShardRange.of(new Tuple(types1, 1L), new Tuple(types1, 10L)); ShardRange notEnclosesRange1 = ShardRange.of(new Tuple(types1, 1L), new Tuple(types1, 4L)); assertTrue(enclosesRange1.encloses(range1)); assertFalse(notEnclosesRange1.encloses(range1)); List<Type> types2 = ImmutableList.of(BIGINT, VARCHAR); ShardRange range2 = ShardRange.of(new Tuple(types2, 2L, "aaa"), new Tuple(types2, 5L, "ccc")); ShardRange enclosesRange2 = ShardRange.of(new Tuple(types2, 1L, "ccc"), new Tuple(types2, 10L, "ccc")); ShardRange notEnclosesRange2 = ShardRange.of(new Tuple(types2, 2L, "aaa"), new Tuple(types2, 5L, "bbb")); assertTrue(range2.encloses(range2)); assertTrue(enclosesRange2.encloses(range2)); assertFalse(notEnclosesRange2.encloses(range2)); } @Test public void testOverlapsIsSymmetric() throws Exception { List<Type> types = ImmutableList.of(BIGINT, VARCHAR, BOOLEAN, TIMESTAMP); ShardRange range = ShardRange.of(new Tuple(types, 2L, "aaa", true, 1L), new Tuple(types, 5L, "ccc", false, 2L)); assertTrue(range.overlaps(range)); } @Test public void testOverlappingRange() throws Exception { List<Type> types1 = ImmutableList.of(BIGINT); ShardRange range1 = ShardRange.of(new Tuple(types1, 2L), new Tuple(types1, 5L)); ShardRange enclosesRange1 = ShardRange.of(new Tuple(types1, 1L), new Tuple(types1, 10L)); ShardRange overlapsRange1 = ShardRange.of(new Tuple(types1, 1L), new Tuple(types1, 4L)); ShardRange notOverlapsRange1 = ShardRange.of(new Tuple(types1, 6L), new Tuple(types1, 8L)); assertTrue(enclosesRange1.overlaps(range1)); assertTrue(overlapsRange1.overlaps(range1)); assertFalse(notOverlapsRange1.overlaps(range1)); List<Type> types2 = ImmutableList.of(BIGINT, VARCHAR); ShardRange range2 = ShardRange.of(new Tuple(types2, 2L, "aaa"), new Tuple(types2, 5L, "ccc")); ShardRange enclosesRange2 = ShardRange.of(new Tuple(types2, 1L, "ccc"), new Tuple(types2, 10L, "ccc")); ShardRange overlapsRange2 = ShardRange.of(new Tuple(types2, 2L, "aaa"), new Tuple(types2, 5L, "bbb")); ShardRange notOverlapsRange2 = ShardRange.of(new Tuple(types2, 6L, "aaa"), new Tuple(types2, 8L, "bbb")); assertTrue(enclosesRange2.encloses(range2)); assertTrue(overlapsRange2.overlaps(range2)); assertFalse(notOverlapsRange2.overlaps(range2)); } @Test public void testAdjacentRange() throws Exception { List<Type> types1 = ImmutableList.of(BIGINT); ShardRange range1 = ShardRange.of(new Tuple(types1, 2L), new Tuple(types1, 5L)); ShardRange adjacentRange1 = ShardRange.of(new Tuple(types1, 5L), new Tuple(types1, 10L)); assertFalse(range1.adjacent(range1)); assertTrue(adjacentRange1.adjacent(range1)); assertTrue(range1.adjacent(adjacentRange1)); List<Type> types2 = ImmutableList.of(BIGINT, VARCHAR); ShardRange range2 = ShardRange.of(new Tuple(types2, 2L, "aaa"), new Tuple(types2, 5L, "ccc")); ShardRange adjacentRange2 = ShardRange.of(new Tuple(types2, 5L, "ccc"), new Tuple(types2, 10L, "ccc")); ShardRange subsetAdjacentRange2 = ShardRange.of(new Tuple(types2, 5L, "ddd"), new Tuple(types2, 10L, "ccc")); ShardRange overlapsRange2 = ShardRange.of(new Tuple(types2, 3L, "aaa"), new Tuple(types2, 10L, "ccc")); ShardRange notAdjacentRange2 = ShardRange.of(new Tuple(types2, 6L, "ccc"), new Tuple(types2, 10L, "ccc")); assertTrue(adjacentRange2.adjacent(range2)); assertTrue(subsetAdjacentRange2.adjacent(range2)); assertFalse(overlapsRange2.adjacent(range2)); assertFalse(notAdjacentRange2.adjacent(range2)); } }