/*
* 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.dht;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class RangeTest
{
@Test
public void testContains()
{
Range left = new Range(new BigIntegerToken("0"), new BigIntegerToken("100"));
assert !left.contains(new BigIntegerToken("0"));
assert left.contains(new BigIntegerToken("10"));
assert left.contains(new BigIntegerToken("100"));
assert !left.contains(new BigIntegerToken("101"));
}
@Test
public void testContainsWrapping()
{
Range range = new Range(new BigIntegerToken("0"), new BigIntegerToken("0"));
assert range.contains(new BigIntegerToken("0"));
assert range.contains(new BigIntegerToken("10"));
assert range.contains(new BigIntegerToken("100"));
assert range.contains(new BigIntegerToken("101"));
range = new Range(new BigIntegerToken("100"), new BigIntegerToken("0"));
assert range.contains(new BigIntegerToken("0"));
assert !range.contains(new BigIntegerToken("1"));
assert !range.contains(new BigIntegerToken("100"));
assert range.contains(new BigIntegerToken("200"));
}
@Test
public void testContainsRange()
{
Range one = new Range(new BigIntegerToken("2"), new BigIntegerToken("10"));
Range two = new Range(new BigIntegerToken("2"), new BigIntegerToken("5"));
Range thr = new Range(new BigIntegerToken("5"), new BigIntegerToken("10"));
Range fou = new Range(new BigIntegerToken("10"), new BigIntegerToken("12"));
assert one.contains(two);
assert one.contains(thr);
assert !one.contains(fou);
assert !two.contains(one);
assert !two.contains(thr);
assert !two.contains(fou);
assert !thr.contains(one);
assert !thr.contains(two);
assert !thr.contains(fou);
assert !fou.contains(one);
assert !fou.contains(two);
assert !fou.contains(thr);
}
@Test
public void testContainsRangeWrapping()
{
Range one = new Range(new BigIntegerToken("10"), new BigIntegerToken("2"));
Range two = new Range(new BigIntegerToken("5"), new BigIntegerToken("3"));
Range thr = new Range(new BigIntegerToken("10"), new BigIntegerToken("12"));
Range fou = new Range(new BigIntegerToken("2"), new BigIntegerToken("6"));
Range fiv = new Range(new BigIntegerToken("0"), new BigIntegerToken("0"));
assert !one.contains(two);
assert one.contains(thr);
assert !one.contains(fou);
assert two.contains(one);
assert two.contains(thr);
assert !two.contains(fou);
assert !thr.contains(one);
assert !thr.contains(two);
assert !thr.contains(fou);
assert !fou.contains(one);
assert !fou.contains(two);
assert !fou.contains(thr);
assert fiv.contains(one);
assert fiv.contains(two);
assert fiv.contains(thr);
assert fiv.contains(fou);
}
@Test
public void testContainsRangeOneWrapping()
{
Range wrap1 = new Range(new BigIntegerToken("0"), new BigIntegerToken("0"));
Range wrap2 = new Range(new BigIntegerToken("10"), new BigIntegerToken("2"));
Range nowrap1 = new Range(new BigIntegerToken("0"), new BigIntegerToken("2"));
Range nowrap2 = new Range(new BigIntegerToken("2"), new BigIntegerToken("10"));
Range nowrap3 = new Range(new BigIntegerToken("10"), new BigIntegerToken("100"));
assert wrap1.contains(nowrap1);
assert wrap1.contains(nowrap2);
assert wrap1.contains(nowrap3);
assert wrap2.contains(nowrap1);
assert !wrap2.contains(nowrap2);
assert wrap2.contains(nowrap3);
}
@Test
public void testIntersects()
{
Range all = new Range(new BigIntegerToken("0"), new BigIntegerToken("0")); // technically, this is a wrapping range
Range one = new Range(new BigIntegerToken("2"), new BigIntegerToken("10"));
Range two = new Range(new BigIntegerToken("0"), new BigIntegerToken("8"));
Range not = new Range(new BigIntegerToken("10"), new BigIntegerToken("12"));
assert all.intersects(one);
assert all.intersects(two);
assert one.intersects(two);
assert two.intersects(one);
assert !one.intersects(not);
assert !not.intersects(one);
assert !two.intersects(not);
assert !not.intersects(two);
}
@Test
public void testIntersectsWrapping()
{
Range onewrap = new Range(new BigIntegerToken("10"), new BigIntegerToken("2"));
Range onecomplement = new Range(onewrap.right, onewrap.left);
Range onestartswith = new Range(onewrap.left, new BigIntegerToken("12"));
Range oneendswith = new Range(new BigIntegerToken("1"), onewrap.right);
Range twowrap = new Range(new BigIntegerToken("5"), new BigIntegerToken("3"));
Range not = new Range(new BigIntegerToken("2"), new BigIntegerToken("6"));
assert !onewrap.intersects(onecomplement);
assert onewrap.intersects(onestartswith);
assert onewrap.intersects(oneendswith);
assert onewrap.intersects(twowrap);
assert twowrap.intersects(onewrap);
assert !onewrap.intersects(not);
assert !not.intersects(onewrap);
assert twowrap.intersects(not);
assert not.intersects(twowrap);
}
}