From 6c1c07635f3083906fd7a2587d6e69d64bb56bb7 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 9 Jan 2021 19:54:10 -0500 Subject: [PATCH] BUGFIX: merged nets to me included into overall board --- src/main/java/com/rusefi/pcb/Networks.java | 18 ++++++++++++++---- src/main/java/com/rusefi/pcb/PcbMergeTool.java | 4 ++-- src/test/java/com/rusefi/pcb/PcbMergeTest.java | 8 ++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/rusefi/pcb/Networks.java b/src/main/java/com/rusefi/pcb/Networks.java index 5d8ec46..1b80d97 100644 --- a/src/main/java/com/rusefi/pcb/Networks.java +++ b/src/main/java/com/rusefi/pcb/Networks.java @@ -3,8 +3,7 @@ package com.rusefi.pcb; import com.rusefi.pcb.nodes.NetNode; import com.rusefi.pcb.nodes.PcbNode; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import static com.rusefi.pcb.nodes.PcbNode.TOKEN_NET; @@ -56,7 +55,11 @@ public class Networks { return value; } - public BoardState registerAdditionalBoard(PcbNode source) { + public BoardState registerAdditionalBoard(PcbNode destNode, PcbNode source) { + Set names = new HashSet<>(); + for (NetNode known : destNode.iterate(TOKEN_NET)) { + names.add(known.getName()); + } BoardState result = new BoardState(); for (NetNode net : source.iterate(TOKEN_NET)) { @@ -65,9 +68,16 @@ public class Networks { String newNameInCombinedBoard = registerNetworkIfPcbSpecific(netName); result.netNameInLocalToNetNameInCombined.put(netName, newNameInCombinedBoard); - result.netIdMapping.put(netId, getId(newNameInCombinedBoard)); + int id = getId(newNameInCombinedBoard); + result.netIdMapping.put(netId, id); + + if (!names.contains(newNameInCombinedBoard)) { + System.out.println("Adding new NET declaration into combined PCB"); + destNode.children.add(new NetNode(0, Arrays.asList("" + id, newNameInCombinedBoard))); + } } + return result; } diff --git a/src/main/java/com/rusefi/pcb/PcbMergeTool.java b/src/main/java/com/rusefi/pcb/PcbMergeTool.java index 71021b6..cddc8cf 100644 --- a/src/main/java/com/rusefi/pcb/PcbMergeTool.java +++ b/src/main/java/com/rusefi/pcb/PcbMergeTool.java @@ -83,9 +83,9 @@ public class PcbMergeTool { } static void mergePcb(PcbNode destNode, PcbNode source, Networks networks) { - networks.registerAdditionalBoard(destNode); + networks.registerAdditionalBoard(destNode, destNode); - Networks.BoardState state = networks.registerAdditionalBoard(source); + Networks.BoardState state = networks.registerAdditionalBoard(destNode, source); List zones = source.iterate(TOKEN_ZONE); log("Processing " + zones.size() + " zone(s)"); diff --git a/src/test/java/com/rusefi/pcb/PcbMergeTest.java b/src/test/java/com/rusefi/pcb/PcbMergeTest.java index 33e87f3..78662c1 100644 --- a/src/test/java/com/rusefi/pcb/PcbMergeTest.java +++ b/src/test/java/com/rusefi/pcb/PcbMergeTest.java @@ -22,7 +22,7 @@ public class PcbMergeTest { assertEquals(1036, pcb.children.size()); PcbMergeTool.mergePcb(destNode, pcb, new Networks()); - assertEquals(1541, destNode.children.size()); + assertEquals(1616, destNode.children.size()); } @Test @@ -85,8 +85,8 @@ public class PcbMergeTest { assertEquals("\"CAN_VIO\"", net1.getName()); - assertEquals(4, node.iterate(TOKEN_NET).size()); - assertEquals(6, node.iterateRecursive(TOKEN_NET).size()); + assertEquals(5, node.iterate(TOKEN_NET).size()); + assertEquals(7, node.iterateRecursive(TOKEN_NET).size()); } @Test @@ -100,7 +100,7 @@ public class PcbMergeTest { assertEquals(1036, pcb.children.size()); PcbMergeTool.mergePcb(destNode, pcb, new Networks()); - assertEquals(5758, destNode.children.size()); + assertEquals(5825, destNode.children.size()); } @Test