mirror of
https://github.com/aljazceru/lnd-manageJ.git
synced 2026-01-28 10:24:24 +01:00
move computation of largest channel into cached object
This commit is contained in:
@@ -8,7 +8,6 @@ import de.cotto.lndmanagej.pickhardtpayments.model.EdgeWithLiquidityInformation;
|
||||
import de.cotto.lndmanagej.pickhardtpayments.model.EdgesWithLiquidityInformation;
|
||||
import de.cotto.lndmanagej.pickhardtpayments.model.IntegerMapping;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
|
||||
class ArcInitializer {
|
||||
@@ -39,7 +38,7 @@ class ArcInitializer {
|
||||
}
|
||||
|
||||
public void addArcs(EdgesWithLiquidityInformation edgesWithLiquidityInformation) {
|
||||
Coins maximumCapacity = getMaximumCapacity(edgesWithLiquidityInformation);
|
||||
Coins maximumCapacity = edgesWithLiquidityInformation.maximumCapacity().maximum(ASSUMED_MAXIMUM);
|
||||
for (EdgeWithLiquidityInformation edgeWithLiquidityInformation : edgesWithLiquidityInformation.edges()) {
|
||||
addArcs(edgeWithLiquidityInformation, maximumCapacity);
|
||||
}
|
||||
@@ -86,15 +85,6 @@ class ArcInitializer {
|
||||
return piecewiseLinearApproximations - 1;
|
||||
}
|
||||
|
||||
private Coins getMaximumCapacity(EdgesWithLiquidityInformation edgesWithLiquidityInformation) {
|
||||
Coins realMaximum = edgesWithLiquidityInformation.edges().stream()
|
||||
.map(EdgeWithLiquidityInformation::edge)
|
||||
.map(Edge::capacity)
|
||||
.max(Comparator.naturalOrder())
|
||||
.orElse(Coins.NONE);
|
||||
return realMaximum.maximum(ASSUMED_MAXIMUM);
|
||||
}
|
||||
|
||||
private long quantize(Coins coins) {
|
||||
return coins.milliSatoshis() / 1_000 / quantization;
|
||||
}
|
||||
|
||||
@@ -1,17 +1,26 @@
|
||||
package de.cotto.lndmanagej.pickhardtpayments.model;
|
||||
|
||||
import de.cotto.lndmanagej.model.Coins;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public record EdgesWithLiquidityInformation(List<EdgeWithLiquidityInformation> edges) {
|
||||
public record EdgesWithLiquidityInformation(List<EdgeWithLiquidityInformation> edges, Coins maximumCapacity) {
|
||||
public static final EdgesWithLiquidityInformation EMPTY = new EdgesWithLiquidityInformation(List.of());
|
||||
|
||||
public EdgesWithLiquidityInformation(Collection<EdgeWithLiquidityInformation> edges) {
|
||||
this(edges.stream().toList());
|
||||
this(edges.stream().toList(), getMaximumCapacity(edges));
|
||||
}
|
||||
|
||||
public EdgesWithLiquidityInformation(EdgeWithLiquidityInformation... edges) {
|
||||
this(Arrays.stream(edges).toList());
|
||||
}
|
||||
|
||||
private static Coins getMaximumCapacity(Collection<EdgeWithLiquidityInformation> edges) {
|
||||
return edges.stream()
|
||||
.map(EdgeWithLiquidityInformation::edge)
|
||||
.map(Edge::capacity)
|
||||
.reduce(Coins.NONE, Coins::maximum);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,4 +19,21 @@ class EdgesWithLiquidityInformationTest {
|
||||
EdgeWithLiquidityInformation edge2 = EdgeWithLiquidityInformation.forLowerBound(EDGE_1_3, Coins.ofSatoshis(10));
|
||||
assertThat(new EdgesWithLiquidityInformation(edge1, edge2).edges()).containsExactly(edge1, edge2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void maximumCapacity_empty() {
|
||||
assertThat(EdgesWithLiquidityInformation.EMPTY.maximumCapacity()).isEqualTo(Coins.NONE);
|
||||
}
|
||||
|
||||
@Test
|
||||
void maximumCapacity() {
|
||||
Coins largerCapacity = Coins.ofSatoshis(100);
|
||||
Coins smallerCapacity = Coins.ofSatoshis(10);
|
||||
EdgeWithLiquidityInformation edge1 =
|
||||
EdgeWithLiquidityInformation.forUpperBound(EDGE.withCapacity(largerCapacity), largerCapacity);
|
||||
EdgeWithLiquidityInformation edge2 =
|
||||
EdgeWithLiquidityInformation.forUpperBound(EDGE_1_3.withCapacity(smallerCapacity), smallerCapacity);
|
||||
|
||||
assertThat(new EdgesWithLiquidityInformation(edge1, edge2).maximumCapacity()).isEqualTo(largerCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user