java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/CourseChangeBasedTrackApproximation.java
... ...
@@ -280,7 +280,7 @@ public class CourseChangeBasedTrackApproximation implements Serializable, GPSTra
280 280
*/
281 281
private Pair<GPSFixMoving, Integer> getManeuverCandidate() {
282 282
final GPSFixMoving result;
283
- final Double maximumCourseChangeToStarboard = courseChangeBetweenFixesInWindow.getMaxSum().divide(1);
283
+ final double maximumCourseChangeToStarboard = courseChangeBetweenFixesInWindow.getMaxSum().divide(1);
284 284
final double maximumCourseChangeToPort = -courseChangeBetweenFixesInWindow.getMinSum().divide(1);
285 285
final double absoluteMaximumTotalCourseChangeFromBeginningOfWindowInDegrees = Math.max(maximumCourseChangeToStarboard, maximumCourseChangeToPort);
286 286
int indexOfMaximumAbsoluteCourseChangeInCorrectDirection = -1;
java/com.sap.sse.common.test/src/com/sap/sse/common/test/KadaneExtremeSubsequenceFinderTest.java
... ...
@@ -1,6 +1,7 @@
1 1
package com.sap.sse.common.test;
2 2
3 3
import static org.junit.jupiter.api.Assertions.assertEquals;
4
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
4 5
import static org.junit.jupiter.api.Assertions.assertTrue;
5 6
6 7
import java.io.IOException;
... ...
@@ -197,6 +198,10 @@ public abstract class KadaneExtremeSubsequenceFinderTest {
197 198
finder.resetStats();
198 199
finder.removeFirst(NODES/2);
199 200
assertEquals(NODES-NODES/2, finder.size());
201
+ assertNotEquals(-1, finder.getStartIndexOfMaxSumSequence());
202
+ assertNotEquals(-1, finder.getEndIndexOfMaxSumSequence());
203
+ assertNotEquals(-1, finder.getStartIndexOfMinSumSequence());
204
+ assertNotEquals(-1, finder.getEndIndexOfMinSumSequence());
200 205
performanceMeasurement.addMeasurement(new Measurement("minChangePropagationCount", finder.getAverageMinChangePropagationSteps()));
201 206
performanceMeasurement.addMeasurement(new Measurement("maxChangePropagationCount", finder.getAverageMaxChangePropagationSteps()));
202 207
logger.info("Stats after pruning from beginning: " + finder.toString());
java/com.sap.sse.common/src/com/sap/sse/common/scalablevalue/KadaneExtremeSubsequenceFinderLinkedNodesImpl.java
... ...
@@ -422,6 +422,8 @@ public class KadaneExtremeSubsequenceFinderLinkedNodesImpl<ValueType, AveragesTo
422 422
assert last == node;
423 423
last = node.getPrevious();
424 424
}
425
+ nodesOrderedByMinSum.remove(node);
426
+ nodesOrderedByMaxSum.remove(node);
425 427
size--;
426 428
}
427 429
... ...
@@ -448,6 +450,12 @@ public class KadaneExtremeSubsequenceFinderLinkedNodesImpl<ValueType, AveragesTo
448 450
if (howManyNodesToRemove > 0) { // otherwise this is a no-op
449 451
final Node<ValueType, AveragesTo, T> lastNodeToRemove = getNode(howManyNodesToRemove-1);
450 452
first = lastNodeToRemove.getNext();
453
+ Node<ValueType, AveragesTo, T> nodeRemoved = lastNodeToRemove;
454
+ while (nodeRemoved != null) {
455
+ nodesOrderedByMinSum.remove(nodeRemoved);
456
+ nodesOrderedByMaxSum.remove(nodeRemoved);
457
+ nodeRemoved = nodeRemoved.getPrevious();
458
+ }
451 459
if (first != null) {
452 460
first.setPrevious(null);
453 461
if (first.updateThisFromPrevious()) {