Skip to content

Commit ef70986

Browse files
Merge branch 'master' into 6438/ImprovementForHammingDistance
2 parents 0413a60 + 24f4090 commit ef70986

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed

src/test/java/com/thealgorithms/datastructures/lists/MergeKSortedLinkedListTest.java

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,88 @@ private int[] getListValues(Node head) {
9090
}
9191
return Arrays.copyOf(values, i); // return only filled part
9292
}
93+
94+
@Test
95+
void testMergeWithNullListsInArray() {
96+
Node list1 = new Node(1, new Node(3));
97+
Node list2 = null;
98+
Node list3 = new Node(2, new Node(4));
99+
Node[] lists = {list1, list2, list3};
100+
101+
MergeKSortedLinkedList merger = new MergeKSortedLinkedList();
102+
Node mergedHead = merger.mergeKList(lists, lists.length);
103+
104+
int[] expectedValues = {1, 2, 3, 4};
105+
int[] actualValues = getListValues(mergedHead);
106+
assertArrayEquals(expectedValues, actualValues, "Should handle null lists mixed with valid lists");
107+
}
108+
109+
@Test
110+
void testMergeWithDuplicateValues() {
111+
Node list1 = new Node(1, new Node(1, new Node(3)));
112+
Node list2 = new Node(1, new Node(2, new Node(3)));
113+
Node list3 = new Node(3, new Node(3));
114+
Node[] lists = {list1, list2, list3};
115+
116+
MergeKSortedLinkedList merger = new MergeKSortedLinkedList();
117+
Node mergedHead = merger.mergeKList(lists, lists.length);
118+
119+
int[] expectedValues = {1, 1, 1, 2, 3, 3, 3, 3};
120+
int[] actualValues = getListValues(mergedHead);
121+
assertArrayEquals(expectedValues, actualValues, "Should handle duplicate values correctly");
122+
}
123+
124+
@Test
125+
void testMergeWithZeroLength() {
126+
Node[] lists = {};
127+
128+
MergeKSortedLinkedList merger = new MergeKSortedLinkedList();
129+
Node mergedHead = merger.mergeKList(lists, 0);
130+
131+
assertNull(mergedHead, "Should return null for zero-length array");
132+
}
133+
134+
@Test
135+
void testMergeWithNegativeNumbers() {
136+
Node list1 = new Node(-5, new Node(-1, new Node(3)));
137+
Node list2 = new Node(-3, new Node(0, new Node(2)));
138+
Node[] lists = {list1, list2};
139+
140+
MergeKSortedLinkedList merger = new MergeKSortedLinkedList();
141+
Node mergedHead = merger.mergeKList(lists, lists.length);
142+
143+
int[] expectedValues = {-5, -3, -1, 0, 2, 3};
144+
int[] actualValues = getListValues(mergedHead);
145+
assertArrayEquals(expectedValues, actualValues, "Should handle negative numbers correctly");
146+
}
147+
148+
@Test
149+
void testMergeIdenticalLists() {
150+
Node list1 = new Node(1, new Node(2, new Node(3)));
151+
Node list2 = new Node(1, new Node(2, new Node(3)));
152+
Node list3 = new Node(1, new Node(2, new Node(3)));
153+
Node[] lists = {list1, list2, list3};
154+
155+
MergeKSortedLinkedList merger = new MergeKSortedLinkedList();
156+
Node mergedHead = merger.mergeKList(lists, lists.length);
157+
158+
int[] expectedValues = {1, 1, 1, 2, 2, 2, 3, 3, 3};
159+
int[] actualValues = getListValues(mergedHead);
160+
assertArrayEquals(expectedValues, actualValues, "Should merge identical lists correctly");
161+
}
162+
163+
@Test
164+
void testMergeAlreadySortedSequence() {
165+
Node list1 = new Node(1, new Node(2));
166+
Node list2 = new Node(3, new Node(4));
167+
Node list3 = new Node(5, new Node(6));
168+
Node[] lists = {list1, list2, list3};
169+
170+
MergeKSortedLinkedList merger = new MergeKSortedLinkedList();
171+
Node mergedHead = merger.mergeKList(lists, lists.length);
172+
173+
int[] expectedValues = {1, 2, 3, 4, 5, 6};
174+
int[] actualValues = getListValues(mergedHead);
175+
assertArrayEquals(expectedValues, actualValues, "Should handle already sorted sequence");
176+
}
93177
}

