diff --git a/code/libraries/coded-sequence/java/nu/marginalia/sequence/SequenceOperations.java b/code/libraries/coded-sequence/java/nu/marginalia/sequence/SequenceOperations.java index 57604f08..ff394b77 100644 --- a/code/libraries/coded-sequence/java/nu/marginalia/sequence/SequenceOperations.java +++ b/code/libraries/coded-sequence/java/nu/marginalia/sequence/SequenceOperations.java @@ -87,6 +87,9 @@ public class SequenceOperations { if (indexes[i] < positions[i].size()) { values[i] = positions[i].getInt(indexes[i]++) + offsets[i]; + + // Update the maximum value, if necessary + max = Math.max(max, values[i]); } else { break; } @@ -177,18 +180,22 @@ public class SequenceOperations { minDist = Math.min(minDist, maxVal - minVal); - for (int i = 0;; i = (i + 1) % positions.length) - { - if (values[i] == minVal) { + for (;;) { + for (int i = 0; i < positions.length; i++) { + if (values[i] > minVal) { + continue; + } + if (indexes[i] < positions[i].size()) { values[i] = positions[i].getInt(indexes[i]++) + offsets[i]; } else { - break; + return minDist; } if (values[i] > maxVal) { maxVal = values[i]; } + if (values[i] > minVal) { minVal = Integer.MAX_VALUE; for (int val : values) { @@ -199,7 +206,5 @@ public class SequenceOperations { minDist = Math.min(minDist, maxVal - minVal); } } - - return minDist; } } diff --git a/code/libraries/coded-sequence/test/nu/marginalia/sequence/SequenceOperationsTest.java b/code/libraries/coded-sequence/test/nu/marginalia/sequence/SequenceOperationsTest.java index e0ec3492..dcf69a42 100644 --- a/code/libraries/coded-sequence/test/nu/marginalia/sequence/SequenceOperationsTest.java +++ b/code/libraries/coded-sequence/test/nu/marginalia/sequence/SequenceOperationsTest.java @@ -70,7 +70,7 @@ class SequenceOperationsTest { GammaCodedSequence seq2 = GammaCodedSequence.generate(wa, 2, 5, 8, 10, 14); GammaCodedSequence seq3 = GammaCodedSequence.generate(wa, 1, 5, 8, 9, 10); - assertEquals(IntList.of(8, 10), SequenceOperations.findIntersections(seq1.iterator(), seq2.iterator(), seq3.iterator())); + assertEquals(IntList.of(8, 10), SequenceOperations.findIntersections(seq1.values(), seq2.values(), seq3.values())); }