33e803e1df1f2113664dfcc73f30f3aaf8c7a4ee
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()) { |