/** * Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com) * * 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.linkedin.pinot.operator.filter; import com.linkedin.pinot.common.utils.Pairs; import com.linkedin.pinot.core.operator.filter.IntRanges; import org.testng.annotations.Test; import static org.testng.Assert.*; /** * Test for IntRanges. */ public class IntRangesTest { @Test public void testClip() { Pairs.IntPair range = new Pairs.IntPair(10, 20); IntRanges.clip(range, 0, 100); assertEquals(range.getLeft(), 10); assertEquals(range.getRight(), 20); IntRanges.clip(range, 0, 18); assertEquals(range.getLeft(), 10); assertEquals(range.getRight(), 18); IntRanges.clip(range, 12, 30); assertEquals(range.getLeft(), 12); assertEquals(range.getRight(), 18); IntRanges.clip(range, 14, 16); assertEquals(range.getLeft(), 14); assertEquals(range.getRight(), 16); } @Test public void testIsDegenerate() { Pairs.IntPair valid = new Pairs.IntPair(10, 20); assertFalse(IntRanges.isInvalid(valid)); valid = new Pairs.IntPair(15, 15); assertFalse(IntRanges.isInvalid(valid)); Pairs.IntPair invalid = new Pairs.IntPair(15, 14); assertTrue(IntRanges.isInvalid(invalid)); } @Test public void testRangesAreMergeable() { Pairs.IntPair disjointA = new Pairs.IntPair(0, 10); Pairs.IntPair disjointB = new Pairs.IntPair(12, 20); assertFalse(IntRanges.rangesAreMergeable(disjointA, disjointB)); assertFalse(IntRanges.rangesAreMergeable(disjointB, disjointA)); Pairs.IntPair adjacentA = new Pairs.IntPair(0, 10); Pairs.IntPair adjacentB = new Pairs.IntPair(11, 20); assertTrue(IntRanges.rangesAreMergeable(adjacentA, adjacentB)); assertTrue(IntRanges.rangesAreMergeable(adjacentB, adjacentA)); Pairs.IntPair overlappingA = new Pairs.IntPair(0, 10); Pairs.IntPair overlappingB = new Pairs.IntPair(10, 15); assertTrue(IntRanges.rangesAreMergeable(overlappingA, overlappingB)); assertTrue(IntRanges.rangesAreMergeable(overlappingB, overlappingA)); Pairs.IntPair enclosedA = new Pairs.IntPair(0, 20); Pairs.IntPair enclosedB = new Pairs.IntPair(5, 15); assertTrue(IntRanges.rangesAreMergeable(enclosedA, enclosedB)); assertTrue(IntRanges.rangesAreMergeable(enclosedB, enclosedA)); } @Test public void testMergeIntoFirst() { Pairs.IntPair a = new Pairs.IntPair(0, 10); Pairs.IntPair b = new Pairs.IntPair(11, 20); IntRanges.mergeIntoFirst(a, b); // a should contain the merged interval assertEquals(a.getLeft(), 0); assertEquals(a.getRight(), 20); // b should be unchanged assertEquals(b.getLeft(), 11); assertEquals(b.getRight(), 20); } }