test: reorganize and update collection tests

This commit is contained in:
2026-08-31 17:57:20 +04:00
parent 67253c1817
commit b8f28830f7
6 changed files with 469 additions and 538 deletions
-15
View File
@@ -1,15 +0,0 @@
package ru.project;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
/** Unit test for simple App. */
public class AppTest {
/** Rigorous Test :-) */
@Test
public void shouldAnswerWithTrue() {
assertTrue(true);
}
}
@@ -1,63 +0,0 @@
package ru.test.maven.spring;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Set;
import java.util.stream.Collector;
import java.util.stream.IntStream;
import java.util.Collections;
public class MyListCollectorTest
{
private final MyListCollector<Integer> collector = new MyListCollector<>();
@Test
void shouldTestCollectInOrderSequential() {
MyList<Integer> result = IntStream.range(0, 10)
.boxed()
.collect(MyCollectors.toMyList());
assertEquals(10, result.size());
for (int i = 0; i < result.size(); i++) {
assertEquals(i, (int) result.get(i));
}
}
@Test
void shouldTestCollectInOrderParallel() {
MyList<Integer> result = IntStream.range(0, 100)
.parallel()
.boxed()
.collect(MyCollectors.toMyList());
assertEquals(100, result.size());
for (int i = 0; i < result.size(); i++) {
assertEquals(i, (int) result.get(i));
}
}
@Test
void shouldTestHandleEmptyStream() {
MyList<Integer> result = IntStream.empty()
.boxed()
.collect(MyCollectors.toMyList());
assertTrue(result.isEmpty());
}
@Test
void shouldTestNotUseStandardList() {
MyList<String> result = IntStream.range(0, 5)
.mapToObj(i -> "item" + i)
.collect(MyCollectors.toMyList());
assertInstanceOf(MyList.class, result);
assertFalse(result instanceof java.util.List);
}
@Test
void shouldTestHaveCorrectCharacteristics() {
Set<Collector.Characteristics> characteristics = collector.characteristics();
assertTrue(characteristics.contains(java.util.stream.Collector.Characteristics.IDENTITY_FINISH));
assertFalse(characteristics.contains(java.util.stream.Collector.Characteristics.UNORDERED));
}
}
@@ -1,8 +1,10 @@
package ru.test.maven.spring; package ru.project.collection;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
public class MyLinkedListTest
{ import org.junit.jupiter.api.Test;
public class MyLinkedListTest {
@Test @Test
public void shouldTestAdd() { public void shouldTestAdd() {
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
@@ -14,13 +16,14 @@ public class MyLinkedListTest
assertEquals(20, list.get(1)); assertEquals(20, list.get(1));
assertEquals(30, list.get(2)); assertEquals(30, list.get(2));
} }
@Test @Test
public void shouldTestGet() public void shouldTestGet() {
{
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
list.add(10); list.add(10);
assertEquals(10, list.get(0)); assertEquals(10, list.get(0));
} }
@Test @Test
public void shouldTestRemove() { public void shouldTestRemove() {
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
@@ -33,6 +36,7 @@ public class MyLinkedListTest
assertEquals(20, list.get(0)); assertEquals(20, list.get(0));
assertEquals(30, list.get(1)); assertEquals(30, list.get(1));
} }
@Test @Test
void shouldTestSet() { void shouldTestSet() {
MyLinkedList<String> list = new MyLinkedList<>(); MyLinkedList<String> list = new MyLinkedList<>();
@@ -45,23 +49,23 @@ public class MyLinkedListTest
assertEquals("B", oldValue); assertEquals("B", oldValue);
assertEquals("Z", list.get(1)); assertEquals("Z", list.get(1));
assertEquals(3, list.size()); assertEquals(3, list.size());
} }
@Test @Test
void shouldTestSize() void shouldTestSize() {
{
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
list.add(1); list.add(1);
list.add(2); list.add(2);
list.add(3); list.add(3);
assertEquals(3, list.size()); assertEquals(3, list.size());
} }
@Test @Test
void shouldTestisEmpty() void shouldTestisEmpty() {
{
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
assertTrue(list.isEmpty()); assertTrue(list.isEmpty());
} }
@Test @Test
void shouldTestGet_OutOfBounds_ThrowsException() { void shouldTestGet_OutOfBounds_ThrowsException() {
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
@@ -71,6 +75,7 @@ public class MyLinkedListTest
assertThrows(IllegalArgumentException.class, () -> list.get(1)); // index == size assertThrows(IllegalArgumentException.class, () -> list.get(1)); // index == size
assertThrows(IllegalArgumentException.class, () -> list.get(5)); // index > size assertThrows(IllegalArgumentException.class, () -> list.get(5)); // index > size
} }
@Test @Test
void shouldTestSet_OutOfBounds_ThrowsException() { void shouldTestSet_OutOfBounds_ThrowsException() {
MyLinkedList<Integer> list = new MyLinkedList<>(); MyLinkedList<Integer> list = new MyLinkedList<>();
@@ -79,12 +84,14 @@ public class MyLinkedListTest
assertThrows(IllegalArgumentException.class, () -> list.set(-1, 99)); assertThrows(IllegalArgumentException.class, () -> list.set(-1, 99));
assertThrows(IllegalArgumentException.class, () -> list.set(1, 99)); assertThrows(IllegalArgumentException.class, () -> list.set(1, 99));
} }
@Test @Test
void shouldTestRemove_IndexGreaterThanSize_ThrowsException() { void shouldTestRemove_IndexGreaterThanSize_ThrowsException() {
MyLinkedList<String> list = new MyLinkedList<>(); MyLinkedList<String> list = new MyLinkedList<>();
list.add("man"); list.add("man");
assertThrows(IndexOutOfBoundsException.class, () -> list.remove(5)); assertThrows(IndexOutOfBoundsException.class, () -> list.remove(5));
} }
@Test @Test
void shouldTestRemove_NegativeIndex_ThrowsException() { void shouldTestRemove_NegativeIndex_ThrowsException() {
MyLinkedList<String> list = new MyLinkedList<>(); MyLinkedList<String> list = new MyLinkedList<>();
@@ -93,6 +100,7 @@ public class MyLinkedListTest
assertThrows(IndexOutOfBoundsException.class, () -> list.remove(-1)); assertThrows(IndexOutOfBoundsException.class, () -> list.remove(-1));
} }
@Test @Test
void shouldTestaddAll_nonEmptySource_toEmptyList_addsAllElementsInOrder() { void shouldTestaddAll_nonEmptySource_toEmptyList_addsAllElementsInOrder() {
MyList<String> list = new MyLinkedList<>(); MyList<String> list = new MyLinkedList<>();
@@ -1,34 +1,30 @@
package ru.test.maven.spring; package ru.project.collectors;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import java.util.Set; import java.util.Set;
import java.util.stream.Collector; import java.util.stream.Collector;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import java.util.Collections; import org.junit.jupiter.api.Test;
import ru.project.collection.MyList;
public class MyListCollectorTest public class MyListCollectorTest {
{
private final MyListCollector<Integer> collector = new MyListCollector<>(); private final MyListCollector<Integer> collector = new MyListCollector<>();
@Test @Test
void shouldTestCollectInOrderSequential() { void shouldTestCollectInOrderSequential() {
MyList<Integer> result = IntStream.range(0, 10) MyList<Integer> result = IntStream.range(0, 10).boxed().collect(MyCollectors.toMyList());
.boxed()
.collect(MyCollectors.toMyList());
assertEquals(10, result.size()); assertEquals(10, result.size());
for (int i = 0; i < result.size(); i++) { for (int i = 0; i < result.size(); i++) {
assertEquals(i, (int) result.get(i)); assertEquals(i, (int) result.get(i));
} }
} }
@Test @Test
void shouldTestCollectInOrderParallel() { void shouldTestCollectInOrderParallel() {
MyList<Integer> result = IntStream.range(0, 100) MyList<Integer> result =
.parallel() IntStream.range(0, 100).parallel().boxed().collect(MyCollectors.toMyList());
.boxed()
.collect(MyCollectors.toMyList());
assertEquals(100, result.size()); assertEquals(100, result.size());
for (int i = 0; i < result.size(); i++) { for (int i = 0; i < result.size(); i++) {
@@ -38,27 +34,25 @@ public class MyListCollectorTest
@Test @Test
void shouldTestHandleEmptyStream() { void shouldTestHandleEmptyStream() {
MyList<Integer> result = IntStream.empty() MyList<Integer> result = IntStream.empty().boxed().collect(MyCollectors.toMyList());
.boxed()
.collect(MyCollectors.toMyList());
assertTrue(result.isEmpty()); assertTrue(result.isEmpty());
} }
@Test @Test
void shouldTestNotUseStandardList() { void shouldTestNotUseStandardList() {
MyList<String> result = IntStream.range(0, 5) MyList<String> result =
.mapToObj(i -> "item" + i) IntStream.range(0, 5).mapToObj(i -> "item" + i).collect(MyCollectors.toMyList());
.collect(MyCollectors.toMyList());
assertInstanceOf(MyList.class, result); assertInstanceOf(MyList.class, result);
assertFalse(result instanceof java.util.List); assertFalse(result instanceof java.util.List);
} }
@Test @Test
void shouldTestHaveCorrectCharacteristics() { void shouldTestHaveCorrectCharacteristics() {
Set<Collector.Characteristics> characteristics = collector.characteristics(); Set<Collector.Characteristics> characteristics = collector.characteristics();
assertTrue(characteristics.contains(java.util.stream.Collector.Characteristics.IDENTITY_FINISH)); assertTrue(
characteristics.contains(java.util.stream.Collector.Characteristics.IDENTITY_FINISH));
assertFalse(characteristics.contains(java.util.stream.Collector.Characteristics.UNORDERED)); assertFalse(characteristics.contains(java.util.stream.Collector.Characteristics.UNORDERED));
} }
} }
@@ -3,6 +3,10 @@ package ru.project.finder;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import ru.project.collection.MyLinkedList;
import ru.project.collection.MyList;
import ru.project.student.Student;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
public class StudentOccurrenceIndexFinderTest public class StudentOccurrenceIndexFinderTest
@@ -1,12 +1,12 @@
package ru.project.search; package ru.project.search;
import org.junit.jupiter.api.Test;
import ru.project.list.MyList;
import ru.project.list.MyLinkedList;
import ru.project.student.Student;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import ru.project.collection.MyLinkedList;
import ru.project.collection.MyList;
import ru.project.student.Student;
class StudentSearchTest { class StudentSearchTest {
@Test @Test
@@ -39,16 +39,13 @@ class StudentSearchTest {
@Test @Test
void testGroupNumberRangeInvalidMinMaxThrowsException() { void testGroupNumberRangeInvalidMinMaxThrowsException() {
assertThrows(IllegalArgumentException.class, assertThrows(IllegalArgumentException.class, () -> new GroupNumberRangeCriteria("C30", "A10"));
() -> new GroupNumberRangeCriteria("C30", "A10"));
} }
@Test @Test
void testGroupNumberRangeNullValuesThrowsException() { void testGroupNumberRangeNullValuesThrowsException() {
assertThrows(IllegalArgumentException.class, assertThrows(IllegalArgumentException.class, () -> new GroupNumberRangeCriteria(null, "A10"));
() -> new GroupNumberRangeCriteria(null, "A10")); assertThrows(IllegalArgumentException.class, () -> new GroupNumberRangeCriteria("A10", null));
assertThrows(IllegalArgumentException.class,
() -> new GroupNumberRangeCriteria("A10", null));
} }
@Test @Test
@@ -88,8 +85,7 @@ class StudentSearchTest {
@Test @Test
void testAverageGradeRangeInvalidMinMaxThrowsException() { void testAverageGradeRangeInvalidMinMaxThrowsException() {
assertThrows(IllegalArgumentException.class, assertThrows(IllegalArgumentException.class, () -> new AverageGradeRangeCriteria(5.0, 4.0));
() -> new AverageGradeRangeCriteria(5.0, 4.0));
} }
@Test @Test
@@ -129,27 +125,29 @@ class StudentSearchTest {
@Test @Test
void testRecordBookNumberRangeInvalidMinMaxThrowsException() { void testRecordBookNumberRangeInvalidMinMaxThrowsException() {
assertThrows(IllegalArgumentException.class, assertThrows(IllegalArgumentException.class, () -> new RecordBookNumberRangeCriteria(200, 100));
() -> new RecordBookNumberRangeCriteria(200, 100));
} }
@Test @Test
void testCompositeIntersectionEmptyReturnsTrue() { void testCompositeIntersectionEmptyReturnsTrue() {
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION);
Student student = new Student("A12", 4.5, 123); Student student = new Student("A12", 4.5, 123);
assertTrue(composite.matches(student)); assertTrue(composite.matches(student));
} }
@Test @Test
void testCompositeUnionEmptyReturnsFalse() { void testCompositeUnionEmptyReturnsFalse() {
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.UNION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.UNION);
Student student = new Student("A12", 4.5, 123); Student student = new Student("A12", 4.5, 123);
assertFalse(composite.matches(student)); assertFalse(composite.matches(student));
} }
@Test @Test
void testCompositeIntersectionAllTrue() { void testCompositeIntersectionAllTrue() {
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION);
composite.add(new GroupNumberRangeCriteria("A10", "C30")); composite.add(new GroupNumberRangeCriteria("A10", "C30"));
composite.add(new AverageGradeRangeCriteria(4.0, 5.0)); composite.add(new AverageGradeRangeCriteria(4.0, 5.0));
Student student = new Student("B20", 4.5, 123); Student student = new Student("B20", 4.5, 123);
@@ -158,7 +156,8 @@ class StudentSearchTest {
@Test @Test
void testCompositeIntersectionOneFalse() { void testCompositeIntersectionOneFalse() {
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION);
composite.add(new GroupNumberRangeCriteria("A10", "C30")); composite.add(new GroupNumberRangeCriteria("A10", "C30"));
composite.add(new AverageGradeRangeCriteria(4.0, 5.0)); composite.add(new AverageGradeRangeCriteria(4.0, 5.0));
Student student = new Student("B20", 3.5, 123); Student student = new Student("B20", 3.5, 123);
@@ -167,7 +166,8 @@ class StudentSearchTest {
@Test @Test
void testCompositeUnionOneTrue() { void testCompositeUnionOneTrue() {
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.UNION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.UNION);
composite.add(new GroupNumberRangeCriteria("A10", "C30")); composite.add(new GroupNumberRangeCriteria("A10", "C30"));
composite.add(new AverageGradeRangeCriteria(4.0, 5.0)); composite.add(new AverageGradeRangeCriteria(4.0, 5.0));
Student student = new Student("D00", 4.5, 123); Student student = new Student("D00", 4.5, 123);
@@ -176,7 +176,8 @@ class StudentSearchTest {
@Test @Test
void testCompositeUnionAllFalse() { void testCompositeUnionAllFalse() {
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.UNION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.UNION);
composite.add(new GroupNumberRangeCriteria("A10", "C30")); composite.add(new GroupNumberRangeCriteria("A10", "C30"));
composite.add(new AverageGradeRangeCriteria(4.0, 5.0)); composite.add(new AverageGradeRangeCriteria(4.0, 5.0));
Student student = new Student("D00", 3.5, 123); Student student = new Student("D00", 3.5, 123);
@@ -185,10 +186,12 @@ class StudentSearchTest {
@Test @Test
void testCompositeWithNestedComposite() { void testCompositeWithNestedComposite() {
CompositeStudentSearchCriteria outer = new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION); CompositeStudentSearchCriteria outer =
new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION);
outer.add(new GroupNumberRangeCriteria("A10", "C30")); outer.add(new GroupNumberRangeCriteria("A10", "C30"));
CompositeStudentSearchCriteria inner = new CompositeStudentSearchCriteria(SearchOperation.UNION); CompositeStudentSearchCriteria inner =
new CompositeStudentSearchCriteria(SearchOperation.UNION);
inner.add(new AverageGradeRangeCriteria(4.0, 5.0)); inner.add(new AverageGradeRangeCriteria(4.0, 5.0));
inner.add(new RecordBookNumberRangeCriteria(100, 200)); inner.add(new RecordBookNumberRangeCriteria(100, 200));
@@ -280,8 +283,7 @@ class StudentSearchTest {
@Test @Test
void testSearchServiceWithNullCriteriaThrowsException() { void testSearchServiceWithNullCriteriaThrowsException() {
assertThrows(IllegalArgumentException.class, assertThrows(IllegalArgumentException.class, () -> new StudentSearchService(null));
() -> new StudentSearchService(null));
} }
@Test @Test
@@ -291,7 +293,8 @@ class StudentSearchTest {
students.add(new Student("B20", 4.5, 2)); students.add(new Student("B20", 4.5, 2));
students.add(new Student("C30", 3.5, 3)); students.add(new Student("C30", 3.5, 3));
CompositeStudentSearchCriteria composite = new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION); CompositeStudentSearchCriteria composite =
new CompositeStudentSearchCriteria(SearchOperation.INTERSECTION);
composite.add(new GroupNumberRangeCriteria("A10", "B20")); composite.add(new GroupNumberRangeCriteria("A10", "B20"));
composite.add(new AverageGradeRangeCriteria(4.0, 5.0)); composite.add(new AverageGradeRangeCriteria(4.0, 5.0));