planetiler/planetiler-core/src/test/java/com/onthegomap/planetiler/collection/IntRangeSetTest.java

169 wiersze
4.1 KiB
Java
Czysty Zwykły widok Historia

package com.onthegomap.planetiler.collection;
2021-05-04 00:43:53 +00:00
import static org.junit.jupiter.api.Assertions.assertEquals;
2023-03-20 20:41:18 +00:00
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
2021-05-04 00:43:53 +00:00
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
2022-04-23 10:36:24 +00:00
class IntRangeSetTest {
2021-05-04 00:43:53 +00:00
2021-09-10 00:46:20 +00:00
private static List<Integer> getInts(IntRangeSet range) {
2021-05-04 00:43:53 +00:00
List<Integer> result = new ArrayList<>();
for (Integer integer : range) {
result.add(integer);
}
return result;
}
@Test
2022-04-23 10:36:24 +00:00
void testEmptyIntRange() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
assertEquals(List.of(), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testSingleIntRange() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 1);
assertEquals(List.of(1), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testLongerIntRange() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 3);
assertEquals(List.of(1, 2, 3), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testTwoIntRanges() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 3);
range.add(5, 7);
assertEquals(List.of(1, 2, 3, 5, 6, 7), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testTwoOverlappingIntRanges() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
range.add(4, 7);
assertEquals(List.of(1, 2, 3, 4, 5, 6, 7), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testRemoveSingle() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
range.remove(3);
assertEquals(List.of(1, 2, 4, 5), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testRemoveOtherRange() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
2021-09-10 00:46:20 +00:00
IntRangeSet range2 = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range2.add(4, 6);
range.removeAll(range2);
assertEquals(List.of(1, 2, 3), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testAddOtherRange() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
2021-09-10 00:46:20 +00:00
IntRangeSet range2 = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range2.add(8, 10);
range.addAll(range2);
assertEquals(List.of(1, 2, 3, 4, 5, 8, 9, 10), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testContains() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
2021-09-10 00:46:20 +00:00
IntRangeSet range2 = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range2.add(8, 10);
range.addAll(range2);
range.remove(3);
var expected = Map.ofEntries(
Map.entry(1, true),
Map.entry(2, true),
Map.entry(3, false),
Map.entry(4, true),
Map.entry(5, true),
Map.entry(6, false),
Map.entry(7, false),
Map.entry(8, true),
Map.entry(9, true),
Map.entry(10, true),
Map.entry(11, false)
);
expected.forEach((num, val) -> assertEquals(val, range.contains(num), (val ? "" : "!") + num));
}
@Test
2022-04-23 10:36:24 +00:00
void testNoIntersection() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
2021-09-10 00:46:20 +00:00
IntRangeSet range2 = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range2.add(8, 10);
range.intersect(range2);
assertEquals(List.of(), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testSingleIntersection() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
2021-09-10 00:46:20 +00:00
IntRangeSet range2 = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range2.add(5, 10);
range.intersect(range2);
assertEquals(List.of(5), getInts(range));
}
@Test
2022-04-23 10:36:24 +00:00
void testMultipleIntersection() {
2021-09-10 00:46:20 +00:00
IntRangeSet range = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range.add(1, 5);
2021-09-10 00:46:20 +00:00
IntRangeSet range2 = new IntRangeSet();
2021-05-04 00:43:53 +00:00
range2.add(3, 10);
range2.remove(4);
range.intersect(range2);
assertEquals(List.of(3, 5), getInts(range));
}
2023-03-20 20:41:18 +00:00
@Test
void testIsEmpty() {
IntRangeSet range = new IntRangeSet();
assertTrue(range.isEmpty());
range.add(1, 5);
assertFalse(range.isEmpty());
var other = new IntRangeSet();
other.add(6, 10);
range.intersect(other);
assertTrue(range.isEmpty());
}
@Test
void testXor() {
IntRangeSet range = new IntRangeSet();
assertEquals(List.of(), getInts(range));
range.xor(1, 5);
assertEquals(List.of(1, 2, 3, 4, 5), getInts(range));
range.xor(1, 5);
assertEquals(List.of(), getInts(range));
range.xor(1, 5);
assertEquals(List.of(1, 2, 3, 4, 5), getInts(range));
range.xor(3, 6);
assertEquals(List.of(1, 2, 6), getInts(range));
}
2021-05-04 00:43:53 +00:00
}