blob: 9152363ba06c856b22c27da5ab79ea8b4b737474 [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 accord.utils;
import accord.primitives.Range;
import accord.impl.IntKey;
import accord.primitives.Ranges;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class RangesTest
{
private static Range r(int start, int end)
{
return IntKey.range(start, end);
}
private static Ranges ranges(Range... ranges)
{
return Ranges.of(ranges);
}
@Test
void rangeIndexForKeyTest()
{
Ranges ranges = ranges(r(100, 200), r(300, 400));
Assertions.assertEquals(-1, ranges.indexOf(IntKey.key(50)));
Assertions.assertEquals(0, ranges.indexOf(IntKey.key(150)));
Assertions.assertEquals(-2, ranges.indexOf(IntKey.key(250)));
Assertions.assertEquals(1, ranges.indexOf(IntKey.key(350)));
Assertions.assertEquals(-3, ranges.indexOf(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)).with(ranges(r(50, 100), r(150, 200))));
}
private static void assertMergeResult(Ranges expected, Ranges input1, Ranges input2)
{
Assertions.assertEquals(expected, input1.with(input2));
Assertions.assertEquals(expected, input2.with(input1));
}
@Test
void mergeTest()
{
assertMergeResult(ranges(r(0, 50), r(100, 350)),
ranges(r(100, 250), r(300, 350)),
ranges(r(0, 50), r(200, 300), r(310, 315)));
assertMergeResult(ranges(r(0, 100)),
Ranges.EMPTY,
ranges(r(0, 100)));
}
@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()
{
Ranges 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}));
}
}