blob: 550bef0410d79bd053ad2e6bf3b81e3adac4d5ab [file] [log] [blame]
/*
* 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.cassandra.spark.reader;
import java.math.BigInteger;
import com.google.common.base.Preconditions;
import org.junit.Test;
import org.apache.cassandra.bridge.TokenRange;
import org.apache.cassandra.spark.data.partitioner.Partitioner;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class OverlapTests
{
@Test
public void testBasic()
{
SparkSSTableReader reader = reader(100L, 200L);
assertFalse(SparkSSTableReader.overlaps(reader, range(-10, -5)));
assertFalse(SparkSSTableReader.overlaps(reader, range(0, 0)));
assertFalse(SparkSSTableReader.overlaps(reader, range(-1, -1)));
assertFalse(SparkSSTableReader.overlaps(reader, range(50, 55)));
assertTrue(SparkSSTableReader.overlaps(reader, range(95, 100)));
assertTrue(SparkSSTableReader.overlaps(reader, range(100, 100)));
assertTrue(SparkSSTableReader.overlaps(reader, range(100, 105)));
assertTrue(SparkSSTableReader.overlaps(reader, range(100, 150)));
assertTrue(SparkSSTableReader.overlaps(reader, range(160, 200)));
assertTrue(SparkSSTableReader.overlaps(reader, range(200, 200)));
assertTrue(SparkSSTableReader.overlaps(reader, range(200, 205)));
assertFalse(SparkSSTableReader.overlaps(reader, range(201, 205)));
assertFalse(SparkSSTableReader.overlaps(reader, range(500, 550)));
assertTrue(SparkSSTableReader.overlaps(reader, range(50, 250)));
assertTrue(SparkSSTableReader.overlaps(reader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.maxToken())));
}
@Test
public void testMurmur3()
{
SparkSSTableReader murmur3Reader = reader(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.maxToken());
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(-10, -5)));
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(0, 0)));
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(300, 400)));
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.minToken())));
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.maxToken())));
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(Partitioner.Murmur3Partitioner.maxToken(),
Partitioner.Murmur3Partitioner.maxToken())));
assertTrue(SparkSSTableReader.overlaps(murmur3Reader, range(Partitioner.Murmur3Partitioner.minToken().add(BigInteger.ONE),
Partitioner.Murmur3Partitioner.maxToken().subtract(BigInteger.ONE))));
}
@Test
public void testRandom()
{
SparkSSTableReader randomReader = reader(Partitioner.RandomPartitioner.minToken(),
Partitioner.RandomPartitioner.maxToken());
assertFalse(SparkSSTableReader.overlaps(randomReader, range(-10, -5)));
assertTrue(SparkSSTableReader.overlaps(randomReader, range(0, 0)));
assertTrue(SparkSSTableReader.overlaps(randomReader, range(5000, 6000)));
assertTrue(SparkSSTableReader.overlaps(randomReader, range(Partitioner.RandomPartitioner.minToken(),
Partitioner.RandomPartitioner.minToken())));
assertTrue(SparkSSTableReader.overlaps(randomReader, range(Partitioner.RandomPartitioner.minToken(),
Partitioner.RandomPartitioner.maxToken())));
assertTrue(SparkSSTableReader.overlaps(randomReader, range(Partitioner.RandomPartitioner.maxToken(),
Partitioner.RandomPartitioner.maxToken())));
assertTrue(SparkSSTableReader.overlaps(randomReader, range(Partitioner.RandomPartitioner.minToken().add(BigInteger.ONE),
Partitioner.RandomPartitioner.maxToken().subtract(BigInteger.ONE))));
}
@Test
public void testMinEdge()
{
SparkSSTableReader minReader = reader(Partitioner.Murmur3Partitioner.minToken(),
BigInteger.valueOf(-6661324248839560306L));
assertTrue(SparkSSTableReader.overlaps(minReader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.minToken())));
assertTrue(SparkSSTableReader.overlaps(minReader, range(Partitioner.Murmur3Partitioner.minToken(),
BigInteger.valueOf(-8198552921648689608L))));
assertTrue(SparkSSTableReader.overlaps(minReader, range(Partitioner.Murmur3Partitioner.minToken().subtract(BigInteger.ONE),
BigInteger.valueOf(-8198552921648689608L))));
assertTrue(SparkSSTableReader.overlaps(minReader, range(Partitioner.Murmur3Partitioner.minToken().subtract(BigInteger.TEN),
BigInteger.valueOf(-7173733806442603407L))));
assertTrue(SparkSSTableReader.overlaps(minReader, range(-7173733806442603407L, -6148914691236517207L)));
assertTrue(SparkSSTableReader.overlaps(minReader, range(-6661324248839560307L, -6661324248839560306L)));
assertTrue(SparkSSTableReader.overlaps(minReader, range(-6661324248839560306L, -6661324248839560306L)));
assertTrue(SparkSSTableReader.overlaps(minReader, range(-6661324248839560307L, -6148914691236517206L)));
assertFalse(SparkSSTableReader.overlaps(minReader, range(-6661324248839560305L, -6661324248839560305L)));
assertFalse(SparkSSTableReader.overlaps(minReader, range(-4611686018427387904L, -2562047788015215503L)));
assertFalse(SparkSSTableReader.overlaps(minReader, range(0L, 0L)));
assertFalse(SparkSSTableReader.overlaps(minReader, range(512409557603043100L, 8710962479251732707L)));
assertFalse(SparkSSTableReader.overlaps(minReader, range(Partitioner.Murmur3Partitioner.maxToken(),
Partitioner.Murmur3Partitioner.maxToken())));
}
@Test
public void testMaxEdge()
{
SparkSSTableReader maxReader = reader(BigInteger.valueOf(2049638230412172401L),
Partitioner.Murmur3Partitioner.maxToken());
assertFalse(SparkSSTableReader.overlaps(maxReader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.minToken())));
assertFalse(SparkSSTableReader.overlaps(maxReader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.minToken().add(BigInteger.TEN))));
assertFalse(SparkSSTableReader.overlaps(maxReader, range(-3074457345618258603L, -1537228672809129302L)));
assertFalse(SparkSSTableReader.overlaps(maxReader, range(-512409557603043101L, 0L)));
assertFalse(SparkSSTableReader.overlaps(maxReader, range(-512409557603043101L, 1024819115206086200L)));
assertFalse(SparkSSTableReader.overlaps(maxReader, range(512409557603043100L, 1537228672809129301L)));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(2049638230412172400L, 2049638230412172401L)));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(2049638230412172401L, 2049638230412172401L)));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(2049638230412172402L, 2049638230412172402L)));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(2049638230412172401L, 5636505133633474104L)));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(BigInteger.valueOf(2049638230412172401L),
Partitioner.Murmur3Partitioner.maxToken())));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(BigInteger.valueOf(6661324248839560305L),
Partitioner.Murmur3Partitioner.maxToken())));
assertTrue(SparkSSTableReader.overlaps(maxReader, range(Partitioner.Murmur3Partitioner.maxToken(),
Partitioner.Murmur3Partitioner.maxToken())));
}
@Test
public void testZeroWrap()
{
SparkSSTableReader reader = reader(-1537228672809129302L, 1537228672809129301L);
assertFalse(SparkSSTableReader.overlaps(reader, range(Partitioner.Murmur3Partitioner.minToken(),
Partitioner.Murmur3Partitioner.minToken())));
assertFalse(SparkSSTableReader.overlaps(reader, range(-5636505133633474105L, -2562047788015215503L)));
assertFalse(SparkSSTableReader.overlaps(reader, range(-1537228672809129303L, -1537228672809129303L)));
assertTrue(SparkSSTableReader.overlaps(reader, range(-1537228672809129302L, -1537228672809129302L)));
assertTrue(SparkSSTableReader.overlaps(reader, range(-1537228672809129301L, -1537228672809129301L)));
assertTrue(SparkSSTableReader.overlaps(reader, range(-1537228672809129302L, 0)));
assertTrue(SparkSSTableReader.overlaps(reader, range(0, 0)));
assertTrue(SparkSSTableReader.overlaps(reader, range(0, 1024819115206086200L)));
assertTrue(SparkSSTableReader.overlaps(reader, range(0, 1537228672809129301L)));
assertTrue(SparkSSTableReader.overlaps(reader, range(1537228672809129301L, 1537228672809129301L)));
}
private static TokenRange range(long start, long end)
{
return range(BigInteger.valueOf(start), BigInteger.valueOf(end));
}
private static TokenRange range(BigInteger start, BigInteger end)
{
return TokenRange.closed(start, end);
}
private static SparkSSTableReader reader(long start, long end)
{
return reader(BigInteger.valueOf(start), BigInteger.valueOf(end));
}
private static SparkSSTableReader reader(BigInteger start, BigInteger end)
{
Preconditions.checkArgument(start.compareTo(end) <= 0, "Start token must be less than end token");
return new SparkSSTableReader()
{
public BigInteger firstToken()
{
return start;
}
public BigInteger lastToken()
{
return end;
}
public boolean ignore()
{
return false;
}
};
}
}