package com.linkedin.databus.core.util;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* 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.
*
*/
import org.apache.log4j.Level;
import org.testng.AssertJUnit;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.linkedin.databus2.test.TestUtil;
public class TestRange {
@BeforeClass
public void setUpClass()
{
TestUtil.setupLogging(true, null, Level.ERROR);
}
@Test
public void testRange() {
Range r = new Range(20, 3000);
AssertJUnit.assertEquals(20, r.start);
AssertJUnit.assertEquals(3000, r.end);
r.start = 46;
AssertJUnit.assertEquals(46, r.start);
}
@Test
public void testRangeContainsSimple()
{
Range r = new Range(1, 100);
AssertJUnit.assertFalse(r.contains(-1));
AssertJUnit.assertTrue(r.contains(1));
AssertJUnit.assertTrue(r.contains(5));
AssertJUnit.assertTrue(r.contains(99));
AssertJUnit.assertFalse(r.contains(100));
AssertJUnit.assertFalse(r.contains(101));
AssertJUnit.assertTrue(r.contains(1));
}
@Test
public void testRangeContainsReversed()
{
Range r = new Range(100, 1);
AssertJUnit.assertFalse(r.contains(-1));
AssertJUnit.assertTrue(r.contains(0));
AssertJUnit.assertFalse(r.contains(1));
AssertJUnit.assertFalse(r.contains(5));
AssertJUnit.assertTrue(r.contains(105));
AssertJUnit.assertTrue(r.contains(100));
}
@Test
public void testContainsReaderPosition()
{
BufferPositionParser parser = new BufferPositionParser(100240000 ,1);
AssertJUnit.assertFalse(Range.containsReaderPosition(14551, 14551, 109, parser));
AssertJUnit.assertTrue(Range.containsReaderPosition(parser.setGenId(100, 0), parser.setGenId(200,2), parser.setGenId(100,1), parser));
}
@Test
public void testContainsReaderPositionDiffGenId()
{
// start and end differ only in GenId
BufferPositionParser parser = new BufferPositionParser(100240000, 3);
long start = parser.setGenId(0, 1);
start = parser.setIndex(start, 0);
start = parser.setOffset(start, 0);
long end = parser.setGenId(0, 2);
end = parser.setIndex(end, 0);
end = parser.setOffset(end, 0);
// Case when offset != start
long offset = parser.setGenId(0, 1);
offset = parser.setIndex(offset, 2);
offset = parser.setOffset(offset, 10);
AssertJUnit.assertTrue(Range.containsReaderPosition(start, end, offset, parser));
AssertJUnit.assertTrue(Range.containsReaderPosition(start, end, start, parser));
AssertJUnit.assertFalse(Range.containsReaderPosition(start, end, end, parser));
}
@Test
public void testIntersects() {
{
Range r1 = new Range(1, 100);
Range r2 = new Range(1, 100);
AssertJUnit.assertTrue(r1.intersects(r2));
}
{
// r2 continues where r1 left off : when start < end
Range r1 = new Range(3773223,3774955);
Range r2 = new Range(3774955,3775116);
AssertJUnit.assertTrue(!(r1.intersects(r2)));
}
{
// r2 continues where r1 left off : when start > end
Range r1 = new Range(3774955,100);
Range r2 = new Range(100,3774945);
AssertJUnit.assertTrue(!(r1.intersects(r2)));
}
}
@Test
public void testCompareTo() {
{
/*
* comparing ranges in the same index
*/
Range r1 = new Range(1, 100);
Range r2 = new Range(2, 100);
AssertJUnit.assertTrue(r1.compareTo(r2) < 0);
}
{
/*
* comparing ranges in different index
*/
Range r1 = new Range(0x100000000L, 0x10000050L);
Range r2 = new Range(2, 100);
AssertJUnit.assertTrue(r1.compareTo(r2) > 0);
}
{
/*
* comparing ranges in the same index
*/
Range r1 = new Range(1, 100);
AssertJUnit.assertTrue(r1.compareTo(r1) == 0);
}
}
@Test
public void testToString() {
BufferPositionParser parser = new BufferPositionParser(Integer.MAX_VALUE,Integer.MAX_VALUE);
Range r1 = new Range(1, 100);
String exp = "{start:1:[GenId=0;Index=0;Offset=1] - end:100:[GenId=0;Index=0;Offset=100]}";
AssertJUnit.assertEquals("Range ToString", exp,r1.toString(parser));
r1 = new Range(0, Integer.MAX_VALUE);
exp = "{start:0:[GenId=0;Index=0;Offset=0] - end:2147483647:[GenId=0;Index=0;Offset=2147483647]}";
AssertJUnit.assertEquals("Range ToString", exp,r1.toString(parser));
r1 = new Range(0, Long.MAX_VALUE);
exp = "{start:0:[GenId=0;Index=0;Offset=0] - end:" + Long.MAX_VALUE +
":[GenId=1;Index=2147483647;Offset=2147483647]}";
AssertJUnit.assertEquals("Range ToString", exp,r1.toString(parser));
}
}