src/test/java/com/thealgorithms/others/CRCAlgorithmTest.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,85 @@ void testLargeMessageSize() {
7979
assertTrue(c.getWrongMess() >= 0);
8080
assertTrue(c.getCorrectMess() >= 0);
8181
}
82+
83+
@Test
84+
void testSingleBitMessage() {
85+
CRCAlgorithm c = new CRCAlgorithm("11", 1, 0.0);
86+
c.generateRandomMess();
87+
c.divideMessageWithP(false);
88+
c.changeMess();
89+
c.divideMessageWithP(true);
90+
91+
assertTrue(c.getCorrectMess() >= 0, "Single bit message should be handled");
92+
}
93+
94+
@Test
95+
void testPolynomialLongerThanMessage() {
96+
CRCAlgorithm c = new CRCAlgorithm("11010101", 3, 0.0);
97+
c.generateRandomMess();
98+
c.divideMessageWithP(false);
99+
c.changeMess();
100+
c.divideMessageWithP(true);
101+
102+
// Should not crash, counters should be valid
103+
assertTrue(c.getCorrectMess() + c.getWrongMess() >= 0);
104+
}
105+
106+
@Test
107+
void testPolynomialWithOnlyOnes() {
108+
CRCAlgorithm c = new CRCAlgorithm("1111", 5, 0.1);
109+
c.generateRandomMess();
110+
c.divideMessageWithP(false);
111+
c.changeMess();
112+
c.divideMessageWithP(true);
113+
114+
assertTrue(c.getCorrectMess() + c.getWrongMess() >= 0);
115+
}
116+
117+
@Test
118+
void testMultipleRefactorCalls() {
119+
CRCAlgorithm c = new CRCAlgorithm("1101", 5, 0.2);
120+
121+
for (int i = 0; i < 5; i++) {
122+
c.refactor();
123+
c.generateRandomMess();
124+
c.divideMessageWithP(false);
125+
c.changeMess();
126+
c.divideMessageWithP(true);
127+
}
128+
129+
// Counters should accumulate across multiple runs
130+
assertTrue(c.getCorrectMess() + c.getWrongMess() > 0);
131+
}
132+
133+
@Test
134+
void testCounterConsistency() {
135+
CRCAlgorithm c = new CRCAlgorithm("1101", 10, 0.3);
136+
137+
for (int i = 0; i < 100; i++) {
138+
c.refactor();
139+
c.generateRandomMess();
140+
c.divideMessageWithP(false);
141+
c.changeMess();
142+
c.divideMessageWithP(true);
143+
}
144+
145+
// Total messages processed should equal correct + wrong
146+
int totalProcessed = c.getCorrectMess() + c.getWrongMess();
147+
assertEquals(100, totalProcessed, "Total processed messages should equal iterations");
148+
149+
// Wrong messages should equal caught + not caught
150+
assertEquals(c.getWrongMess(), c.getWrongMessCaught() + c.getWrongMessNotCaught(), "Wrong messages should equal sum of caught and not caught");
151+
}
152+
153+
@Test
154+
void testGetterMethodsInitialState() {
155+
CRCAlgorithm c = new CRCAlgorithm("1101", 10, 0.1);
156+
157+
// Check initial state
158+
assertEquals(0, c.getCorrectMess(), "Initial correct messages should be 0");
159+
assertEquals(0, c.getWrongMess(), "Initial wrong messages should be 0");
160+
assertEquals(0, c.getWrongMessCaught(), "Initial caught wrong messages should be 0");
161+
assertEquals(0, c.getWrongMessNotCaught(), "Initial not caught wrong messages should be 0");
162+
}
82163
}

0 commit comments

Comments
 (0)