blob: 421a73fb76c19de8b2bf344b374dba984848637d [file] [log] [blame]
package accord.utils;
import accord.api.KeyRange;
import accord.impl.IntKey;
import accord.topology.KeyRanges;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class KeyRangesTest
{
private static KeyRange<IntKey> r(int start, int end)
{
return IntKey.range(start, end);
}
private static KeyRanges ranges(KeyRange... ranges)
{
return new KeyRanges(ranges);
}
@Test
void rangeIndexForKeyTest()
{
KeyRanges ranges = ranges(r(100, 200), r(300, 400));
Assertions.assertEquals(-1, ranges.rangeIndexForKey(IntKey.key(50)));
Assertions.assertEquals(0, ranges.rangeIndexForKey(IntKey.key(150)));
Assertions.assertEquals(-2, ranges.rangeIndexForKey(IntKey.key(250)));
Assertions.assertEquals(1, ranges.rangeIndexForKey(IntKey.key(350)));
Assertions.assertEquals(-3, ranges.rangeIndexForKey(IntKey.key(450)));
}
@Test
void differenceTest()
{
Assertions.assertEquals(ranges(r(100, 125), r(175, 200)),
ranges(r(100, 200)).difference(
ranges(r(125, 175))));
Assertions.assertEquals(ranges(r(125, 175)),
ranges(r(100, 200)).difference(
ranges(r(100, 125), r(175, 200))));
Assertions.assertEquals(ranges(r(100, 175)),
ranges(r(100, 200)).difference(
ranges(r(0, 75), r(175, 200))));
Assertions.assertEquals(ranges(r(100, 200)),
ranges(r(100, 200)).difference(
ranges(r(0, 75), r(200, 205))));
Assertions.assertEquals(ranges(r(125, 175), r(300, 350)),
ranges(r(100, 200), r(250, 350)).difference(
ranges(r(0, 125), r(175, 300))));
Assertions.assertEquals(ranges(r(125, 200), r(300, 350)),
ranges(r(100, 200), r(250, 350)).difference(
ranges(r(0, 125), r(225, 300))));
Assertions.assertEquals(ranges(r(125, 135), r(140, 160), r(175, 200)),
ranges(r(100, 200)).difference(
ranges(r(0, 125), r(135, 140), r(160, 170), r(170, 175))));
}
@Test
void addTest()
{
Assertions.assertEquals(ranges(r(0, 50), r(50, 100), r(100, 150), r(150, 200)),
ranges(r(0, 50), r(100, 150)).union(ranges(r(50, 100), r(150, 200))));
Assertions.assertThrows(IllegalArgumentException.class, () -> ranges(r(0, 50)).union(ranges(r(25, 75))));
}
@Test
void mergeTouchingTest()
{
Assertions.assertEquals(ranges(r(0, 400)), ranges(r(0, 100), r(100, 200), r(200, 300), r(300, 400)).mergeTouching());
Assertions.assertEquals(ranges(r(0, 200), r(300, 400)), ranges(r(0, 100), r(100, 200), r(300, 400)).mergeTouching());
Assertions.assertEquals(ranges(r(0, 100), r(200, 400)), ranges(r(0, 100), r(200, 300), r(300, 400)).mergeTouching());
}
@Test
void selectTest()
{
KeyRanges testRanges = ranges(r(0, 100), r(100, 200), r(200, 300), r(300, 400), r(400, 500));
Assertions.assertEquals(ranges(testRanges.get(1), testRanges.get(3)), testRanges.select(new int[]{1, 3}));
}
}