refactor: unify code style and fix minor merge issues

This commit is contained in:
2026-08-30 13:03:23 +04:00
parent e7a4224dd5
commit e20820b78f
14 changed files with 779 additions and 806 deletions
@@ -1,7 +1,7 @@
package ru.project.sorting;
import ru.project.list.MyList;
import java.util.Comparator;
import ru.project.collection.MyList;
public class BubbleSortStrategy<T> implements SortStrategy<T> {
@@ -1,10 +1,10 @@
package ru.project.sorting;
import ru.project.list.MyList;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.ToIntFunction;
import ru.project.collection.MyList;
public class EvenOnlyMergeSortStrategy<T> implements SortStrategy<T> {
@@ -1,27 +1,22 @@
package ru.project.sorting;
import ru.project.collection.MyLinkedList;
import ru.project.collection.MyList;
import java.util.Comparator;
import java.util.function.ToIntFunction;
import ru.project.collection.MyLinkedList;
import ru.project.collection.MyList;
public class EvenOnlySortStrategy<T> implements SortStrategy<T> {
private SortStrategy<T> sortStrategy;
private ToIntFunction<T> valueExtractor;
public EvenOnlySortStrategy() {
}
public EvenOnlySortStrategy() {}
public EvenOnlySortStrategy(SortStrategy<T> sortStrategy) {
setSortStrategy(sortStrategy);
}
public EvenOnlySortStrategy(
SortStrategy<T> sortStrategy,
ToIntFunction<T> valueExtractor
) {
public EvenOnlySortStrategy(SortStrategy<T> sortStrategy, ToIntFunction<T> valueExtractor) {
setSortStrategy(sortStrategy);
setValueExtractor(valueExtractor);
}
@@ -1,8 +1,7 @@
package ru.project.sorting;
import ru.project.collection.MyList;
import java.util.Comparator;
import ru.project.collection.MyList;
public class MergeSortStrategy<T> implements SortStrategy<T> {
@@ -1,8 +1,7 @@
package ru.project.sorting;
import ru.project.collection.MyList;
import java.util.Comparator;
import ru.project.collection.MyList;
public interface SortStrategy<T> {
void sort(MyList<T> list, Comparator<T> comparator);
@@ -1,7 +1,7 @@
package ru.project.sorting;
import ru.project.student.Student;
import java.util.Comparator;
import ru.project.student.Student;
public class StudentAverageGradeComparator implements Comparator<Student> {
@@ -1,7 +1,7 @@
package ru.project.sorting;
import ru.project.student.Student;
import java.util.Comparator;
import ru.project.student.Student;
public class StudentGroupComparator implements Comparator<Student> {
@@ -1,7 +1,7 @@
package ru.project.sorting;
import ru.project.student.Student;
import java.util.Comparator;
import ru.project.student.Student;
public class StudentRecordBookComparator implements Comparator<Student> {
@@ -54,6 +54,10 @@ public class Student {
return new Student(this.groupNumber, averageGrade, this.recordBookNumber);
}
public Student withRecordBookNumber(int recordBookNumber) {
return new Student(this.groupNumber, this.averageGrade, recordBookNumber);
}
public static double getMinAverageGrade() {
return MIN_AVERAGE_GRADE;
}
+2 -6
View File
@@ -4,14 +4,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
/**
* Unit test for simple App.
*/
/** Unit test for simple App. */
public class AppTest {
/**
* Rigorous Test :-)
*/
/** Rigorous Test :-) */
@Test
public void shouldAnswerWithTrue() {
assertTrue(true);
@@ -1,163 +0,0 @@
package ru.project.sorting;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import ru.project.list.MyList;
import ru.project.list.MyLinkedList;
import ru.project.student.Student;
import java.util.Comparator;
import static org.junit.jupiter.api.Assertions.*;
class SortStrategyTest {
private MyList<Student> students;
private final Comparator<Student> groupComparator = new StudentGroupComparator();
private final Comparator<Student> gradeComparator = new StudentAverageGradeComparator();
private final Comparator<Student> recordComparator = new StudentRecordBookComparator();
@BeforeEach
void setUp() {
students = new MyLinkedList<>();
students.add(new Student("A12", 4.5, 12345));
students.add(new Student("B32", 3.8, 12346));
students.add(new Student("Z00", 4.9, 12347));
students.add(new Student("A12", 4.2, 12348));
students.add(new Student("B32", 5.0, 12349));
}
@Test
void testMergeSortByGroupNumber() {
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(students, groupComparator);
assertOrder(students, "A12", "A12", "B32", "B32", "Z00");
}
@Test
void testMergeSortByAverageGrade() {
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(students, gradeComparator);
assertOrder(students, 3.8, 4.2, 4.5, 4.9, 5.0);
}
@Test
void testMergeSortByRecordBookNumber() {
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(students, recordComparator);
assertOrder(students, 12345, 12346, 12347, 12348, 12349);
}
@Test
void testBubbleSortByGroupNumber() {
SortStrategy<Student> strategy = new BubbleSortStrategy<>();
strategy.sort(students, groupComparator);
assertOrder(students, "A12", "A12", "B32", "B32", "Z00");
}
@Test
void testBubbleSortByAverageGrade() {
SortStrategy<Student> strategy = new BubbleSortStrategy<>();
strategy.sort(students, gradeComparator);
assertOrder(students, 3.8, 4.2, 4.5, 4.9, 5.0);
}
@Test
void testBubbleSortByRecordBookNumber() {
SortStrategy<Student> strategy = new BubbleSortStrategy<>();
strategy.sort(students, recordComparator);
assertOrder(students, 12345, 12346, 12347, 12348, 12349);
}
@Test
void testEvenOnlySortByRecordBookNumber() {
MyList<Student> list = new MyLinkedList<>();
list.add(new Student("A01", 4.5, 7));
list.add(new Student("A02", 4.5, 8));
list.add(new Student("A03", 4.5, 3));
list.add(new Student("A04", 4.5, 2));
list.add(new Student("A05", 4.5, 5));
list.add(new Student("A06", 4.5, 4));
EvenOnlyMergeSortStrategy<Student> strategy =
new EvenOnlyMergeSortStrategy<>(Student::getRecordBookNumber);
strategy.sort(list, Comparator.comparingInt(Student::getRecordBookNumber));
int[] expected = {7, 2, 3, 4, 5, 8};
for (int i = 0; i < list.size(); i++) {
assertEquals(expected[i], list.get(i).getRecordBookNumber());
}
}
@Test
void testEvenOnlyWithNoEvenElements() {
MyList<Student> list = new MyLinkedList<>();
list.add(new Student("A01", 4.5, 1));
list.add(new Student("A02", 4.5, 3));
list.add(new Student("A03", 4.5, 5));
EvenOnlyMergeSortStrategy<Student> strategy =
new EvenOnlyMergeSortStrategy<>(Student::getRecordBookNumber);
strategy.sort(list, Comparator.comparingInt(Student::getRecordBookNumber));
int[] expected = {1, 3, 5};
for (int i = 0; i < list.size(); i++) {
assertEquals(expected[i], list.get(i).getRecordBookNumber());
}
}
@Test
void testEvenOnlyWithAllEvenElements() {
MyList<Student> list = new MyLinkedList<>();
list.add(new Student("A01", 4.5, 4));
list.add(new Student("A02", 4.5, 2));
list.add(new Student("A03", 4.5, 6));
EvenOnlyMergeSortStrategy<Student> strategy =
new EvenOnlyMergeSortStrategy<>(Student::getRecordBookNumber);
strategy.sort(list, Comparator.comparingInt(Student::getRecordBookNumber));
int[] expected = {2, 4, 6};
for (int i = 0; i < list.size(); i++) {
assertEquals(expected[i], list.get(i).getRecordBookNumber());
}
}
@Test
void testSortEmptyList() {
MyList<Student> empty = new MyLinkedList<>();
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(empty, groupComparator);
assertEquals(0, empty.size());
}
@Test
void testSortSingleElement() {
MyList<Student> single = new MyLinkedList<>();
single.add(new Student("A12", 4.5, 12345));
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(single, groupComparator);
assertEquals(1, single.size());
}
private void assertOrder(MyList<Student> list, String... groups) {
assertEquals(groups.length, list.size());
for (int i = 0; i < groups.length; i++) {
assertEquals(groups[i], list.get(i).getGroupNumber());
}
}
private void assertOrder(MyList<Student> list, double... grades) {
assertEquals(grades.length, list.size());
for (int i = 0; i < grades.length; i++) {
assertEquals(grades[i], list.get(i).getAverageGrade(), 0.001);
}
}
private void assertOrder(MyList<Student> list, int... records) {
assertEquals(records.length, list.size());
for (int i = 0; i < records.length; i++) {
assertEquals(records[i], list.get(i).getRecordBookNumber());
}
}
}
@@ -1,18 +1,16 @@
package ru.project.sorting;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Comparator;
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.assertSame;
import java.util.Comparator;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class EvenOnlySortStrategyTest {
@Test
@@ -20,10 +18,7 @@ class EvenOnlySortStrategyTest {
MyList<Integer> list = new MyLinkedList<>();
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(
new MergeSortStrategy<>(),
value -> value
);
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
strategy.sort(list, Integer::compare);
@@ -36,10 +31,7 @@ class EvenOnlySortStrategyTest {
list.add(4);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(
new MergeSortStrategy<>(),
value -> value
);
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
strategy.sort(list, Integer::compare);
@@ -53,10 +45,7 @@ class EvenOnlySortStrategyTest {
list.add(7);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(
new MergeSortStrategy<>(),
value -> value
);
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
strategy.sort(list, Integer::compare);
@@ -75,10 +64,7 @@ class EvenOnlySortStrategyTest {
list.add(4);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(
new MergeSortStrategy<>(),
value -> value
);
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
strategy.sort(list, Integer::compare);
@@ -108,10 +94,7 @@ class EvenOnlySortStrategyTest {
students.add(evenThird);
EvenOnlySortStrategy<Student> strategy =
new EvenOnlySortStrategy<>(
new MergeSortStrategy<>(),
Student::getRecordBookNumber
);
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), Student::getRecordBookNumber);
strategy.sort(students, new StudentRecordBookComparator());
@@ -132,10 +115,7 @@ class EvenOnlySortStrategyTest {
list.add(2);
list.add(4);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(
new MergeSortStrategy<>()
);
EvenOnlySortStrategy<Integer> strategy = new EvenOnlySortStrategy<>(new MergeSortStrategy<>());
strategy.setValueExtractor(value -> value);
@@ -157,7 +137,8 @@ class EvenOnlySortStrategyTest {
students.add(new Student("A05", 4.0, 5));
students.add(new Student("A06", 4.0, 4));
EvenOnlySortStrategy<Student> strategy = new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), Student::getRecordBookNumber);
EvenOnlySortStrategy<Student> strategy =
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), Student::getRecordBookNumber);
strategy.sort(students, new StudentRecordBookComparator());
@@ -180,7 +161,8 @@ class EvenOnlySortStrategyTest {
list.add(6);
list.add(4);
EvenOnlySortStrategy<Integer> strategy = new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
strategy.sort(list, Integer::compare);
@@ -199,7 +181,8 @@ class EvenOnlySortStrategyTest {
list.add(5);
list.add(1);
EvenOnlySortStrategy<Integer> strategy = new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(new MergeSortStrategy<>(), value -> value);
strategy.sort(list, Integer::compare);
@@ -240,7 +223,8 @@ class EvenOnlySortStrategyTest {
RecordingSortStrategy recordingStrategy = new RecordingSortStrategy();
EvenOnlySortStrategy<Integer> strategy = new EvenOnlySortStrategy<>(recordingStrategy, value -> value);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(recordingStrategy, value -> value);
strategy.sort(list, Integer::compare);
@@ -256,7 +240,8 @@ class EvenOnlySortStrategyTest {
RecordingSortStrategy secondStrategy = new RecordingSortStrategy();
EvenOnlySortStrategy<Integer> strategy = new EvenOnlySortStrategy<>(firstStrategy, value -> value);
EvenOnlySortStrategy<Integer> strategy =
new EvenOnlySortStrategy<>(firstStrategy, value -> value);
MyList<Integer> firstList = new MyLinkedList<>();
firstList.add(4);
@@ -0,0 +1,162 @@
package ru.project.sorting;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Comparator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import ru.project.collection.MyLinkedList;
import ru.project.collection.MyList;
import ru.project.student.Student;
class SortStrategyTest {
private MyList<Student> students;
private final Comparator<Student> groupComparator = new StudentGroupComparator();
private final Comparator<Student> gradeComparator = new StudentAverageGradeComparator();
private final Comparator<Student> recordComparator = new StudentRecordBookComparator();
@BeforeEach
void setUp() {
students = new MyLinkedList<>();
students.add(new Student("A12", 4.5, 12345));
students.add(new Student("B32", 3.8, 12346));
students.add(new Student("Z00", 4.9, 12347));
students.add(new Student("A12", 4.2, 12348));
students.add(new Student("B32", 5.0, 12349));
}
@Test
void testMergeSortByGroupNumber() {
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(students, groupComparator);
assertOrder(students, "A12", "A12", "B32", "B32", "Z00");
}
@Test
void testMergeSortByAverageGrade() {
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(students, gradeComparator);
assertOrder(students, 3.8, 4.2, 4.5, 4.9, 5.0);
}
@Test
void testMergeSortByRecordBookNumber() {
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(students, recordComparator);
assertOrder(students, 12345, 12346, 12347, 12348, 12349);
}
@Test
void testBubbleSortByGroupNumber() {
SortStrategy<Student> strategy = new BubbleSortStrategy<>();
strategy.sort(students, groupComparator);
assertOrder(students, "A12", "A12", "B32", "B32", "Z00");
}
@Test
void testBubbleSortByAverageGrade() {
SortStrategy<Student> strategy = new BubbleSortStrategy<>();
strategy.sort(students, gradeComparator);
assertOrder(students, 3.8, 4.2, 4.5, 4.9, 5.0);
}
@Test
void testBubbleSortByRecordBookNumber() {
SortStrategy<Student> strategy = new BubbleSortStrategy<>();
strategy.sort(students, recordComparator);
assertOrder(students, 12345, 12346, 12347, 12348, 12349);
}
@Test
void testEvenOnlySortByRecordBookNumber() {
MyList<Student> list = new MyLinkedList<>();
list.add(new Student("A01", 4.5, 7));
list.add(new Student("A02", 4.5, 8));
list.add(new Student("A03", 4.5, 3));
list.add(new Student("A04", 4.5, 2));
list.add(new Student("A05", 4.5, 5));
list.add(new Student("A06", 4.5, 4));
EvenOnlyMergeSortStrategy<Student> strategy =
new EvenOnlyMergeSortStrategy<>(Student::getRecordBookNumber);
strategy.sort(list, Comparator.comparingInt(Student::getRecordBookNumber));
int[] expected = {7, 2, 3, 4, 5, 8};
for (int i = 0; i < list.size(); i++) {
assertEquals(expected[i], list.get(i).getRecordBookNumber());
}
}
@Test
void testEvenOnlyWithNoEvenElements() {
MyList<Student> list = new MyLinkedList<>();
list.add(new Student("A01", 4.5, 1));
list.add(new Student("A02", 4.5, 3));
list.add(new Student("A03", 4.5, 5));
EvenOnlyMergeSortStrategy<Student> strategy =
new EvenOnlyMergeSortStrategy<>(Student::getRecordBookNumber);
strategy.sort(list, Comparator.comparingInt(Student::getRecordBookNumber));
int[] expected = {1, 3, 5};
for (int i = 0; i < list.size(); i++) {
assertEquals(expected[i], list.get(i).getRecordBookNumber());
}
}
@Test
void testEvenOnlyWithAllEvenElements() {
MyList<Student> list = new MyLinkedList<>();
list.add(new Student("A01", 4.5, 4));
list.add(new Student("A02", 4.5, 2));
list.add(new Student("A03", 4.5, 6));
EvenOnlyMergeSortStrategy<Student> strategy =
new EvenOnlyMergeSortStrategy<>(Student::getRecordBookNumber);
strategy.sort(list, Comparator.comparingInt(Student::getRecordBookNumber));
int[] expected = {2, 4, 6};
for (int i = 0; i < list.size(); i++) {
assertEquals(expected[i], list.get(i).getRecordBookNumber());
}
}
@Test
void testSortEmptyList() {
MyList<Student> empty = new MyLinkedList<>();
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(empty, groupComparator);
assertEquals(0, empty.size());
}
@Test
void testSortSingleElement() {
MyList<Student> single = new MyLinkedList<>();
single.add(new Student("A12", 4.5, 12345));
SortStrategy<Student> strategy = new MergeSortStrategy<>();
strategy.sort(single, groupComparator);
assertEquals(1, single.size());
}
private void assertOrder(MyList<Student> list, String... groups) {
assertEquals(groups.length, list.size());
for (int i = 0; i < groups.length; i++) {
assertEquals(groups[i], list.get(i).getGroupNumber());
}
}
private void assertOrder(MyList<Student> list, double... grades) {
assertEquals(grades.length, list.size());
for (int i = 0; i < grades.length; i++) {
assertEquals(grades[i], list.get(i).getAverageGrade(), 0.001);
}
}
private void assertOrder(MyList<Student> list, int... records) {
assertEquals(records.length, list.size());
for (int i = 0; i < records.length; i++) {
assertEquals(records[i], list.get(i).getRecordBookNumber());
}
}
}
@@ -1,13 +1,12 @@
package ru.project.student;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
class StudentTest {
@@ -104,24 +103,21 @@ class StudentTest {
@Test
void testWithInvalidGroupNumber() {
Student original = new Student("A12", 4.5, 12345);
assertThrows(IllegalArgumentException.class,
() -> original.withGroupNumber("a12"));
assertThrows(IllegalArgumentException.class, () -> original.withGroupNumber("a12"));
assertEquals("A12", original.getGroupNumber()); // не изменился
}
@Test
void testWithInvalidAverageGrade() {
Student original = new Student("A12", 4.5, 12345);
assertThrows(IllegalArgumentException.class,
() -> original.withAverageGrade(6.0));
assertThrows(IllegalArgumentException.class, () -> original.withAverageGrade(6.0));
assertEquals(4.5, original.getAverageGrade());
}
@Test
void testWithInvalidRecordBookNumber() {
Student original = new Student("A12", 4.5, 12345);
assertThrows(IllegalArgumentException.class,
() -> original.withRecordBookNumber(0));
assertThrows(IllegalArgumentException.class, () -> original.withRecordBookNumber(0));
assertEquals(12345, original.getRecordBookNumber());
}