From 56652fda719eeb95460aa2c60e175f7ebc6311e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=93=D0=B5?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D0=BD?= Date: Sat, 29 Aug 2026 21:21:53 +0400 Subject: [PATCH] refactor(sorting): remove redundant even-only merge sort strategy --- .../sorting/EvenOnlyMergeSortStrategy.java | 60 ------ .../EvenOnlyMergeSortStrategyTest.java | 177 ------------------ 2 files changed, 237 deletions(-) delete mode 100644 app/src/main/java/ru/project/sorting/EvenOnlyMergeSortStrategy.java delete mode 100644 app/src/test/java/ru/project/sorting/EvenOnlyMergeSortStrategyTest.java diff --git a/app/src/main/java/ru/project/sorting/EvenOnlyMergeSortStrategy.java b/app/src/main/java/ru/project/sorting/EvenOnlyMergeSortStrategy.java deleted file mode 100644 index 45f5b78..0000000 --- a/app/src/main/java/ru/project/sorting/EvenOnlyMergeSortStrategy.java +++ /dev/null @@ -1,60 +0,0 @@ -package ru.project.sorting; - -import ru.project.collection.MyLinkedList; -import ru.project.collection.MyList; - -import java.util.Comparator; -import java.util.function.ToIntFunction; - -public class EvenOnlyMergeSortStrategy implements SortStrategy { - private final ToIntFunction valueExtractor; - private final SortStrategy mergeSortStrategy; - - public EvenOnlyMergeSortStrategy(ToIntFunction valueExtractor) { - this.valueExtractor = valueExtractor; - this.mergeSortStrategy = new MergeSortStrategy<>(); - } - - @Override - public void sort(MyList list, Comparator comparator) { - - if (list == null || list.size() <= 1) { - return; - } - - int evenCount = 0; - - for (int i = 0; i < list.size(); i++) { - T element = list.get(i); - - if (valueExtractor.applyAsInt(element) % 2 == 0) { - evenCount++; - } - } - if (evenCount <= 1) { - return; - } - - MyList evenElements = new MyLinkedList<>(); - - int[] evenIndexes = new int[evenCount]; - - int evenIndex = 0; - - for (int i = 0; i < list.size(); i++) { - T element = list.get(i); - - if (valueExtractor.applyAsInt(element) % 2 == 0) { - evenElements.add(element); - evenIndexes[evenIndex] = i; - evenIndex++; - } - } - mergeSortStrategy.sort(evenElements, comparator); - - for (int i = 0; i < evenIndexes.length; i++) { - list.set(evenIndexes[i], evenElements.get(i)); - } - } -} - diff --git a/app/src/test/java/ru/project/sorting/EvenOnlyMergeSortStrategyTest.java b/app/src/test/java/ru/project/sorting/EvenOnlyMergeSortStrategyTest.java deleted file mode 100644 index ffaef36..0000000 --- a/app/src/test/java/ru/project/sorting/EvenOnlyMergeSortStrategyTest.java +++ /dev/null @@ -1,177 +0,0 @@ -package ru.project.sorting; - -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.assertEquals; - -class EvenOnlyMergeSortStrategyTest { - - @Test - void shouldSortOnlyEvenElements() { - MyList list = new MyLinkedList<>(); - - list.add(7); - list.add(8); - list.add(3); - list.add(2); - list.add(5); - list.add(4); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value); - - strategy.sort(list, Integer::compare); - - assertEquals(7, list.get(0)); - assertEquals(2, list.get(1)); - assertEquals(3, list.get(2)); - assertEquals(4, list.get(3)); - assertEquals(5, list.get(4)); - assertEquals(8, list.get(5)); - - assertEquals(6, list.size()); - } - - @Test - void shouldKeepAllOddElementsUnchanged() { - MyList list = new MyLinkedList<>(); - - list.add(7); - list.add(3); - list.add(5); - list.add(1); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value); - - strategy.sort(list, Integer::compare); - - assertEquals(7, list.get(0)); - assertEquals(3, list.get(1)); - assertEquals(5, list.get(2)); - assertEquals(1, list.get(3)); - } - - @Test - void shouldSortAllEvenElements() { - MyList list = new MyLinkedList<>(); - - list.add(8); - list.add(2); - list.add(6); - list.add(4); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value); - - strategy.sort(list, Integer::compare); - - assertEquals(2, list.get(0)); - assertEquals(4, list.get(1)); - assertEquals(6, list.get(2)); - assertEquals(8, list.get(3)); - } - - @Test - void shouldKeepSingleElementUnchanged() { - MyList list = new MyLinkedList<>(); - - list.add(4); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value); - - strategy.sort(list, Integer::compare); - - assertEquals(4, list.get(0)); - assertEquals(1, list.size()); - } - - @Test - void shouldHandleEmptyList() { - MyList list = new MyLinkedList<>(); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value); - - strategy.sort(list, Integer::compare); - - assertEquals(0, list.size()); - } - - @Test - void shouldUseValueExtractorToDetermineEvenElements() { - MyList list = new MyLinkedList<>(); - - list.add(4); - list.add(3); - list.add(2); - list.add(1); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value + 1); - - strategy.sort(list, Integer::compare); - - assertEquals(4, list.get(0)); - assertEquals(1, list.get(1)); - assertEquals(2, list.get(2)); - assertEquals(3, list.get(3)); - } - - @Test - void shouldUseProvidedComparator() { - MyList list = new MyLinkedList<>(); - - list.add(7); - list.add(2); - list.add(3); - list.add(8); - list.add(5); - list.add(4); - - EvenOnlyMergeSortStrategy strategy = - new EvenOnlyMergeSortStrategy<>(value -> value); - - strategy.sort(list, (first, second) -> Integer.compare(second, first)); - - assertEquals(7, list.get(0)); - assertEquals(8, list.get(1)); - assertEquals(3, list.get(2)); - assertEquals(4, list.get(3)); - assertEquals(5, list.get(4)); - assertEquals(2, list.get(5)); - } - - @Test - void shouldUseStudentRecordBookNumberToDetermineEvenElements() { - MyList students = new MyLinkedList<>(); - - students.add(new Student("A01", 4.0, 7)); - students.add(new Student("A02", 4.0, 8)); - students.add(new Student("A03", 4.0, 3)); - students.add(new Student("A04", 4.0, 2)); - students.add(new Student("A05", 4.0, 5)); - students.add(new Student("A06", 4.0, 4)); - - SortStrategy strategy = new EvenOnlyMergeSortStrategy<>( - Student::getRecordBookNumber - ); - - strategy.sort(students, new StudentRecordBookComparator()); - - assertEquals(7, students.get(0).getRecordBookNumber()); - assertEquals(2, students.get(1).getRecordBookNumber()); - assertEquals(3, students.get(2).getRecordBookNumber()); - assertEquals(4, students.get(3).getRecordBookNumber()); - assertEquals(5, students.get(4).getRecordBookNumber()); - assertEquals(8, students.get(5).getRecordBookNumber()); - - assertEquals(6, students.size()); - } -} - -