/* * Copyright © 2021, 2022, 2023 Peter Doornbosch * * This file is part of Kwik, an implementation of the QUIC protocol in Java. * * Kwik is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your option) * any later version. * * Kwik is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ package net.luminis.quic.ack; import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; class RangeTest { @Test void sizeShouldReturnCountOfNumbersInRange() { var range = new Range(3L, 7L); assertThat(range.size()).isEqualTo(5); } @Test void testGetters() { var range = new Range(3L, 7L); assertThat(range.getLargest()).isEqualTo(7); assertThat(range.getSmallest()).isEqualTo(3); } @Test void streamShouldListAllNumbersInRange() { var range = new Range(3L, 7L); assertThat(range.stream().toArray()).isEqualTo(new Long[] { 7L, 6L, 5L, 4L, 3L }); } @Test void extendEmptyRangeList() { var rangeList = createRangeList(); Range.extendRangeList(rangeList, 3L); assertThat(rangeList).containsExactly(new Range(3L, 3L)); } @Test void extendRangeWithLargerNumber() { var rangeList = createRangeList(); Range.extendRangeList(rangeList, 3L); Range.extendRangeList(rangeList, 4L); assertThat(rangeList).containsExactly(new Range(3L, 4L)); } @Test void extendRangeWithSmallerNumber() { var rangeList = createRangeList(); Range.extendRangeList(rangeList, 3L); Range.extendRangeList(rangeList, 2L); assertThat(rangeList).containsExactly(new Range(2L, 3L)); } @Test void extendRangeListWithExistingNumber() { var rangeList = createRangeList(new Range(21L, 27L), new Range(15L, 16L), new Range(7L, 9L)); Range.extendRangeList(rangeList, 25L); assertThat(rangeList).containsExactly(new Range(21L, 27L), new Range(15L, 16L), new Range(7L, 9L)); } @Test void extendRangeListWithRange() { var rangeList = createRangeList(new Range(21L, 27L), new Range(15L, 16L), new Range(7L, 9L)); Range.extendRangeList(rangeList, 19L); assertThat(rangeList).containsExactly(new Range(21L, 27L), new Range(19L, 19L), new Range(15L, 16L), new Range(7L, 9L)); } @Test void appendRangeListWithRange() { var rangeList = createRangeList(new Range(21L, 27L), new Range(15L, 16L), new Range(7L, 9L)); Range.extendRangeList(rangeList, 4L); assertThat(rangeList).containsExactly(new Range(21L, 27L), new Range(15L, 16L), new Range(7L, 9L), new Range(4L)); } @Test void rangesThatBecomeAdjacentShouldBeCompacted() { var rangeList = createRangeList(new Range(21L, 27L), new Range(15L, 19L)); Range.extendRangeList(rangeList, 20L); assertThat(rangeList).containsExactly(new Range(15L, 27L)); } @Test void testRangeSubtract1() { // ---- // ---- assertThat(range(5, 11).subtract(range(3, 6))).isEqualTo(range(7, 11)); } @Test void testRangeSubtract2() { // ----- // ---- assertThat(range(5, 11).subtract(range(5, 6))).isEqualTo(range(7, 11)); } @Test void testRangeSubtract3() { // ---- // -- assertThat(range(5, 11).subtract(range(8, 11))).isEqualTo(range(5, 7)); } @Test void testRangeSubtract4() { // ----- // ----- assertThat(range(5, 8).subtract(range(6, 10))).isEqualTo(range(5, 5)); } private List createRangeList(Range... ranges) { var rangeList = new ArrayList(); for (Range range: ranges) { rangeList.add(range); } return rangeList; } Range range(int from, int to) { return new Range(from, to); } Range range(int single) { return new Range(single, single); } }