From 575826460ece1d2c35cc94484b5ca28342dedbca Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Tue, 12 Aug 2025 11:15:11 +0200 Subject: [PATCH 01/17] fix: use the correct child order in line graph exports When importing line graphs, we consider the order of the edge lines as the definite child ordering even if we export the child order using `ChildOrderEdgeFormat`. However, the previous algorithm blindly exports all `DiffType.NON` edges disregarding the fact the other edges might need to be exported first. As the order of edge lines acts as a diff (before edges act as deletions and after edges as insertions), we need to compute a line diff of the child orders at both times to know which edges can be exported as existing at both times (unchanged). Note that some edges will be exported as inserted and deleted instead of unmodified although both the child and the parent are the same because line diffs cannot encode moves. Consumers of line graphs should not depend on the fact which edges are exported as unchanged because the diffing algorithm needs to apply heuristics to select these edges. --- .../variation/diff/serialize/Format.java | 62 +- .../edgeformat/ChildOrderEdgeFormat.java | 2 +- src/test/java/LineGraphTest.java | 73 +- ...a4c1db1b192e221d8e25460d6d1128d1bdd0c0d.lg | 2 +- ...032346092e47048becb36a7cb183b4739547370.lg | 12 +- .../resources/diffs/jpp/basic_jpp_expected.lg | 12 +- .../resources/diffs/parser/02_expected.lg | 2 +- .../resources/diffs/parser/03_expected.lg | 4 +- .../resources/diffs/parser/08_expected.lg | 2 +- .../resources/diffs/parser/09_expected.lg | 4 +- .../resources/diffs/parser/10_expected.lg | 2 +- .../resources/diffs/parser/11_expected.lg | 2 +- .../resources/diffs/parser/16_expected.lg | 10 +- .../resources/diffs/parser/17_expected.lg | 2 +- src/test/resources/line_graph/.gitignore | 1 + src/test/resources/line_graph/childOrder.lg | 9 + ...d641ac85c6170c34845db5e345d3bf9cedce8d7.lg | 2952 ++++++++--------- .../diffWithComments_expected.lg | 4 +- .../inline_comments_1_expected.lg | 6 +- .../inline_comments_2_expected.lg | 6 +- .../inline_comments_3_expected.lg | 6 +- .../inline_comments_4_expected.lg | 6 +- .../inline_comments_5_expected.lg | 10 +- .../inline_comments_6_expected.lg | 2 +- .../multilinemacros/mldiff1_expected.lg | 22 +- .../04_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/04_gumtree_expected.lg | 2 +- .../05_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/05_gumtree_expected.lg | 2 +- .../06_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/06_gumtree_expected.lg | 2 +- .../07_change-distiller-theta_expected.lg | 4 +- .../07_change-distiller_expected.lg | 4 +- .../07_classic-gumtree-theta_expected.lg | 4 +- .../07_gumtree-hybrid-id_expected.lg | 4 +- .../07_gumtree-hybrid_expected.lg | 4 +- .../07_gumtree-partition-id_expected.lg | 4 +- .../07_gumtree-simple-id-theta_expected.lg | 4 +- .../07_gumtree-simple-id_expected.lg | 4 +- .../07_gumtree-simple_expected.lg | 4 +- .../tree-diffing/07_gumtree_expected.lg | 4 +- .../07_longestCommonSequence_expected.lg | 4 +- .../tree-diffing/07_theta_expected.lg | 4 +- .../resources/tree-diffing/07_xy_expected.lg | 4 +- .../08_change-distiller-theta_expected.lg | 4 +- .../08_change-distiller_expected.lg | 4 +- .../08_classic-gumtree-theta_expected.lg | 4 +- .../08_gumtree-hybrid-id_expected.lg | 4 +- .../08_gumtree-hybrid_expected.lg | 4 +- .../08_gumtree-partition-id_expected.lg | 4 +- .../08_gumtree-simple-id-theta_expected.lg | 4 +- .../08_gumtree-simple-id_expected.lg | 4 +- .../08_gumtree-simple_expected.lg | 4 +- .../tree-diffing/08_gumtree_expected.lg | 4 +- .../08_longestCommonSequence_expected.lg | 4 +- .../tree-diffing/08_theta_expected.lg | 4 +- .../resources/tree-diffing/08_xy_expected.lg | 4 +- .../09_change-distiller-theta_expected.lg | 10 +- .../09_change-distiller_expected.lg | 10 +- .../09_classic-gumtree-theta_expected.lg | 10 +- .../09_gumtree-hybrid-id_expected.lg | 10 +- .../09_gumtree-hybrid_expected.lg | 10 +- .../09_gumtree-partition-id_expected.lg | 10 +- .../09_gumtree-simple-id-theta_expected.lg | 10 +- .../09_gumtree-simple-id_expected.lg | 10 +- .../09_gumtree-simple_expected.lg | 10 +- .../tree-diffing/09_gumtree_expected.lg | 10 +- .../09_longestCommonSequence_expected.lg | 10 +- .../tree-diffing/09_theta_expected.lg | 10 +- .../resources/tree-diffing/09_xy_expected.lg | 10 +- .../10_change-distiller_expected.lg | 2 +- .../10_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/10_gumtree_expected.lg | 2 +- .../tree-diffing/11_gumtree_expected.lg | 2 +- 74 files changed, 1776 insertions(+), 1693 deletions(-) create mode 100644 src/test/resources/line_graph/.gitignore create mode 100644 src/test/resources/line_graph/childOrder.lg diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/Format.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/Format.java index 2a7327903..65401c376 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/Format.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/Format.java @@ -1,11 +1,16 @@ package org.variantsync.diffdetective.variation.diff.serialize; +import org.eclipse.jgit.diff.DiffAlgorithm; +import org.eclipse.jgit.diff.EditList; +import org.eclipse.jgit.diff.Sequence; +import org.eclipse.jgit.diff.SequenceComparator; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.EdgeLabelFormat; import org.variantsync.diffdetective.variation.diff.serialize.nodeformat.DiffNodeLabelFormat; +import java.util.List; import java.util.function.Consumer; import static org.variantsync.diffdetective.variation.diff.Time.AFTER; @@ -69,20 +74,55 @@ public void forEachNode(VariationDiff variationDiff, Consumer */ public void forEachEdge(VariationDiff variationDiff, Consumer> callback) { variationDiff.forAll((node) -> { - var beforeParent = node.getParent(BEFORE); - var afterParent = node.getParent(AFTER); - - // Are both parent edges the same? - if (beforeParent != null && afterParent != null && beforeParent == afterParent) { - sortedEdgeWithLabel(node, node.getParent(BEFORE), StyledEdge.ALWAYS, callback); - } else { - if (beforeParent != null) { - sortedEdgeWithLabel(node, node.getParent(BEFORE), StyledEdge.BEFORE, callback); + List> beforeChildren = node.getChildOrder(BEFORE); + List> afterChildren = node.getChildOrder(AFTER); + + class ListSequence extends Sequence { + public final List list; + + public ListSequence(List list) { + this.list = list; + } + + @Override + public int size() { + return list.size(); } - if (afterParent != null) { - sortedEdgeWithLabel(node, node.getParent(AFTER), StyledEdge.AFTER, callback); + } + + class ListSequenceComparator extends SequenceComparator> { + @Override + public boolean equals(ListSequence sequence1, int index1, ListSequence sequence2, int index2) { + return sequence1.list.get(index1) == sequence2.list.get(index2); + } + + @Override + public int hash(ListSequence sequence, int index) { + return System.identityHashCode(sequence.list.get(index)); } } + + final EditList editList = DiffAlgorithm.getAlgorithm(DiffAlgorithm.SupportedAlgorithm.MYERS).diff( + new ListSequenceComparator>(), + new ListSequence<>(beforeChildren), + new ListSequence<>(afterChildren) + ); + + int beforeIndex = 0; + for (var edit : editList) { + for (; beforeIndex < edit.getBeginA(); ++beforeIndex) { + sortedEdgeWithLabel(beforeChildren.get(beforeIndex), node, StyledEdge.ALWAYS, callback); + } + for (; beforeIndex < edit.getEndA(); ++beforeIndex) { + sortedEdgeWithLabel(beforeChildren.get(beforeIndex), node, StyledEdge.BEFORE, callback); + } + for (int afterIndex = edit.getBeginB(); afterIndex < edit.getEndB(); ++afterIndex) { + sortedEdgeWithLabel(afterChildren.get(afterIndex), node, StyledEdge.AFTER, callback); + } + } + for (; beforeIndex < beforeChildren.size(); ++beforeIndex) { + sortedEdgeWithLabel(beforeChildren.get(beforeIndex), node, StyledEdge.ALWAYS, callback); + } }); } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/edgeformat/ChildOrderEdgeFormat.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/edgeformat/ChildOrderEdgeFormat.java index 2904be75e..886a8c428 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/edgeformat/ChildOrderEdgeFormat.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/edgeformat/ChildOrderEdgeFormat.java @@ -15,7 +15,7 @@ * * This index is encoded into decimal and delimited by a semicolon from the previous value. * - * This format is mainly useful to equivalence of two {@link VariationDiff}s, for example in tests. + * This format is mainly useful to verify the equivalence of two {@link VariationDiff}s, for example in tests. * * @author Benjamin Moosherr */ diff --git a/src/test/java/LineGraphTest.java b/src/test/java/LineGraphTest.java index 2c79e3dbd..c42704ea8 100644 --- a/src/test/java/LineGraphTest.java +++ b/src/test/java/LineGraphTest.java @@ -1,24 +1,32 @@ import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.function.FailableConsumer; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.variantsync.diffdetective.diff.result.DiffParseException; +import org.variantsync.diffdetective.diff.text.DiffLineNumber; +import org.variantsync.diffdetective.util.IO; import org.variantsync.diffdetective.variation.DiffLinesLabel; +import org.variantsync.diffdetective.variation.diff.DiffNode; +import org.variantsync.diffdetective.variation.diff.DiffType; +import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.serialize.*; import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.DefaultEdgeLabelFormat; import org.variantsync.diffdetective.variation.diff.serialize.nodeformat.LabelOnlyDiffNodeFormat; import org.variantsync.diffdetective.variation.diff.serialize.treeformat.CommitDiffVariationDiffLabelFormat; -import org.variantsync.diffdetective.util.IO; - -import static org.junit.jupiter.api.Assertions.fail; +import org.variantsync.diffdetective.variation.diff.source.CommitDiffVariationDiffSource; +import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.List; import java.util.stream.Stream; +import static org.junit.jupiter.api.Assertions.fail; + /** * For testing the import of a line graph. */ @@ -34,7 +42,9 @@ public class LineGraphTest { ); public static Stream testCases() throws IOException { - return Files.list(Paths.get("src/test/resources/line_graph")); + return Files + .list(Constants.RESOURCE_DIR.resolve("line_graph")) + .filter(file -> file.getFileName().toString().endsWith(".lg")); } /** @@ -49,22 +59,26 @@ public void idempotentReadWrite(Path testFile) throws IOException { } assertConsistencyForAll(variationDiffs); - Path actualPath = testFile.getParent().resolve(testFile.getFileName().toString() + ".actual"); - try (var output = IO.newBufferedOutputStream(actualPath)) { - LineGraphExport.toLineGraphFormat(variationDiffs, EXPORT_OPTIONS, output); - } + assertEqualsFile(testFile, output -> LineGraphExport.toLineGraphFormat(variationDiffs, EXPORT_OPTIONS, output)); + } - try ( - var expectedFile = Files.newBufferedReader(testFile); - var actualFile = Files.newBufferedReader(actualPath); - ) { - if (!IOUtils.contentEqualsIgnoreEOL(expectedFile, actualFile)) { - fail("The file " + testFile + " couldn't be exported or imported without modifications"); - } else { - // Only keep output file on errors - Files.delete(actualPath); - } - } + @Test + public void testChildOrder() throws IOException, DiffParseException { + Path expectedPath = Constants.RESOURCE_DIR.resolve("line_graph").resolve("childOrder.lg"); + + // Note that this variation diff doesn't have a line diff representation because it + // represents a move (it could be parseable using a tree differ). + var root = DiffNode.createRoot(new DiffLinesLabel()); + var A = DiffNode.createArtifact(DiffType.NON, new DiffLineNumber(1, 1, 2), new DiffLineNumber(1, 1, 2), new DiffLinesLabel(List.of(new DiffLinesLabel.Line("A", new DiffLineNumber(1, DiffLineNumber.InvalidLineNumber, 2))))); + var B = DiffNode.createArtifact(DiffType.NON, new DiffLineNumber(2, 2, 1), new DiffLineNumber(2, 2, 1), new DiffLinesLabel(List.of(new DiffLinesLabel.Line("B", new DiffLineNumber(2, DiffLineNumber.InvalidLineNumber, 1))))); + root.addChild(A, Time.BEFORE); + root.addChild(B, Time.BEFORE); + root.addChild(B, Time.AFTER); + root.addChild(A, Time.AFTER); + + final var variationDiff = new VariationDiff(root, new CommitDiffVariationDiffSource(Path.of("fileName"), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); + + assertEqualsFile(expectedPath, output -> LineGraphExport.toLineGraphFormat(List.of(variationDiff), EXPORT_OPTIONS, output)); } /** @@ -78,4 +92,23 @@ private static void assertConsistencyForAll(final List actualOutput) throws IOException { + Path actualPath = expectedPath.getParent().resolve(expectedPath.getFileName().toString() + ".actual"); + try (var output = IO.newBufferedOutputStream(actualPath)) { + actualOutput.accept(output); + } + + try ( + var expectedFile = Files.newBufferedReader(expectedPath); + var actualFile = Files.newBufferedReader(actualPath); + ) { + if (!IOUtils.contentEqualsIgnoreEOL(expectedFile, actualFile)) { + fail("Expected the content of " + expectedPath + " but got the content of " + actualPath); + } else { + // Only keep output file on errors + Files.delete(actualPath); + } + } + } } diff --git a/src/test/resources/diffs/differ/4a4c1db1b192e221d8e25460d6d1128d1bdd0c0d.lg b/src/test/resources/diffs/differ/4a4c1db1b192e221d8e25460d6d1128d1bdd0c0d.lg index 3cbe7dae9..4bd20ce33 100644 --- a/src/test/resources/diffs/differ/4a4c1db1b192e221d8e25460d6d1128d1bdd0c0d.lg +++ b/src/test/resources/diffs/differ/4a4c1db1b192e221d8e25460d6d1128d1bdd0c0d.lg @@ -5,5 +5,5 @@ v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Another v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;Hallo e 147 16 ba;0,0 e 203 16 b;1,-1 -e 339 16 ba;2,2 e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/diffs/differ/a032346092e47048becb36a7cb183b4739547370.lg b/src/test/resources/diffs/differ/a032346092e47048becb36a7cb183b4739547370.lg index d151296bd..7aa5bf395 100644 --- a/src/test/resources/diffs/differ/a032346092e47048becb36a7cb183b4739547370.lg +++ b/src/test/resources/diffs/differ/a032346092e47048becb36a7cb183b4739547370.lg @@ -29,19 +29,19 @@ e 336 16 ba;3,3 e 403 336 ba;0,0 e 467 336 ba;1,1 e 528 336 ba;2,2 -e 595 528 ba;0,0 -e 657 528 ba;1,1 -e 723 657 ba;0,0 e 851 336 ba;3,3 e 915 336 ba;4,4 e 979 336 ba;5,5 e 1043 336 ba;6,6 e 1104 336 ba;7,7 -e 1299 1104 ba;0,0 -e 1363 1104 ba;1,1 e 1619 336 ba;8,8 e 1680 336 ba;9,9 -e 1811 1680 ba;0,0 e 1939 336 ba;10,10 e 2000 336 ba;11,11 +e 595 528 ba;0,0 +e 657 528 ba;1,1 +e 723 657 ba;0,0 +e 1299 1104 ba;0,0 +e 1363 1104 ba;1,1 +e 1811 1680 ba;0,0 e 2067 2000 ba;0,0 diff --git a/src/test/resources/diffs/jpp/basic_jpp_expected.lg b/src/test/resources/diffs/jpp/basic_jpp_expected.lg index c6f8d5924..7c02b52eb 100644 --- a/src/test/resources/diffs/jpp/basic_jpp_expected.lg +++ b/src/test/resources/diffs/jpp/basic_jpp_expected.lg @@ -20,16 +20,16 @@ e 131 16 a;-1,0 e 195 16 a;-1,1 e 259 16 a;-1,2 e 320 16 a;-1,3 -e 387 320 a;-1,0 -e 451 320 a;-1,1 -e 515 320 a;-1,2 e 643 16 a;-1,4 e 707 16 a;-1,5 e 768 16 a;-1,6 -e 835 768 a;-1,0 -e 899 768 a;-1,1 -e 963 768 a;-1,2 e 1091 16 a;-1,7 e 1155 16 a;-1,8 e 1216 16 a;-1,9 +e 387 320 a;-1,0 +e 451 320 a;-1,1 +e 515 320 a;-1,2 +e 835 768 a;-1,0 +e 899 768 a;-1,1 +e 963 768 a;-1,2 e 1283 1216 a;-1,0 diff --git a/src/test/resources/diffs/parser/02_expected.lg b/src/test/resources/diffs/parser/02_expected.lg index be1bdf11f..21f0820e2 100644 --- a/src/test/resources/diffs/parser/02_expected.lg +++ b/src/test/resources/diffs/parser/02_expected.lg @@ -3,6 +3,6 @@ v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);A;#if A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);; Code v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 5, new: 3);; // Hehe e 136 16 b;0,-1 -e 211 136 b;0,-1 e 211 16 a;-1,0 e 323 16 a;-1,1 +e 211 136 b;0,-1 diff --git a/src/test/resources/diffs/parser/03_expected.lg b/src/test/resources/diffs/parser/03_expected.lg index a51c370b1..d9480b61a 100644 --- a/src/test/resources/diffs/parser/03_expected.lg +++ b/src/test/resources/diffs/parser/03_expected.lg @@ -5,8 +5,8 @@ v 595 NON;ARTIFACT;(old: 6, diff: 8, new: 5);(old: 7, diff: 9, new: 6);;Code v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 10, new: 6);A | B | C;#if A \; || B \; || C \; // Foo v 771 ADD;ARTIFACT;(old: -1, diff: 11, new: 7);(old: -1, diff: 12, new: 8);; // Bar e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 771 16 a;-1,1 e 523 136 b;0,-1 e 595 136 b;1,-1 e 595 128 a;-1,0 -e 128 16 a;-1,0 -e 771 16 a;-1,1 diff --git a/src/test/resources/diffs/parser/08_expected.lg b/src/test/resources/diffs/parser/08_expected.lg index 6d28b028d..1d6417339 100644 --- a/src/test/resources/diffs/parser/08_expected.lg +++ b/src/test/resources/diffs/parser/08_expected.lg @@ -3,6 +3,6 @@ v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 4, new: -1);defined(A);#i v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 2);(old: 3, diff: 4, new: 3);;Code v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 4, new: 3);defined(B);#ifdef B e 136 16 b;0,-1 +e 192 16 a;-1,0 e 275 136 b;0,-1 e 275 192 a;-1,0 -e 192 16 a;-1,0 diff --git a/src/test/resources/diffs/parser/09_expected.lg b/src/test/resources/diffs/parser/09_expected.lg index 5b3559d42..30efd0c3d 100644 --- a/src/test/resources/diffs/parser/09_expected.lg +++ b/src/test/resources/diffs/parser/09_expected.lg @@ -4,8 +4,8 @@ v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Code 1 v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 3);(old: 5, diff: 5, new: 4);;Code 2 v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 16 b;0,-1 +e 339 16 b;1,-1 +e 128 16 a;-1,0 e 211 136 b;0,-1 e 211 128 a;-1,0 -e 339 16 b;1,-1 e 339 128 a;-1,1 -e 128 16 a;-1,0 diff --git a/src/test/resources/diffs/parser/10_expected.lg b/src/test/resources/diffs/parser/10_expected.lg index 23e1643c1..5f7236d99 100644 --- a/src/test/resources/diffs/parser/10_expected.lg +++ b/src/test/resources/diffs/parser/10_expected.lg @@ -3,6 +3,6 @@ v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 3, diff: 4, new: -1);defined(A);#i v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 2);(old: 3, diff: 4, new: 3);;Code v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(B);#ifdef B e 200 16 b;0,-1 +e 128 16 a;-1,0 e 275 200 b;0,-1 e 275 128 a;-1,0 -e 128 16 a;-1,0 diff --git a/src/test/resources/diffs/parser/11_expected.lg b/src/test/resources/diffs/parser/11_expected.lg index 886bc794f..4d60ed8d9 100644 --- a/src/test/resources/diffs/parser/11_expected.lg +++ b/src/test/resources/diffs/parser/11_expected.lg @@ -3,6 +3,6 @@ v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 4, new: -1);defined(A);#i v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 2);(old: 3, diff: 4, new: 3);;Code v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 5, new: 3);defined(B);#ifdef B e 136 16 b;0,-1 +e 192 16 a;-1,0 e 275 136 b;0,-1 e 275 192 a;-1,0 -e 192 16 a;-1,0 diff --git a/src/test/resources/diffs/parser/16_expected.lg b/src/test/resources/diffs/parser/16_expected.lg index f351f9f7a..c3b64bcf7 100644 --- a/src/test/resources/diffs/parser/16_expected.lg +++ b/src/test/resources/diffs/parser/16_expected.lg @@ -8,14 +8,14 @@ v 595 NON;ARTIFACT;(old: 6, diff: 8, new: 7);(old: 7, diff: 9, new: 8);;d v 256 ADD;IF;(old: -1, diff: 3, new: 2);(old: -1, diff: 5, new: 4);defined(B);#ifdef B v 386 ADD;ELIF;(old: -1, diff: 5, new: 4);(old: -1, diff: 7, new: 6);C;#elif C e 136 16 b;0,-1 -e 211 136 b;0,-1 e 211 16 a;-1,0 +e 256 16 a;-1,1 +e 211 136 b;0,-1 e 339 136 b;1,-1 -e 339 256 a;-1,0 e 467 136 b;2,-1 -e 467 386 a;-1,0 e 529 136 b;3,-1 -e 529 386 a;-1,1 e 595 529 ba;0,0 -e 256 16 a;-1,1 +e 339 256 a;-1,0 e 386 256 a;-1,1 +e 467 386 a;-1,0 +e 529 386 a;-1,1 diff --git a/src/test/resources/diffs/parser/17_expected.lg b/src/test/resources/diffs/parser/17_expected.lg index 0476ef4d0..046f80dad 100644 --- a/src/test/resources/diffs/parser/17_expected.lg +++ b/src/test/resources/diffs/parser/17_expected.lg @@ -3,5 +3,5 @@ v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 2, diff: 3, new: -1);defined(A);#i v 265 REM;ELSE;(old: 2, diff: 3, new: -1);(old: 3, diff: 5, new: -1);;#else v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 4, new: 3);defined(B);#ifdef B #\;#else e 136 16 b;0,-1 -e 265 136 b;0,-1 e 192 16 a;-1,0 +e 265 136 b;0,-1 diff --git a/src/test/resources/line_graph/.gitignore b/src/test/resources/line_graph/.gitignore new file mode 100644 index 000000000..5842cb6df --- /dev/null +++ b/src/test/resources/line_graph/.gitignore @@ -0,0 +1 @@ +*.actual diff --git a/src/test/resources/line_graph/childOrder.lg b/src/test/resources/line_graph/childOrder.lg new file mode 100644 index 000000000..5971add84 --- /dev/null +++ b/src/test/resources/line_graph/childOrder.lg @@ -0,0 +1,9 @@ +t # fileName$$$aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +v 16 +v 147 A +v 211 B +e 211 16 a +e 147 16 ba +e 211 16 b + + diff --git a/src/test/resources/line_graph/vulkan_structs.hpp$$$fd641ac85c6170c34845db5e345d3bf9cedce8d7.lg b/src/test/resources/line_graph/vulkan_structs.hpp$$$fd641ac85c6170c34845db5e345d3bf9cedce8d7.lg index b4e82d0ac..2f6f89aba 100644 --- a/src/test/resources/line_graph/vulkan_structs.hpp$$$fd641ac85c6170c34845db5e345d3bf9cedce8d7.lg +++ b/src/test/resources/line_graph/vulkan_structs.hpp$$$fd641ac85c6170c34845db5e345d3bf9cedce8d7.lg @@ -1998,2046 +1998,785 @@ v 4723712 ADD_IF_"if -VULKAN_HPP_NO_STRUCT_SETTERS" v 4724992 ADD_IF_"if -VULKAN_HPP_DISABLE_ENHANCED_MODE" e 592 144 ba e 3283 592 b -e 3283 3200 a e 8275 592 b -e 8275 8192 a e 9107 592 b -e 9107 9024 a e 14547 592 b -e 14547 14464 a e 22355 592 b -e 22355 22272 a e 27731 592 b -e 27731 27648 a e 31059 592 b -e 31059 30976 a e 32467 592 b -e 32467 32384 a e 37715 592 b -e 37715 37632 a e 41427 592 b -e 41427 41344 a e 42195 592 b -e 42195 42112 a e 50195 592 b -e 50195 50112 a e 54483 592 b -e 54483 50112 a e 55763 592 b -e 55763 50112 a e 53640 592 b -e 53779 53640 b -e 53779 53696 a e 54920 592 b -e 55059 54920 b -e 55059 54976 a e 60755 592 b -e 60755 60672 a e 66963 592 b -e 66963 66880 a e 74259 592 b -e 74259 74176 a e 83347 592 b -e 83347 83264 a e 93523 592 b -e 93523 93440 a e 99795 592 b -e 99795 99712 a e 104595 592 b -e 104595 104512 a e 112083 592 b -e 112083 112000 a e 114504 592 b -e 114643 114504 b -e 114643 114560 a e 120403 592 b -e 120403 120320 a e 126547 592 b -e 126547 126464 a e 132243 592 b -e 132243 132160 a e 136467 592 b -e 136467 136384 a e 141267 592 b -e 141267 141184 a e 149139 592 b -e 149139 149056 a e 157267 592 b -e 157267 157184 a e 163475 592 b -e 163475 163392 a e 170771 592 b -e 170771 170688 a e 182675 592 b -e 182675 182592 a e 188691 592 b -e 188691 188608 a e 190227 592 b -e 190227 190144 a e 195667 592 b -e 195667 195584 a e 200339 592 b -e 200339 200256 a e 205971 592 b -e 205971 205888 a e 213139 592 b -e 213139 213056 a e 219219 592 b -e 219219 219136 a e 226067 592 b -e 226067 225984 a e 245968 592 ba -e 247955 245968 b -e 247955 247872 a -e 247872 245968 a e 254099 592 b -e 254099 254016 a e 261971 592 b -e 261971 261888 a e 271187 592 b -e 271187 271104 a e 280659 592 b -e 280659 280576 a e 286483 592 b -e 286483 286400 a e 291411 592 b -e 291411 291328 a e 297683 592 b -e 297683 297600 a e 302611 592 b -e 302611 302528 a e 307027 592 b -e 307027 306944 a e 312979 592 b -e 312979 312896 a e 315080 592 b -e 315219 315080 b -e 315219 315136 a e 320659 592 b -e 320659 320576 a e 325139 592 b -e 325139 325056 a e 329043 592 b -e 329043 328960 a e 334995 592 b -e 334995 334912 a e 337416 592 b -e 337555 337416 b -e 337555 337472 a e 343635 592 b -e 343635 343552 a e 344776 592 b -e 344915 344776 b -e 344915 344832 a e 350355 592 b -e 350355 350272 a e 356115 592 b -e 356115 356032 a e 360403 592 b -e 360403 360320 a e 366227 592 b -e 366227 366144 a e 368147 592 b -e 368147 366144 a e 367368 592 b -e 367507 367368 b -e 367507 367424 a e 369032 592 b -e 369171 369032 b -e 369171 369088 a e 374931 592 b -e 374931 374848 a e 381203 592 b -e 381203 381120 a e 386963 592 b -e 386963 386880 a e 392339 592 b -e 392339 392256 a e 397395 592 b -e 397395 397312 a e 401875 592 b -e 401875 401792 a e 408595 592 b -e 408595 408512 a e 409736 592 b -e 409875 409736 b -e 409875 409792 a e 415251 592 b -e 415251 415168 a e 416456 592 b -e 416595 416456 b -e 416595 416512 a e 421267 592 b -e 421267 421184 a e 426195 592 b -e 426195 426112 a e 431251 592 b -e 431251 431168 a e 436755 592 b -e 436755 436672 a e 443987 592 b -e 443987 443904 a e 445192 592 b -e 445331 445192 b -e 445331 445248 a e 452691 592 b -e 452691 452608 a e 454675 592 b -e 454675 452608 a e 456339 592 b -e 456339 452608 a e 458003 592 b -e 458003 452608 a e 459667 592 b -e 459667 452608 a e 453832 592 b -e 453971 453832 b -e 453971 453888 a e 455496 592 b -e 455635 455496 b -e 455635 455552 a e 457160 592 b -e 457299 457160 b -e 457299 457216 a e 458824 592 b -e 458963 458824 b -e 458963 458880 a e 460488 592 b -e 460627 460488 b -e 460627 460544 a e 466579 592 b -e 466579 466496 a e 471955 592 b -e 471955 471872 a e 477907 592 b -e 477907 477824 a e 486611 592 b -e 486611 486528 a e 490131 592 b -e 490131 486528 a e 489288 592 b -e 489427 489288 b -e 489427 489344 a e 495379 592 b -e 495379 495296 a e 500563 592 b -e 500563 500480 a e 508115 592 b -e 508115 508032 a e 510792 592 b -e 510931 510792 b -e 510931 510848 a e 516499 592 b -e 516499 516416 a e 521683 592 b -e 521683 521600 a e 527251 592 b -e 527251 527168 a e 534419 592 b -e 534419 534336 a e 542739 592 b -e 542739 542656 a e 551699 592 b -e 551699 551616 a e 560915 592 b -e 560915 560832 a e 566291 592 b -e 566291 566208 a e 572051 592 b -e 572051 571968 a e 579155 592 b -e 579155 579072 a e 591571 592 b -e 591571 591488 a e 592403 592 b -e 592403 592320 a e 596627 592 b -e 596627 596544 a e 599699 592 b -e 599699 599616 a e 600403 592 b -e 600403 600320 a e 604627 592 b -e 604627 604544 a e 608659 592 b -e 608659 608576 a e 613651 592 b -e 613651 613568 a e 619923 592 b -e 619923 619840 a e 621576 592 b -e 621715 621576 b -e 621715 621632 a e 626963 592 b -e 626963 626880 a e 633811 592 b -e 633811 633728 a e 641747 592 b -e 641747 641664 a e 647827 592 b -e 647827 647744 a e 653779 592 b -e 653779 653696 a e 659923 592 b -e 659923 659840 a e 666963 592 b -e 666963 666880 a e 673491 592 b -e 673491 673408 a e 679315 592 b -e 679315 679232 a e 684883 592 b -e 684883 684800 a e 690899 592 b -e 690899 690816 a e 692563 592 b -e 692563 690816 a e 691720 592 b -e 691859 691720 b -e 691859 691776 a e 693320 592 b -e 693459 693320 b -e 693459 693376 a e 698835 592 b -e 698835 698752 a e 706515 592 b -e 706515 706432 a e 714067 592 b -e 714067 713984 a e 720403 592 b -e 720403 720320 a e 726995 592 b -e 726995 726912 a e 735827 592 b -e 735827 735744 a e 742739 592 b -e 742739 742656 a e 749395 592 b -e 749395 749312 a e 751304 592 b -e 751443 751304 b -e 751443 751360 a e 758227 592 b -e 758227 758144 a e 760648 592 b -e 760787 760648 b -e 760787 760704 a e 766419 592 b -e 766419 766336 a e 772435 592 b -e 772435 772352 a e 780819 592 b -e 780819 780736 a e 789587 592 b -e 789587 789504 a e 792264 592 b -e 792403 792264 b -e 792403 792320 a e 799443 592 b -e 799443 799360 a e 801864 592 b -e 802003 801864 b -e 802003 801920 a e 808147 592 b -e 808147 808064 a e 813715 592 b -e 813715 813632 a e 817808 592 ba -e 819968 817808 a -e 820035 819968 a e 822291 592 b -e 822291 822208 a e 827155 592 b -e 827155 822208 a e 833811 592 b -e 833811 833728 a e 837584 592 ba -e 840467 837584 b -e 840467 840384 a -e 842387 837584 b -e 842387 840384 a -e 841608 837584 b -e 841747 841608 b -e 841747 841664 a -e 843144 837584 b -e 843283 843144 b -e 843283 843200 a -e 840384 837584 a -e 841664 840384 a -e 843200 840384 a e 848915 592 b -e 848915 848832 a e 854867 592 b -e 854867 854784 a e 862611 592 b -e 862611 862528 a e 864968 592 b -e 865107 864968 b -e 865107 865024 a e 870931 592 b -e 870931 870848 a e 877139 592 b -e 877139 877056 a e 883091 592 b -e 883091 883008 a e 892179 592 b -e 892179 892096 a e 895827 592 b -e 895827 892096 a e 897491 592 b -e 897491 892096 a e 894984 592 b -e 895123 894984 b -e 895123 895040 a e 896648 592 b -e 896787 896648 b -e 896787 896704 a e 898312 592 b -e 898451 898312 b -e 898451 898368 a e 905043 592 b -e 905043 904960 a e 913875 592 b -e 913875 913792 a e 916168 592 b -e 916307 916168 b -e 916307 916224 a e 922003 592 b -e 922003 921920 a e 927443 592 b -e 927443 927360 a e 933075 592 b -e 933075 932992 a e 939155 592 b -e 939155 939072 a e 946131 592 b -e 946131 946048 a e 953427 592 b -e 953427 953344 a e 965203 592 b -e 965203 965120 a e 967635 592 b -e 967635 965120 a e 969299 592 b -e 969299 965120 a e 966792 592 b -e 966931 966792 b -e 966931 966848 a e 968456 592 b -e 968595 968456 b -e 968595 968512 a e 970120 592 b -e 970259 970120 b -e 970259 970176 a e 976019 592 b -e 976019 975936 a e 981203 592 b -e 981203 981120 a e 986259 592 b -e 986259 986176 a e 992083 592 b -e 992083 992000 a e 994056 592 b -e 994195 994056 b -e 994195 994112 a e 999827 592 b -e 999827 999744 a e 1006227 592 b -e 1006227 1006144 a e 1007880 592 b -e 1008019 1007880 b -e 1008019 1007936 a e 1014611 592 b -e 1014611 1014528 a e 1016648 592 b -e 1016787 1016648 b -e 1016787 1016704 a e 1022739 592 b -e 1022739 1022656 a e 1023944 592 b -e 1024083 1023944 b -e 1024083 1024000 a e 1030355 592 b -e 1030355 1030272 a e 1032008 592 b -e 1032147 1032008 b -e 1032147 1032064 a e 1042771 592 b -e 1042771 1042688 a e 1044040 592 b -e 1044179 1044040 b -e 1044179 1044096 a e 1054867 592 b -e 1054867 1054784 a e 1064211 592 b -e 1064211 1064128 a e 1066771 592 b -e 1066771 1064128 a e 1065928 592 b -e 1066067 1065928 b -e 1066067 1065984 a e 1075219 592 b -e 1075219 1075136 a e 1077128 592 b -e 1077267 1077128 b -e 1077267 1077184 a e 1089299 592 b -e 1089299 1089216 a e 1124435 592 b -e 1124435 1124352 a e 1126867 592 b -e 1126867 1124352 a e 1128403 592 b -e 1128403 1124352 a e 1130003 592 b -e 1130003 1124352 a e 1126024 592 b -e 1126163 1126024 b -e 1126163 1126080 a e 1127624 592 b -e 1127763 1127624 b -e 1127763 1127680 a e 1129160 592 b -e 1129299 1129160 b -e 1129299 1129216 a e 1136019 592 b -e 1136019 1135936 a e 1142419 592 b -e 1142419 1142336 a e 1147731 592 b -e 1147731 1147648 a e 1152979 592 b -e 1152979 1152896 a e 1158803 592 b -e 1158803 1158720 a e 1164819 592 b -e 1164819 1164736 a e 1166024 592 b -e 1166163 1166024 b -e 1166163 1166080 a e 1173387 592 b e 1177235 592 b -e 1177235 1177152 a e 1179155 592 b -e 1179155 1177152 a e 1178376 592 b -e 1178515 1178376 b -e 1178515 1178432 a e 1185235 592 b -e 1185235 1185152 a e 1186824 592 b -e 1186963 1186824 b -e 1186963 1186880 a e 1193875 592 b -e 1193875 1193792 a e 1195923 592 b -e 1195923 1193792 a e 1197587 592 b -e 1197587 1193792 a e 1195080 592 b -e 1195219 1195080 b -e 1195219 1195136 a e 1196744 592 b -e 1196883 1196744 b -e 1196883 1196800 a e 1198408 592 b -e 1198547 1198408 b -e 1198547 1198464 a e 1204371 592 b -e 1204371 1204288 a e 1209811 592 b -e 1209811 1209728 a e 1215379 592 b -e 1215379 1215296 a e 1223499 592 b e 1226771 592 b -e 1226771 1226688 a e 1232403 592 b -e 1232403 1232320 a e 1237779 592 b -e 1237779 1237696 a e 1242064 592 ba -e 1244179 1242064 b -e 1244179 1244096 a -e 1244096 1242064 a e 1250387 592 b -e 1250387 1250304 a e 1255571 592 b -e 1255571 1255488 a e 1260563 592 b -e 1260563 1260480 a e 1265427 592 b -e 1265427 1265344 a e 1293587 592 b -e 1293587 1293504 a e 1307411 592 b -e 1307411 1307328 a e 1312723 592 b -e 1312723 1312640 a e 1328979 592 b -e 1328979 1328896 a e 1338259 592 b -e 1338259 1338176 a e 1344595 592 b -e 1344595 1344512 a e 1350163 592 b -e 1350163 1350080 a e 1364307 592 b -e 1364307 1364224 a e 1369363 592 b -e 1369363 1369280 a e 1372816 592 ba -e 1374931 1372816 b -e 1374931 1374848 a -e 1374848 1372816 a e 1381139 592 b -e 1381139 1381056 a e 1386451 592 b -e 1386451 1386368 a e 1389904 592 ba -e 1392019 1389904 b -e 1392019 1391936 a -e 1391936 1389904 a e 1396432 592 ba -e 1398419 1396432 b -e 1398419 1398336 a -e 1398336 1396432 a e 1404243 592 b -e 1404243 1404160 a e 1407760 592 ba -e 1409939 1407760 b -e 1409939 1409856 a -e 1409856 1407760 a e 1431376 592 ba -e 1433171 1431376 b -e 1433171 1433088 a -e 1433088 1431376 a e 1451731 592 b -e 1451731 1451648 a e 1457107 592 b -e 1457107 1457024 a e 1462483 592 b -e 1462483 1462400 a e 1472595 592 b -e 1472595 1472512 a e 1477843 592 b -e 1477843 1477760 a e 1481808 592 ba -e 1483923 1481808 b -e 1483923 1483840 a -e 1483840 1481808 a e 1503251 592 b -e 1503251 1503168 a e 1511123 592 b -e 1511123 1511040 a e 1514248 592 b -e 1514387 1514248 b -e 1514387 1514304 a e 1520851 592 b -e 1520851 1520768 a e 1522120 592 b -e 1522259 1522120 b -e 1522259 1522176 a e 1529491 592 b -e 1529491 1529408 a e 1532243 592 b -e 1532243 1529408 a e 1531400 592 b -e 1531539 1531400 b -e 1531539 1531456 a e 1543571 592 b -e 1543571 1543488 a e 1551763 592 b -e 1551763 1551680 a e 1555091 592 b -e 1555091 1551680 a e 1554248 592 b -e 1554387 1554248 b -e 1554387 1554304 a e 1564819 592 b -e 1564819 1564736 a e 1571923 592 b -e 1571923 1571840 a e 1577363 592 b -e 1577363 1577280 a e 1584787 592 b -e 1584787 1584704 a e 1587347 592 b -e 1587347 1584704 a e 1586504 592 b -e 1586643 1586504 b -e 1586643 1586560 a e 1588232 592 b -e 1588371 1588232 b -e 1588371 1588288 a e 1594451 592 b -e 1594451 1594368 a e 1601107 592 b -e 1601107 1601024 a e 1608275 592 b -e 1608275 1608192 a e 1610771 592 b -e 1610771 1608192 a e 1609928 592 b -e 1610067 1609928 b -e 1610067 1609984 a e 1611592 592 b -e 1611731 1611592 b -e 1611731 1611648 a e 1618707 592 b -e 1618707 1618624 a e 1630227 592 b -e 1630227 1630144 a e 1639251 592 b -e 1639251 1639168 a e 1647571 592 b -e 1647571 1647488 a e 1658323 592 b -e 1658323 1658240 a e 1668243 592 b -e 1668243 1668160 a e 1671571 592 b -e 1671571 1668160 a e 1670728 592 b -e 1670867 1670728 b -e 1670867 1670784 a e 1677843 592 b -e 1677843 1677760 a e 1679496 592 b -e 1679635 1679496 b -e 1679635 1679552 a e 1689555 592 b -e 1689555 1689472 a e 1691987 592 b -e 1691987 1689472 a e 1691144 592 b -e 1691283 1691144 b -e 1691283 1691200 a e 1705235 592 b -e 1705235 1705152 a e 1707283 592 b -e 1707283 1705152 a e 1706440 592 b -e 1706579 1706440 b -e 1706579 1706496 a e 1714387 592 b -e 1714387 1714304 a e 1716435 592 b -e 1716435 1714304 a e 1715592 592 b -e 1715731 1715592 b -e 1715731 1715648 a e 1717256 592 b -e 1717395 1717256 b -e 1717395 1717312 a e 1722579 592 b -e 1722579 1722496 a e 1727955 592 b -e 1727955 1727872 a e 1736595 592 b -e 1736595 1736512 a e 1740048 592 ba -e 1741971 1740048 b -e 1741971 1741888 a -e 1741888 1740048 a e 1747667 592 b -e 1747667 1747584 a e 1753491 592 b -e 1753491 1753408 a e 1763027 592 b -e 1763027 1762944 a e 1768787 592 b -e 1768787 1762944 a e 1768008 592 b -e 1768147 1768008 b -e 1768147 1768064 a e 1780115 592 b -e 1780115 1780032 a e 1781832 592 b -e 1781971 1781832 b -e 1781971 1781888 a e 1788307 592 b -e 1788307 1788224 a e 1789576 592 b -e 1789715 1789576 b -e 1789715 1789632 a e 1800083 592 b -e 1800083 1800000 a e 1801288 592 b -e 1801427 1801288 b -e 1801427 1801344 a e 1811923 592 b -e 1811923 1811840 a e 1820499 592 b -e 1820499 1820416 a e 1823952 592 ba -e 1826067 1823952 b -e 1826067 1825984 a -e 1825984 1823952 a e 1832019 592 b -e 1832019 1831936 a e 1837523 592 b -e 1837523 1837440 a e 1844051 592 b -e 1844051 1843968 a e 1851411 592 b -e 1851411 1851328 a e 1856723 592 b -e 1856723 1856640 a e 1862099 592 b -e 1862099 1862016 a e 1867347 592 b -e 1867347 1867264 a e 1877779 592 b -e 1877779 1877696 a e 1885651 592 b -e 1885651 1885568 a e 1891795 592 b -e 1891795 1891712 a e 1895184 592 ba -e 1897299 1895184 b -e 1897299 1897216 a -e 1897216 1895184 a e 1902931 592 b -e 1902931 1902848 a e 1907792 592 ba -e 1910291 1907792 b -e 1910291 1910208 a -e 1910208 1907792 a e 1917651 592 b -e 1917651 1917568 a e 1923603 592 b -e 1923603 1923520 a e 1927632 592 ba -e 1929875 1927632 b -e 1929875 1929792 a -e 1929792 1927632 a e 1934416 592 ba -e 1936467 1934416 b -e 1936467 1936384 a -e 1936384 1934416 a e 1940496 592 ba -e 1942739 1940496 b -e 1942739 1942656 a -e 1942656 1940496 a e 1949075 592 b -e 1949075 1948992 a e 1953936 592 ba -e 1956499 1953936 b -e 1956499 1956416 a -e 1956416 1953936 a e 1962064 592 ba -e 1964627 1962064 b -e 1964627 1964544 a -e 1964544 1962064 a e 1975891 592 b -e 1975891 1975808 a e 1982099 592 b -e 1982099 1975808 a e 1981256 592 b -e 1981395 1981256 b -e 1981395 1981312 a e 1982472 592 b -e 1982611 1982472 b -e 1982611 1982528 a e 1990803 592 b -e 1990803 1990720 a e 1993747 592 b -e 1993747 1990720 a e 1992904 592 b -e 1993043 1992904 b -e 1993043 1992960 a e 1994504 592 b -e 1994643 1994504 b -e 1994643 1994560 a e 2000275 592 b -e 2000275 2000192 a e 2005587 592 b -e 2005587 2005504 a e 2012499 592 b -e 2012499 2012416 a e 2015315 592 b -e 2015315 2012416 a e 2014472 592 b -e 2014611 2014472 b -e 2014611 2014528 a e 2016072 592 b -e 2016211 2016072 b -e 2016211 2016128 a e 2024080 592 ba -e 2026067 2024080 b -e 2026067 2025984 a -e 2025984 2024080 a e 2031955 592 b -e 2031955 2031872 a e 2038099 592 b -e 2038099 2038016 a e 2043859 592 b -e 2043859 2043776 a e 2049491 592 b -e 2049491 2049408 a e 2055187 592 b -e 2055187 2055104 a e 2067984 592 ba -e 2070163 2067984 b -e 2070163 2070080 a -e 2070080 2067984 a e 2075731 592 b -e 2075731 2075648 a e 2085776 592 ba -e 2087891 2085776 b -e 2087891 2087808 a -e 2087808 2085776 a e 2091984 592 ba -e 2094099 2091984 b -e 2094099 2094016 a -e 2094016 2091984 a e 2108051 592 b -e 2108051 2107968 a e 2113363 592 b -e 2113363 2113280 a e 2137360 592 ba -e 2139347 2137360 b -e 2139347 2139264 a -e 2139264 2137360 a e 2145043 592 b -e 2145043 2144960 a e 2149971 592 b -e 2149971 2149888 a e 2159507 592 b -e 2159507 2159424 a e 2160328 592 b -e 2160467 2160328 b -e 2160467 2160384 a e 2166099 592 b -e 2166099 2166016 a e 2167368 592 b -e 2167507 2167368 b -e 2167507 2167424 a e 2177683 592 b -e 2177683 2177600 a e 2185163 592 b e 2190283 592 b e 2191699 592 b -e 2191699 2191616 a e 2192915 592 b -e 2192915 2192832 a e 2198547 592 b -e 2198547 2198464 a e 2204115 592 b -e 2204115 2204032 a e 2210387 592 b -e 2210387 2210304 a e 2215571 592 b -e 2215571 2215488 a e 2219155 592 b -e 2219155 2219072 a e 2220115 592 b -e 2220115 2220032 a e 2225811 592 b -e 2225811 2225728 a e 2230163 592 b -e 2230163 2230080 a e 2237587 592 b -e 2237587 2237504 a e 2243795 592 b -e 2243795 2243712 a e 2250515 592 b -e 2250515 2250432 a e 2256659 592 b -e 2256659 2256576 a e 2271315 592 b -e 2271315 2271232 a e 2283347 592 b -e 2283347 2283264 a e 2290451 592 b -e 2290451 2290368 a e 2297235 592 b -e 2297235 2297152 a e 2302803 592 b -e 2302803 2302720 a e 2308563 592 b -e 2308563 2308480 a e 2314963 592 b -e 2314963 2314880 a e 2328147 592 b -e 2328147 2328064 a e 2339091 592 b -e 2339091 2339008 a e 2344723 592 b -e 2344723 2344640 a e 2350483 592 b -e 2350483 2350400 a e 2361491 592 b -e 2361491 2361408 a e 2367251 592 b -e 2367251 2367168 a e 2380883 592 b -e 2380883 2380800 a e 2409043 592 b -e 2409043 2408960 a e 2421587 592 b -e 2421587 2421504 a e 2427219 592 b -e 2427219 2427136 a e 2448019 592 b -e 2448019 2447936 a e 2453907 592 b -e 2453907 2453824 a e 2460755 592 b -e 2460755 2460672 a e 2466451 592 b -e 2466451 2466368 a e 2472915 592 b -e 2472915 2472832 a e 2478611 592 b -e 2478611 2478528 a e 2494611 592 b -e 2494611 2494528 a e 2499987 592 b -e 2499987 2499904 a e 2514579 592 b -e 2514579 2514496 a e 2525971 592 b -e 2525971 2525888 a e 2538067 592 b -e 2538067 2537984 a e 2544019 592 b -e 2544019 2543936 a e 2551123 592 b -e 2551123 2551040 a e 2558099 592 b -e 2558099 2558016 a e 2564115 592 b -e 2564115 2564032 a e 2584915 592 b -e 2584915 2584832 a e 2595347 592 b -e 2595347 2595264 a e 2607443 592 b -e 2607443 2607360 a e 2609608 592 b -e 2609747 2609608 b -e 2609747 2609664 a e 2615763 592 b -e 2615763 2615680 a e 2623187 592 b -e 2623187 2623104 a e 2628883 592 b -e 2628883 2628800 a e 2634515 592 b -e 2634515 2634432 a e 2640147 592 b -e 2640147 2640064 a e 2645779 592 b -e 2645779 2645696 a e 2651603 592 b -e 2651603 2651520 a e 2699987 592 b -e 2699987 2699904 a e 2722771 592 b -e 2722771 2722688 a e 2737107 592 b -e 2737107 2737024 a e 2750611 592 b -e 2750611 2750528 a e 2760531 592 b -e 2760531 2760448 a e 2776851 592 b -e 2776851 2776768 a e 2787731 592 b -e 2787731 2787648 a e 2798803 592 b -e 2798803 2798720 a e 2804563 592 b -e 2804563 2804480 a e 2812880 592 ba -e 2816851 2812880 b -e 2816851 2816768 a -e 2816768 2812880 a e 2828304 592 ba -e 2830483 2828304 b -e 2830483 2830400 a -e 2830400 2828304 a e 2853395 592 b -e 2853395 2853312 a e 2873299 592 b -e 2873299 2873216 a e 2883603 592 b -e 2883603 2883520 a e 2899347 592 b -e 2899347 2899264 a e 2904907 592 b e 2905107 592 b -e 2905107 2904960 a e 2908107 592 b e 2911827 592 b -e 2911827 2911744 a e 2932691 592 b -e 2932691 2932608 a e 2938515 592 b -e 2938515 2938432 a e 2960851 592 b -e 2960851 2960768 a e 2966483 592 b -e 2966483 2966400 a e 2972243 592 b -e 2972243 2972160 a e 2992851 592 b -e 2992851 2992768 a e 3004947 592 b -e 3004947 3004864 a e 3011283 592 b -e 3011283 3011200 a e 3029843 592 b -e 3029843 3029760 a e 3035539 592 b -e 3035539 3035456 a e 3041299 592 b -e 3041299 3041216 a e 3047763 592 b -e 3047763 3047680 a e 3053971 592 b -e 3053971 3053888 a e 3096851 592 b -e 3096851 3096768 a e 3102483 592 b -e 3102483 3102400 a e 3113107 592 b -e 3113107 3113024 a e 3118995 592 b -e 3118995 3118912 a e 3124819 592 b -e 3124819 3124736 a e 3130643 592 b -e 3130643 3130560 a e 3142419 592 b -e 3142419 3142336 a e 3155091 592 b -e 3155091 3155008 a e 3166675 592 b -e 3166675 3166592 a e 3176787 592 b -e 3176787 3176704 a e 3182227 592 b -e 3182227 3182144 a e 3187859 592 b -e 3187859 3187776 a e 3199059 592 b -e 3199059 3198976 a e 3204627 592 b -e 3204627 3204544 a e 3220371 592 b -e 3220371 3220288 a e 3233683 592 b -e 3233683 3233600 a e 3239507 592 b -e 3239507 3239424 a e 3246035 592 b -e 3246035 3245952 a e 3257107 592 b -e 3257107 3257024 a e 3260688 592 ba -e 3262931 3260688 b -e 3262931 3262848 a -e 3262848 3260688 a e 3268048 592 ba -e 3269971 3268048 b -e 3269971 3269888 a -e 3269888 3268048 a e 3273872 592 ba -e 3277579 3273872 b -e 3277635 3273872 a e 3281939 592 b -e 3281939 3281856 a e 3307155 592 b -e 3307155 3307072 a e 3357779 592 b -e 3357779 3357696 a e 3365075 592 b -e 3365075 3364992 a e 3372499 592 b -e 3372499 3372416 a e 3378067 592 b -e 3378067 3377984 a e 3383763 592 b -e 3383763 3383680 a e 3389843 592 b -e 3389843 3389760 a e 3391368 592 b -e 3391507 3391368 b -e 3391507 3391424 a e 3404243 592 b -e 3404243 3404160 a e 3411347 592 b -e 3411347 3411264 a e 3412552 592 b -e 3412691 3412552 b -e 3412691 3412608 a e 3418131 592 b -e 3418131 3418048 a e 3425171 592 b -e 3425171 3425088 a e 3427784 592 b -e 3427923 3427784 b -e 3427923 3427840 a e 3434131 592 b -e 3434131 3434048 a e 3440659 592 b -e 3440659 3440576 a e 3452179 592 b -e 3452179 3452096 a e 3453896 592 b -e 3454035 3453896 b -e 3454035 3453952 a e 3461011 592 b -e 3461011 3460928 a e 3463176 592 b -e 3463315 3463176 b -e 3463315 3463232 a e 3469011 592 b -e 3469011 3468928 a e 3484563 592 b -e 3484563 3484480 a e 3485587 592 b -e 3485587 3485504 a e 3495827 592 b -e 3495827 3495744 a e 3502931 592 b -e 3502931 3502848 a e 3508691 592 b -e 3508691 3508608 a e 3513747 592 b -e 3513747 3513664 a e 3520339 592 b -e 3520339 3520256 a e 3522771 592 b -e 3522771 3520256 a e 3521928 592 b -e 3522067 3521928 b -e 3522067 3521984 a e 3523592 592 b -e 3523731 3523592 b -e 3523731 3523648 a e 3529875 592 b -e 3529875 3529792 a e 3531080 592 b -e 3531219 3531080 b -e 3531219 3531136 a e 3537171 592 b -e 3537171 3537088 a e 3544147 592 b -e 3544147 3544064 a e 3550803 592 b -e 3550803 3550720 a e 3558355 592 b -e 3558355 3558272 a e 3564115 592 b -e 3564115 3564032 a e 3569939 592 b -e 3569939 3569856 a e 3576211 592 b -e 3576211 3576128 a e 3582035 592 b -e 3582035 3581952 a e 3593043 592 b -e 3593043 3592960 a e 3598547 592 b -e 3598547 3598464 a e 3604435 592 b -e 3604435 3604352 a e 3605768 592 b -e 3605907 3605768 b -e 3605907 3605824 a e 3612755 592 b -e 3612755 3612672 a e 3614472 592 b -e 3614611 3614472 b -e 3614611 3614528 a e 3621139 592 b -e 3621139 3621056 a e 3622408 592 b -e 3622547 3622408 b -e 3622547 3622464 a e 3628371 592 b -e 3628371 3628288 a e 3629192 592 b -e 3629331 3629192 b -e 3629331 3629248 a e 3635347 592 b -e 3635347 3635264 a e 3637000 592 b -e 3637139 3637000 b -e 3637139 3637056 a e 3643027 592 b -e 3643027 3642944 a e 3649875 592 b -e 3649875 3649792 a e 3651528 592 b -e 3651667 3651528 b -e 3651667 3651584 a e 3656851 592 b -e 3656851 3656768 a e 3662803 592 b -e 3662803 3662720 a e 3664456 592 b -e 3664595 3664456 b -e 3664595 3664512 a e 3668240 592 ba -e 3670035 3668240 b -e 3670035 3669952 a -e 3669952 3668240 a e 3684883 592 b -e 3684883 3684800 a e 3686867 592 b -e 3686867 3684800 a e 3688467 592 b -e 3688467 3684800 a e 3689619 592 b -e 3689619 3684800 a e 3686024 592 b -e 3686163 3686024 b -e 3686163 3686080 a e 3687624 592 b -e 3687763 3687624 b -e 3687763 3687680 a e 3688840 592 b -e 3688979 3688840 b -e 3688979 3688896 a e 3689992 592 b -e 3690131 3689992 b -e 3690131 3690048 a e 3695763 592 b -e 3695763 3695680 a e 3701139 592 b -e 3701139 3701056 a e 3701896 592 b -e 3702035 3701896 b -e 3702035 3701952 a e 3707219 592 b -e 3707219 3707136 a e 3708360 592 b -e 3708499 3708360 b -e 3708499 3708416 a e 3713555 592 b -e 3713555 3713472 a e 3718803 592 b -e 3718803 3718720 a e 3719944 592 b -e 3720083 3719944 b -e 3720083 3720000 a e 3725267 592 b -e 3725267 3725184 a e 3730451 592 b -e 3730451 3730368 a e 3735955 592 b -e 3735955 3735872 a e 3743571 592 b -e 3743571 3743488 a e 3745096 592 b -e 3745235 3745096 b -e 3745235 3745152 a e 3750867 592 b -e 3750867 3750784 a e 3766803 592 b -e 3766803 3766720 a e 3782099 592 b -e 3782099 3782016 a e 3790355 592 b -e 3790355 3790272 a e 3799635 592 b -e 3799635 3799552 a e 3802067 592 b -e 3802067 3799552 a e 3803731 592 b -e 3803731 3799552 a e 3801224 592 b -e 3801363 3801224 b -e 3801363 3801280 a e 3802888 592 b -e 3803027 3802888 b -e 3803027 3802944 a e 3812883 592 b -e 3812883 3812800 a e 3822675 592 b -e 3822675 3822592 a e 3825107 592 b -e 3825107 3822592 a e 3826771 592 b -e 3826771 3822592 a e 3824264 592 b -e 3824403 3824264 b -e 3824403 3824320 a e 3825928 592 b -e 3826067 3825928 b -e 3826067 3825984 a e 3837715 592 b -e 3837715 3837632 a e 3838920 592 b -e 3839059 3838920 b -e 3839059 3838976 a e 3845779 592 b -e 3845779 3845696 a e 3848072 592 b -e 3848211 3848072 b -e 3848211 3848128 a e 3856915 592 b -e 3856915 3856832 a e 3859411 592 b -e 3859411 3856832 a e 3861075 592 b -e 3861075 3856832 a e 3862355 592 b -e 3862355 3856832 a e 3858568 592 b -e 3858707 3858568 b -e 3858707 3858624 a e 3860232 592 b -e 3860371 3860232 b -e 3860371 3860288 a e 3861512 592 b -e 3861651 3861512 b -e 3861651 3861568 a e 3863560 592 b -e 3863699 3863560 b -e 3863699 3863616 a e 3869715 592 b -e 3869715 3869632 a e 3878803 592 b -e 3878803 3878720 a e 3881235 592 b -e 3881235 3878720 a e 3882899 592 b -e 3882899 3878720 a e 3880392 592 b -e 3880531 3880392 b -e 3880531 3880448 a e 3882056 592 b -e 3882195 3882056 b -e 3882195 3882112 a e 3883720 592 b -e 3883859 3883720 b -e 3883859 3883776 a e 3893203 592 b -e 3893203 3893120 a e 3896467 592 b -e 3896467 3893120 a e 3898131 592 b -e 3898131 3893120 a e 3899411 592 b -e 3899411 3893120 a e 3895624 592 b -e 3895763 3895624 b -e 3895763 3895680 a e 3897288 592 b -e 3897427 3897288 b -e 3897427 3897344 a e 3898568 592 b -e 3898707 3898568 b -e 3898707 3898624 a e 3900616 592 b -e 3900755 3900616 b -e 3900755 3900672 a e 3907731 592 b -e 3907731 3907648 a e 3918739 592 b -e 3918739 3918656 a e 3921171 592 b -e 3921171 3918656 a e 3922835 592 b -e 3922835 3918656 a e 3924499 592 b -e 3924499 3918656 a e 3920328 592 b -e 3920467 3920328 b -e 3920467 3920384 a e 3921992 592 b -e 3922131 3921992 b -e 3922131 3922048 a e 3923656 592 b -e 3923795 3923656 b -e 3923795 3923712 a e 3925256 592 b -e 3925395 3925256 b -e 3925395 3925312 a e 3931603 592 b -e 3931603 3931520 a e 3938003 592 b -e 3938003 3937920 a e 3939272 592 b -e 3939411 3939272 b -e 3939411 3939328 a e 3946323 592 b -e 3946323 3946240 a e 3948243 592 b -e 3948243 3946240 a e 3949779 592 b -e 3949779 3946240 a e 3947464 592 b -e 3947603 3947464 b -e 3947603 3947520 a e 3949000 592 b -e 3949139 3949000 b -e 3949139 3949056 a e 3950536 592 b -e 3950675 3950536 b -e 3950675 3950592 a e 3956307 592 b -e 3956307 3956224 a e 3962579 592 b -e 3962579 3962496 a e 3964755 592 b -e 3964755 3962496 a e 3963912 592 b -e 3964051 3963912 b -e 3964051 3963968 a e 3965640 592 b -e 3965779 3965640 b -e 3965779 3965696 a e 3971411 592 b -e 3971411 3971328 a e 3978387 592 b -e 3978387 3978304 a e 3981064 592 b -e 3981203 3981064 b -e 3981203 3981120 a e 3988691 592 b -e 3988691 3988608 a e 4001427 592 b -e 4001427 4001344 a e 4006355 592 b -e 4006355 4006272 a e 4012755 592 b -e 4012755 4012672 a e 4026643 592 b -e 4026643 4026560 a e 4030160 592 ba -e 4032275 4030160 b -e 4032275 4032192 a -e 4032192 4030160 a e 4038547 592 b -e 4038547 4038464 a e 4043859 592 b -e 4043859 4043776 a e 4047824 592 ba -e 4049939 4047824 b -e 4049939 4049856 a -e 4049856 4047824 a e 4054032 592 ba -e 4056275 4054032 b -e 4056275 4056192 a -e 4056192 4054032 a e 4062227 592 b -e 4062227 4062144 a e 4068243 592 b -e 4068243 4068160 a e 4074899 592 b -e 4074899 4074816 a e 4082323 592 b -e 4082323 4082240 a e 4084691 592 b -e 4084691 4082240 a e 4083848 592 b -e 4083987 4083848 b -e 4083987 4083904 a e 4085064 592 b -e 4085203 4085064 b -e 4085203 4085120 a e 4090259 592 b -e 4090259 4090176 a e 4095187 592 b -e 4095187 4095104 a e 4096712 592 b -e 4096851 4096712 b -e 4096851 4096768 a e 4102355 592 b -e 4102355 4102272 a e 4137168 592 ba -e 4139347 4137168 b -e 4139347 4139264 a -e 4139264 4137168 a e 4145363 592 b -e 4145363 4145280 a e 4153171 592 b -e 4153171 4153088 a e 4155155 592 b -e 4155155 4153088 a e 4156435 592 b -e 4156435 4153088 a e 4158035 592 b -e 4158035 4153088 a e 4154312 592 b -e 4154451 4154312 b -e 4154451 4154368 a e 4155592 592 b -e 4155731 4155592 b -e 4155731 4155648 a e 4157192 592 b -e 4157331 4157192 b -e 4157331 4157248 a e 4158792 592 b -e 4158931 4158792 b -e 4158931 4158848 a e 4166419 592 b -e 4166419 4166336 a e 4168851 592 b -e 4168851 4166336 a e 4170515 592 b -e 4170515 4166336 a e 4168008 592 b -e 4168147 4168008 b -e 4168147 4168064 a e 4169672 592 b -e 4169811 4169672 b -e 4169811 4169728 a e 4171336 592 b -e 4171475 4171336 b -e 4171475 4171392 a e 4177171 592 b -e 4177171 4177088 a e 4182867 592 b -e 4182867 4182784 a e 4189075 592 b -e 4189075 4188992 a e 4192203 592 b e 4195723 592 b e 4196491 592 b e 4213520 592 ba -e 4215699 4213520 b -e 4215699 4215616 a -e 4215616 4213520 a e 4227280 592 ba -e 4229331 4227280 b -e 4229331 4229248 a -e 4229248 4227280 a e 4232912 592 ba -e 4234963 4232912 b -e 4234963 4234880 a -e 4234880 4232912 a e 4240275 592 b -e 4240275 4240192 a e 4245587 592 b -e 4245587 4245504 a e 4255315 592 b -e 4255315 4255232 a e 4260819 592 b -e 4260819 4255232 a e 4260040 592 b -e 4260179 4260040 b -e 4260179 4260096 a e 4268947 592 b -e 4268947 4268864 a e 4279891 592 b -e 4279891 4279808 a e 4281811 592 b -e 4281811 4279808 a e 4281032 592 b -e 4281171 4281032 b -e 4281171 4281088 a e 4282696 592 b -e 4282835 4282696 b -e 4282835 4282752 a e 4288723 592 b -e 4288723 4288640 a e 4294675 592 b -e 4294675 4294592 a e 4296264 592 b -e 4296403 4296264 b -e 4296403 4296320 a e 4302931 592 b -e 4302931 4302848 a e 4305043 592 b -e 4305043 4302848 a e 4304200 592 b -e 4304339 4304200 b -e 4304339 4304256 a e 4305928 592 b -e 4306067 4305928 b -e 4306067 4305984 a e 4312275 592 b -e 4312275 4312192 a e 4313480 592 b -e 4313619 4313480 b -e 4313619 4313536 a e 4319443 592 b -e 4319443 4319360 a e 4326547 592 b -e 4326547 4326464 a e 4331408 592 ba -e 4333331 4331408 b -e 4333331 4333248 a -e 4333248 4331408 a e 4337168 592 ba -e 4339411 4337168 b -e 4339411 4339328 a -e 4339328 4337168 a e 4344336 592 ba -e 4346323 4344336 b -e 4346323 4346240 a -e 4346240 4344336 a e 4350288 592 ba -e 4353875 4350288 b -e 4353875 4353792 a -e 4356744 4350288 b -e 4356883 4356744 b -e 4356883 4356800 a -e 4353792 4350288 a -e 4356800 4353792 a e 4360720 592 ba -e 4362899 4360720 b -e 4362899 4362816 a -e 4362816 4360720 a e 4367696 592 ba -e 4368080 4367696 ba -e 4368139 4368080 b -e 4368195 4368080 a -e 4372363 4367696 b -e 4372995 4367696 a e 4374416 592 ba -e 4376339 4374416 b -e 4376339 4376256 a -e 4376256 4374416 a e 4384784 592 ba -e 4386707 4384784 b -e 4386707 4386624 a -e 4386624 4384784 a e 4390224 592 ba -e 4392019 4390224 b -e 4392019 4391936 a -e 4391936 4390224 a e 4395408 592 ba -e 4398163 4395408 b -e 4398163 4398080 a -e 4399752 4395408 b -e 4399891 4399752 b -e 4399891 4399808 a -e 4398080 4395408 a -e 4399808 4398080 a e 4403408 592 ba -e 4403792 4403408 ba -e 4403915 4403792 b -e 4404235 4403792 b -e 4404035 4403792 a -e 4404291 4403792 a -e 4405651 4403408 b -e 4405651 4405568 a -e 4406611 4403408 b -e 4406611 4405568 a -e 4406803 4403408 b -e 4406803 4405568 a -e 4406475 4403408 b -e 4406667 4403408 b -e 4408843 4403408 b -e 4407696 4403408 ba -e 4408139 4407696 b -e 4408195 4407696 a -e 4405568 4403408 a -e 4406531 4405568 a -e 4406723 4405568 a -e 4409091 4403408 a e 4410192 592 ba -e 4412371 4410192 b -e 4412371 4412288 a -e 4412288 4410192 a e 4416464 592 ba -e 4419731 4416464 b -e 4419731 4419648 a -e 4421779 4416464 b -e 4421779 4419648 a -e 4420936 4416464 b -e 4421075 4420936 b -e 4421075 4420992 a -e 4422600 4416464 b -e 4422739 4422600 b -e 4422739 4422656 a -e 4419648 4416464 a -e 4420992 4419648 a -e 4422656 4419648 a e 4426448 592 ba -e 4428947 4426448 b -e 4428947 4428864 a -e 4428864 4426448 a e 4438160 592 ba -e 4440083 4438160 b -e 4440083 4440000 a -e 4440000 4438160 a e 4443600 592 ba -e 4446355 4443600 b -e 4446355 4446272 a -e 4447944 4443600 b -e 4448083 4447944 b -e 4448083 4448000 a -e 4446272 4443600 a -e 4448000 4446272 a e 4451600 592 ba -e 4453459 4451600 b -e 4453459 4453376 a -e 4453376 4451600 a e 4456976 592 ba -e 4459155 4456976 b -e 4459155 4459072 a -e 4459072 4456976 a e 4463248 592 ba -e 4466515 4463248 b -e 4466515 4466432 a -e 4468563 4463248 b -e 4468563 4466432 a -e 4467720 4463248 b -e 4467859 4467720 b -e 4467859 4467776 a -e 4469384 4463248 b -e 4469523 4469384 b -e 4469523 4469440 a -e 4466432 4463248 a -e 4467776 4466432 a -e 4469440 4466432 a e 4473232 592 ba -e 4475731 4473232 b -e 4475731 4475648 a -e 4475648 4473232 a e 4480272 592 ba -e 4484883 4480272 b -e 4484883 4484800 a -e 4489288 4480272 b -e 4489427 4489288 b -e 4489427 4489344 a -e 4484800 4480272 a -e 4489344 4484800 a e 4493648 592 ba -e 4494032 4493648 ba -e 4494155 4494032 b -e 4494851 4494032 a -e 4497555 4493648 b -e 4497555 4497472 a -e 4498131 4493648 b -e 4498131 4497472 a -e 4497995 4493648 b -e 4504715 4493648 b -e 4497472 4493648 a -e 4498051 4497472 a -e 4505539 4493648 a e 4507216 592 ba -e 4509267 4507216 b -e 4509267 4509184 a -e 4509184 4507216 a e 4513296 592 ba -e 4516563 4513296 b -e 4516563 4516480 a -e 4518536 4513296 b -e 4518675 4518536 b -e 4518675 4518592 a -e 4516480 4513296 a -e 4518592 4516480 a e 4522384 592 ba -e 4526803 4522384 b -e 4526803 4526720 a -e 4529683 4522384 b -e 4529683 4526720 a -e 4531347 4522384 b -e 4531347 4526720 a -e 4528840 4522384 b -e 4528979 4528840 b -e 4528979 4528896 a -e 4530504 4522384 b -e 4530643 4530504 b -e 4530643 4530560 a -e 4526720 4522384 a -e 4528896 4526720 a -e 4530560 4526720 a e 4536016 592 ba -e 4537875 4536016 b -e 4537875 4537792 a -e 4537792 4536016 a e 4541392 592 ba -e 4543699 4541392 b -e 4543699 4543616 a -e 4543616 4541392 a e 4548304 592 ba -e 4551571 4548304 b -e 4551571 4551488 a -e 4553619 4548304 b -e 4553619 4551488 a -e 4552776 4548304 b -e 4552915 4552776 b -e 4552915 4552832 a -e 4554440 4548304 b -e 4554579 4554440 b -e 4554579 4554496 a -e 4551488 4548304 a -e 4552832 4551488 a -e 4554496 4551488 a e 4558288 592 ba -e 4560787 4558288 b -e 4560787 4560704 a -e 4560704 4558288 a e 4565328 592 ba -e 4569235 4565328 b -e 4569235 4569152 a -e 4571347 4565328 b -e 4571347 4569152 a -e 4573075 4565328 b -e 4573075 4569152 a -e 4574739 4565328 b -e 4574739 4569152 a -e 4570504 4565328 b -e 4570643 4570504 b -e 4570643 4570560 a -e 4572232 4565328 b -e 4572371 4572232 b -e 4572371 4572288 a -e 4573896 4565328 b -e 4574035 4573896 b -e 4574035 4573952 a -e 4569152 4565328 a -e 4570560 4569152 a -e 4572288 4569152 a -e 4573952 4569152 a e 4578640 592 ba -e 4583251 4578640 b -e 4583251 4583168 a -e 4587784 4578640 b -e 4587923 4587784 b -e 4587923 4587840 a -e 4583168 4578640 a -e 4587840 4583168 a e 4592208 592 ba -e 4594963 4592208 b -e 4594963 4594880 a -e 4594880 4592208 a e 4601616 592 ba -e 4603475 4601616 b -e 4603475 4603392 a -e 4603392 4601616 a e 4611216 592 ba -e 4613267 4611216 b -e 4613267 4613184 a -e 4613184 4611216 a e 4617296 592 ba -e 4619219 4617296 b -e 4619219 4619136 a -e 4619136 4617296 a e 4622736 592 ba -e 4625555 4622736 b -e 4625555 4625472 a -e 4625472 4622736 a e 4632784 592 ba -e 4634963 4632784 b -e 4634963 4634880 a -e 4634880 4632784 a e 4639120 592 ba -e 4641107 4639120 b -e 4641107 4641024 a -e 4641024 4639120 a e 4644560 592 ba -e 4646675 4644560 b -e 4646675 4646592 a -e 4646592 4644560 a e 4651152 592 ba -e 4657427 4651152 b -e 4657427 4657344 a -e 4659475 4651152 b -e 4659475 4657344 a -e 4660627 4651152 b -e 4660627 4657344 a -e 4661779 4651152 b -e 4661779 4657344 a -e 4663443 4651152 b -e 4663443 4657344 a -e 4658632 4651152 b -e 4658771 4658632 b -e 4658771 4658688 a -e 4659848 4651152 b -e 4659987 4659848 b -e 4659987 4659904 a -e 4661000 4651152 b -e 4661139 4661000 b -e 4661139 4661056 a -e 4662600 4651152 b -e 4662739 4662600 b -e 4662739 4662656 a -e 4663816 4651152 b -e 4663955 4663816 b -e 4663955 4663872 a -e 4657344 4651152 a -e 4658688 4657344 a -e 4659904 4657344 a -e 4661056 4657344 a -e 4662656 4657344 a -e 4663872 4657344 a e 4667856 592 ba -e 4674131 4667856 b -e 4674131 4674048 a -e 4676179 4667856 b -e 4676179 4674048 a -e 4677331 4667856 b -e 4677331 4674048 a -e 4678611 4667856 b -e 4678611 4674048 a -e 4680275 4667856 b -e 4680275 4674048 a -e 4675336 4667856 b -e 4675475 4675336 b -e 4675475 4675392 a -e 4676552 4667856 b -e 4676691 4676552 b -e 4676691 4676608 a -e 4677768 4667856 b -e 4677907 4677768 b -e 4677907 4677824 a -e 4679432 4667856 b -e 4679571 4679432 b -e 4679571 4679488 a -e 4680648 4667856 b -e 4680787 4680648 b -e 4680787 4680704 a -e 4674048 4667856 a -e 4675392 4674048 a -e 4676608 4674048 a -e 4677824 4674048 a -e 4679488 4674048 a -e 4680704 4674048 a e 4684752 592 ba -e 4686867 4684752 b -e 4686867 4686784 a -e 4686784 4684752 a e 4696211 592 b -e 4696211 4696128 a e 4699795 592 b -e 4699795 4696128 a e 4701075 592 b -e 4701075 4696128 a e 4698952 592 b -e 4699091 4698952 b -e 4699091 4699008 a e 4700232 592 b -e 4700371 4700232 b -e 4700371 4700288 a e 4701512 592 b -e 4701651 4701512 b -e 4701651 4701568 a e 4708435 592 b -e 4708435 4708352 a e 4709704 592 b -e 4709843 4709704 b -e 4709843 4709760 a e 4716243 592 b -e 4716243 4716160 a e 4717512 592 b -e 4717651 4717512 b -e 4717651 4717568 a e 4723795 592 b -e 4723795 4723712 a e 4724936 592 b -e 4725075 4724936 b -e 4725075 4724992 a e 4728528 592 ba -e 4730579 4728528 b -e 4730579 4730496 a -e 4730496 4728528 a e 4734928 592 ba -e 4736979 4734928 b -e 4736979 4736896 a -e 4736896 4734928 a e 899 592 a e 3200 592 a e 8192 592 a @@ -4051,8 +2790,6 @@ e 37632 592 a e 41344 592 a e 42112 592 a e 50112 592 a -e 53696 50112 a -e 54976 50112 a e 60672 592 a e 66880 592 a e 74176 592 a @@ -4061,7 +2798,6 @@ e 93440 592 a e 99712 592 a e 104512 592 a e 112000 592 a -e 114560 112000 a e 120320 592 a e 126464 592 a e 132160 592 a @@ -4090,20 +2826,15 @@ e 297600 592 a e 302528 592 a e 306944 592 a e 312896 592 a -e 315136 312896 a e 320576 592 a e 325056 592 a e 328960 592 a e 334912 592 a -e 337472 334912 a e 343552 592 a -e 344832 343552 a e 350272 592 a e 356032 592 a e 360320 592 a e 366144 592 a -e 367424 366144 a -e 369088 366144 a e 374848 592 a e 381120 592 a e 386880 592 a @@ -4111,30 +2842,20 @@ e 392256 592 a e 397312 592 a e 401792 592 a e 408512 592 a -e 409792 408512 a e 415168 592 a -e 416512 415168 a e 421184 592 a e 426112 592 a e 431168 592 a e 436672 592 a e 443904 592 a -e 445248 443904 a e 452608 592 a -e 453888 452608 a -e 455552 452608 a -e 457216 452608 a -e 458880 452608 a -e 460544 452608 a e 466496 592 a e 471872 592 a e 477824 592 a e 486528 592 a -e 489344 486528 a e 495296 592 a e 500480 592 a e 508032 592 a -e 510848 508032 a e 516416 592 a e 521600 592 a e 527168 592 a @@ -4154,7 +2875,6 @@ e 604544 592 a e 608576 592 a e 613568 592 a e 619840 592 a -e 621632 619840 a e 626880 592 a e 633728 592 a e 641664 592 a @@ -4166,8 +2886,6 @@ e 673408 592 a e 679232 592 a e 684800 592 a e 690816 592 a -e 691776 690816 a -e 693376 690816 a e 698752 592 a e 706432 592 a e 713984 592 a @@ -4176,38 +2894,25 @@ e 726912 592 a e 735744 592 a e 742656 592 a e 749312 592 a -e 751360 749312 a e 758144 592 a -e 760704 758144 a e 766336 592 a e 772352 592 a e 780736 592 a e 789504 592 a -e 792320 789504 a e 799360 592 a -e 801920 799360 a e 808064 592 a e 813632 592 a e 822208 592 a -e 826496 822208 a -e 826563 826496 a -e 827904 822208 a -e 827971 827904 a e 833728 592 a e 848832 592 a e 854784 592 a e 862528 592 a -e 865024 862528 a e 870848 592 a e 877056 592 a e 883008 592 a e 892096 592 a -e 895040 892096 a -e 896704 892096 a -e 898368 892096 a e 904960 592 a e 913792 592 a -e 916224 913792 a e 921920 592 a e 927360 592 a e 932992 592 a @@ -4215,51 +2920,31 @@ e 939072 592 a e 946048 592 a e 953344 592 a e 965120 592 a -e 966848 965120 a -e 968512 965120 a -e 970176 965120 a e 975936 592 a e 981120 592 a e 986176 592 a e 992000 592 a -e 994112 992000 a e 999744 592 a e 1006144 592 a -e 1007936 1006144 a e 1014528 592 a -e 1016704 1014528 a e 1022656 592 a -e 1024000 1022656 a e 1030272 592 a -e 1032064 1030272 a e 1042688 592 a -e 1044096 1042688 a e 1054784 592 a e 1064128 592 a -e 1065984 1064128 a e 1075136 592 a -e 1077184 1075136 a e 1089216 592 a e 1124352 592 a -e 1126080 1124352 a -e 1127680 1124352 a -e 1129216 1124352 a e 1135936 592 a e 1142336 592 a e 1147648 592 a e 1152896 592 a e 1158720 592 a e 1164736 592 a -e 1166080 1164736 a e 1173443 592 a e 1177152 592 a -e 1178432 1177152 a e 1185152 592 a -e 1186880 1185152 a e 1193792 592 a -e 1195136 1193792 a -e 1196800 1193792 a -e 1198464 1193792 a e 1204288 592 a e 1209728 592 a e 1215296 592 a @@ -4290,54 +2975,36 @@ e 1472512 592 a e 1477760 592 a e 1503168 592 a e 1511040 592 a -e 1514304 1511040 a e 1520768 592 a -e 1522176 1520768 a e 1529408 592 a -e 1531456 1529408 a e 1543488 592 a e 1551680 592 a -e 1554304 1551680 a e 1564736 592 a e 1571840 592 a e 1577280 592 a e 1584704 592 a -e 1586560 1584704 a -e 1588288 1584704 a e 1594368 592 a e 1601024 592 a e 1608192 592 a -e 1609984 1608192 a -e 1611648 1608192 a e 1618624 592 a e 1630144 592 a e 1639168 592 a e 1647488 592 a e 1658240 592 a e 1668160 592 a -e 1670784 1668160 a e 1677760 592 a -e 1679552 1677760 a e 1689472 592 a -e 1691200 1689472 a e 1705152 592 a -e 1706496 1705152 a e 1714304 592 a -e 1715648 1714304 a -e 1717312 1714304 a e 1722496 592 a e 1727872 592 a e 1736512 592 a e 1747584 592 a e 1753408 592 a e 1762944 592 a -e 1768064 1762944 a e 1780032 592 a -e 1781888 1780032 a e 1788224 592 a -e 1789632 1788224 a e 1800000 592 a -e 1801344 1800000 a e 1811840 592 a e 1820416 592 a e 1831936 592 a @@ -4355,16 +3022,10 @@ e 1917568 592 a e 1923520 592 a e 1948992 592 a e 1975808 592 a -e 1981312 1975808 a -e 1982528 1975808 a e 1990720 592 a -e 1992960 1990720 a -e 1994560 1990720 a e 2000192 592 a e 2005504 592 a e 2012416 592 a -e 2014528 2012416 a -e 2016128 2012416 a e 2031872 592 a e 2038016 592 a e 2043776 592 a @@ -4373,24 +3034,17 @@ e 2055104 592 a e 2075648 592 a e 2079683 592 a e 2080000 592 a -e 2080067 2080000 a e 2081091 592 a e 2081664 592 a -e 2081731 2081664 a e 2083011 592 a e 2083648 592 a -e 2083715 2083648 a -e 2083777 2083648 a -e 2083843 2083777 a e 2084611 592 a e 2107968 592 a e 2113280 592 a e 2144960 592 a e 2149888 592 a e 2159424 592 a -e 2160384 2159424 a e 2166016 592 a -e 2167424 2166016 a e 2177600 592 a e 2185219 592 a e 2190339 592 a @@ -4433,15 +3087,10 @@ e 2472832 592 a e 2478528 592 a e 2486915 592 a e 2487296 592 a -e 2487363 2487296 a e 2488323 592 a e 2488960 592 a -e 2489027 2488960 a e 2489923 592 a e 2490560 592 a -e 2490627 2490560 a -e 2490689 2490560 a -e 2490755 2490689 a e 2491459 592 a e 2494528 592 a e 2499904 592 a @@ -4455,7 +3104,6 @@ e 2564032 592 a e 2584832 592 a e 2595264 592 a e 2607360 592 a -e 2609664 2607360 a e 2615680 592 a e 2623104 592 a e 2628800 592 a @@ -4465,15 +3113,10 @@ e 2645696 592 a e 2651520 592 a e 2661699 592 a e 2662080 592 a -e 2662147 2662080 a e 2663043 592 a e 2663680 592 a -e 2663747 2663680 a e 2664643 592 a e 2665280 592 a -e 2665347 2665280 a -e 2665409 2665280 a -e 2665475 2665409 a e 2666179 592 a e 2699904 592 a e 2722688 592 a @@ -4486,44 +3129,28 @@ e 2798720 592 a e 2804480 592 a e 2834115 592 a e 2834496 592 a -e 2834563 2834496 a e 2835395 592 a e 2836032 592 a -e 2836099 2836032 a e 2836931 592 a e 2837568 592 a -e 2837635 2837568 a -e 2837697 2837568 a -e 2837763 2837697 a e 2838467 592 a e 2839872 592 a -e 2839939 2839872 a e 2840771 592 a e 2841408 592 a -e 2841475 2841408 a e 2842371 592 a e 2843008 592 a -e 2843075 2843008 a -e 2843137 2843008 a -e 2843203 2843137 a e 2843907 592 a e 2845312 592 a -e 2845379 2845312 a e 2846467 592 a e 2847168 592 a -e 2847235 2847168 a e 2848579 592 a e 2849216 592 a -e 2849283 2849216 a -e 2849345 2849216 a -e 2849411 2849345 a e 2850243 592 a e 2853312 592 a e 2873216 592 a e 2883520 592 a e 2899264 592 a e 2904960 592 a -e 2905027 2904960 a e 2908163 592 a e 2911744 592 a e 2932608 592 a @@ -4533,15 +3160,10 @@ e 2966400 592 a e 2972160 592 a e 2975875 592 a e 2976256 592 a -e 2976323 2976256 a e 2978691 592 a e 2979328 592 a -e 2979395 2979328 a e 2985219 592 a e 2985856 592 a -e 2985923 2985856 a -e 2985985 2985856 a -e 2986051 2985985 a e 2987523 592 a e 2992768 592 a e 3004864 592 a @@ -4553,26 +3175,16 @@ e 3047680 592 a e 3053888 592 a e 3057475 592 a e 3057856 592 a -e 3057923 3057856 a e 3058883 592 a e 3059520 592 a -e 3059587 3059520 a e 3060483 592 a e 3061120 592 a -e 3061187 3061120 a -e 3061249 3061120 a -e 3061315 3061249 a e 3062083 592 a e 3063552 592 a -e 3063619 3063552 a e 3069379 592 a e 3070080 592 a -e 3070147 3070080 a e 3086915 592 a e 3087552 592 a -e 3087619 3087552 a -e 3087681 3087552 a -e 3087747 3087681 a e 3091715 592 a e 3096768 592 a e 3102400 592 a @@ -4601,31 +3213,21 @@ e 3372416 592 a e 3377984 592 a e 3383680 592 a e 3389760 592 a -e 3391424 3389760 a e 3394947 592 a e 3395072 592 a -e 3395139 3395072 a e 3396547 592 a e 3397120 592 a -e 3397187 3397120 a e 3399299 592 a e 3399936 592 a -e 3400003 3399936 a -e 3400065 3399936 a -e 3400131 3400065 a e 3400963 592 a e 3404160 592 a e 3411264 592 a -e 3412608 3411264 a e 3418048 592 a e 3425088 592 a -e 3427840 3425088 a e 3434048 592 a e 3440576 592 a e 3452096 592 a -e 3453952 3452096 a e 3460928 592 a -e 3463232 3460928 a e 3468928 592 a e 3484480 592 a e 3485504 592 a @@ -4634,10 +3236,7 @@ e 3502848 592 a e 3508608 592 a e 3513664 592 a e 3520256 592 a -e 3521984 3520256 a -e 3523648 3520256 a e 3529792 592 a -e 3531136 3529792 a e 3537088 592 a e 3544064 592 a e 3550720 592 a @@ -4649,105 +3248,53 @@ e 3581952 592 a e 3592960 592 a e 3598464 592 a e 3604352 592 a -e 3605824 3604352 a e 3612672 592 a -e 3614528 3612672 a e 3621056 592 a -e 3622464 3621056 a e 3628288 592 a -e 3629248 3628288 a e 3635264 592 a -e 3637056 3635264 a e 3642944 592 a e 3649792 592 a -e 3651584 3649792 a e 3656768 592 a e 3662720 592 a -e 3664512 3662720 a e 3673475 592 a e 3673792 592 a -e 3673859 3673792 a -e 3674624 3673792 a -e 3674691 3674624 a e 3675075 592 a e 3675584 592 a -e 3675651 3675584 a -e 3676800 3675584 a -e 3676867 3676800 a e 3677507 592 a e 3678144 592 a -e 3678211 3678144 a -e 3678273 3678144 a -e 3678339 3678273 a e 3679107 592 a e 3684800 592 a -e 3686080 3684800 a -e 3687680 3684800 a -e 3688896 3684800 a -e 3690048 3684800 a e 3695680 592 a e 3701056 592 a -e 3701952 3701056 a e 3707136 592 a -e 3708416 3707136 a e 3713472 592 a e 3718720 592 a -e 3720000 3718720 a e 3725184 592 a e 3730368 592 a e 3735872 592 a e 3743488 592 a -e 3745152 3743488 a e 3750784 592 a e 3766720 592 a e 3782016 592 a e 3790272 592 a e 3799552 592 a -e 3801280 3799552 a -e 3802944 3799552 a e 3812800 592 a e 3822592 592 a -e 3824320 3822592 a -e 3825984 3822592 a e 3837632 592 a -e 3838976 3837632 a e 3845696 592 a -e 3848128 3845696 a e 3856832 592 a -e 3858624 3856832 a -e 3860288 3856832 a -e 3861568 3856832 a -e 3863616 3856832 a e 3869632 592 a e 3878720 592 a -e 3880448 3878720 a -e 3882112 3878720 a -e 3883776 3878720 a e 3893120 592 a -e 3895680 3893120 a -e 3897344 3893120 a -e 3898624 3893120 a -e 3900672 3893120 a e 3907648 592 a e 3918656 592 a -e 3920384 3918656 a -e 3922048 3918656 a -e 3923712 3918656 a -e 3925312 3918656 a e 3931520 592 a e 3937920 592 a -e 3939328 3937920 a e 3946240 592 a -e 3947520 3946240 a -e 3949056 3946240 a -e 3950592 3946240 a e 3956224 592 a e 3962496 592 a -e 3963968 3962496 a -e 3965696 3962496 a e 3971328 592 a e 3978304 592 a -e 3981120 3978304 a e 3988608 592 a e 4001344 592 a e 4006272 592 a @@ -4759,22 +3306,12 @@ e 4062144 592 a e 4068160 592 a e 4074816 592 a e 4082240 592 a -e 4083904 4082240 a -e 4085120 4082240 a e 4090176 592 a e 4095104 592 a -e 4096768 4095104 a e 4102272 592 a e 4145280 592 a e 4153088 592 a -e 4154368 4153088 a -e 4155648 4153088 a -e 4157248 4153088 a -e 4158848 4153088 a e 4166336 592 a -e 4168064 4166336 a -e 4169728 4166336 a -e 4171392 4166336 a e 4177088 592 a e 4182784 592 a e 4188992 592 a @@ -4784,30 +3321,1493 @@ e 4196547 592 a e 4240192 592 a e 4245504 592 a e 4255232 592 a -e 4260096 4255232 a e 4268864 592 a e 4279808 592 a -e 4281088 4279808 a -e 4282752 4279808 a e 4288640 592 a e 4294592 592 a -e 4296320 4294592 a e 4302848 592 a -e 4304256 4302848 a -e 4305984 4302848 a e 4312192 592 a -e 4313536 4312192 a e 4319360 592 a e 4326464 592 a e 4696128 592 a -e 4699008 4696128 a -e 4700288 4696128 a -e 4701568 4696128 a e 4708352 592 a -e 4709760 4708352 a e 4716160 592 a -e 4717568 4716160 a e 4723712 592 a -e 4724992 4723712 a +e 53779 53640 b +e 55059 54920 b +e 114643 114504 b +e 247955 245968 b +e 247872 245968 a +e 247955 247872 a +e 315219 315080 b +e 337555 337416 b +e 344915 344776 b +e 367507 367368 b +e 369171 369032 b +e 409875 409736 b +e 416595 416456 b +e 445331 445192 b +e 453971 453832 b +e 455635 455496 b +e 457299 457160 b +e 458963 458824 b +e 460627 460488 b +e 489427 489288 b +e 510931 510792 b +e 621715 621576 b +e 691859 691720 b +e 693459 693320 b +e 751443 751304 b +e 760787 760648 b +e 792403 792264 b +e 802003 801864 b +e 819968 817808 a +e 820035 819968 a +e 840467 837584 b +e 842387 837584 b +e 841608 837584 b +e 843144 837584 b +e 840384 837584 a +e 841747 841608 b +e 843283 843144 b +e 840467 840384 a +e 842387 840384 a +e 841664 840384 a +e 843200 840384 a +e 841747 841664 a +e 843283 843200 a +e 865107 864968 b +e 895123 894984 b +e 896787 896648 b +e 898451 898312 b +e 916307 916168 b +e 966931 966792 b +e 968595 968456 b +e 970259 970120 b +e 994195 994056 b +e 1008019 1007880 b +e 1016787 1016648 b +e 1024083 1023944 b +e 1032147 1032008 b +e 1044179 1044040 b +e 1066067 1065928 b +e 1077267 1077128 b +e 1126163 1126024 b +e 1127763 1127624 b +e 1129299 1129160 b +e 1166163 1166024 b +e 1178515 1178376 b +e 1186963 1186824 b +e 1195219 1195080 b +e 1196883 1196744 b +e 1198547 1198408 b +e 1244179 1242064 b +e 1244096 1242064 a +e 1244179 1244096 a +e 1374931 1372816 b +e 1374848 1372816 a +e 1374931 1374848 a +e 1392019 1389904 b +e 1391936 1389904 a +e 1392019 1391936 a +e 1398419 1396432 b +e 1398336 1396432 a +e 1398419 1398336 a +e 1409939 1407760 b +e 1409856 1407760 a +e 1409939 1409856 a +e 1433171 1431376 b +e 1433088 1431376 a +e 1433171 1433088 a +e 1483923 1481808 b +e 1483840 1481808 a +e 1483923 1483840 a +e 1514387 1514248 b +e 1522259 1522120 b +e 1531539 1531400 b +e 1554387 1554248 b +e 1586643 1586504 b +e 1588371 1588232 b +e 1610067 1609928 b +e 1611731 1611592 b +e 1670867 1670728 b +e 1679635 1679496 b +e 1691283 1691144 b +e 1706579 1706440 b +e 1715731 1715592 b +e 1717395 1717256 b +e 1741971 1740048 b +e 1741888 1740048 a +e 1741971 1741888 a +e 1768147 1768008 b +e 1781971 1781832 b +e 1789715 1789576 b +e 1801427 1801288 b +e 1826067 1823952 b +e 1825984 1823952 a +e 1826067 1825984 a +e 1897299 1895184 b +e 1897216 1895184 a +e 1897299 1897216 a +e 1910291 1907792 b +e 1910208 1907792 a +e 1910291 1910208 a +e 1929875 1927632 b +e 1929792 1927632 a +e 1929875 1929792 a +e 1936467 1934416 b +e 1936384 1934416 a +e 1936467 1936384 a +e 1942739 1940496 b +e 1942656 1940496 a +e 1942739 1942656 a +e 1956499 1953936 b +e 1956416 1953936 a +e 1956499 1956416 a +e 1964627 1962064 b +e 1964544 1962064 a +e 1964627 1964544 a +e 1981395 1981256 b +e 1982611 1982472 b +e 1993043 1992904 b +e 1994643 1994504 b +e 2014611 2014472 b +e 2016211 2016072 b +e 2026067 2024080 b +e 2025984 2024080 a +e 2026067 2025984 a +e 2070163 2067984 b +e 2070080 2067984 a +e 2070163 2070080 a +e 2087891 2085776 b +e 2087808 2085776 a +e 2087891 2087808 a +e 2094099 2091984 b +e 2094016 2091984 a +e 2094099 2094016 a +e 2139347 2137360 b +e 2139264 2137360 a +e 2139347 2139264 a +e 2160467 2160328 b +e 2167507 2167368 b +e 2609747 2609608 b +e 2816851 2812880 b +e 2816768 2812880 a +e 2816851 2816768 a +e 2830483 2828304 b +e 2830400 2828304 a +e 2830483 2830400 a +e 3262931 3260688 b +e 3262848 3260688 a +e 3262931 3262848 a +e 3269971 3268048 b +e 3269888 3268048 a +e 3269971 3269888 a +e 3277579 3273872 b +e 3277635 3273872 a +e 3391507 3391368 b +e 3412691 3412552 b +e 3427923 3427784 b +e 3454035 3453896 b +e 3463315 3463176 b +e 3522067 3521928 b +e 3523731 3523592 b +e 3531219 3531080 b +e 3605907 3605768 b +e 3614611 3614472 b +e 3622547 3622408 b +e 3629331 3629192 b +e 3637139 3637000 b +e 3651667 3651528 b +e 3664595 3664456 b +e 3670035 3668240 b +e 3669952 3668240 a +e 3670035 3669952 a +e 3686163 3686024 b +e 3687763 3687624 b +e 3688979 3688840 b +e 3690131 3689992 b +e 3702035 3701896 b +e 3708499 3708360 b +e 3720083 3719944 b +e 3745235 3745096 b +e 3801363 3801224 b +e 3803027 3802888 b +e 3824403 3824264 b +e 3826067 3825928 b +e 3839059 3838920 b +e 3848211 3848072 b +e 3858707 3858568 b +e 3860371 3860232 b +e 3861651 3861512 b +e 3863699 3863560 b +e 3880531 3880392 b +e 3882195 3882056 b +e 3883859 3883720 b +e 3895763 3895624 b +e 3897427 3897288 b +e 3898707 3898568 b +e 3900755 3900616 b +e 3920467 3920328 b +e 3922131 3921992 b +e 3923795 3923656 b +e 3925395 3925256 b +e 3939411 3939272 b +e 3947603 3947464 b +e 3949139 3949000 b +e 3950675 3950536 b +e 3964051 3963912 b +e 3965779 3965640 b +e 3981203 3981064 b +e 4032275 4030160 b +e 4032192 4030160 a +e 4032275 4032192 a +e 4049939 4047824 b +e 4049856 4047824 a +e 4049939 4049856 a +e 4056275 4054032 b +e 4056192 4054032 a +e 4056275 4056192 a +e 4083987 4083848 b +e 4085203 4085064 b +e 4096851 4096712 b +e 4139347 4137168 b +e 4139264 4137168 a +e 4139347 4139264 a +e 4154451 4154312 b +e 4155731 4155592 b +e 4157331 4157192 b +e 4158931 4158792 b +e 4168147 4168008 b +e 4169811 4169672 b +e 4171475 4171336 b +e 4215699 4213520 b +e 4215616 4213520 a +e 4215699 4215616 a +e 4229331 4227280 b +e 4229248 4227280 a +e 4229331 4229248 a +e 4234963 4232912 b +e 4234880 4232912 a +e 4234963 4234880 a +e 4260179 4260040 b +e 4281171 4281032 b +e 4282835 4282696 b +e 4296403 4296264 b +e 4304339 4304200 b +e 4306067 4305928 b +e 4313619 4313480 b +e 4333331 4331408 b +e 4333248 4331408 a +e 4333331 4333248 a +e 4339411 4337168 b +e 4339328 4337168 a +e 4339411 4339328 a +e 4346323 4344336 b +e 4346240 4344336 a +e 4346323 4346240 a +e 4353875 4350288 b +e 4356744 4350288 b +e 4353792 4350288 a +e 4356883 4356744 b +e 4353875 4353792 a +e 4356800 4353792 a +e 4356883 4356800 a +e 4362899 4360720 b +e 4362816 4360720 a +e 4362899 4362816 a +e 4368080 4367696 ba +e 4372363 4367696 b +e 4372995 4367696 a +e 4368139 4368080 b +e 4368195 4368080 a +e 4376339 4374416 b +e 4376256 4374416 a +e 4376339 4376256 a +e 4386707 4384784 b +e 4386624 4384784 a +e 4386707 4386624 a +e 4392019 4390224 b +e 4391936 4390224 a +e 4392019 4391936 a +e 4398163 4395408 b +e 4399752 4395408 b +e 4398080 4395408 a +e 4399891 4399752 b +e 4398163 4398080 a +e 4399808 4398080 a +e 4399891 4399808 a +e 4403792 4403408 ba +e 4405651 4403408 b +e 4406611 4403408 b +e 4406803 4403408 b +e 4406475 4403408 b +e 4406667 4403408 b +e 4408843 4403408 b +e 4407696 4403408 ba +e 4405568 4403408 a +e 4409091 4403408 a +e 4403915 4403792 b +e 4404235 4403792 b +e 4404035 4403792 a +e 4404291 4403792 a +e 4408139 4407696 b +e 4408195 4407696 a +e 4405651 4405568 a +e 4406611 4405568 a +e 4406803 4405568 a +e 4406531 4405568 a +e 4406723 4405568 a +e 4412371 4410192 b +e 4412288 4410192 a +e 4412371 4412288 a +e 4419731 4416464 b +e 4421779 4416464 b +e 4420936 4416464 b +e 4422600 4416464 b +e 4419648 4416464 a +e 4421075 4420936 b +e 4422739 4422600 b +e 4419731 4419648 a +e 4421779 4419648 a +e 4420992 4419648 a +e 4422656 4419648 a +e 4421075 4420992 a +e 4422739 4422656 a +e 4428947 4426448 b +e 4428864 4426448 a +e 4428947 4428864 a +e 4440083 4438160 b +e 4440000 4438160 a +e 4440083 4440000 a +e 4446355 4443600 b +e 4447944 4443600 b +e 4446272 4443600 a +e 4448083 4447944 b +e 4446355 4446272 a +e 4448000 4446272 a +e 4448083 4448000 a +e 4453459 4451600 b +e 4453376 4451600 a +e 4453459 4453376 a +e 4459155 4456976 b +e 4459072 4456976 a +e 4459155 4459072 a +e 4466515 4463248 b +e 4468563 4463248 b +e 4467720 4463248 b +e 4469384 4463248 b +e 4466432 4463248 a +e 4467859 4467720 b +e 4469523 4469384 b +e 4466515 4466432 a +e 4468563 4466432 a +e 4467776 4466432 a +e 4469440 4466432 a +e 4467859 4467776 a +e 4469523 4469440 a +e 4475731 4473232 b +e 4475648 4473232 a +e 4475731 4475648 a +e 4484883 4480272 b +e 4489288 4480272 b +e 4484800 4480272 a +e 4489427 4489288 b +e 4484883 4484800 a +e 4489344 4484800 a +e 4489427 4489344 a +e 4494032 4493648 ba +e 4497555 4493648 b +e 4498131 4493648 b +e 4497995 4493648 b +e 4504715 4493648 b +e 4497472 4493648 a +e 4505539 4493648 a +e 4494155 4494032 b +e 4494851 4494032 a +e 4497555 4497472 a +e 4498131 4497472 a +e 4498051 4497472 a +e 4509267 4507216 b +e 4509184 4507216 a +e 4509267 4509184 a +e 4516563 4513296 b +e 4518536 4513296 b +e 4516480 4513296 a +e 4518675 4518536 b +e 4516563 4516480 a +e 4518592 4516480 a +e 4518675 4518592 a +e 4526803 4522384 b +e 4529683 4522384 b +e 4531347 4522384 b +e 4528840 4522384 b +e 4530504 4522384 b +e 4526720 4522384 a +e 4528979 4528840 b +e 4530643 4530504 b +e 4526803 4526720 a +e 4529683 4526720 a +e 4531347 4526720 a +e 4528896 4526720 a +e 4530560 4526720 a +e 4528979 4528896 a +e 4530643 4530560 a +e 4537875 4536016 b +e 4537792 4536016 a +e 4537875 4537792 a +e 4543699 4541392 b +e 4543616 4541392 a +e 4543699 4543616 a +e 4551571 4548304 b +e 4553619 4548304 b +e 4552776 4548304 b +e 4554440 4548304 b +e 4551488 4548304 a +e 4552915 4552776 b +e 4554579 4554440 b +e 4551571 4551488 a +e 4553619 4551488 a +e 4552832 4551488 a +e 4554496 4551488 a +e 4552915 4552832 a +e 4554579 4554496 a +e 4560787 4558288 b +e 4560704 4558288 a +e 4560787 4560704 a +e 4569235 4565328 b +e 4571347 4565328 b +e 4573075 4565328 b +e 4574739 4565328 b +e 4570504 4565328 b +e 4572232 4565328 b +e 4573896 4565328 b +e 4569152 4565328 a +e 4570643 4570504 b +e 4572371 4572232 b +e 4574035 4573896 b +e 4569235 4569152 a +e 4571347 4569152 a +e 4573075 4569152 a +e 4574739 4569152 a +e 4570560 4569152 a +e 4572288 4569152 a +e 4573952 4569152 a +e 4570643 4570560 a +e 4572371 4572288 a +e 4574035 4573952 a +e 4583251 4578640 b +e 4587784 4578640 b +e 4583168 4578640 a +e 4587923 4587784 b +e 4583251 4583168 a +e 4587840 4583168 a +e 4587923 4587840 a +e 4594963 4592208 b +e 4594880 4592208 a +e 4594963 4594880 a +e 4603475 4601616 b +e 4603392 4601616 a +e 4603475 4603392 a +e 4613267 4611216 b +e 4613184 4611216 a +e 4613267 4613184 a +e 4619219 4617296 b +e 4619136 4617296 a +e 4619219 4619136 a +e 4625555 4622736 b +e 4625472 4622736 a +e 4625555 4625472 a +e 4634963 4632784 b +e 4634880 4632784 a +e 4634963 4634880 a +e 4641107 4639120 b +e 4641024 4639120 a +e 4641107 4641024 a +e 4646675 4644560 b +e 4646592 4644560 a +e 4646675 4646592 a +e 4657427 4651152 b +e 4659475 4651152 b +e 4660627 4651152 b +e 4661779 4651152 b +e 4663443 4651152 b +e 4658632 4651152 b +e 4659848 4651152 b +e 4661000 4651152 b +e 4662600 4651152 b +e 4663816 4651152 b +e 4657344 4651152 a +e 4658771 4658632 b +e 4659987 4659848 b +e 4661139 4661000 b +e 4662739 4662600 b +e 4663955 4663816 b +e 4657427 4657344 a +e 4659475 4657344 a +e 4660627 4657344 a +e 4661779 4657344 a +e 4663443 4657344 a +e 4658688 4657344 a +e 4659904 4657344 a +e 4661056 4657344 a +e 4662656 4657344 a +e 4663872 4657344 a +e 4658771 4658688 a +e 4659987 4659904 a +e 4661139 4661056 a +e 4662739 4662656 a +e 4663955 4663872 a +e 4674131 4667856 b +e 4676179 4667856 b +e 4677331 4667856 b +e 4678611 4667856 b +e 4680275 4667856 b +e 4675336 4667856 b +e 4676552 4667856 b +e 4677768 4667856 b +e 4679432 4667856 b +e 4680648 4667856 b +e 4674048 4667856 a +e 4675475 4675336 b +e 4676691 4676552 b +e 4677907 4677768 b +e 4679571 4679432 b +e 4680787 4680648 b +e 4674131 4674048 a +e 4676179 4674048 a +e 4677331 4674048 a +e 4678611 4674048 a +e 4680275 4674048 a +e 4675392 4674048 a +e 4676608 4674048 a +e 4677824 4674048 a +e 4679488 4674048 a +e 4680704 4674048 a +e 4675475 4675392 a +e 4676691 4676608 a +e 4677907 4677824 a +e 4679571 4679488 a +e 4680787 4680704 a +e 4686867 4684752 b +e 4686784 4684752 a +e 4686867 4686784 a +e 4699091 4698952 b +e 4700371 4700232 b +e 4701651 4701512 b +e 4709843 4709704 b +e 4717651 4717512 b +e 4725075 4724936 b +e 4730579 4728528 b +e 4730496 4728528 a +e 4730579 4730496 a +e 4736979 4734928 b +e 4736896 4734928 a +e 4736979 4736896 a +e 3283 3200 a +e 8275 8192 a +e 9107 9024 a +e 14547 14464 a +e 22355 22272 a +e 27731 27648 a +e 31059 30976 a +e 32467 32384 a +e 37715 37632 a +e 41427 41344 a +e 42195 42112 a +e 50195 50112 a +e 54483 50112 a +e 55763 50112 a +e 53696 50112 a +e 54976 50112 a +e 53779 53696 a +e 55059 54976 a +e 60755 60672 a +e 66963 66880 a +e 74259 74176 a +e 83347 83264 a +e 93523 93440 a +e 99795 99712 a +e 104595 104512 a +e 112083 112000 a +e 114560 112000 a +e 114643 114560 a +e 120403 120320 a +e 126547 126464 a +e 132243 132160 a +e 136467 136384 a +e 141267 141184 a +e 149139 149056 a +e 157267 157184 a +e 163475 163392 a +e 170771 170688 a +e 182675 182592 a +e 188691 188608 a +e 190227 190144 a +e 195667 195584 a +e 200339 200256 a +e 205971 205888 a +e 213139 213056 a +e 219219 219136 a +e 226067 225984 a +e 254099 254016 a +e 261971 261888 a +e 271187 271104 a +e 280659 280576 a +e 286483 286400 a +e 291411 291328 a +e 297683 297600 a +e 302611 302528 a +e 307027 306944 a +e 312979 312896 a +e 315136 312896 a +e 315219 315136 a +e 320659 320576 a +e 325139 325056 a +e 329043 328960 a +e 334995 334912 a +e 337472 334912 a +e 337555 337472 a +e 343635 343552 a +e 344832 343552 a +e 344915 344832 a +e 350355 350272 a +e 356115 356032 a +e 360403 360320 a +e 366227 366144 a +e 368147 366144 a +e 367424 366144 a +e 369088 366144 a +e 367507 367424 a +e 369171 369088 a +e 374931 374848 a +e 381203 381120 a +e 386963 386880 a +e 392339 392256 a +e 397395 397312 a +e 401875 401792 a +e 408595 408512 a +e 409792 408512 a +e 409875 409792 a +e 415251 415168 a +e 416512 415168 a +e 416595 416512 a +e 421267 421184 a +e 426195 426112 a +e 431251 431168 a +e 436755 436672 a +e 443987 443904 a +e 445248 443904 a +e 445331 445248 a +e 452691 452608 a +e 454675 452608 a +e 456339 452608 a +e 458003 452608 a +e 459667 452608 a +e 453888 452608 a +e 455552 452608 a +e 457216 452608 a +e 458880 452608 a +e 460544 452608 a +e 453971 453888 a +e 455635 455552 a +e 457299 457216 a +e 458963 458880 a +e 460627 460544 a +e 466579 466496 a +e 471955 471872 a +e 477907 477824 a +e 486611 486528 a +e 490131 486528 a +e 489344 486528 a +e 489427 489344 a +e 495379 495296 a +e 500563 500480 a +e 508115 508032 a +e 510848 508032 a +e 510931 510848 a +e 516499 516416 a +e 521683 521600 a +e 527251 527168 a +e 534419 534336 a +e 542739 542656 a +e 551699 551616 a +e 560915 560832 a +e 566291 566208 a +e 572051 571968 a +e 579155 579072 a +e 591571 591488 a +e 592403 592320 a +e 596627 596544 a +e 599699 599616 a +e 600403 600320 a +e 604627 604544 a +e 608659 608576 a +e 613651 613568 a +e 619923 619840 a +e 621632 619840 a +e 621715 621632 a +e 626963 626880 a +e 633811 633728 a +e 641747 641664 a +e 647827 647744 a +e 653779 653696 a +e 659923 659840 a +e 666963 666880 a +e 673491 673408 a +e 679315 679232 a +e 684883 684800 a +e 690899 690816 a +e 692563 690816 a +e 691776 690816 a +e 693376 690816 a +e 691859 691776 a +e 693459 693376 a +e 698835 698752 a +e 706515 706432 a +e 714067 713984 a +e 720403 720320 a +e 726995 726912 a +e 735827 735744 a +e 742739 742656 a +e 749395 749312 a +e 751360 749312 a +e 751443 751360 a +e 758227 758144 a +e 760704 758144 a +e 760787 760704 a +e 766419 766336 a +e 772435 772352 a +e 780819 780736 a +e 789587 789504 a +e 792320 789504 a +e 792403 792320 a +e 799443 799360 a +e 801920 799360 a +e 802003 801920 a +e 808147 808064 a +e 813715 813632 a +e 822291 822208 a +e 827155 822208 a +e 826496 822208 a +e 827904 822208 a +e 826563 826496 a +e 827971 827904 a +e 833811 833728 a +e 848915 848832 a +e 854867 854784 a +e 862611 862528 a +e 865024 862528 a +e 865107 865024 a +e 870931 870848 a +e 877139 877056 a +e 883091 883008 a +e 892179 892096 a +e 895827 892096 a +e 897491 892096 a +e 895040 892096 a +e 896704 892096 a +e 898368 892096 a +e 895123 895040 a +e 896787 896704 a +e 898451 898368 a +e 905043 904960 a +e 913875 913792 a +e 916224 913792 a +e 916307 916224 a +e 922003 921920 a +e 927443 927360 a +e 933075 932992 a +e 939155 939072 a +e 946131 946048 a +e 953427 953344 a +e 965203 965120 a +e 967635 965120 a +e 969299 965120 a +e 966848 965120 a +e 968512 965120 a +e 970176 965120 a +e 966931 966848 a +e 968595 968512 a +e 970259 970176 a +e 976019 975936 a +e 981203 981120 a +e 986259 986176 a +e 992083 992000 a +e 994112 992000 a +e 994195 994112 a +e 999827 999744 a +e 1006227 1006144 a +e 1007936 1006144 a +e 1008019 1007936 a +e 1014611 1014528 a +e 1016704 1014528 a +e 1016787 1016704 a +e 1022739 1022656 a +e 1024000 1022656 a +e 1024083 1024000 a +e 1030355 1030272 a +e 1032064 1030272 a +e 1032147 1032064 a +e 1042771 1042688 a +e 1044096 1042688 a +e 1044179 1044096 a +e 1054867 1054784 a +e 1064211 1064128 a +e 1066771 1064128 a +e 1065984 1064128 a +e 1066067 1065984 a +e 1075219 1075136 a +e 1077184 1075136 a +e 1077267 1077184 a +e 1089299 1089216 a +e 1124435 1124352 a +e 1126867 1124352 a +e 1128403 1124352 a +e 1130003 1124352 a +e 1126080 1124352 a +e 1127680 1124352 a +e 1129216 1124352 a +e 1126163 1126080 a +e 1127763 1127680 a +e 1129299 1129216 a +e 1136019 1135936 a +e 1142419 1142336 a +e 1147731 1147648 a +e 1152979 1152896 a +e 1158803 1158720 a +e 1164819 1164736 a +e 1166080 1164736 a +e 1166163 1166080 a +e 1177235 1177152 a +e 1179155 1177152 a +e 1178432 1177152 a +e 1178515 1178432 a +e 1185235 1185152 a +e 1186880 1185152 a +e 1186963 1186880 a +e 1193875 1193792 a +e 1195923 1193792 a +e 1197587 1193792 a +e 1195136 1193792 a +e 1196800 1193792 a +e 1198464 1193792 a +e 1195219 1195136 a +e 1196883 1196800 a +e 1198547 1198464 a +e 1204371 1204288 a +e 1209811 1209728 a +e 1215379 1215296 a +e 1226771 1226688 a +e 1232403 1232320 a +e 1237779 1237696 a +e 1250387 1250304 a +e 1255571 1255488 a +e 1260563 1260480 a +e 1265427 1265344 a +e 1293587 1293504 a +e 1307411 1307328 a +e 1312723 1312640 a +e 1328979 1328896 a +e 1338259 1338176 a +e 1344595 1344512 a +e 1350163 1350080 a +e 1364307 1364224 a +e 1369363 1369280 a +e 1381139 1381056 a +e 1386451 1386368 a +e 1404243 1404160 a +e 1451731 1451648 a +e 1457107 1457024 a +e 1462483 1462400 a +e 1472595 1472512 a +e 1477843 1477760 a +e 1503251 1503168 a +e 1511123 1511040 a +e 1514304 1511040 a +e 1514387 1514304 a +e 1520851 1520768 a +e 1522176 1520768 a +e 1522259 1522176 a +e 1529491 1529408 a +e 1532243 1529408 a +e 1531456 1529408 a +e 1531539 1531456 a +e 1543571 1543488 a +e 1551763 1551680 a +e 1555091 1551680 a +e 1554304 1551680 a +e 1554387 1554304 a +e 1564819 1564736 a +e 1571923 1571840 a +e 1577363 1577280 a +e 1584787 1584704 a +e 1587347 1584704 a +e 1586560 1584704 a +e 1588288 1584704 a +e 1586643 1586560 a +e 1588371 1588288 a +e 1594451 1594368 a +e 1601107 1601024 a +e 1608275 1608192 a +e 1610771 1608192 a +e 1609984 1608192 a +e 1611648 1608192 a +e 1610067 1609984 a +e 1611731 1611648 a +e 1618707 1618624 a +e 1630227 1630144 a +e 1639251 1639168 a +e 1647571 1647488 a +e 1658323 1658240 a +e 1668243 1668160 a +e 1671571 1668160 a +e 1670784 1668160 a +e 1670867 1670784 a +e 1677843 1677760 a +e 1679552 1677760 a +e 1679635 1679552 a +e 1689555 1689472 a +e 1691987 1689472 a +e 1691200 1689472 a +e 1691283 1691200 a +e 1705235 1705152 a +e 1707283 1705152 a +e 1706496 1705152 a +e 1706579 1706496 a +e 1714387 1714304 a +e 1716435 1714304 a +e 1715648 1714304 a +e 1717312 1714304 a +e 1715731 1715648 a +e 1717395 1717312 a +e 1722579 1722496 a +e 1727955 1727872 a +e 1736595 1736512 a +e 1747667 1747584 a +e 1753491 1753408 a +e 1763027 1762944 a +e 1768787 1762944 a +e 1768064 1762944 a +e 1768147 1768064 a +e 1780115 1780032 a +e 1781888 1780032 a +e 1781971 1781888 a +e 1788307 1788224 a +e 1789632 1788224 a +e 1789715 1789632 a +e 1800083 1800000 a +e 1801344 1800000 a +e 1801427 1801344 a +e 1811923 1811840 a +e 1820499 1820416 a +e 1832019 1831936 a +e 1837523 1837440 a +e 1844051 1843968 a +e 1851411 1851328 a +e 1856723 1856640 a +e 1862099 1862016 a +e 1867347 1867264 a +e 1877779 1877696 a +e 1885651 1885568 a +e 1891795 1891712 a +e 1902931 1902848 a +e 1917651 1917568 a +e 1923603 1923520 a +e 1949075 1948992 a +e 1975891 1975808 a +e 1982099 1975808 a +e 1981312 1975808 a +e 1982528 1975808 a +e 1981395 1981312 a +e 1982611 1982528 a +e 1990803 1990720 a +e 1993747 1990720 a +e 1992960 1990720 a +e 1994560 1990720 a +e 1993043 1992960 a +e 1994643 1994560 a +e 2000275 2000192 a +e 2005587 2005504 a +e 2012499 2012416 a +e 2015315 2012416 a +e 2014528 2012416 a +e 2016128 2012416 a +e 2014611 2014528 a +e 2016211 2016128 a +e 2031955 2031872 a +e 2038099 2038016 a +e 2043859 2043776 a +e 2049491 2049408 a +e 2055187 2055104 a +e 2075731 2075648 a +e 2080067 2080000 a +e 2081731 2081664 a +e 2083715 2083648 a +e 2083777 2083648 a +e 2083843 2083777 a +e 2108051 2107968 a +e 2113363 2113280 a +e 2145043 2144960 a +e 2149971 2149888 a +e 2159507 2159424 a +e 2160384 2159424 a +e 2160467 2160384 a +e 2166099 2166016 a +e 2167424 2166016 a +e 2167507 2167424 a +e 2177683 2177600 a +e 2191699 2191616 a +e 2192915 2192832 a +e 2198547 2198464 a +e 2204115 2204032 a +e 2210387 2210304 a +e 2215571 2215488 a +e 2219155 2219072 a +e 2220115 2220032 a +e 2225811 2225728 a +e 2230163 2230080 a +e 2237587 2237504 a +e 2243795 2243712 a +e 2250515 2250432 a +e 2256659 2256576 a +e 2271315 2271232 a +e 2283347 2283264 a +e 2290451 2290368 a +e 2297235 2297152 a +e 2302803 2302720 a +e 2308563 2308480 a +e 2314963 2314880 a +e 2328147 2328064 a +e 2339091 2339008 a +e 2344723 2344640 a +e 2350483 2350400 a +e 2361491 2361408 a +e 2367251 2367168 a +e 2380883 2380800 a +e 2409043 2408960 a +e 2421587 2421504 a +e 2427219 2427136 a +e 2448019 2447936 a +e 2453907 2453824 a +e 2460755 2460672 a +e 2466451 2466368 a +e 2472915 2472832 a +e 2478611 2478528 a +e 2487363 2487296 a +e 2489027 2488960 a +e 2490627 2490560 a +e 2490689 2490560 a +e 2490755 2490689 a +e 2494611 2494528 a +e 2499987 2499904 a +e 2514579 2514496 a +e 2525971 2525888 a +e 2538067 2537984 a +e 2544019 2543936 a +e 2551123 2551040 a +e 2558099 2558016 a +e 2564115 2564032 a +e 2584915 2584832 a +e 2595347 2595264 a +e 2607443 2607360 a +e 2609664 2607360 a +e 2609747 2609664 a +e 2615763 2615680 a +e 2623187 2623104 a +e 2628883 2628800 a +e 2634515 2634432 a +e 2640147 2640064 a +e 2645779 2645696 a +e 2651603 2651520 a +e 2662147 2662080 a +e 2663747 2663680 a +e 2665347 2665280 a +e 2665409 2665280 a +e 2665475 2665409 a +e 2699987 2699904 a +e 2722771 2722688 a +e 2737107 2737024 a +e 2750611 2750528 a +e 2760531 2760448 a +e 2776851 2776768 a +e 2787731 2787648 a +e 2798803 2798720 a +e 2804563 2804480 a +e 2834563 2834496 a +e 2836099 2836032 a +e 2837635 2837568 a +e 2837697 2837568 a +e 2837763 2837697 a +e 2839939 2839872 a +e 2841475 2841408 a +e 2843075 2843008 a +e 2843137 2843008 a +e 2843203 2843137 a +e 2845379 2845312 a +e 2847235 2847168 a +e 2849283 2849216 a +e 2849345 2849216 a +e 2849411 2849345 a +e 2853395 2853312 a +e 2873299 2873216 a +e 2883603 2883520 a +e 2899347 2899264 a +e 2905107 2904960 a +e 2905027 2904960 a +e 2911827 2911744 a +e 2932691 2932608 a +e 2938515 2938432 a +e 2960851 2960768 a +e 2966483 2966400 a +e 2972243 2972160 a +e 2976323 2976256 a +e 2979395 2979328 a +e 2985923 2985856 a +e 2985985 2985856 a +e 2986051 2985985 a +e 2992851 2992768 a +e 3004947 3004864 a +e 3011283 3011200 a +e 3029843 3029760 a +e 3035539 3035456 a +e 3041299 3041216 a +e 3047763 3047680 a +e 3053971 3053888 a +e 3057923 3057856 a +e 3059587 3059520 a +e 3061187 3061120 a +e 3061249 3061120 a +e 3061315 3061249 a +e 3063619 3063552 a +e 3070147 3070080 a +e 3087619 3087552 a +e 3087681 3087552 a +e 3087747 3087681 a +e 3096851 3096768 a +e 3102483 3102400 a +e 3113107 3113024 a +e 3118995 3118912 a +e 3124819 3124736 a +e 3130643 3130560 a +e 3142419 3142336 a +e 3155091 3155008 a +e 3166675 3166592 a +e 3176787 3176704 a +e 3182227 3182144 a +e 3187859 3187776 a +e 3199059 3198976 a +e 3204627 3204544 a +e 3220371 3220288 a +e 3233683 3233600 a +e 3239507 3239424 a +e 3246035 3245952 a +e 3257107 3257024 a +e 3281939 3281856 a +e 3307155 3307072 a +e 3357779 3357696 a +e 3365075 3364992 a +e 3372499 3372416 a +e 3378067 3377984 a +e 3383763 3383680 a +e 3389843 3389760 a +e 3391424 3389760 a +e 3391507 3391424 a +e 3395139 3395072 a +e 3397187 3397120 a +e 3400003 3399936 a +e 3400065 3399936 a +e 3400131 3400065 a +e 3404243 3404160 a +e 3411347 3411264 a +e 3412608 3411264 a +e 3412691 3412608 a +e 3418131 3418048 a +e 3425171 3425088 a +e 3427840 3425088 a +e 3427923 3427840 a +e 3434131 3434048 a +e 3440659 3440576 a +e 3452179 3452096 a +e 3453952 3452096 a +e 3454035 3453952 a +e 3461011 3460928 a +e 3463232 3460928 a +e 3463315 3463232 a +e 3469011 3468928 a +e 3484563 3484480 a +e 3485587 3485504 a +e 3495827 3495744 a +e 3502931 3502848 a +e 3508691 3508608 a +e 3513747 3513664 a +e 3520339 3520256 a +e 3522771 3520256 a +e 3521984 3520256 a +e 3523648 3520256 a +e 3522067 3521984 a +e 3523731 3523648 a +e 3529875 3529792 a +e 3531136 3529792 a +e 3531219 3531136 a +e 3537171 3537088 a +e 3544147 3544064 a +e 3550803 3550720 a +e 3558355 3558272 a +e 3564115 3564032 a +e 3569939 3569856 a +e 3576211 3576128 a +e 3582035 3581952 a +e 3593043 3592960 a +e 3598547 3598464 a +e 3604435 3604352 a +e 3605824 3604352 a +e 3605907 3605824 a +e 3612755 3612672 a +e 3614528 3612672 a +e 3614611 3614528 a +e 3621139 3621056 a +e 3622464 3621056 a +e 3622547 3622464 a +e 3628371 3628288 a +e 3629248 3628288 a +e 3629331 3629248 a +e 3635347 3635264 a +e 3637056 3635264 a +e 3637139 3637056 a +e 3643027 3642944 a +e 3649875 3649792 a +e 3651584 3649792 a +e 3651667 3651584 a +e 3656851 3656768 a +e 3662803 3662720 a +e 3664512 3662720 a +e 3664595 3664512 a +e 3673859 3673792 a +e 3674624 3673792 a +e 3674691 3674624 a +e 3675651 3675584 a +e 3676800 3675584 a +e 3676867 3676800 a +e 3678211 3678144 a +e 3678273 3678144 a +e 3678339 3678273 a +e 3684883 3684800 a +e 3686867 3684800 a +e 3688467 3684800 a +e 3689619 3684800 a +e 3686080 3684800 a +e 3687680 3684800 a +e 3688896 3684800 a +e 3690048 3684800 a +e 3686163 3686080 a +e 3687763 3687680 a +e 3688979 3688896 a +e 3690131 3690048 a +e 3695763 3695680 a +e 3701139 3701056 a +e 3701952 3701056 a +e 3702035 3701952 a +e 3707219 3707136 a +e 3708416 3707136 a +e 3708499 3708416 a +e 3713555 3713472 a +e 3718803 3718720 a +e 3720000 3718720 a +e 3720083 3720000 a +e 3725267 3725184 a +e 3730451 3730368 a +e 3735955 3735872 a +e 3743571 3743488 a +e 3745152 3743488 a +e 3745235 3745152 a +e 3750867 3750784 a +e 3766803 3766720 a +e 3782099 3782016 a +e 3790355 3790272 a +e 3799635 3799552 a +e 3802067 3799552 a +e 3803731 3799552 a +e 3801280 3799552 a +e 3802944 3799552 a +e 3801363 3801280 a +e 3803027 3802944 a +e 3812883 3812800 a +e 3822675 3822592 a +e 3825107 3822592 a +e 3826771 3822592 a +e 3824320 3822592 a +e 3825984 3822592 a +e 3824403 3824320 a +e 3826067 3825984 a +e 3837715 3837632 a +e 3838976 3837632 a +e 3839059 3838976 a +e 3845779 3845696 a +e 3848128 3845696 a +e 3848211 3848128 a +e 3856915 3856832 a +e 3859411 3856832 a +e 3861075 3856832 a +e 3862355 3856832 a +e 3858624 3856832 a +e 3860288 3856832 a +e 3861568 3856832 a +e 3863616 3856832 a +e 3858707 3858624 a +e 3860371 3860288 a +e 3861651 3861568 a +e 3863699 3863616 a +e 3869715 3869632 a +e 3878803 3878720 a +e 3881235 3878720 a +e 3882899 3878720 a +e 3880448 3878720 a +e 3882112 3878720 a +e 3883776 3878720 a +e 3880531 3880448 a +e 3882195 3882112 a +e 3883859 3883776 a +e 3893203 3893120 a +e 3896467 3893120 a +e 3898131 3893120 a +e 3899411 3893120 a +e 3895680 3893120 a +e 3897344 3893120 a +e 3898624 3893120 a +e 3900672 3893120 a +e 3895763 3895680 a +e 3897427 3897344 a +e 3898707 3898624 a +e 3900755 3900672 a +e 3907731 3907648 a +e 3918739 3918656 a +e 3921171 3918656 a +e 3922835 3918656 a +e 3924499 3918656 a +e 3920384 3918656 a +e 3922048 3918656 a +e 3923712 3918656 a +e 3925312 3918656 a +e 3920467 3920384 a +e 3922131 3922048 a +e 3923795 3923712 a +e 3925395 3925312 a +e 3931603 3931520 a +e 3938003 3937920 a +e 3939328 3937920 a +e 3939411 3939328 a +e 3946323 3946240 a +e 3948243 3946240 a +e 3949779 3946240 a +e 3947520 3946240 a +e 3949056 3946240 a +e 3950592 3946240 a +e 3947603 3947520 a +e 3949139 3949056 a +e 3950675 3950592 a +e 3956307 3956224 a +e 3962579 3962496 a +e 3964755 3962496 a +e 3963968 3962496 a +e 3965696 3962496 a +e 3964051 3963968 a +e 3965779 3965696 a +e 3971411 3971328 a +e 3978387 3978304 a +e 3981120 3978304 a +e 3981203 3981120 a +e 3988691 3988608 a +e 4001427 4001344 a +e 4006355 4006272 a +e 4012755 4012672 a +e 4026643 4026560 a +e 4038547 4038464 a +e 4043859 4043776 a +e 4062227 4062144 a +e 4068243 4068160 a +e 4074899 4074816 a +e 4082323 4082240 a +e 4084691 4082240 a +e 4083904 4082240 a +e 4085120 4082240 a +e 4083987 4083904 a +e 4085203 4085120 a +e 4090259 4090176 a +e 4095187 4095104 a +e 4096768 4095104 a +e 4096851 4096768 a +e 4102355 4102272 a +e 4145363 4145280 a +e 4153171 4153088 a +e 4155155 4153088 a +e 4156435 4153088 a +e 4158035 4153088 a +e 4154368 4153088 a +e 4155648 4153088 a +e 4157248 4153088 a +e 4158848 4153088 a +e 4154451 4154368 a +e 4155731 4155648 a +e 4157331 4157248 a +e 4158931 4158848 a +e 4166419 4166336 a +e 4168851 4166336 a +e 4170515 4166336 a +e 4168064 4166336 a +e 4169728 4166336 a +e 4171392 4166336 a +e 4168147 4168064 a +e 4169811 4169728 a +e 4171475 4171392 a +e 4177171 4177088 a +e 4182867 4182784 a +e 4189075 4188992 a +e 4240275 4240192 a +e 4245587 4245504 a +e 4255315 4255232 a +e 4260819 4255232 a +e 4260096 4255232 a +e 4260179 4260096 a +e 4268947 4268864 a +e 4279891 4279808 a +e 4281811 4279808 a +e 4281088 4279808 a +e 4282752 4279808 a +e 4281171 4281088 a +e 4282835 4282752 a +e 4288723 4288640 a +e 4294675 4294592 a +e 4296320 4294592 a +e 4296403 4296320 a +e 4302931 4302848 a +e 4305043 4302848 a +e 4304256 4302848 a +e 4305984 4302848 a +e 4304339 4304256 a +e 4306067 4305984 a +e 4312275 4312192 a +e 4313536 4312192 a +e 4313619 4313536 a +e 4319443 4319360 a +e 4326547 4326464 a +e 4696211 4696128 a +e 4699795 4696128 a +e 4701075 4696128 a +e 4699008 4696128 a +e 4700288 4696128 a +e 4701568 4696128 a +e 4699091 4699008 a +e 4700371 4700288 a +e 4701651 4701568 a +e 4708435 4708352 a +e 4709760 4708352 a +e 4709843 4709760 a +e 4716243 4716160 a +e 4717568 4716160 a +e 4717651 4717568 a +e 4723795 4723712 a +e 4724992 4723712 a +e 4725075 4724992 a diff --git a/src/test/resources/multilinemacros/diffWithComments_expected.lg b/src/test/resources/multilinemacros/diffWithComments_expected.lg index ce94c7e49..c18cf4a5d 100644 --- a/src/test/resources/multilinemacros/diffWithComments_expected.lg +++ b/src/test/resources/multilinemacros/diffWithComments_expected.lg @@ -7,12 +7,12 @@ v 595 NON;ARTIFACT;(old: 6, diff: 8, new: 8);(old: 7, diff: 9, new: 9);; v 723 NON;ARTIFACT;(old: 7, diff: 10, new: 10);(old: 8, diff: 11, new: 11);;foo(); v 131 ADD;ARTIFACT;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);;#define multi \;kulti v 640 ADD;IF;(old: -1, diff: 9, new: 9);(old: -1, diff: 11, new: 11);A&B;#if A & B +e 131 16 a;-1,0 e 275 16 ba;0,1 e 339 16 ba;1,2 e 403 16 ba;2,3 e 467 16 ba;3,4 e 595 16 ba;4,5 e 723 16 b;5,-1 -e 723 640 a;-1,0 -e 131 16 a;-1,0 e 640 16 a;-1,6 +e 723 640 a;-1,0 diff --git a/src/test/resources/multilinemacros/inline_comments_1_expected.lg b/src/test/resources/multilinemacros/inline_comments_1_expected.lg index 241ccd6d1..912fb06b2 100644 --- a/src/test/resources/multilinemacros/inline_comments_1_expected.lg +++ b/src/test/resources/multilinemacros/inline_comments_1_expected.lg @@ -7,10 +7,10 @@ v 843 REM;ARTIFACT;(old: 10, diff: 12, new: -1);(old: 11, diff: 13, new: -1);; v 771 ADD;ARTIFACT;(old: -1, diff: 11, new: 10);(old: -1, diff: 12, new: 11);; baz(); v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);A & C & D;# if A && /* inline; comment */ C \; && D e 136 16 b;0,-1 -e 403 136 b;0,-1 -e 403 128 a;-1,0 +e 128 16 a;-1,0 e 531 16 ba;1,1 e 592 16 ba;2,2 +e 403 136 b;0,-1 e 843 592 b;0,-1 e 771 592 a;-1,0 -e 128 16 a;-1,0 +e 403 128 a;-1,0 diff --git a/src/test/resources/multilinemacros/inline_comments_2_expected.lg b/src/test/resources/multilinemacros/inline_comments_2_expected.lg index cb4af0742..e6d567028 100644 --- a/src/test/resources/multilinemacros/inline_comments_2_expected.lg +++ b/src/test/resources/multilinemacros/inline_comments_2_expected.lg @@ -7,10 +7,10 @@ v 1099 REM;ARTIFACT;(old: 14, diff: 16, new: -1);(old: 15, diff: 17, new: -1);; v 1027 ADD;ARTIFACT;(old: -1, diff: 15, new: 14);(old: -1, diff: 16, new: 15);; baz(); v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 8, new: 7);A & C & D;# if A && \;/* inline;comment */ \; C \; && D e 136 16 b;0,-1 -e 531 136 b;0,-1 -e 531 128 a;-1,0 +e 128 16 a;-1,0 e 659 16 ba;1,1 e 720 16 ba;2,2 +e 531 136 b;0,-1 e 1099 720 b;0,-1 e 1027 720 a;-1,0 -e 128 16 a;-1,0 +e 531 128 a;-1,0 diff --git a/src/test/resources/multilinemacros/inline_comments_3_expected.lg b/src/test/resources/multilinemacros/inline_comments_3_expected.lg index 7ea557356..1ba5cd78c 100644 --- a/src/test/resources/multilinemacros/inline_comments_3_expected.lg +++ b/src/test/resources/multilinemacros/inline_comments_3_expected.lg @@ -7,10 +7,10 @@ v 1355 REM;ARTIFACT;(old: 18, diff: 20, new: -1);(old: 19, diff: 21, new: -1);; v 1283 ADD;ARTIFACT;(old: -1, diff: 19, new: 18);(old: -1, diff: 20, new: 19);; baz(); v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);A & C & D;# if A && \;/* inline;comment;with multiple;lines;*/ \; C \; && D e 136 16 b;0,-1 -e 723 136 b;0,-1 -e 723 128 a;-1,0 +e 128 16 a;-1,0 e 851 16 ba;1,1 e 912 16 ba;2,2 +e 723 136 b;0,-1 e 1355 912 b;0,-1 e 1283 912 a;-1,0 -e 128 16 a;-1,0 +e 723 128 a;-1,0 diff --git a/src/test/resources/multilinemacros/inline_comments_4_expected.lg b/src/test/resources/multilinemacros/inline_comments_4_expected.lg index a25a1a85c..4e7454a98 100644 --- a/src/test/resources/multilinemacros/inline_comments_4_expected.lg +++ b/src/test/resources/multilinemacros/inline_comments_4_expected.lg @@ -7,10 +7,10 @@ v 1163 REM;ARTIFACT;(old: 15, diff: 17, new: -1);(old: 16, diff: 18, new: -1);; v 1091 ADD;ARTIFACT;(old: -1, diff: 16, new: 15);(old: -1, diff: 17, new: 16);; baz(); v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 9, new: 8);A & B & C & E & D;# if A && /* multiple inline;comments */ B && /* that */ C && /*;are distributed;*/ \; E \; && D e 136 16 b;0,-1 -e 595 136 b;0,-1 -e 595 128 a;-1,0 +e 128 16 a;-1,0 e 723 16 ba;1,1 e 784 16 ba;2,2 +e 595 136 b;0,-1 e 1163 784 b;0,-1 e 1091 784 a;-1,0 -e 128 16 a;-1,0 +e 595 128 a;-1,0 diff --git a/src/test/resources/multilinemacros/inline_comments_5_expected.lg b/src/test/resources/multilinemacros/inline_comments_5_expected.lg index 0c22c138a..c98f54da0 100644 --- a/src/test/resources/multilinemacros/inline_comments_5_expected.lg +++ b/src/test/resources/multilinemacros/inline_comments_5_expected.lg @@ -11,14 +11,14 @@ v 1107 NON;ARTIFACT;(old: 14, diff: 16, new: 14);(old: 15, diff: 17, new: 15);;/ v 1171 NON;ARTIFACT;(old: 15, diff: 17, new: 15);(old: 16, diff: 18, new: 16);;text v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);A & C & D;# if A && /* inline; comment */ C \; && D //* no continuation e 136 16 b;0,-1 -e 403 136 b;0,-1 -e 403 128 a;-1,0 +e 128 16 a;-1,0 e 531 16 ba;1,1 e 592 16 ba;2,2 -e 843 592 b;0,-1 -e 771 592 a;-1,0 e 979 16 ba;3,3 e 1043 16 ba;4,4 e 1107 16 ba;5,5 e 1171 16 ba;6,6 -e 128 16 a;-1,0 +e 403 136 b;0,-1 +e 843 592 b;0,-1 +e 771 592 a;-1,0 +e 403 128 a;-1,0 diff --git a/src/test/resources/multilinemacros/inline_comments_6_expected.lg b/src/test/resources/multilinemacros/inline_comments_6_expected.lg index 91805d3cf..4e80108fa 100644 --- a/src/test/resources/multilinemacros/inline_comments_6_expected.lg +++ b/src/test/resources/multilinemacros/inline_comments_6_expected.lg @@ -3,6 +3,6 @@ v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 6, diff: 7, new: -1);A & B & D;# i v 467 NON;ARTIFACT;(old: 5, diff: 6, new: 5);(old: 6, diff: 7, new: 6);; baz(); v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 7, new: 6);A & C & D;# if A && /* inline;// Some inner line comment; comment */ C \; && D e 136 16 b;0,-1 +e 128 16 a;-1,0 e 467 136 b;0,-1 e 467 128 a;-1,0 -e 128 16 a;-1,0 diff --git a/src/test/resources/multilinemacros/mldiff1_expected.lg b/src/test/resources/multilinemacros/mldiff1_expected.lg index 10ef7f3a1..15471215e 100644 --- a/src/test/resources/multilinemacros/mldiff1_expected.lg +++ b/src/test/resources/multilinemacros/mldiff1_expected.lg @@ -20,24 +20,24 @@ v 1280 ADD;IF;(old: -1, diff: 19, new: 18);(old: -1, diff: 24, new: 22);A & (ADD v 1728 ADD;IF;(old: -1, diff: 26, new: 24);(old: -1, diff: 30, new: 28);X & Y | defined(Z) | W;#if (X && Y) \; || defined(Z) \; || W e 147 16 ba;0,0 e 208 16 ba;1,1 -e 339 208 ba;0,0 e 467 16 ba;2,2 e 659 16 b;3,-1 -e 659 512 a;-1,0 +e 512 16 a;-1,3 e 787 16 ba;4,4 e 840 16 b;5,-1 -e 1107 840 b;0,-1 -e 1107 832 a;-1,0 +e 832 16 a;-1,5 e 1235 16 ba;6,6 e 1288 16 b;7,-1 -e 1555 1288 b;0,-1 -e 1555 1280 a;-1,0 +e 1280 16 a;-1,7 e 1683 16 ba;8,8 e 1736 16 b;9,-1 +e 1728 16 a;-1,9 +e 2067 16 ba;10,10 +e 339 208 ba;0,0 +e 1107 840 b;0,-1 +e 1555 1288 b;0,-1 e 1939 1736 b;0,-1 +e 659 512 a;-1,0 +e 1107 832 a;-1,0 +e 1555 1280 a;-1,0 e 1939 1728 a;-1,0 -e 2067 16 ba;10,10 -e 512 16 a;-1,3 -e 832 16 a;-1,5 -e 1280 16 a;-1,7 -e 1728 16 a;-1,9 diff --git a/src/test/resources/tree-diffing/04_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/04_gumtree-hybrid_expected.lg index 840767659..71e5f3c43 100644 --- a/src/test/resources/tree-diffing/04_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/04_gumtree-hybrid_expected.lg @@ -2,5 +2,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 1, new: 2);;Line v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 2, new: 3);defined(A);#ifdef A e 147 80 b;0,-1 -e 147 192 a;-1,0 e 192 80 a;-1,0 +e 147 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/04_gumtree_expected.lg b/src/test/resources/tree-diffing/04_gumtree_expected.lg index 840767659..71e5f3c43 100644 --- a/src/test/resources/tree-diffing/04_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/04_gumtree_expected.lg @@ -2,5 +2,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 1, new: 2);;Line v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 2, new: 3);defined(A);#ifdef A e 147 80 b;0,-1 -e 147 192 a;-1,0 e 192 80 a;-1,0 +e 147 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/05_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/05_gumtree-hybrid_expected.lg index 1b1f5340d..6ef5aa0f1 100644 --- a/src/test/resources/tree-diffing/05_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/05_gumtree-hybrid_expected.lg @@ -2,5 +2,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 1, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line e 136 80 b;0,-1 -e 211 136 b;0,-1 e 211 80 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/05_gumtree_expected.lg b/src/test/resources/tree-diffing/05_gumtree_expected.lg index 1b1f5340d..6ef5aa0f1 100644 --- a/src/test/resources/tree-diffing/05_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/05_gumtree_expected.lg @@ -2,5 +2,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 1, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line e 136 80 b;0,-1 -e 211 136 b;0,-1 e 211 80 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/06_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/06_gumtree-hybrid_expected.lg index ed9ff5794..cc0444fdb 100644 --- a/src/test/resources/tree-diffing/06_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/06_gumtree-hybrid_expected.lg @@ -6,5 +6,5 @@ v 322 ADD;ELIF;(old: -1, diff: 4, new: 3);(old: -1, diff: 4, new: 5);B;#elif B e 144 80 ba;0,0 e 211 144 ba;0,0 e 275 144 b;1,-1 -e 275 322 a;-1,0 e 322 144 a;-1,1 +e 275 322 a;-1,0 diff --git a/src/test/resources/tree-diffing/06_gumtree_expected.lg b/src/test/resources/tree-diffing/06_gumtree_expected.lg index ed9ff5794..cc0444fdb 100644 --- a/src/test/resources/tree-diffing/06_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/06_gumtree_expected.lg @@ -6,5 +6,5 @@ v 322 ADD;ELIF;(old: -1, diff: 4, new: 3);(old: -1, diff: 4, new: 5);B;#elif B e 144 80 ba;0,0 e 211 144 ba;0,0 e 275 144 b;1,-1 -e 275 322 a;-1,0 e 322 144 a;-1,1 +e 275 322 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/07_change-distiller-theta_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_change-distiller-theta_expected.lg +++ b/src/test/resources/tree-diffing/07_change-distiller-theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_change-distiller_expected.lg b/src/test/resources/tree-diffing/07_change-distiller_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/07_change-distiller_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/07_classic-gumtree-theta_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_classic-gumtree-theta_expected.lg +++ b/src/test/resources/tree-diffing/07_classic-gumtree-theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/07_gumtree-hybrid-id_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree-hybrid-id_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree-hybrid-id_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/07_gumtree-hybrid_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree-hybrid_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/07_gumtree-partition-id_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree-partition-id_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree-partition-id_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/07_gumtree-simple-id-theta_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree-simple-id-theta_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree-simple-id-theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/07_gumtree-simple-id_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree-simple-id_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree-simple-id_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/07_gumtree-simple_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree-simple_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree-simple_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_gumtree_expected.lg b/src/test/resources/tree-diffing/07_gumtree_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/07_gumtree_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/07_longestCommonSequence_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/07_longestCommonSequence_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_theta_expected.lg b/src/test/resources/tree-diffing/07_theta_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_theta_expected.lg +++ b/src/test/resources/tree-diffing/07_theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/07_xy_expected.lg b/src/test/resources/tree-diffing/07_xy_expected.lg index aa4fcbe2b..a07a12b73 100644 --- a/src/test/resources/tree-diffing/07_xy_expected.lg +++ b/src/test/resources/tree-diffing/07_xy_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/08_change-distiller-theta_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_change-distiller-theta_expected.lg +++ b/src/test/resources/tree-diffing/08_change-distiller-theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_change-distiller_expected.lg b/src/test/resources/tree-diffing/08_change-distiller_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/08_change-distiller_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/08_classic-gumtree-theta_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_classic-gumtree-theta_expected.lg +++ b/src/test/resources/tree-diffing/08_classic-gumtree-theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/08_gumtree-hybrid-id_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree-hybrid-id_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree-hybrid-id_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/08_gumtree-hybrid_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree-hybrid_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/08_gumtree-partition-id_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree-partition-id_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree-partition-id_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/08_gumtree-simple-id-theta_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree-simple-id-theta_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree-simple-id-theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/08_gumtree-simple-id_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree-simple-id_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree-simple-id_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/08_gumtree-simple_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree-simple_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree-simple_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_gumtree_expected.lg b/src/test/resources/tree-diffing/08_gumtree_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/08_gumtree_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/08_longestCommonSequence_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/08_longestCommonSequence_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_theta_expected.lg b/src/test/resources/tree-diffing/08_theta_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_theta_expected.lg +++ b/src/test/resources/tree-diffing/08_theta_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/08_xy_expected.lg b/src/test/resources/tree-diffing/08_xy_expected.lg index 3303e4528..c87160f14 100644 --- a/src/test/resources/tree-diffing/08_xy_expected.lg +++ b/src/test/resources/tree-diffing/08_xy_expected.lg @@ -5,8 +5,8 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A e 136 80 b;0,-1 +e 320 80 a;-1,0 e 200 136 b;0,-1 e 275 200 b;0,-1 -e 275 384 a;-1,0 -e 320 80 a;-1,0 e 384 320 a;-1,0 +e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/09_change-distiller-theta_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_change-distiller-theta_expected.lg +++ b/src/test/resources/tree-diffing/09_change-distiller-theta_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_change-distiller_expected.lg b/src/test/resources/tree-diffing/09_change-distiller_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/09_change-distiller_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/09_classic-gumtree-theta_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_classic-gumtree-theta_expected.lg +++ b/src/test/resources/tree-diffing/09_classic-gumtree-theta_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/09_gumtree-hybrid-id_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree-hybrid-id_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree-hybrid-id_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/09_gumtree-hybrid_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree-hybrid_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/09_gumtree-partition-id_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree-partition-id_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree-partition-id_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/09_gumtree-simple-id-theta_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree-simple-id-theta_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree-simple-id-theta_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/09_gumtree-simple-id_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree-simple-id_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree-simple-id_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/09_gumtree-simple_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree-simple_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree-simple_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_gumtree_expected.lg b/src/test/resources/tree-diffing/09_gumtree_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/09_gumtree_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/09_longestCommonSequence_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/09_longestCommonSequence_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_theta_expected.lg b/src/test/resources/tree-diffing/09_theta_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_theta_expected.lg +++ b/src/test/resources/tree-diffing/09_theta_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/09_xy_expected.lg b/src/test/resources/tree-diffing/09_xy_expected.lg index 30efe1ca9..00f00bf4e 100644 --- a/src/test/resources/tree-diffing/09_xy_expected.lg +++ b/src/test/resources/tree-diffing/09_xy_expected.lg @@ -9,15 +9,15 @@ v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 144 640 a;-1,0 +e 640 80 a;-1,0 e 211 144 ba;0,0 e 275 144 ba;1,1 e 339 144 ba;2,2 e 392 144 b;3,-1 -e 467 392 b;0,-1 e 467 144 a;-1,3 -e 531 392 b;1,-1 e 531 144 a;-1,4 -e 595 392 b;2,-1 e 595 144 a;-1,5 -e 640 80 a;-1,0 +e 467 392 b;0,-1 +e 531 392 b;1,-1 +e 595 392 b;2,-1 +e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/10_change-distiller_expected.lg b/src/test/resources/tree-diffing/10_change-distiller_expected.lg index bb645cdad..0ae0500bc 100644 --- a/src/test/resources/tree-diffing/10_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/10_change-distiller_expected.lg @@ -4,6 +4,6 @@ v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;123 v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;123 e 144 80 ba;0,0 +e 323 144 a;-1,0 e 211 144 ba;0,1 e 267 144 b;1,-1 -e 323 144 a;-1,0 diff --git a/src/test/resources/tree-diffing/10_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/10_gumtree-hybrid_expected.lg index bb645cdad..0ae0500bc 100644 --- a/src/test/resources/tree-diffing/10_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/10_gumtree-hybrid_expected.lg @@ -4,6 +4,6 @@ v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;123 v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;123 e 144 80 ba;0,0 +e 323 144 a;-1,0 e 211 144 ba;0,1 e 267 144 b;1,-1 -e 323 144 a;-1,0 diff --git a/src/test/resources/tree-diffing/10_gumtree_expected.lg b/src/test/resources/tree-diffing/10_gumtree_expected.lg index bb645cdad..0ae0500bc 100644 --- a/src/test/resources/tree-diffing/10_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/10_gumtree_expected.lg @@ -4,6 +4,6 @@ v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;123 v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;123 e 144 80 ba;0,0 +e 323 144 a;-1,0 e 211 144 ba;0,1 e 267 144 b;1,-1 -e 323 144 a;-1,0 diff --git a/src/test/resources/tree-diffing/11_gumtree_expected.lg b/src/test/resources/tree-diffing/11_gumtree_expected.lg index 2a31da89b..dd58e9c3b 100644 --- a/src/test/resources/tree-diffing/11_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/11_gumtree_expected.lg @@ -5,5 +5,5 @@ v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;3 v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;B e 147 80 ba;0,0 e 203 80 b;1,-1 -e 275 80 ba;2,2 e 323 80 a;-1,1 +e 275 80 ba;2,2 From fc22f32e9cab8233acc24d089f17c60812ea0293 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Mon, 11 Aug 2025 12:48:25 +0200 Subject: [PATCH 02/17] refactor: refactor the time dependent fields in `DiffNode` This pattern should be more understandable than the previous array based implementation. Furthermore, it is now much easier to add new time dependent fields. --- .../variation/diff/DiffNode.java | 122 ++++++++++-------- 1 file changed, 69 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java index ee73be7da..7b8e0eff6 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java @@ -13,7 +13,6 @@ import org.variantsync.diffdetective.variation.tree.VariationNode; import org.variantsync.functjonal.Cast; -import java.lang.reflect.Array; import java.util.*; import java.util.function.Function; import java.util.stream.Stream; @@ -52,31 +51,51 @@ public class DiffNode implements HasNodeType { private Node featureMapping; /** - * The parents {@link DiffNode} before and after the edit. - * This array has to be indexed by {@code Time.ordinal()} - * - * Invariant: Iff {@code getParent(time) != null} then - * {@code getParent(time).getChildOrder(time).contains(this)}. - */ - private DiffNode[] parents = Cast.unchecked(Array.newInstance(DiffNode.class, 2)); + * Bundles all the state that may be different before and after an edit. + * @see at + */ + private static class TimeDependentState { + /** + * The parents {@link DiffNode} before and after the edit. + * This array has to be indexed by {@code Time.ordinal()} + * + * Invariant: Iff {@code getParent(time) != null} then + * {@code getParent(time).getChildOrder(time).contains(this)}. + */ + public DiffNode parent; + + /** + * The children before and after the edit. + * This array has to be indexed by {@code Time.ordinal()} + * + * Invariant: Iff {@code getChildOrder(time).contains(child)} then + * {@code child.getParent(time) == this}. + */ + public List> children; + + /** + * Cache for before and after projections. + * It stores the projection node at each time so that only one instance of {@link Projection} + * per {@link Time} is ever created. This array has to be indexed by {@code Time.ordinal()} + * + *

This field is required to allow identity tests of {@link Projection}s with {@code ==}. + */ + public Projection projection; + + public TimeDependentState() { + parent = null; + children = null; + children = new ArrayList<>(); + projection = null; + } + } - /** - * The children before and after the edit. - * This array has to be indexed by {@code Time.ordinal()} - * - * Invariant: Iff {@code getChildOrder(time).contains(child)} then - * {@code child.getParent(time) == this}. - */ - private final List>[] children = Cast.unchecked(Array.newInstance(List.class, 2)); + private final TimeDependentState stateBefore = new TimeDependentState(); + private final TimeDependentState stateAfter = new TimeDependentState(); - /** - * Cache for before and after projections. - * It stores the projection node at each time so that only one instance of {@link Projection} - * per {@link Time} is ever created. This array has to be indexed by {@code Time.ordinal()} - * - *

This field is required to allow identity tests of {@link Projection}s with {@code ==}. - */ - private Projection[] projections = Cast.unchecked(Array.newInstance(Projection.class, 2)); + private TimeDependentState at(Time time) { + return time.match(stateBefore, stateAfter); + } /** * Creates a DiffNode with the given parameters. @@ -104,9 +123,6 @@ public DiffNode(DiffType diffType, NodeType nodeType, public DiffNode(DiffType diffType, DiffLineNumber fromLines, DiffLineNumber toLines, Node featureMapping, VariationLabel label) { - children[BEFORE.ordinal()] = new ArrayList<>(); - children[AFTER.ordinal()] = new ArrayList<>(); - this.diffType = diffType; this.label = label; this.from = fromLines; @@ -267,7 +283,7 @@ public void drop(Time time) { * Returns -1 if the given node is not a child of this node. */ public int indexOfChild(final DiffNode child, Time time) { - return children[time.ordinal()].indexOf(child); + return at(time).children.indexOf(child); } /** @@ -278,8 +294,8 @@ public void insertChild(final DiffNode child, int index, Time time) { Assert.assertFalse(isChild(child, time), () -> "Given child " + child + " already has a " + time + " parent (" + child.getParent(time) + ")!"); - children[time.ordinal()].add(index, child); - child.parents[time.ordinal()] = this; + at(time).children.add(index, child); + child.at(time).parent = this; } /** @@ -291,8 +307,8 @@ public void addChild(final DiffNode child, Time time) { Assert.assertFalse(isChild(child, time), () -> "Given child " + child + " already has a " + time + " parent (" + child.getParent(time) + ")!"); - children[time.ordinal()].add(child); - child.parents[time.ordinal()] = this; + at(time).children.add(child); + child.at(time).parent = this; } /** @@ -315,8 +331,8 @@ public void addChildren(final Collection> children, Time time) { public void removeChild(final DiffNode child, Time time) { Assert.assertTrue(isChild(child, time)); - child.parents[time.ordinal()] = null; - children[time.ordinal()].remove(child); + child.at(time).parent = null; + at(time).children.remove(child); } /** @@ -341,12 +357,12 @@ public void removeChildren(final Collection> childrenToRemove) { * @return All removed children. */ public List> removeChildren(Time time) { - for (var child : children[time.ordinal()]) { - child.parents[time.ordinal()] = null; + for (var child : at(time).children) { + child.at(time).parent = null; } - final List> orphans = children[time.ordinal()]; - children[time.ordinal()] = new ArrayList<>(); + final List> orphans = at(time).children; + at(time).children = new ArrayList<>(); return orphans; } @@ -387,10 +403,10 @@ public DiffNode split(Time time) { getParent(time).replaceChild(this, other, time); // Preserve the projection by changing its `backingNode` to `other`. - if (this.projections[time.ordinal()] != null) { - other.projections[time.ordinal()] = this.projections[time.ordinal()]; - this.projections[time.ordinal()] = null; - other.projections[time.ordinal()].backingNode = other; + if (this.at(time).projection != null) { + other.at(time).projection = this.at(time).projection; + this.at(time).projection = null; + other.at(time).projection.backingNode = other; } return other; @@ -409,11 +425,11 @@ public void replaceChild(DiffNode oldChild, DiffNode newChild, Time time) Assert.assertNull(newChild.getParent(time)); Assert.assertTrue(newChild.getDiffType().existsAtTime(time)); - for (ListIterator> it = children[time.ordinal()].listIterator(); it.hasNext(); ) { + for (ListIterator> it = at(time).children.listIterator(); it.hasNext(); ) { if (it.next() == oldChild) { it.set(newChild); - newChild.parents[time.ordinal()] = oldChild.parents[time.ordinal()]; - oldChild.parents[time.ordinal()] = null; + newChild.at(time).parent = oldChild.at(time).parent; + oldChild.at(time).parent = null; break; } } @@ -423,7 +439,7 @@ public void replaceChild(DiffNode oldChild, DiffNode newChild, Time time) * Returns the parent of this node before or after the edit. */ public DiffNode getParent(Time time) { - return parents[time.ordinal()]; + return at(time).parent; } /** @@ -503,7 +519,7 @@ public void setFormula(Node featureMapping) { * Returns the order of the children at {@code time}. */ public List> getChildOrder(Time time) { - return Collections.unmodifiableList(children[time.ordinal()]); + return Collections.unmodifiableList(at(time).children); } /** @@ -513,8 +529,8 @@ public List> getChildOrder(Time time) { */ public Stream> getAllChildrenStream() { return Stream.concat( - children[BEFORE.ordinal()].stream(), - children[AFTER.ordinal()].stream().filter(child -> child.getParent(BEFORE) != this) + at(BEFORE).children.stream(), + at(AFTER).children.stream().filter(child -> child.getParent(BEFORE) != this) ); }; @@ -578,7 +594,7 @@ public boolean isChild(DiffNode child, Time time) { * Returns true iff this node has no children. */ public boolean isLeaf() { - return children[BEFORE.ordinal()].isEmpty() && children[AFTER.ordinal()].isEmpty(); + return at(BEFORE).children.isEmpty() && at(AFTER).children.isEmpty(); } /** @@ -750,11 +766,11 @@ public void assertConsistency() { public Projection projection(Time time) { Assert.assertTrue(getDiffType().existsAtTime(time)); - if (projections[time.ordinal()] == null) { - projections[time.ordinal()] = new Projection<>(this, time); + if (at(time).projection == null) { + at(time).projection = new Projection<>(this, time); } - return projections[time.ordinal()]; + return at(time).projection; } /** From d5e81415de10ea770caa1d235a0cbbbd9862e61f Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Mon, 11 Aug 2025 14:47:30 +0200 Subject: [PATCH 03/17] refactor: remove state cleanup in the diff parser This is not necessary because the state is (and must be) only used for parsing one variation diff. Furthermore, if this would be needed, it would be buggy. In particular, this cleanup code is not executed in case an exception is thrown. --- .../variation/diff/parse/VariationDiffParser.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java b/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java index 41bb68f44..fc7a42b79 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java @@ -288,11 +288,6 @@ private VariationDiff parse( ); } - // Cleanup state - beforeStack.clear(); - afterStack.clear(); - lastArtifact = null; - return new VariationDiff<>(root); } From ef6a1dc314392a61c6869400a910fb2b5b650642 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Mon, 11 Aug 2025 15:01:45 +0200 Subject: [PATCH 04/17] refactor: use a switch for `GraphFormat` This version will emit an error if `GraphFormat` is changed and doesn't require an explicit exception for missing cases. --- .../diff/serialize/LineGraphImport.java | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java index 86686b6ed..e91593a12 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java @@ -133,34 +133,33 @@ private static VariationDiff parseVariationDiff(final String lin } // Handle trees and graphs differently - if (options.graphFormat() == GraphFormat.DIFFGRAPH) { - return DiffGraph.fromNodes(diffNodeList, variationDiffSource); - } else if (options.graphFormat() == GraphFormat.VARIATION_DIFF) { - // If you should interpret the input data as VariationDiffs, always expect a root to be present. Parse all nodes (v) to a list of nodes. Search for the root. Assert that there is exactly one root. - DiffNode root = null; - for (final DiffNode v : diffNodeList) { - if (v.isRoot()) { - // v is root candidate - if (root != null) { - throw new RuntimeException("Not a VariationDiff: Got more than one root! Got \"" + root + "\" and \"" + v + "\"!"); - } - if (v.getNodeType() == NodeType.IF) { - root = v; - } else { - throw new RuntimeException("Not a VariationDiff but a DiffGraph: The node \"" + v + "\" is not labeled as IF but has no parents!"); + return switch (options.graphFormat()) { + case DIFFGRAPH: + yield DiffGraph.fromNodes(diffNodeList, variationDiffSource); + case VARIATION_DIFF: + // If you should interpret the input data as VariationDiffs, always expect a root to be present. Parse all nodes (v) to a list of nodes. Search for the root. Assert that there is exactly one root. + DiffNode root = null; + for (final DiffNode v : diffNodeList) { + if (v.isRoot()) { + // v is root candidate + if (root != null) { + throw new RuntimeException("Not a VariationDiff: Got more than one root! Got \"" + root + "\" and \"" + v + "\"!"); + } + if (v.getNodeType() == NodeType.IF) { + root = v; + } else { + throw new RuntimeException("Not a VariationDiff but a DiffGraph: The node \"" + v + "\" is not labeled as IF but has no parents!"); + } } } - } - if (root == null) { - throw new RuntimeException("Not a VariationDiff but a DiffGraph: No root found!"); - } + if (root == null) { + throw new RuntimeException("Not a VariationDiff but a DiffGraph: No root found!"); + } -// countRootTypes.merge(root.getNodeType(), 1, Integer::sum); + // countRootTypes.merge(root.getNodeType(), 1, Integer::sum); - return new VariationDiff<>(root, variationDiffSource); - } else { - throw new RuntimeException("Unsupported GraphFormat"); - } + yield new VariationDiff<>(root, variationDiffSource); + }; } } From 9cc672e90ca13bad8afb4c50e828d8ec1ada6d72 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Mon, 29 Sep 2025 10:09:01 +0200 Subject: [PATCH 05/17] test: create tests for `GumTreeDiff.improveMatching` --- .../gumtree/VariationDiffAdapter.java | 1 + .../gumtree/VariationTreeAdapter.java | 15 +++-- src/test/java/TreeDiffingTest.java | 56 ++++++++++++++----- src/test/resources/tree-diffing/.gitignore | 2 +- .../01_gumtree-hybrid_expected.lg | 0 .../01_gumtree_expected.lg | 0 .../02_gumtree-hybrid_expected.lg | 0 .../02_gumtree_expected.lg | 0 .../03_gumtree-hybrid_expected.lg | 0 .../03_gumtree_expected.lg | 0 .../04_gumtree-hybrid_expected.lg | 0 .../04_gumtree_expected.lg | 0 .../05_gumtree-hybrid_expected.lg | 0 .../05_gumtree_expected.lg | 0 .../06_gumtree-hybrid_expected.lg | 0 .../06_gumtree_expected.lg | 0 .../07_change-distiller-theta_expected.lg | 0 .../07_change-distiller_expected.lg | 0 .../07_classic-gumtree-theta_expected.lg | 0 .../07_gumtree-hybrid-id_expected.lg | 0 .../07_gumtree-hybrid_expected.lg | 0 .../07_gumtree-partition-id_expected.lg | 0 .../07_gumtree-simple-id-theta_expected.lg | 0 .../07_gumtree-simple-id_expected.lg | 0 .../07_gumtree-simple_expected.lg | 0 .../07_gumtree_expected.lg | 0 .../07_longestCommonSequence_expected.lg | 0 .../{ => createMatching}/07_theta_expected.lg | 0 .../{ => createMatching}/07_xy_expected.lg | 0 .../08_change-distiller-theta_expected.lg | 0 .../08_change-distiller_expected.lg | 0 .../08_classic-gumtree-theta_expected.lg | 0 .../08_gumtree-hybrid-id_expected.lg | 0 .../08_gumtree-hybrid_expected.lg | 0 .../08_gumtree-partition-id_expected.lg | 0 .../08_gumtree-simple-id-theta_expected.lg | 0 .../08_gumtree-simple-id_expected.lg | 0 .../08_gumtree-simple_expected.lg | 0 .../08_gumtree_expected.lg | 0 .../08_longestCommonSequence_expected.lg | 0 .../{ => createMatching}/08_theta_expected.lg | 0 .../{ => createMatching}/08_xy_expected.lg | 0 .../09_change-distiller-theta_expected.lg | 0 .../09_change-distiller_expected.lg | 0 .../09_classic-gumtree-theta_expected.lg | 0 .../09_gumtree-hybrid-id_expected.lg | 0 .../09_gumtree-hybrid_expected.lg | 0 .../09_gumtree-partition-id_expected.lg | 0 .../09_gumtree-simple-id-theta_expected.lg | 0 .../09_gumtree-simple-id_expected.lg | 0 .../09_gumtree-simple_expected.lg | 0 .../09_gumtree_expected.lg | 0 .../09_longestCommonSequence_expected.lg | 0 .../{ => createMatching}/09_theta_expected.lg | 0 .../{ => createMatching}/09_xy_expected.lg | 0 .../10_change-distiller_expected.lg | 0 .../10_gumtree-hybrid_expected.lg | 0 .../10_gumtree_expected.lg | 0 .../11_gumtree_expected.lg | 0 .../01_change-distiller_expected.lg | 5 ++ .../01_gumtree-hybrid-id_expected.lg | 5 ++ .../01_gumtree-hybrid_expected.lg | 5 ++ .../01_gumtree-partition-id_expected.lg | 5 ++ .../01_gumtree-simple-id_expected.lg | 5 ++ .../01_gumtree-simple_expected.lg | 5 ++ .../improveMatching/01_gumtree_expected.lg | 5 ++ .../01_longestCommonSequence_expected.lg | 5 ++ .../improveMatching/01_xy_expected.lg | 5 ++ .../02_change-distiller_expected.lg | 5 ++ .../02_gumtree-hybrid-id_expected.lg | 5 ++ .../02_gumtree-hybrid_expected.lg | 5 ++ .../02_gumtree-partition-id_expected.lg | 5 ++ .../02_gumtree-simple-id_expected.lg | 5 ++ .../02_gumtree-simple_expected.lg | 5 ++ .../improveMatching/02_gumtree_expected.lg | 5 ++ .../02_longestCommonSequence_expected.lg | 5 ++ .../improveMatching/02_xy_expected.lg | 5 ++ .../03_change-distiller_expected.lg | 5 ++ .../03_gumtree-hybrid-id_expected.lg | 5 ++ .../03_gumtree-hybrid_expected.lg | 5 ++ .../03_gumtree-partition-id_expected.lg | 5 ++ .../03_gumtree-simple-id_expected.lg | 5 ++ .../03_gumtree-simple_expected.lg | 5 ++ .../improveMatching/03_gumtree_expected.lg | 5 ++ .../03_longestCommonSequence_expected.lg | 5 ++ .../improveMatching/03_xy_expected.lg | 5 ++ .../04_change-distiller_expected.lg | 6 ++ .../04_gumtree-hybrid-id_expected.lg | 6 ++ .../04_gumtree-hybrid_expected.lg | 6 ++ .../04_gumtree-partition-id_expected.lg | 6 ++ .../04_gumtree-simple-id_expected.lg | 6 ++ .../04_gumtree-simple_expected.lg | 6 ++ .../improveMatching/04_gumtree_expected.lg | 6 ++ .../04_longestCommonSequence_expected.lg | 6 ++ .../improveMatching/04_xy_expected.lg | 6 ++ .../05_change-distiller_expected.lg | 6 ++ .../05_gumtree-hybrid-id_expected.lg | 6 ++ .../05_gumtree-hybrid_expected.lg | 6 ++ .../05_gumtree-partition-id_expected.lg | 6 ++ .../05_gumtree-simple-id_expected.lg | 6 ++ .../05_gumtree-simple_expected.lg | 6 ++ .../improveMatching/05_gumtree_expected.lg | 6 ++ .../05_longestCommonSequence_expected.lg | 6 ++ .../improveMatching/05_xy_expected.lg | 6 ++ .../06_change-distiller_expected.lg | 10 ++++ .../06_gumtree-hybrid-id_expected.lg | 10 ++++ .../06_gumtree-hybrid_expected.lg | 10 ++++ .../06_gumtree-partition-id_expected.lg | 10 ++++ .../06_gumtree-simple-id_expected.lg | 10 ++++ .../06_gumtree-simple_expected.lg | 10 ++++ .../improveMatching/06_gumtree_expected.lg | 10 ++++ .../06_longestCommonSequence_expected.lg | 10 ++++ .../improveMatching/06_xy_expected.lg | 10 ++++ .../07_change-distiller_expected.lg | 12 ++++ .../07_gumtree-hybrid-id_expected.lg | 12 ++++ .../07_gumtree-hybrid_expected.lg | 12 ++++ .../07_gumtree-partition-id_expected.lg | 12 ++++ .../07_gumtree-simple-id_expected.lg | 12 ++++ .../07_gumtree-simple_expected.lg | 12 ++++ .../improveMatching/07_gumtree_expected.lg | 12 ++++ .../07_longestCommonSequence_expected.lg | 11 ++++ .../improveMatching/07_xy_expected.lg | 12 ++++ .../08_change-distiller_expected.lg | 12 ++++ .../08_gumtree-hybrid-id_expected.lg | 12 ++++ .../08_gumtree-hybrid_expected.lg | 12 ++++ .../08_gumtree-partition-id_expected.lg | 12 ++++ .../08_gumtree-simple-id_expected.lg | 12 ++++ .../08_gumtree-simple_expected.lg | 12 ++++ .../improveMatching/08_gumtree_expected.lg | 12 ++++ .../08_longestCommonSequence_expected.lg | 11 ++++ .../improveMatching/08_xy_expected.lg | 12 ++++ .../09_change-distiller_expected.lg | 23 ++++++++ .../09_gumtree-hybrid-id_expected.lg | 27 +++++++++ .../09_gumtree-hybrid_expected.lg | 27 +++++++++ .../09_gumtree-partition-id_expected.lg | 27 +++++++++ .../09_gumtree-simple-id_expected.lg | 27 +++++++++ .../09_gumtree-simple_expected.lg | 27 +++++++++ .../improveMatching/09_gumtree_expected.lg | 27 +++++++++ .../09_longestCommonSequence_expected.lg | 23 ++++++++ .../improveMatching/09_xy_expected.lg | 27 +++++++++ .../10_change-distiller_expected.lg | 8 +++ .../10_gumtree-hybrid-id_expected.lg | 9 +++ .../10_gumtree-hybrid_expected.lg | 9 +++ .../10_gumtree-partition-id_expected.lg | 9 +++ .../10_gumtree-simple-id_expected.lg | 9 +++ .../10_gumtree-simple_expected.lg | 9 +++ .../improveMatching/10_gumtree_expected.lg | 9 +++ .../10_longestCommonSequence_expected.lg | 9 +++ .../improveMatching/10_xy_expected.lg | 9 +++ .../11_change-distiller_expected.lg | 9 +++ .../11_gumtree-hybrid-id_expected.lg | 9 +++ .../11_gumtree-hybrid_expected.lg | 9 +++ .../11_gumtree-partition-id_expected.lg | 9 +++ .../11_gumtree-simple-id_expected.lg | 9 +++ .../11_gumtree-simple_expected.lg | 9 +++ .../improveMatching/11_gumtree_expected.lg | 9 +++ .../11_longestCommonSequence_expected.lg | 9 +++ .../improveMatching/11_xy_expected.lg | 9 +++ 158 files changed, 995 insertions(+), 22 deletions(-) rename src/test/resources/tree-diffing/{ => createMatching}/01_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/01_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/02_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/02_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/03_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/03_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/04_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/04_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/05_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/05_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/06_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/06_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_change-distiller-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_change-distiller_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_classic-gumtree-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree-hybrid-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree-partition-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree-simple-id-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree-simple-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree-simple_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_longestCommonSequence_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/07_xy_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_change-distiller-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_change-distiller_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_classic-gumtree-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree-hybrid-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree-partition-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree-simple-id-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree-simple-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree-simple_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_longestCommonSequence_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/08_xy_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_change-distiller-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_change-distiller_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_classic-gumtree-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree-hybrid-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree-partition-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree-simple-id-theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree-simple-id_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree-simple_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_longestCommonSequence_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_theta_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/09_xy_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/10_change-distiller_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/10_gumtree-hybrid_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/10_gumtree_expected.lg (100%) rename src/test/resources/tree-diffing/{ => createMatching}/11_gumtree_expected.lg (100%) create mode 100644 src/test/resources/tree-diffing/improveMatching/01_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/01_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/02_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/03_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/04_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/05_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/07_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/08_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/09_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/10_xy_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_change-distiller_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_gumtree-partition-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_gumtree-simple-id_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_gumtree-simple_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_gumtree_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_longestCommonSequence_expected.lg create mode 100644 src/test/resources/tree-diffing/improveMatching/11_xy_expected.lg diff --git a/src/main/java/org/variantsync/diffdetective/gumtree/VariationDiffAdapter.java b/src/main/java/org/variantsync/diffdetective/gumtree/VariationDiffAdapter.java index b05d8b6aa..d0fbb8728 100644 --- a/src/main/java/org/variantsync/diffdetective/gumtree/VariationDiffAdapter.java +++ b/src/main/java/org/variantsync/diffdetective/gumtree/VariationDiffAdapter.java @@ -22,6 +22,7 @@ public VariationDiffAdapter(Projection node) { super(node); } + @Override protected VariationTreeAdapter newInstance(VariationNode node) { return new VariationDiffAdapter<>(Cast.unchecked(node)); } diff --git a/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java b/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java index cf85482da..15fef9a47 100644 --- a/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java +++ b/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.stream.Collectors; @@ -24,9 +25,11 @@ public class VariationTreeAdapter extends AbstractTree { private String cachedLabel; private VariationNode backingNode; + private LinkedHashMap metadata; public VariationTreeAdapter(VariationNode node) { this.backingNode = node; + this.metadata = new LinkedHashMap<>(); if (backingNode.isConditionalAnnotation()) { cachedLabel = backingNode.getFormula().toString(); @@ -41,7 +44,7 @@ public VariationTreeAdapter(VariationNode node) { setChildren(children); } - protected VariationTreeAdapter newInstance(VariationNode node) { + protected VariationTreeAdapter newInstance(VariationNode node) { return new VariationTreeAdapter<>(node); } @@ -65,12 +68,12 @@ public int getLength() { @Override public Iterator> getMetadata() { - throw new UnsupportedOperationException(); + return metadata.entrySet().iterator(); } @Override - public Object getMetadata(String arg0) { - throw new UnsupportedOperationException(); + public Object getMetadata(String key) { + return metadata.get(key); } /** @@ -97,8 +100,8 @@ public void setLength(int length) { } @Override - public Object setMetadata(String name, Object value) { - throw new UnsupportedOperationException(); + public Object setMetadata(String key, Object value) { + return metadata.put(key, value); } @Override diff --git a/src/test/java/TreeDiffingTest.java b/src/test/java/TreeDiffingTest.java index c4c0dad7f..cd8a87239 100644 --- a/src/test/java/TreeDiffingTest.java +++ b/src/test/java/TreeDiffingTest.java @@ -1,12 +1,13 @@ import com.github.gumtreediff.matchers.Matcher; import com.github.gumtreediff.matchers.Matchers; import org.apache.commons.io.IOUtils; +import org.eclipse.jgit.diff.DiffAlgorithm; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.variantsync.diffdetective.diff.result.DiffParseException; -import org.variantsync.diffdetective.feature.cpp.CPPAnnotationParser; import org.variantsync.diffdetective.util.IO; import org.variantsync.diffdetective.variation.DiffLinesLabel; +import org.variantsync.diffdetective.variation.diff.DiffNode; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.construction.GumTreeDiff; import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions; @@ -17,6 +18,7 @@ import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.ChildOrderEdgeFormat; import org.variantsync.diffdetective.variation.diff.serialize.edgeformat.DefaultEdgeLabelFormat; import org.variantsync.diffdetective.variation.diff.serialize.nodeformat.FullNodeFormat; +import org.variantsync.diffdetective.variation.diff.source.VariationDiffSource; import org.variantsync.diffdetective.variation.tree.VariationTree; import org.variantsync.diffdetective.variation.tree.source.LocalFileSource; @@ -33,7 +35,7 @@ public class TreeDiffingTest { private final static Path testDir = Constants.RESOURCE_DIR.resolve("tree-diffing"); private static Pattern expectedFileNameRegex = Pattern.compile("([^_]+)_([^_]+)_expected.lg"); - private static record TestCase(String basename, String matcherName, Matcher matcher) { + private static record TestCase(String expectedDir, String basename, String matcherName, Matcher matcher) { public Path beforeEdit() { return testDir.resolve(String.format("%s.before", basename())); } @@ -43,21 +45,21 @@ public Path afterEdit() { } public Path actual() { - return testDir.resolve(String.format("%s_%s_actual.lg", basename(), matcherName())); + return testDir.resolve(expectedDir).resolve(String.format("%s_%s_actual.lg", basename(), matcherName())); } public Path expected() { - return testDir.resolve(String.format("%s_%s_expected.lg", basename(), matcherName())); + return testDir.resolve(expectedDir).resolve(String.format("%s_%s_expected.lg", basename(), matcherName())); } public Path visualisation() { - return testDir.resolve("tex").resolve(String.format("%s_%s.tex", basename(), matcherName())); + return testDir.resolve(expectedDir).resolve("tex").resolve(String.format("%s_%s.tex", basename(), matcherName())); } } - private static Stream testCases() throws IOException { + private static Stream testCases(String expectedDir) throws IOException { return Files - .list(testDir) + .list(testDir.resolve(expectedDir)) .mapMulti(((path, result) -> { String filename = path.getFileName().toString(); var filenameMatcher = expectedFileNameRegex.matcher(filename); @@ -65,6 +67,7 @@ private static Stream testCases() throws IOException { var treeMatcherName = filenameMatcher.group(2); result.accept(new TestCase( + expectedDir, filenameMatcher.group(1), treeMatcherName, Matchers.getInstance().getMatcher(treeMatcherName)) @@ -73,14 +76,40 @@ private static Stream testCases() throws IOException { })); } + private static Stream createMatchingTestCases() throws IOException { + return testCases("createMatching"); + } + @ParameterizedTest - @MethodSource("testCases") - public void testCase(TestCase testCase) throws IOException, DiffParseException { + @MethodSource("createMatchingTestCases") + public void createMatchingTestCase(TestCase testCase) throws IOException, DiffParseException { VariationTree beforeEdit = parseVariationTree(testCase.beforeEdit()); VariationTree afterEdit = parseVariationTree(testCase.afterEdit()); + assertExpectedVariationDiffs(testCase, GumTreeDiff.diffUsingMatching(beforeEdit, afterEdit)); + } + + private static Stream improveMatchingTestCases() throws IOException { + return testCases("improveMatching"); + } - VariationDiff variationDiff = GumTreeDiff.diffUsingMatching(beforeEdit, afterEdit); + @ParameterizedTest + @MethodSource("improveMatchingTestCases") + public void improveMatchingTestCase(TestCase testCase) throws IOException, DiffParseException { + VariationDiff variationDiff = + VariationDiff.fromFiles( + testCase.beforeEdit(), + testCase.afterEdit(), + DiffAlgorithm.SupportedAlgorithm.MYERS, + VariationDiffParseOptions.Default + ); + + DiffNode improvedDiffNode = GumTreeDiff.improveMatching(variationDiff.getRoot(), testCase.matcher()); + VariationDiff improvedVariationDiff = new VariationDiff<>(improvedDiffNode, VariationDiffSource.Unknown); + + assertExpectedVariationDiffs(testCase, improvedVariationDiff); + } + private static void assertExpectedVariationDiffs(TestCase testCase, VariationDiff variationDiff) throws IOException { try (var output = IO.newBufferedOutputStream(testCase.actual())) { new LineGraphExporter<>(new Format<>(new FullNodeFormat(), new ChildOrderEdgeFormat<>())) .exportVariationDiff(variationDiff, output); @@ -111,15 +140,12 @@ public void testCase(TestCase testCase) throws IOException, DiffParseException { } } - public VariationTree parseVariationTree(Path filename) throws IOException, DiffParseException { + private static VariationTree parseVariationTree(Path filename) throws IOException, DiffParseException { try (var file = Files.newBufferedReader(filename)) { return new VariationTree<>( VariationDiffParser.createVariationTree( file, - new VariationDiffParseOptions( - new CPPAnnotationParser(), - false, - false) + VariationDiffParseOptions.Default ).getRoot().projection(BEFORE).toVariationTree(), new LocalFileSource(filename) ); diff --git a/src/test/resources/tree-diffing/.gitignore b/src/test/resources/tree-diffing/.gitignore index 0745fb4f5..844a6fbc3 100644 --- a/src/test/resources/tree-diffing/.gitignore +++ b/src/test/resources/tree-diffing/.gitignore @@ -1,2 +1,2 @@ -/tex/ +tex/ *_actual.lg diff --git a/src/test/resources/tree-diffing/01_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/01_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/01_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/01_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/01_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/01_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/01_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/01_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/02_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/02_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/02_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/02_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/02_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/02_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/02_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/02_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/03_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/03_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/03_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/03_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/03_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/03_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/03_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/03_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/04_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/04_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/04_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/04_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/04_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/04_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/04_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/04_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/05_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/05_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/05_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/05_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/05_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/05_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/05_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/05_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/06_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/06_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/06_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/06_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/07_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_change-distiller-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_change-distiller-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_change-distiller-theta_expected.lg diff --git a/src/test/resources/tree-diffing/07_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/07_change-distiller_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_change-distiller_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_change-distiller_expected.lg diff --git a/src/test/resources/tree-diffing/07_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_classic-gumtree-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_classic-gumtree-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_classic-gumtree-theta_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-hybrid-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree-hybrid-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree-hybrid-id_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-partition-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree-partition-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree-partition-id_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree-simple-id-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id-theta_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree-simple-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-simple_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree-simple_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree-simple_expected.lg diff --git a/src/test/resources/tree-diffing/07_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/07_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_longestCommonSequence_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg diff --git a/src/test/resources/tree-diffing/07_theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_theta_expected.lg diff --git a/src/test/resources/tree-diffing/07_xy_expected.lg b/src/test/resources/tree-diffing/createMatching/07_xy_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/07_xy_expected.lg rename to src/test/resources/tree-diffing/createMatching/07_xy_expected.lg diff --git a/src/test/resources/tree-diffing/08_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_change-distiller-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_change-distiller-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_change-distiller-theta_expected.lg diff --git a/src/test/resources/tree-diffing/08_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/08_change-distiller_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_change-distiller_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_change-distiller_expected.lg diff --git a/src/test/resources/tree-diffing/08_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_classic-gumtree-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_classic-gumtree-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_classic-gumtree-theta_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-hybrid-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree-hybrid-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree-hybrid-id_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-partition-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree-partition-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree-partition-id_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree-simple-id-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id-theta_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree-simple-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-simple_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree-simple_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree-simple_expected.lg diff --git a/src/test/resources/tree-diffing/08_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/08_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_longestCommonSequence_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg diff --git a/src/test/resources/tree-diffing/08_theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_theta_expected.lg diff --git a/src/test/resources/tree-diffing/08_xy_expected.lg b/src/test/resources/tree-diffing/createMatching/08_xy_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/08_xy_expected.lg rename to src/test/resources/tree-diffing/createMatching/08_xy_expected.lg diff --git a/src/test/resources/tree-diffing/09_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_change-distiller-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_change-distiller-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_change-distiller-theta_expected.lg diff --git a/src/test/resources/tree-diffing/09_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_change-distiller_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg diff --git a/src/test/resources/tree-diffing/09_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_classic-gumtree-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_classic-gumtree-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_classic-gumtree-theta_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree-hybrid-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid-id_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-partition-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree-partition-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree-partition-id_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id-theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree-simple-id-theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id-theta_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree-simple-id_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree-simple_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree-simple_expected.lg diff --git a/src/test/resources/tree-diffing/09_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/09_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/09_longestCommonSequence_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_longestCommonSequence_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_longestCommonSequence_expected.lg diff --git a/src/test/resources/tree-diffing/09_theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_theta_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_theta_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_theta_expected.lg diff --git a/src/test/resources/tree-diffing/09_xy_expected.lg b/src/test/resources/tree-diffing/createMatching/09_xy_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/09_xy_expected.lg rename to src/test/resources/tree-diffing/createMatching/09_xy_expected.lg diff --git a/src/test/resources/tree-diffing/10_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/10_change-distiller_expected.lg rename to src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg diff --git a/src/test/resources/tree-diffing/10_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/10_gumtree-hybrid_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/10_gumtree-hybrid_expected.lg rename to src/test/resources/tree-diffing/createMatching/10_gumtree-hybrid_expected.lg diff --git a/src/test/resources/tree-diffing/10_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/10_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/10_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/10_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/11_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/11_gumtree_expected.lg similarity index 100% rename from src/test/resources/tree-diffing/11_gumtree_expected.lg rename to src/test/resources/tree-diffing/createMatching/11_gumtree_expected.lg diff --git a/src/test/resources/tree-diffing/improveMatching/01_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_change-distiller_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_change-distiller_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_gumtree-hybrid_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_gumtree-partition-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_gumtree-simple-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_gumtree-simple_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_gumtree-simple_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_gumtree_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_gumtree_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_longestCommonSequence_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_longestCommonSequence_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/01_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/01_xy_expected.lg new file mode 100644 index 000000000..f398d4d2f --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/01_xy_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line +e 144 16 ba;0,0 +e 211 144 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_change-distiller_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_change-distiller_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_gumtree-hybrid_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_gumtree-partition-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_gumtree-simple-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_gumtree-simple_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_gumtree-simple_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_gumtree_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_gumtree_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_longestCommonSequence_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_longestCommonSequence_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/02_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/02_xy_expected.lg new file mode 100644 index 000000000..ee75963ed --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/02_xy_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;Line +e 128 16 a;-1,0 +e 195 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/03_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_change-distiller_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_change-distiller_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_gumtree-hybrid_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_gumtree-partition-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_gumtree-simple-id_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_gumtree-simple_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_gumtree-simple_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_gumtree_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_gumtree_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_longestCommonSequence_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_longestCommonSequence_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/03_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/03_xy_expected.lg new file mode 100644 index 000000000..eca44f07a --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/03_xy_expected.lg @@ -0,0 +1,5 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;Line +e 136 16 b;0,-1 +e 203 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/04_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_change-distiller_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_change-distiller_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid-id_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_gumtree-hybrid_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_gumtree-partition-id_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_gumtree-simple-id_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_gumtree-simple_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_gumtree-simple_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_gumtree_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_gumtree_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_longestCommonSequence_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_longestCommonSequence_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/04_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/04_xy_expected.lg new file mode 100644 index 000000000..042594bf8 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/04_xy_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 211 NON;ARTIFACT;(old: 1, diff: 2, new: 2);(old: 2, diff: 3, new: 3);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 3, new: 3);defined(A);#ifdef A +e 211 16 b;0,-1 +e 128 16 a;-1,0 +e 211 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/05_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_change-distiller_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_change-distiller_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid-id_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_gumtree-hybrid_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_gumtree-partition-id_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_gumtree-simple-id_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_gumtree-simple_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_gumtree-simple_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_gumtree_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_gumtree_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_longestCommonSequence_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_longestCommonSequence_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/05_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/05_xy_expected.lg new file mode 100644 index 000000000..ddbfad5f2 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/05_xy_expected.lg @@ -0,0 +1,6 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 3, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 3, new: 2);;Line +e 136 16 b;0,-1 +e 211 16 a;-1,0 +e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg new file mode 100644 index 000000000..39f283a49 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg @@ -0,0 +1,10 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B +e 144 16 ba;0,0 +e 211 144 ba;0,0 +e 339 144 b;1,-1 +e 258 144 a;-1,1 +e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_change-distiller_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_change-distiller_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid-id_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_gumtree-hybrid_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_gumtree-partition-id_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_gumtree-simple-id_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_gumtree-simple_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_gumtree-simple_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_gumtree_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_gumtree_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg new file mode 100644 index 000000000..ba77d3fcb --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg @@ -0,0 +1,11 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +e 208 16 b;0,-1 +e 128 16 a;-1,0 +e 264 208 b;0,-1 +e 339 208 a;-1,0 +e 339 264 b;0,-1 +e 208 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_xy_expected.lg new file mode 100644 index 000000000..74202aadf --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/07_xy_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_change-distiller_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_change-distiller_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid-id_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_gumtree-hybrid_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_gumtree-partition-id_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_gumtree-simple-id_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_gumtree-simple_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_gumtree-simple_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_gumtree_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_gumtree_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg new file mode 100644 index 000000000..058acb289 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg @@ -0,0 +1,11 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +e 208 16 b;0,-1 +e 128 16 a;-1,0 +e 264 208 b;0,-1 +e 339 208 a;-1,0 +e 339 264 b;0,-1 +e 208 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/08_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_xy_expected.lg new file mode 100644 index 000000000..1a086a222 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/08_xy_expected.lg @@ -0,0 +1,12 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 264 200 b;0,-1 +e 339 264 b;0,-1 +e 192 128 a;-1,0 +e 339 192 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg new file mode 100644 index 000000000..36f98955b --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg @@ -0,0 +1,23 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +e 208 16 b;0,-1 +e 128 16 a;-1,0 +e 275 208 ba;0,0 +e 339 208 ba;1,1 +e 403 208 ba;2,2 +e 456 208 b;3,-1 +e 531 208 a;-1,3 +e 595 208 a;-1,4 +e 659 208 a;-1,5 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 208 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid-id_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_gumtree-hybrid_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/09_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_gumtree-partition-id_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/09_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_gumtree-simple-id_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/09_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_gumtree-simple_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_gumtree-simple_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/09_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_gumtree_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_gumtree_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg new file mode 100644 index 000000000..36f98955b --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg @@ -0,0 +1,23 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +e 208 16 b;0,-1 +e 128 16 a;-1,0 +e 275 208 ba;0,0 +e 339 208 ba;1,1 +e 403 208 ba;2,2 +e 456 208 b;3,-1 +e 531 208 a;-1,3 +e 595 208 a;-1,4 +e 659 208 a;-1,5 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 208 128 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/09_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_xy_expected.lg new file mode 100644 index 000000000..44b437996 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/09_xy_expected.lg @@ -0,0 +1,27 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 200 REM;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 +v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 +v 456 REM;IF;(old: 5, diff: 6, new: -1);(old: 9, diff: 10, new: -1);defined(B);#ifdef B +v 531 NON;ARTIFACT;(old: 6, diff: 7, new: 6);(old: 7, diff: 8, new: 7);;Line 4 +v 595 NON;ARTIFACT;(old: 7, diff: 8, new: 7);(old: 8, diff: 9, new: 8);;Line 5 +v 659 NON;ARTIFACT;(old: 8, diff: 9, new: 8);(old: 9, diff: 10, new: 9);;Line 6 +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 11, new: 10);defined(B);#ifdef B +v 192 ADD;IF;(old: -1, diff: 2, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +e 200 16 b;0,-1 +e 128 16 a;-1,0 +e 275 200 b;0,-1 +e 339 200 b;1,-1 +e 403 200 b;2,-1 +e 456 200 b;3,-1 +e 531 456 b;0,-1 +e 595 456 b;1,-1 +e 659 456 b;2,-1 +e 192 128 a;-1,0 +e 275 192 a;-1,0 +e 339 192 a;-1,1 +e 403 192 a;-1,2 +e 531 192 a;-1,3 +e 595 192 a;-1,4 +e 659 192 a;-1,5 diff --git a/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg new file mode 100644 index 000000000..b5f2327c9 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg @@ -0,0 +1,8 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +e 144 16 ba;0,0 +e 339 144 a;1,0 +e 275 144 ba;0,1 +e 339 144 b;1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid-id_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_gumtree-hybrid_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_gumtree-partition-id_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_gumtree-simple-id_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_gumtree-simple_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_gumtree-simple_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_gumtree_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_gumtree_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_longestCommonSequence_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_longestCommonSequence_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/10_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_xy_expected.lg new file mode 100644 index 000000000..b36bd9636 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/10_xy_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A +v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 +v 331 REM;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 195 ADD;ARTIFACT;(old: -1, diff: 2, new: 2);(old: -1, diff: 3, new: 3);;123 +e 144 16 ba;0,0 +e 195 144 a;-1,0 +e 275 144 ba;0,1 +e 331 144 b;1,-1 diff --git a/src/test/resources/tree-diffing/improveMatching/11_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_change-distiller_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_change-distiller_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid-id_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid-id_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_gumtree-hybrid_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_gumtree-partition-id_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_gumtree-partition-id_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_gumtree-simple-id_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_gumtree-simple-id_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_gumtree-simple_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_gumtree-simple_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_gumtree_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_gumtree_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_longestCommonSequence_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_longestCommonSequence_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 diff --git a/src/test/resources/tree-diffing/improveMatching/11_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/11_xy_expected.lg new file mode 100644 index 000000000..0905a5b78 --- /dev/null +++ b/src/test/resources/tree-diffing/improveMatching/11_xy_expected.lg @@ -0,0 +1,9 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;1 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 3, new: -1);;2 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;3 +v 259 ADD;ARTIFACT;(old: -1, diff: 3, new: 2);(old: -1, diff: 4, new: 3);;B +e 147 16 ba;0,0 +e 203 16 b;1,-1 +e 259 16 a;-1,1 +e 339 16 ba;2,2 From ee71f32f771d0f3130b1941f3a40701bedfef4ec Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Thu, 13 Feb 2025 21:12:43 +0100 Subject: [PATCH 06/17] test: fix the DiffTreeParser tests for non-GumTree matchers Previously, all tests would run with the default GumTree matcher instead of the matcher stated in the test case file name. As stated in my bachelor thesis, some matchers fail to return a valid matching. Hence, some test cases need to be removed. In particular, the theta matcher contains a bug that results in matchings that are inconsistent (e.g., A->B but B->C). Furthermore, the gumtree-partition-id matcher tests have been removed. This matcher is already removed in a newer GumTree version. --- .../diff/construction/GumTreeDiff.java | 36 ++++++++++++-- src/test/java/TreeDiffingTest.java | 2 +- .../07_change-distiller-theta_expected.lg | 12 ----- .../07_classic-gumtree-theta_expected.lg | 12 ----- .../07_gumtree-partition-id_expected.lg | 12 ----- .../07_gumtree-simple-id-theta_expected.lg | 12 ----- .../07_longestCommonSequence_expected.lg | 11 ++--- .../createMatching/07_theta_expected.lg | 12 ----- .../createMatching/07_xy_expected.lg | 7 +-- .../08_change-distiller-theta_expected.lg | 12 ----- .../08_classic-gumtree-theta_expected.lg | 12 ----- .../08_gumtree-partition-id_expected.lg | 12 ----- .../08_gumtree-simple-id-theta_expected.lg | 12 ----- .../08_longestCommonSequence_expected.lg | 11 ++--- .../createMatching/08_theta_expected.lg | 12 ----- .../createMatching/08_xy_expected.lg | 7 +-- .../09_change-distiller-theta_expected.lg | 23 --------- .../09_change-distiller_expected.lg | 45 ++++++++++------- .../09_classic-gumtree-theta_expected.lg | 23 --------- .../09_gumtree-partition-id_expected.lg | 23 --------- .../09_gumtree-simple-id-theta_expected.lg | 23 --------- .../09_gumtree-simple-id_expected.lg | 33 ++++++++----- .../09_gumtree-simple_expected.lg | 33 ++++++++----- .../createMatching/09_theta_expected.lg | 23 --------- .../createMatching/09_xy_expected.lg | 48 +++++++++++-------- .../10_change-distiller_expected.lg | 7 ++- 26 files changed, 151 insertions(+), 324 deletions(-) delete mode 100644 src/test/resources/tree-diffing/createMatching/07_change-distiller-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/07_classic-gumtree-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/07_gumtree-partition-id_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/07_theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/08_change-distiller-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/08_classic-gumtree-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/08_gumtree-partition-id_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/08_theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/09_change-distiller-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/09_classic-gumtree-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/09_gumtree-partition-id_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id-theta_expected.lg delete mode 100644 src/test/resources/tree-diffing/createMatching/09_theta_expected.lg diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index ecc6377d6..23bccfc19 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -35,10 +35,18 @@ public class GumTreeDiff { * @see diffUsingMatching(VariationNode, VariationNode, Matcher) */ public static VariationDiff diffUsingMatching(VariationTree before, VariationTree after) { + return diffUsingMatching(before, after, Matchers.getInstance().getMatcher()); + } + + /** + * Create a {@link VariationDiff} by matching nodes between {@code before} and {@code after} + * with {@code matcher}. + */ + public static VariationDiff diffUsingMatching(VariationTree before, VariationTree after, Matcher matcher) { DiffNode root = diffUsingMatching( before.root(), after.root(), - Matchers.getInstance().getMatcher() + matcher ); return new VariationDiff<>(root, new VariationTreeDiffSource(before.source(), after.source())); @@ -85,7 +93,10 @@ public static , L extends Label> DiffNode diffU var dst = new VariationTreeAdapter(after); MappingStore matching = matcher.match(src, dst); - Assert.assertTrue(matching.has(src, dst)); + + // The following algorithm assumes that the root nodes are matched so we ensure that this is + // the case here by establishing that mapping if necessary. + ensureMapping(matching, src, dst); removeUnmapped(matching, src); for (var child : dst.getChildren()) { @@ -182,7 +193,10 @@ public static DiffNode improveMatching(DiffNode tree, Ma MappingStore matching = new MappingStore(src, dst); extractMatching(src, dst, matching); matcher.match(src, dst, matching); - Assert.assertTrue(matching.has(src, dst)); + + // The following algorithm assumes that the root nodes are matched so we ensure that this is + // the case here by establishing that mapping if necessary. + ensureMapping(matching, src, dst); for (var srcNode : src.preOrder()) { var dstNode = matching.getDstForSrc(srcNode); @@ -299,4 +313,20 @@ private static void extractMatching( } } } + + /** + * Add a mapping between {@code src} and {@code dst}. + * In case {@code src} or {@code dst} are mapped to some other nodes, these mappings are + * removed. + */ + private static void ensureMapping(MappingStore matching, Tree src, Tree dst) { + if (matching.isSrcMapped(src)) { + matching.removeMapping(src, matching.getDstForSrc(src)); + } + if (matching.isDstMapped(dst)) { + matching.removeMapping(dst, matching.getSrcForDst(dst)); + } + + matching.addMapping(src, dst); + } } diff --git a/src/test/java/TreeDiffingTest.java b/src/test/java/TreeDiffingTest.java index cd8a87239..1d3dd395d 100644 --- a/src/test/java/TreeDiffingTest.java +++ b/src/test/java/TreeDiffingTest.java @@ -85,7 +85,7 @@ private static Stream createMatchingTestCases() throws IOException { public void createMatchingTestCase(TestCase testCase) throws IOException, DiffParseException { VariationTree beforeEdit = parseVariationTree(testCase.beforeEdit()); VariationTree afterEdit = parseVariationTree(testCase.afterEdit()); - assertExpectedVariationDiffs(testCase, GumTreeDiff.diffUsingMatching(beforeEdit, afterEdit)); + assertExpectedVariationDiffs(testCase, GumTreeDiff.diffUsingMatching(beforeEdit, afterEdit, testCase.matcher())); } private static Stream improveMatchingTestCases() throws IOException { diff --git a/src/test/resources/tree-diffing/createMatching/07_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_change-distiller-theta_expected.lg deleted file mode 100644 index a07a12b73..000000000 --- a/src/test/resources/tree-diffing/createMatching/07_change-distiller-theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/07_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_classic-gumtree-theta_expected.lg deleted file mode 100644 index a07a12b73..000000000 --- a/src/test/resources/tree-diffing/createMatching/07_classic-gumtree-theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/07_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-partition-id_expected.lg deleted file mode 100644 index a07a12b73..000000000 --- a/src/test/resources/tree-diffing/createMatching/07_gumtree-partition-id_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id-theta_expected.lg deleted file mode 100644 index a07a12b73..000000000 --- a/src/test/resources/tree-diffing/createMatching/07_gumtree-simple-id-theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg index a07a12b73..a77e68d12 100644 --- a/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg @@ -1,12 +1,11 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 5, diff: 1, new: 5);defined(CONFIG_A);#ifdef CONFIG_A v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A -e 136 80 b;0,-1 +e 144 80 b;0,-1 e 320 80 a;-1,0 -e 200 136 b;0,-1 +e 200 144 b;0,-1 +e 275 144 a;-1,0 e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 +e 144 320 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/07_theta_expected.lg b/src/test/resources/tree-diffing/createMatching/07_theta_expected.lg deleted file mode 100644 index a07a12b73..000000000 --- a/src/test/resources/tree-diffing/createMatching/07_theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/07_xy_expected.lg b/src/test/resources/tree-diffing/createMatching/07_xy_expected.lg index a07a12b73..c520a3cf2 100644 --- a/src/test/resources/tree-diffing/createMatching/07_xy_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/07_xy_expected.lg @@ -1,12 +1,13 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(CONFIG_A);#ifdef CONFIG_A v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line +v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(CONFIG_A);#ifdef CONFIG_A +v 451 ADD;ARTIFACT;(old: -1, diff: 6, new: 3);(old: -1, diff: 6, new: 4);;Line e 136 80 b;0,-1 e 320 80 a;-1,0 e 200 136 b;0,-1 -e 275 200 b;0,-1 +e 267 200 b;0,-1 e 384 320 a;-1,0 -e 275 384 a;-1,0 +e 451 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_change-distiller-theta_expected.lg deleted file mode 100644 index c87160f14..000000000 --- a/src/test/resources/tree-diffing/createMatching/08_change-distiller-theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_classic-gumtree-theta_expected.lg deleted file mode 100644 index c87160f14..000000000 --- a/src/test/resources/tree-diffing/createMatching/08_classic-gumtree-theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-partition-id_expected.lg deleted file mode 100644 index c87160f14..000000000 --- a/src/test/resources/tree-diffing/createMatching/08_gumtree-partition-id_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id-theta_expected.lg deleted file mode 100644 index c87160f14..000000000 --- a/src/test/resources/tree-diffing/createMatching/08_gumtree-simple-id-theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg index c87160f14..8f3bce9ac 100644 --- a/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg @@ -1,12 +1,11 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 5, diff: 1, new: 5);defined(A);#ifdef A v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A -e 136 80 b;0,-1 +e 144 80 b;0,-1 e 320 80 a;-1,0 -e 200 136 b;0,-1 +e 200 144 b;0,-1 +e 275 144 a;-1,0 e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 +e 144 320 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_theta_expected.lg b/src/test/resources/tree-diffing/createMatching/08_theta_expected.lg deleted file mode 100644 index c87160f14..000000000 --- a/src/test/resources/tree-diffing/createMatching/08_theta_expected.lg +++ /dev/null @@ -1,12 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A -v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line -v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B -v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A -e 136 80 b;0,-1 -e 320 80 a;-1,0 -e 200 136 b;0,-1 -e 275 200 b;0,-1 -e 384 320 a;-1,0 -e 275 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/08_xy_expected.lg b/src/test/resources/tree-diffing/createMatching/08_xy_expected.lg index c87160f14..dadb7225b 100644 --- a/src/test/resources/tree-diffing/createMatching/08_xy_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/08_xy_expected.lg @@ -1,12 +1,13 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 5, diff: 1, new: -1);defined(A);#ifdef A v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line +v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B v 384 ADD;IF;(old: -1, diff: 5, new: 2);(old: -1, diff: 5, new: 4);defined(A);#ifdef A +v 451 ADD;ARTIFACT;(old: -1, diff: 6, new: 3);(old: -1, diff: 6, new: 4);;Line e 136 80 b;0,-1 e 320 80 a;-1,0 e 200 136 b;0,-1 -e 275 200 b;0,-1 +e 267 200 b;0,-1 e 384 320 a;-1,0 -e 275 384 a;-1,0 +e 451 384 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_change-distiller-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_change-distiller-theta_expected.lg deleted file mode 100644 index 00f00bf4e..000000000 --- a/src/test/resources/tree-diffing/createMatching/09_change-distiller-theta_expected.lg +++ /dev/null @@ -1,23 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 -v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 -v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 -e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg index 00f00bf4e..c1bd773ec 100644 --- a/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg @@ -1,23 +1,32 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 2, new: -1);;Line 1 +v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line 2 +v 331 REM;ARTIFACT;(old: 4, diff: 4, new: -1);(old: 5, diff: 4, new: -1);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 -v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B +v 459 REM;ARTIFACT;(old: 6, diff: 6, new: -1);(old: 7, diff: 6, new: -1);;Line 4 +v 523 REM;ARTIFACT;(old: 7, diff: 7, new: -1);(old: 8, diff: 7, new: -1);;Line 5 +v 587 REM;ARTIFACT;(old: 8, diff: 8, new: -1);(old: 9, diff: 8, new: -1);;Line 6 +v 643 ADD;ARTIFACT;(old: -1, diff: 9, new: 3);(old: -1, diff: 9, new: 4);;Line 1 +v 707 ADD;ARTIFACT;(old: -1, diff: 10, new: 4);(old: -1, diff: 10, new: 5);;Line 2 +v 771 ADD;ARTIFACT;(old: -1, diff: 11, new: 5);(old: -1, diff: 11, new: 6);;Line 3 +v 835 ADD;ARTIFACT;(old: -1, diff: 12, new: 6);(old: -1, diff: 12, new: 7);;Line 4 +v 899 ADD;ARTIFACT;(old: -1, diff: 13, new: 7);(old: -1, diff: 13, new: 8);;Line 5 +v 963 ADD;ARTIFACT;(old: -1, diff: 14, new: 8);(old: -1, diff: 14, new: 9);;Line 6 +v 1024 ADD;IF;(old: -1, diff: 15, new: 1);(old: -1, diff: 15, new: 10);defined(B);#ifdef B e 144 80 b;0,-1 -e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 +e 1024 80 a;-1,0 +e 203 144 b;0,-1 +e 267 144 b;1,-1 +e 331 144 b;2,-1 e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 +e 643 144 a;-1,0 +e 707 144 a;-1,1 +e 771 144 a;-1,2 +e 835 144 a;-1,3 +e 899 144 a;-1,4 +e 963 144 a;-1,5 +e 459 392 b;0,-1 +e 523 392 b;1,-1 +e 587 392 b;2,-1 +e 144 1024 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_classic-gumtree-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_classic-gumtree-theta_expected.lg deleted file mode 100644 index 00f00bf4e..000000000 --- a/src/test/resources/tree-diffing/createMatching/09_classic-gumtree-theta_expected.lg +++ /dev/null @@ -1,23 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 -v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 -v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 -e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-partition-id_expected.lg deleted file mode 100644 index 00f00bf4e..000000000 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree-partition-id_expected.lg +++ /dev/null @@ -1,23 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 -v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 -v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 -e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id-theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id-theta_expected.lg deleted file mode 100644 index 00f00bf4e..000000000 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id-theta_expected.lg +++ /dev/null @@ -1,23 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 -v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 -v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 -e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id_expected.lg index 00f00bf4e..8f1ea0152 100644 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple-id_expected.lg @@ -1,23 +1,30 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 10, diff: 1, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 2, new: -1);;Line 1 +v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line 2 +v 331 REM;ARTIFACT;(old: 4, diff: 4, new: -1);(old: 5, diff: 4, new: -1);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 +v 704 ADD;IF;(old: -1, diff: 10, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +v 771 ADD;ARTIFACT;(old: -1, diff: 11, new: 3);(old: -1, diff: 11, new: 4);;Line 1 +v 835 ADD;ARTIFACT;(old: -1, diff: 12, new: 4);(old: -1, diff: 12, new: 5);;Line 2 +v 899 ADD;ARTIFACT;(old: -1, diff: 13, new: 5);(old: -1, diff: 13, new: 6);;Line 3 +e 136 80 b;0,-1 e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 +e 203 136 b;0,-1 +e 267 136 b;1,-1 +e 331 136 b;2,-1 +e 392 136 b;3,-1 e 467 392 b;0,-1 e 531 392 b;1,-1 e 595 392 b;2,-1 -e 144 640 a;-1,0 +e 704 640 a;-1,0 +e 771 704 a;-1,0 +e 835 704 a;-1,1 +e 899 704 a;-1,2 +e 467 704 a;-1,3 +e 531 704 a;-1,4 +e 595 704 a;-1,5 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple_expected.lg index 00f00bf4e..8f1ea0152 100644 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree-simple_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_gumtree-simple_expected.lg @@ -1,23 +1,30 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 10, diff: 1, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 2, new: -1);;Line 1 +v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line 2 +v 331 REM;ARTIFACT;(old: 4, diff: 4, new: -1);(old: 5, diff: 4, new: -1);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 +v 704 ADD;IF;(old: -1, diff: 10, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +v 771 ADD;ARTIFACT;(old: -1, diff: 11, new: 3);(old: -1, diff: 11, new: 4);;Line 1 +v 835 ADD;ARTIFACT;(old: -1, diff: 12, new: 4);(old: -1, diff: 12, new: 5);;Line 2 +v 899 ADD;ARTIFACT;(old: -1, diff: 13, new: 5);(old: -1, diff: 13, new: 6);;Line 3 +e 136 80 b;0,-1 e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 +e 203 136 b;0,-1 +e 267 136 b;1,-1 +e 331 136 b;2,-1 +e 392 136 b;3,-1 e 467 392 b;0,-1 e 531 392 b;1,-1 e 595 392 b;2,-1 -e 144 640 a;-1,0 +e 704 640 a;-1,0 +e 771 704 a;-1,0 +e 835 704 a;-1,1 +e 899 704 a;-1,2 +e 467 704 a;-1,3 +e 531 704 a;-1,4 +e 595 704 a;-1,5 diff --git a/src/test/resources/tree-diffing/createMatching/09_theta_expected.lg b/src/test/resources/tree-diffing/createMatching/09_theta_expected.lg deleted file mode 100644 index 00f00bf4e..000000000 --- a/src/test/resources/tree-diffing/createMatching/09_theta_expected.lg +++ /dev/null @@ -1,23 +0,0 @@ -v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 -v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 -v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 -e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/09_xy_expected.lg b/src/test/resources/tree-diffing/createMatching/09_xy_expected.lg index 00f00bf4e..fa0eefc85 100644 --- a/src/test/resources/tree-diffing/createMatching/09_xy_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_xy_expected.lg @@ -1,23 +1,33 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 10, diff: 1, new: -1);defined(A);#ifdef A +v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 2, new: -1);;Line 1 +v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line 2 +v 331 REM;ARTIFACT;(old: 4, diff: 4, new: -1);(old: 5, diff: 4, new: -1);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B -v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 -v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 -v 595 NON;ARTIFACT;(old: 8, diff: 8, new: 8);(old: 9, diff: 8, new: 9);;Line 6 +v 459 REM;ARTIFACT;(old: 6, diff: 6, new: -1);(old: 7, diff: 6, new: -1);;Line 4 +v 523 REM;ARTIFACT;(old: 7, diff: 7, new: -1);(old: 8, diff: 7, new: -1);;Line 5 +v 587 REM;ARTIFACT;(old: 8, diff: 8, new: -1);(old: 9, diff: 8, new: -1);;Line 6 v 640 ADD;IF;(old: -1, diff: 9, new: 1);(old: -1, diff: 9, new: 10);defined(B);#ifdef B -e 144 80 b;0,-1 +v 704 ADD;IF;(old: -1, diff: 10, new: 2);(old: -1, diff: 10, new: 9);defined(A);#ifdef A +v 771 ADD;ARTIFACT;(old: -1, diff: 11, new: 3);(old: -1, diff: 11, new: 4);;Line 1 +v 835 ADD;ARTIFACT;(old: -1, diff: 12, new: 4);(old: -1, diff: 12, new: 5);;Line 2 +v 899 ADD;ARTIFACT;(old: -1, diff: 13, new: 5);(old: -1, diff: 13, new: 6);;Line 3 +v 963 ADD;ARTIFACT;(old: -1, diff: 14, new: 6);(old: -1, diff: 14, new: 7);;Line 4 +v 1027 ADD;ARTIFACT;(old: -1, diff: 15, new: 7);(old: -1, diff: 15, new: 8);;Line 5 +v 1091 ADD;ARTIFACT;(old: -1, diff: 16, new: 8);(old: -1, diff: 16, new: 9);;Line 6 +e 136 80 b;0,-1 e 640 80 a;-1,0 -e 211 144 ba;0,0 -e 275 144 ba;1,1 -e 339 144 ba;2,2 -e 392 144 b;3,-1 -e 467 144 a;-1,3 -e 531 144 a;-1,4 -e 595 144 a;-1,5 -e 467 392 b;0,-1 -e 531 392 b;1,-1 -e 595 392 b;2,-1 -e 144 640 a;-1,0 +e 203 136 b;0,-1 +e 267 136 b;1,-1 +e 331 136 b;2,-1 +e 392 136 b;3,-1 +e 459 392 b;0,-1 +e 523 392 b;1,-1 +e 587 392 b;2,-1 +e 704 640 a;-1,0 +e 771 704 a;-1,0 +e 835 704 a;-1,1 +e 899 704 a;-1,2 +e 963 704 a;-1,3 +e 1027 704 a;-1,4 +e 1091 704 a;-1,5 diff --git a/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg index 0ae0500bc..2ea6c8e4d 100644 --- a/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg @@ -1,9 +1,8 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 -v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;123 -v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;123 +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;123 e 144 80 ba;0,0 -e 323 144 a;-1,0 +e 275 144 a;1,0 e 211 144 ba;0,1 -e 267 144 b;1,-1 +e 275 144 b;1,0 From 2809c3a7f8757fd9cedfc840af188c43e8f011de Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Wed, 13 Aug 2025 08:21:20 +0200 Subject: [PATCH 07/17] refactor: remove a duplicated `splitNode` implementation --- .../diff/construction/GumTreeDiff.java | 37 ++----------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index 23bccfc19..d49db2e22 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -203,7 +203,7 @@ public static DiffNode improveMatching(DiffNode tree, Ma var beforeNode = Cast.>unchecked(srcNode).getDiffNode(); if (dstNode == null || !srcNode.getLabel().equals(dstNode.getLabel())) { if (beforeNode.isNon()) { - splitNode(beforeNode); + beforeNode.split(AFTER); } Assert.assertTrue(beforeNode.isRem()); @@ -212,10 +212,10 @@ public static DiffNode improveMatching(DiffNode tree, Ma if (beforeNode != afterNode) { if (beforeNode.isNon()) { - splitNode(beforeNode); + beforeNode.split(AFTER); } if (afterNode.isNon()) { - afterNode = splitNode(afterNode); + afterNode.split(BEFORE); } joinNode(beforeNode, afterNode); @@ -229,37 +229,6 @@ public static DiffNode improveMatching(DiffNode tree, Ma return tree; } - /** - * Removes the implicit matching between the {@code BEFORE} and {@code AFTER} projection of - * {@code beforeNode}. This is achieved by copying {@code beforeNode} and reconnecting all - * necessary edges such that the new node exists only after and {@code beforeNode} only exists - * before the edit. - * - * This method doesn't change the {@code BEFORE} and {@code AFTER} projection of {@code - * beforeNode}. - * - * @param beforeNode the node to be split - * @return a copy of {@code beforeNode} existing only after the edit. - */ - private static DiffNode splitNode(DiffNode beforeNode) { - Assert.assertTrue(beforeNode.isNon()); - - DiffNode afterNode = beforeNode.shallowCopy(); - - afterNode.diffType = ADD; - beforeNode.diffType = REM; - - afterNode.addChildren(beforeNode.removeChildren(AFTER), AFTER); - var afterParent = beforeNode.getParent(AFTER); - afterParent.insertChild(afterNode, afterParent.indexOfChild(beforeNode, AFTER), AFTER); - beforeNode.drop(AFTER); - - beforeNode.assertConsistency(); - afterNode.assertConsistency(); - - return afterNode; - } - /** * Merges {@code afterNode} into {@code beforeNode} such that {@code beforeNode.isNon() == * true}. Essentially, an implicit matching is inserted between {@code beforeNode} and {@code From 1f24ebc8987a57e8a9ab486f6a3d78e4b80a9c15 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Wed, 13 Aug 2025 08:30:32 +0200 Subject: [PATCH 08/17] refactor: simplify `GumTreeDiff.joinNode` --- .../variation/diff/construction/GumTreeDiff.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index d49db2e22..38ac787e3 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -246,11 +246,8 @@ private static void joinNode(DiffNode beforeNode, DiffNode< beforeNode.diffType = NON; - beforeNode.addChildren(afterNode.removeChildren(AFTER), AFTER); - - var afterParent = afterNode.getParent(AFTER); - afterParent.insertChild(beforeNode, afterParent.indexOfChild(afterNode, AFTER), AFTER); - afterNode.drop(AFTER); + beforeNode.stealChildrenOf(afterNode); + afterNode.getParent(AFTER).replaceChild(afterNode, beforeNode, AFTER); } /** From 2b20e33bc55378a84925f024550291fa219bd0bd Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Wed, 13 Aug 2025 09:24:19 +0200 Subject: [PATCH 09/17] refactor: move `joinNode` into `DiffNode` This makes it more discoverable and consistent with `DiffNode.split`. --- .../diffdetective/util/Assert.java | 2 +- .../variation/diff/DiffNode.java | 30 +++++++++++++++++++ .../diff/construction/GumTreeDiff.java | 24 +-------------- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/util/Assert.java b/src/main/java/org/variantsync/diffdetective/util/Assert.java index bf74c7c93..f33a943b6 100644 --- a/src/main/java/org/variantsync/diffdetective/util/Assert.java +++ b/src/main/java/org/variantsync/diffdetective/util/Assert.java @@ -86,7 +86,7 @@ public static void assertFalse(boolean condition, String errorMessage) { } /** Throws {@link AssertionError} with {@code errorMessage} as error message. */ - public static void fail(String errorMessage) { + public static T fail(String errorMessage) { throw new AssertionError(errorMessage); } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java index 7b8e0eff6..8666e98ac 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java @@ -14,6 +14,7 @@ import org.variantsync.functjonal.Cast; import java.util.*; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; @@ -412,6 +413,35 @@ public DiffNode split(Time time) { return other; } + /** + * Merges {@code other} into this node. + * {@code other} is removed from the graph and this node inherits all of its edges. This + * node and {@code other} need to be compatible (exist at different times and have the + * same {@link getNodeType node type}). + *

+ * Both {@code this} and {@code other} must not be {@link isRoot the root}. + * + * @param other the node which is removed from the graph + * @param joinLabels returns a label that should represent the two passed labels + */ + public void join(DiffNode other, BiFunction joinLabels) { + Time time = switch (diffType) { + case ADD -> BEFORE; + case REM -> AFTER; + case NON -> Assert.fail("Attempt to join a node that already exists at both times."); + }; + Assert.assertEquals(other.diffType, DiffType.thatExistsOnlyAt(time)); + Assert.assertEquals(getNodeType(), other.getNodeType()); + Assert.assertFalse(isRoot()); + Assert.assertFalse(other.isRoot()); + + diffType = DiffType.NON; + label.setInnerLabel(joinLabels.apply(getLabel(), other.getLabel())); + + this.stealChildrenOf(other); + other.getParent(time).replaceChild(other, this, time); + } + /** * Replaces a child of this node with another node. *

diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index 38ac787e3..0c435b475 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -22,7 +22,6 @@ import java.util.Map; import static org.variantsync.diffdetective.variation.diff.DiffType.ADD; -import static org.variantsync.diffdetective.variation.diff.DiffType.NON; import static org.variantsync.diffdetective.variation.diff.DiffType.REM; import static org.variantsync.diffdetective.variation.diff.Time.AFTER; import static org.variantsync.diffdetective.variation.diff.Time.BEFORE; @@ -218,7 +217,7 @@ public static DiffNode improveMatching(DiffNode tree, Ma afterNode.split(BEFORE); } - joinNode(beforeNode, afterNode); + beforeNode.join(afterNode, (beforeLabel, afterLabel) -> beforeLabel); } Assert.assertTrue(beforeNode.isNon()); @@ -229,27 +228,6 @@ public static DiffNode improveMatching(DiffNode tree, Ma return tree; } - /** - * Merges {@code afterNode} into {@code beforeNode} such that {@code beforeNode.isNon() == - * true}. Essentially, an implicit matching is inserted between {@code beforeNode} and {@code - * afterNode}. - * - * This method doesn't change the {@code BEFORE} and {@code AFTER} projection of {@code - * beforeNode}. - * - * @param beforeNode the node which is will exist {@code BEFORE} and {@code AFTER} the edit - * @param afterNode the node which is discarded - */ - private static void joinNode(DiffNode beforeNode, DiffNode afterNode) { - Assert.assertTrue(beforeNode.isRem()); - Assert.assertTrue(afterNode.isAdd()); - - beforeNode.diffType = NON; - - beforeNode.stealChildrenOf(afterNode); - afterNode.getParent(AFTER).replaceChild(afterNode, beforeNode, AFTER); - } - /** * Makes the implicit matching of a {@code VariationDiff} explicit. * From f4e6850540dce7edff2e098abedb4512128fb280 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Mon, 29 Sep 2025 16:22:49 +0200 Subject: [PATCH 10/17] fix: respect trailing lines when matching variation trees --- .../diffdetective/gumtree/VariationTreeAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java b/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java index 15fef9a47..800317e8a 100644 --- a/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java +++ b/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java @@ -5,6 +5,7 @@ import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.tree.VariationNode; @@ -34,7 +35,11 @@ public VariationTreeAdapter(VariationNode node) { if (backingNode.isConditionalAnnotation()) { cachedLabel = backingNode.getFormula().toString(); } else { - cachedLabel = backingNode.getLabel().getLines().stream().collect(Collectors.joining("\n")); + cachedLabel = + Stream.concat( + backingNode.getLabel().getLines().stream(), + backingNode.getLabel().getTrailingLines().stream() + ).collect(Collectors.joining("\n")); } var children = new ArrayList(node.getChildren().size()); From 99a34f4a3aaeaec5c6de5a1ac26d3b17deaa3fe4 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Tue, 30 Sep 2025 21:25:18 +0200 Subject: [PATCH 11/17] fix: don't join syntactically different `DiffNode`s --- .../gumtree/VariationTreeAdapter.java | 14 +++++--------- .../diff/construction/GumTreeDiff.java | 6 +++++- .../06_gumtree-hybrid_expected.lg | 17 ++++++++++------- .../createMatching/06_gumtree_expected.lg | 17 ++++++++++------- .../06_change-distiller_expected.lg | 13 ++++++++----- .../06_gumtree-hybrid-id_expected.lg | 13 ++++++++----- .../06_gumtree-hybrid_expected.lg | 13 ++++++++----- .../06_gumtree-partition-id_expected.lg | 13 ++++++++----- .../06_gumtree-simple-id_expected.lg | 13 ++++++++----- .../06_gumtree-simple_expected.lg | 13 ++++++++----- .../improveMatching/06_gumtree_expected.lg | 13 ++++++++----- .../06_longestCommonSequence_expected.lg | 13 ++++++++----- .../improveMatching/06_xy_expected.lg | 13 ++++++++----- 13 files changed, 102 insertions(+), 69 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java b/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java index 800317e8a..a37a5dce6 100644 --- a/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java +++ b/src/main/java/org/variantsync/diffdetective/gumtree/VariationTreeAdapter.java @@ -32,15 +32,11 @@ public VariationTreeAdapter(VariationNode node) { this.backingNode = node; this.metadata = new LinkedHashMap<>(); - if (backingNode.isConditionalAnnotation()) { - cachedLabel = backingNode.getFormula().toString(); - } else { - cachedLabel = - Stream.concat( - backingNode.getLabel().getLines().stream(), - backingNode.getLabel().getTrailingLines().stream() - ).collect(Collectors.joining("\n")); - } + cachedLabel = + Stream.concat( + backingNode.getLabel().getLines().stream(), + backingNode.getLabel().getTrailingLines().stream() + ).collect(Collectors.joining("\n")); var children = new ArrayList(node.getChildren().size()); for (var child : node.getChildren()) { diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index 0c435b475..0482c9ed5 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -217,7 +217,11 @@ public static DiffNode improveMatching(DiffNode tree, Ma afterNode.split(BEFORE); } - beforeNode.join(afterNode, (beforeLabel, afterLabel) -> beforeLabel); + beforeNode.join(afterNode, (beforeLabel, afterLabel) -> { + Assert.assertEquals(beforeLabel.getLines(), afterLabel.getLines()); + Assert.assertEquals(beforeLabel.getTrailingLines(), afterLabel.getTrailingLines()); + return beforeLabel; + }); } Assert.assertTrue(beforeNode.isNon()); diff --git a/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg index cc0444fdb..9adfe4848 100644 --- a/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg @@ -1,10 +1,13 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 1, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line A v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line B -v 322 ADD;ELIF;(old: -1, diff: 4, new: 3);(old: -1, diff: 4, new: 5);B;#elif B -e 144 80 ba;0,0 -e 211 144 ba;0,0 -e 275 144 b;1,-1 -e 322 144 a;-1,1 -e 275 322 a;-1,0 +v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 3);defined(A);#ifdef A +v 386 ADD;ELIF;(old: -1, diff: 5, new: 3);(old: -1, diff: 5, new: 5);B;#elif B +e 136 80 b;0,-1 +e 320 80 a;-1,0 +e 211 136 b;0,-1 +e 275 136 b;1,-1 +e 211 320 a;-1,0 +e 386 320 a;-1,1 +e 275 386 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg index cc0444fdb..9adfe4848 100644 --- a/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg @@ -1,10 +1,13 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 1, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line A v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line B -v 322 ADD;ELIF;(old: -1, diff: 4, new: 3);(old: -1, diff: 4, new: 5);B;#elif B -e 144 80 ba;0,0 -e 211 144 ba;0,0 -e 275 144 b;1,-1 -e 322 144 a;-1,1 -e 275 322 a;-1,0 +v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 3);defined(A);#ifdef A +v 386 ADD;ELIF;(old: -1, diff: 5, new: 3);(old: -1, diff: 5, new: 5);B;#elif B +e 136 80 b;0,-1 +e 320 80 a;-1,0 +e 211 136 b;0,-1 +e 275 136 b;1,-1 +e 211 320 a;-1,0 +e 386 320 a;-1,1 +e 275 386 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_change-distiller_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid-id_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-hybrid_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-partition-id_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple-id_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree-simple_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_gumtree_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_longestCommonSequence_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 diff --git a/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg b/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg index 39f283a49..ad74b36d2 100644 --- a/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/06_xy_expected.lg @@ -1,10 +1,13 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A +v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 5, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);;Line A v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line B +v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 5, new: 3);defined(A);#ifdef A v 258 ADD;ELIF;(old: -1, diff: 3, new: 3);(old: -1, diff: 6, new: 5);B;#elif B -e 144 16 ba;0,0 -e 211 144 ba;0,0 -e 339 144 b;1,-1 -e 258 144 a;-1,1 +e 136 16 b;0,-1 +e 128 16 a;-1,0 +e 211 136 b;0,-1 +e 339 136 b;1,-1 +e 211 128 a;-1,0 +e 258 128 a;-1,1 e 339 258 a;-1,0 From 411944b98b9c6554446424f8d964c9f8100b6dc6 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Tue, 30 Sep 2025 19:50:11 +0200 Subject: [PATCH 12/17] fix: assign `after` line numbers in GumTreeDiff --- .../diffdetective/variation/diff/DiffNode.java | 3 +++ .../variation/diff/construction/GumTreeDiff.java | 3 +++ .../createMatching/04_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/createMatching/04_gumtree_expected.lg | 2 +- .../createMatching/05_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/createMatching/05_gumtree_expected.lg | 2 +- .../createMatching/06_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/createMatching/06_gumtree_expected.lg | 2 +- .../createMatching/07_longestCommonSequence_expected.lg | 2 +- .../createMatching/08_longestCommonSequence_expected.lg | 2 +- .../createMatching/09_change-distiller_expected.lg | 2 +- .../createMatching/09_gumtree-hybrid-id_expected.lg | 8 ++++---- .../createMatching/09_gumtree-hybrid_expected.lg | 8 ++++---- .../tree-diffing/createMatching/09_gumtree_expected.lg | 8 ++++---- .../createMatching/09_longestCommonSequence_expected.lg | 8 ++++---- .../createMatching/10_change-distiller_expected.lg | 4 ++-- .../createMatching/10_gumtree-hybrid_expected.lg | 2 +- .../tree-diffing/createMatching/10_gumtree_expected.lg | 2 +- .../improveMatching/07_longestCommonSequence_expected.lg | 2 +- .../improveMatching/08_longestCommonSequence_expected.lg | 2 +- .../improveMatching/09_change-distiller_expected.lg | 2 +- .../improveMatching/09_longestCommonSequence_expected.lg | 2 +- .../improveMatching/10_change-distiller_expected.lg | 2 +- 23 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java index 8666e98ac..e8a7e8c86 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java @@ -438,6 +438,9 @@ public void join(DiffNode other, BiFunction joinLabels) { diffType = DiffType.NON; label.setInnerLabel(joinLabels.apply(getLabel(), other.getLabel())); + setFromLine(getFromLine().withLineNumberAtTime(other.getFromLine().atTime(AFTER), AFTER)); + setToLine(getToLine().withLineNumberAtTime(other.getToLine().atTime(AFTER), AFTER)); + this.stealChildrenOf(other); other.getParent(time).replaceChild(other, this, time); } diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index 0482c9ed5..19f6a2739 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -165,6 +165,9 @@ private static void addUnmapped(MappingStore mappings, DiffNod // Always drop and reinsert it because it could have moved. diffNode.drop(AFTER); } + + diffNode.setFromLine(diffNode.getFromLine().withLineNumberAtTime(afterNode.getVariationNode().getLineRange().fromInclusive(), AFTER)); + diffNode.setToLine(diffNode.getToLine().withLineNumberAtTime(afterNode.getVariationNode().getLineRange().toExclusive(), AFTER)); } parent.addChild(diffNode, AFTER); diff --git a/src/test/resources/tree-diffing/createMatching/04_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/04_gumtree-hybrid_expected.lg index 71e5f3c43..4824623c9 100644 --- a/src/test/resources/tree-diffing/createMatching/04_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/04_gumtree-hybrid_expected.lg @@ -1,5 +1,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 1, new: 2);;Line +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 2);(old: 2, diff: 1, new: 3);;Line v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 2, new: 3);defined(A);#ifdef A e 147 80 b;0,-1 e 192 80 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/04_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/04_gumtree_expected.lg index 71e5f3c43..4824623c9 100644 --- a/src/test/resources/tree-diffing/createMatching/04_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/04_gumtree_expected.lg @@ -1,5 +1,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 1, new: 2);;Line +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 2);(old: 2, diff: 1, new: 3);;Line v 192 ADD;IF;(old: -1, diff: 2, new: 1);(old: -1, diff: 2, new: 3);defined(A);#ifdef A e 147 80 b;0,-1 e 192 80 a;-1,0 diff --git a/src/test/resources/tree-diffing/createMatching/05_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/05_gumtree-hybrid_expected.lg index 6ef5aa0f1..a9b885eaa 100644 --- a/src/test/resources/tree-diffing/createMatching/05_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/05_gumtree-hybrid_expected.lg @@ -1,6 +1,6 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 1, new: -1);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 2, new: 2);;Line e 136 80 b;0,-1 e 211 80 a;-1,0 e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/createMatching/05_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/05_gumtree_expected.lg index 6ef5aa0f1..a9b885eaa 100644 --- a/src/test/resources/tree-diffing/createMatching/05_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/05_gumtree_expected.lg @@ -1,6 +1,6 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 3, diff: 1, new: -1);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 1);(old: 3, diff: 2, new: 2);;Line e 136 80 b;0,-1 e 211 80 a;-1,0 e 211 136 b;0,-1 diff --git a/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg index 9adfe4848..007fe1a88 100644 --- a/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/06_gumtree-hybrid_expected.lg @@ -1,7 +1,7 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 1, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line A -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line B +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 4);(old: 4, diff: 3, new: 5);;Line B v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 3);defined(A);#ifdef A v 386 ADD;ELIF;(old: -1, diff: 5, new: 3);(old: -1, diff: 5, new: 5);B;#elif B e 136 80 b;0,-1 diff --git a/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg index 9adfe4848..007fe1a88 100644 --- a/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/06_gumtree_expected.lg @@ -1,7 +1,7 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 136 REM;IF;(old: 1, diff: 1, new: -1);(old: 4, diff: 1, new: -1);defined(A);#ifdef A v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line A -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line B +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 4);(old: 4, diff: 3, new: 5);;Line B v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 3);defined(A);#ifdef A v 386 ADD;ELIF;(old: -1, diff: 5, new: 3);(old: -1, diff: 5, new: 5);B;#elif B e 136 80 b;0,-1 diff --git a/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg index a77e68d12..2e680785a 100644 --- a/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/07_longestCommonSequence_expected.lg @@ -1,5 +1,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 5, diff: 1, new: 5);defined(CONFIG_A);#ifdef CONFIG_A +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 5, diff: 1, new: 4);defined(CONFIG_A);#ifdef CONFIG_A v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(CONFIG_B);#ifdef CONFIG_B v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(CONFIG_B);#ifdef CONFIG_B diff --git a/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg index 8f3bce9ac..d537c5e32 100644 --- a/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/08_longestCommonSequence_expected.lg @@ -1,5 +1,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 5, diff: 1, new: 5);defined(A);#ifdef A +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 5, diff: 1, new: 4);defined(A);#ifdef A v 200 REM;IF;(old: 2, diff: 2, new: -1);(old: 4, diff: 2, new: -1);defined(B);#ifdef B v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line v 320 ADD;IF;(old: -1, diff: 4, new: 1);(old: -1, diff: 4, new: 5);defined(B);#ifdef B diff --git a/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg index c1bd773ec..26b79040b 100644 --- a/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_change-distiller_expected.lg @@ -1,5 +1,5 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 10, diff: 1, new: 9);defined(A);#ifdef A v 203 REM;ARTIFACT;(old: 2, diff: 2, new: -1);(old: 3, diff: 2, new: -1);;Line 1 v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;Line 2 v 331 REM;ARTIFACT;(old: 4, diff: 4, new: -1);(old: 5, diff: 4, new: -1);;Line 3 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid-id_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid-id_expected.lg index 00f00bf4e..dd0703090 100644 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid-id_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid-id_expected.lg @@ -1,8 +1,8 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 10, diff: 1, new: 9);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;Line 1 +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 4);(old: 4, diff: 3, new: 5);;Line 2 +v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 5);(old: 5, diff: 4, new: 6);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid_expected.lg index 00f00bf4e..dd0703090 100644 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_gumtree-hybrid_expected.lg @@ -1,8 +1,8 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 10, diff: 1, new: 9);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;Line 1 +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 4);(old: 4, diff: 3, new: 5);;Line 2 +v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 5);(old: 5, diff: 4, new: 6);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 diff --git a/src/test/resources/tree-diffing/createMatching/09_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/09_gumtree_expected.lg index 00f00bf4e..dd0703090 100644 --- a/src/test/resources/tree-diffing/createMatching/09_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_gumtree_expected.lg @@ -1,8 +1,8 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 10, diff: 1, new: 9);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;Line 1 +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 4);(old: 4, diff: 3, new: 5);;Line 2 +v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 5);(old: 5, diff: 4, new: 6);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 diff --git a/src/test/resources/tree-diffing/createMatching/09_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/createMatching/09_longestCommonSequence_expected.lg index 00f00bf4e..dd0703090 100644 --- a/src/test/resources/tree-diffing/createMatching/09_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/09_longestCommonSequence_expected.lg @@ -1,8 +1,8 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 10, diff: 1, new: 10);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;Line 1 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;Line 2 -v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 4);(old: 5, diff: 4, new: 5);;Line 3 +v 144 NON;IF;(old: 1, diff: 1, new: 2);(old: 10, diff: 1, new: 9);defined(A);#ifdef A +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;Line 1 +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 4);(old: 4, diff: 3, new: 5);;Line 2 +v 339 NON;ARTIFACT;(old: 4, diff: 4, new: 5);(old: 5, diff: 4, new: 6);;Line 3 v 392 REM;IF;(old: 5, diff: 5, new: -1);(old: 9, diff: 5, new: -1);defined(B);#ifdef B v 467 NON;ARTIFACT;(old: 6, diff: 6, new: 6);(old: 7, diff: 6, new: 7);;Line 4 v 531 NON;ARTIFACT;(old: 7, diff: 7, new: 7);(old: 8, diff: 7, new: 8);;Line 5 diff --git a/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg b/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg index 2ea6c8e4d..374c4bbd8 100644 --- a/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/10_change-distiller_expected.lg @@ -1,7 +1,7 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 3, new: 4);;123 +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;456 +v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 2);(old: 4, diff: 3, new: 3);;123 e 144 80 ba;0,0 e 275 144 a;1,0 e 211 144 ba;0,1 diff --git a/src/test/resources/tree-diffing/createMatching/10_gumtree-hybrid_expected.lg b/src/test/resources/tree-diffing/createMatching/10_gumtree-hybrid_expected.lg index 0ae0500bc..d3b568636 100644 --- a/src/test/resources/tree-diffing/createMatching/10_gumtree-hybrid_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/10_gumtree-hybrid_expected.lg @@ -1,6 +1,6 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;456 v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;123 v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;123 e 144 80 ba;0,0 diff --git a/src/test/resources/tree-diffing/createMatching/10_gumtree_expected.lg b/src/test/resources/tree-diffing/createMatching/10_gumtree_expected.lg index 0ae0500bc..d3b568636 100644 --- a/src/test/resources/tree-diffing/createMatching/10_gumtree_expected.lg +++ b/src/test/resources/tree-diffing/createMatching/10_gumtree_expected.lg @@ -1,6 +1,6 @@ v 80 NON;IF;(old: -1, diff: 0, new: -1);(old: -1, diff: 0, new: -1);True v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 1, new: 4);defined(A);#ifdef A -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 2, new: 3);;456 +v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 3);(old: 3, diff: 2, new: 4);;456 v 267 REM;ARTIFACT;(old: 3, diff: 3, new: -1);(old: 4, diff: 3, new: -1);;123 v 323 ADD;ARTIFACT;(old: -1, diff: 4, new: 2);(old: -1, diff: 4, new: 3);;123 e 144 80 ba;0,0 diff --git a/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg index ba77d3fcb..c9b1545b7 100644 --- a/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/07_longestCommonSequence_expected.lg @@ -1,5 +1,5 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(CONFIG_A);#ifdef CONFIG_A +v 208 NON;IF;(old: 1, diff: 2, new: 2);(old: 5, diff: 6, new: 4);defined(CONFIG_A);#ifdef CONFIG_A v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(CONFIG_B);#ifdef CONFIG_B v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(CONFIG_B);#ifdef CONFIG_B diff --git a/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg index 058acb289..583cfd7c3 100644 --- a/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/08_longestCommonSequence_expected.lg @@ -1,5 +1,5 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 5, diff: 6, new: -1);defined(A);#ifdef A +v 208 NON;IF;(old: 1, diff: 2, new: 2);(old: 5, diff: 6, new: 4);defined(A);#ifdef A v 264 REM;IF;(old: 2, diff: 3, new: -1);(old: 4, diff: 5, new: -1);defined(B);#ifdef B v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 3);(old: 4, diff: 5, new: 4);;Line v 128 ADD;IF;(old: -1, diff: 1, new: 1);(old: -1, diff: 6, new: 5);defined(B);#ifdef B diff --git a/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg index 36f98955b..254b343c0 100644 --- a/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/09_change-distiller_expected.lg @@ -1,5 +1,5 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 208 NON;IF;(old: 1, diff: 2, new: 2);(old: 10, diff: 11, new: 9);defined(A);#ifdef A v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 diff --git a/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg b/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg index 36f98955b..254b343c0 100644 --- a/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/09_longestCommonSequence_expected.lg @@ -1,5 +1,5 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 208 NON;IF;(old: 1, diff: 2, new: -1);(old: 10, diff: 11, new: -1);defined(A);#ifdef A +v 208 NON;IF;(old: 1, diff: 2, new: 2);(old: 10, diff: 11, new: 9);defined(A);#ifdef A v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;Line 1 v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 4);(old: 4, diff: 5, new: 5);;Line 2 v 403 NON;ARTIFACT;(old: 4, diff: 5, new: 5);(old: 5, diff: 6, new: 6);;Line 3 diff --git a/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg b/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg index b5f2327c9..953e56d04 100644 --- a/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg +++ b/src/test/resources/tree-diffing/improveMatching/10_change-distiller_expected.lg @@ -1,7 +1,7 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 5, new: 4);defined(A);#ifdef A v 275 NON;ARTIFACT;(old: 2, diff: 3, new: 3);(old: 3, diff: 4, new: 4);;456 -v 339 NON;ARTIFACT;(old: 3, diff: 4, new: -1);(old: 4, diff: 5, new: -1);;123 +v 339 NON;ARTIFACT;(old: 3, diff: 4, new: 2);(old: 4, diff: 5, new: 3);;123 e 144 16 ba;0,0 e 339 144 a;1,0 e 275 144 ba;0,1 From 3af8b1be2773bb1f8e2ad8434ce48ab447e1d9db Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Tue, 30 Sep 2025 19:50:11 +0200 Subject: [PATCH 13/17] fix: let GumTreeDiff update the line numbers in the labels --- .../diffdetective/util/Assert.java | 10 ++- .../variation/DiffLinesLabel.java | 62 +++++++++++++++++++ .../diffdetective/variation/Label.java | 25 ++++++++ .../variation/diff/DiffNode.java | 11 ++-- .../diff/construction/GumTreeDiff.java | 14 ++--- 5 files changed, 105 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/util/Assert.java b/src/main/java/org/variantsync/diffdetective/util/Assert.java index f33a943b6..504d111a0 100644 --- a/src/main/java/org/variantsync/diffdetective/util/Assert.java +++ b/src/main/java/org/variantsync/diffdetective/util/Assert.java @@ -105,12 +105,18 @@ public static void assertNull(Object o) { } public static void assertEquals(T expected, T actual) { + assertEquals(expected, actual, null); + } + + public static void assertEquals(T expected, T actual, String message) { + String prefix = message == null ? "" : message + ": "; + if (expected == null) { if (actual != null) { - fail("expected is null but actual is not!"); + fail(prefix + "expected is null but actually it is " + actual); } } else { - assertTrue(expected.equals(actual), expected + " != " + actual); + assertTrue(expected.equals(actual), prefix + expected + " != " + actual); } } } diff --git a/src/main/java/org/variantsync/diffdetective/variation/DiffLinesLabel.java b/src/main/java/org/variantsync/diffdetective/variation/DiffLinesLabel.java index 54a1f194e..c03efa287 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/DiffLinesLabel.java +++ b/src/main/java/org/variantsync/diffdetective/variation/DiffLinesLabel.java @@ -2,12 +2,14 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; import org.variantsync.diffdetective.diff.text.DiffLineNumber; import org.variantsync.diffdetective.util.Assert; import org.variantsync.diffdetective.util.StringUtils; +import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; // For Javadoc /** @@ -82,6 +84,66 @@ public List getTrailingLines() { return getDiffTrailingLines().stream().map(Line::content).toList(); } + /** + * Returns a deep copy where the line numbers at {@code time} are set to + * {@link DiffLineNumber#InvalidLineNumber}. + */ + @Override + public DiffLinesLabel withoutTimeDependentState(Time time) { + return new DiffLinesLabel( + mapWithoutTimeDependentState(getDiffLines(), time), + mapWithoutTimeDependentState(getDiffTrailingLines(), time) + ); + } + + private List mapWithoutTimeDependentState(List lines, Time time) { + return lines + .stream() + .map(line -> new Line( + line.content(), + line.lineNumber().withLineNumberAtTime(DiffLineNumber.InvalidLineNumber, time) + )) + .toList(); + } + + /** + * Returns a deep copy where the line numbers at {@code time} are copied from + * {@code otherLabel}. The number of lines and their content must be identical in {@code this} + * and {@code otherLabel}. + * + * @see withoutTimeDependentState + */ + @Override + public DiffLinesLabel withTimeDependentStateFrom(Label otherLabel, Time time) { + DiffLinesLabel other = (DiffLinesLabel) otherLabel; + + return new DiffLinesLabel( + zipWithTimeDependentStateFrom(this.getDiffLines(), other.getDiffLines(), time), + zipWithTimeDependentStateFrom(this.getDiffTrailingLines(), other.getDiffTrailingLines(), time) + ); + } + + private static List zipWithTimeDependentStateFrom(List linesA, List linesB, Time time) { + List result = new ArrayList<>(linesA.size()); + + Iterator itA = linesA.iterator(); + Iterator itB = linesA.iterator(); + while (itA.hasNext() && itB.hasNext()) { + Line lineA = itA.next(); + Line lineB = itB.next(); + + Assert.assertEquals(lineA.content(), lineB.content(), "Mismatching line contents in a call to `withTimeDependentStateFrom` detected"); + result.add(new Line( + lineA.content(), + lineB.lineNumber().withLineNumberAtTime(lineB.lineNumber().atTime(time), time) + )); + } + + Assert.assertFalse(itA.hasNext() || itB.hasNext(), "Mismatching line counts in a call to `withTimeDependentStateFrom` detected"); + + return result; + } + @Override public String toString() { return lines diff --git a/src/main/java/org/variantsync/diffdetective/variation/Label.java b/src/main/java/org/variantsync/diffdetective/variation/Label.java index 4c4bb6e94..1250497e6 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/Label.java +++ b/src/main/java/org/variantsync/diffdetective/variation/Label.java @@ -2,6 +2,8 @@ import java.util.List; +import org.variantsync.diffdetective.util.Assert; +import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; // For Javadoc import org.variantsync.diffdetective.variation.tree.VariationTree; // For Javadoc @@ -19,6 +21,29 @@ public interface Label { * For example, {@code #endif}s are stored as trailing lines. */ List getTrailingLines(); + + /** + * Returns a deep copy where the state that is only valid at {@code time} is set to its default + * value. Note that not all implementations need to have time dependent state. + * + * @see withTimeDependentStateFrom + */ + default Label withoutTimeDependentState(Time time) { + return this.clone(); + } + + /** + * Returns a deep copy where the state that is only valid at {@code time} is copied from + * {@code other}. All time independent state must be equal in {@code this} and {@code other}. + * Note that not all implementations need to have time dependent state. + * + * @see withoutTimeDependentState + */ + default Label withTimeDependentStateFrom(Label other, Time time) { + Assert.assertEquals(this, other); + return this.clone(); + } + /** * Creates a deep copy of this label. */ diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java index e8a7e8c86..f0f05f13c 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/DiffNode.java @@ -14,7 +14,6 @@ import org.variantsync.functjonal.Cast; import java.util.*; -import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; @@ -393,12 +392,13 @@ public DiffNode split(Time time) { getFromLine().as(otherDiffType), getToLine().as(otherDiffType), getFormula(), - Cast.unchecked(label.clone()) + Cast.unchecked(label.withoutTimeDependentState(time.other())) ); this.diffType = otherDiffType.inverse(); this.from = this.from.as(this.diffType); this.to = this.to.as(this.diffType); + this.setLabel(Cast.unchecked(this.getLabel().withoutTimeDependentState(time))); other.addChildren(this.removeChildren(time), time); getParent(time).replaceChild(this, other, time); @@ -417,14 +417,13 @@ public DiffNode split(Time time) { * Merges {@code other} into this node. * {@code other} is removed from the graph and this node inherits all of its edges. This * node and {@code other} need to be compatible (exist at different times and have the - * same {@link getNodeType node type}). + * same {@link getNodeType node type} and compatible {@link getLabel labels}). *

* Both {@code this} and {@code other} must not be {@link isRoot the root}. * * @param other the node which is removed from the graph - * @param joinLabels returns a label that should represent the two passed labels */ - public void join(DiffNode other, BiFunction joinLabels) { + public void join(DiffNode other) { Time time = switch (diffType) { case ADD -> BEFORE; case REM -> AFTER; @@ -436,7 +435,7 @@ public void join(DiffNode other, BiFunction joinLabels) { Assert.assertFalse(other.isRoot()); diffType = DiffType.NON; - label.setInnerLabel(joinLabels.apply(getLabel(), other.getLabel())); + setLabel(Cast.unchecked(getLabel().withTimeDependentStateFrom(other.getLabel(), time))); setFromLine(getFromLine().withLineNumberAtTime(other.getFromLine().atTime(AFTER), AFTER)); setToLine(getToLine().withLineNumberAtTime(other.getToLine().atTime(AFTER), AFTER)); diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java index 19f6a2739..bb0d37309 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/construction/GumTreeDiff.java @@ -11,6 +11,7 @@ import org.variantsync.diffdetective.util.Assert; import org.variantsync.diffdetective.variation.Label; import org.variantsync.diffdetective.variation.diff.DiffNode; +import org.variantsync.diffdetective.variation.diff.Time; import org.variantsync.diffdetective.variation.diff.VariationDiff; import org.variantsync.diffdetective.variation.diff.source.VariationTreeDiffSource; import org.variantsync.diffdetective.variation.diff.traverse.VariationDiffTraversal; @@ -22,7 +23,6 @@ import java.util.Map; import static org.variantsync.diffdetective.variation.diff.DiffType.ADD; -import static org.variantsync.diffdetective.variation.diff.DiffType.REM; import static org.variantsync.diffdetective.variation.diff.Time.AFTER; import static org.variantsync.diffdetective.variation.diff.Time.BEFORE; @@ -124,8 +124,7 @@ private static void removeUnmapped(MappingStore mappings, Vari Tree dst = mappings.getDstForSrc(node); if (dst == null || !dst.getLabel().equals(node.getLabel())) { var diffNode = Cast.>unchecked(node).getDiffNode(); - diffNode.diffType = REM; - diffNode.drop(AFTER); + diffNode.split(AFTER).drop(); } } } @@ -157,7 +156,7 @@ private static void addUnmapped(MappingStore mappings, DiffNod new DiffLineNumber(DiffLineNumber.InvalidLineNumber, from, from), new DiffLineNumber(DiffLineNumber.InvalidLineNumber, to, to), variationNode.getFormula(), - Cast.unchecked(variationNode.getLabel().clone()) + Cast.unchecked(variationNode.getLabel().withoutTimeDependentState(BEFORE)) ); } else { diffNode = Cast.>unchecked(src).getDiffNode(); @@ -168,6 +167,7 @@ private static void addUnmapped(MappingStore mappings, DiffNod diffNode.setFromLine(diffNode.getFromLine().withLineNumberAtTime(afterNode.getVariationNode().getLineRange().fromInclusive(), AFTER)); diffNode.setToLine(diffNode.getToLine().withLineNumberAtTime(afterNode.getVariationNode().getLineRange().toExclusive(), AFTER)); + diffNode.setLabel(Cast.unchecked(diffNode.getLabel().withTimeDependentStateFrom(afterNode.getVariationNode().getLabel(), Time.AFTER))); } parent.addChild(diffNode, AFTER); @@ -220,11 +220,7 @@ public static DiffNode improveMatching(DiffNode tree, Ma afterNode.split(BEFORE); } - beforeNode.join(afterNode, (beforeLabel, afterLabel) -> { - Assert.assertEquals(beforeLabel.getLines(), afterLabel.getLines()); - Assert.assertEquals(beforeLabel.getTrailingLines(), afterLabel.getTrailingLines()); - return beforeLabel; - }); + beforeNode.join(afterNode); } Assert.assertTrue(beforeNode.isNon()); From 2a95d11dddd70665687975cb08bbf3aa4e04fc12 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Wed, 13 Aug 2025 11:27:22 +0200 Subject: [PATCH 14/17] test: activate incidentally solved won't fix tests --- .../resources/diffs/parser/{wontfix/01.diff => 19.diff} | 0 .../parser/{wontfix/01_expected.lg => 19_expected.lg} | 4 ++-- .../resources/diffs/parser/{wontfix/03.diff => 20.diff} | 0 src/test/resources/diffs/parser/20_expected.lg | 3 +++ .../resources/diffs/parser/{wontfix/04.diff => 21.diff} | 0 .../parser/{wontfix/04_expected.lg => 21_expected.lg} | 4 ++-- src/test/resources/diffs/parser/wontfix/03_expected.lg | 7 ------- src/test/resources/diffs/parser/wontfix/README.md | 5 ++--- 8 files changed, 9 insertions(+), 14 deletions(-) rename src/test/resources/diffs/parser/{wontfix/01.diff => 19.diff} (100%) rename src/test/resources/diffs/parser/{wontfix/01_expected.lg => 19_expected.lg} (76%) rename src/test/resources/diffs/parser/{wontfix/03.diff => 20.diff} (100%) create mode 100644 src/test/resources/diffs/parser/20_expected.lg rename src/test/resources/diffs/parser/{wontfix/04.diff => 21.diff} (100%) rename src/test/resources/diffs/parser/{wontfix/04_expected.lg => 21_expected.lg} (71%) delete mode 100644 src/test/resources/diffs/parser/wontfix/03_expected.lg diff --git a/src/test/resources/diffs/parser/wontfix/01.diff b/src/test/resources/diffs/parser/19.diff similarity index 100% rename from src/test/resources/diffs/parser/wontfix/01.diff rename to src/test/resources/diffs/parser/19.diff diff --git a/src/test/resources/diffs/parser/wontfix/01_expected.lg b/src/test/resources/diffs/parser/19_expected.lg similarity index 76% rename from src/test/resources/diffs/parser/wontfix/01_expected.lg rename to src/test/resources/diffs/parser/19_expected.lg index 937d7f4fc..34f271f8d 100644 --- a/src/test/resources/diffs/parser/wontfix/01_expected.lg +++ b/src/test/resources/diffs/parser/19_expected.lg @@ -1,3 +1,3 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);A;# \; ifdef A -e 144 16 ba;0;0 +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 3, diff: 3, new: 3);defined(A);# \; ifdef A +e 144 16 ba;0,0 diff --git a/src/test/resources/diffs/parser/wontfix/03.diff b/src/test/resources/diffs/parser/20.diff similarity index 100% rename from src/test/resources/diffs/parser/wontfix/03.diff rename to src/test/resources/diffs/parser/20.diff diff --git a/src/test/resources/diffs/parser/20_expected.lg b/src/test/resources/diffs/parser/20_expected.lg new file mode 100644 index 000000000..3f7dac870 --- /dev/null +++ b/src/test/resources/diffs/parser/20_expected.lg @@ -0,0 +1,3 @@ +v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True +v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 4, diff: 4, new: 4);;/* This is a comment, so it's removed before the preprocessor is run; #ifdef A; */ +e 147 16 ba;0,0 diff --git a/src/test/resources/diffs/parser/wontfix/04.diff b/src/test/resources/diffs/parser/21.diff similarity index 100% rename from src/test/resources/diffs/parser/wontfix/04.diff rename to src/test/resources/diffs/parser/21.diff diff --git a/src/test/resources/diffs/parser/wontfix/04_expected.lg b/src/test/resources/diffs/parser/21_expected.lg similarity index 71% rename from src/test/resources/diffs/parser/wontfix/04_expected.lg rename to src/test/resources/diffs/parser/21_expected.lg index 3683a3f2d..53cfe48b7 100644 --- a/src/test/resources/diffs/parser/wontfix/04_expected.lg +++ b/src/test/resources/diffs/parser/21_expected.lg @@ -1,3 +1,3 @@ v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 4, new: 4);A;#ifdef /*; * Comment; */ A -e 144 16 ba;0;0 +v 144 NON;IF;(old: 1, diff: 1, new: 1);(old: 4, diff: 4, new: 4);defined(A);#ifdef /*; * Comment; */ A +e 144 16 ba;0,0 diff --git a/src/test/resources/diffs/parser/wontfix/03_expected.lg b/src/test/resources/diffs/parser/wontfix/03_expected.lg deleted file mode 100644 index b6eafe2f5..000000000 --- a/src/test/resources/diffs/parser/wontfix/03_expected.lg +++ /dev/null @@ -1,7 +0,0 @@ -v 16 NON;IF;(old: -1, diff: -1, new: -1);(old: -1, diff: -1, new: -1);True -v 147 NON;ARTIFACT;(old: 1, diff: 1, new: 1);(old: 2, diff: 2, new: 2);;/* This is a comment, so it's removed before the preprocessor is run -v 211 NON;ARTIFACT;(old: 2, diff: 2, new: 2);(old: 3, diff: 3, new: 3);; #ifdef A -v 275 NON;ARTIFACT;(old: 3, diff: 3, new: 3);(old: 4, diff: 4, new: 4);; */ -e 147 16 ba;0;0 -e 211 16 ba;1;1 -e 275 16 ba;2;2 diff --git a/src/test/resources/diffs/parser/wontfix/README.md b/src/test/resources/diffs/parser/wontfix/README.md index 5c016ea6e..8df09a425 100644 --- a/src/test/resources/diffs/parser/wontfix/README.md +++ b/src/test/resources/diffs/parser/wontfix/README.md @@ -1,9 +1,8 @@ # Test cases of WONTFIX behaviour ## Sophisticated comment parsing -The test cases 01 and 02 would require the removal of comments before checking -if a line is a macro. The test cases 03 and 04 would required the detection of -multi-line macros which span multiple lines. +The test case 02 would require the removal of comments before checking +if a line is a macro. All of these cases require more engineering than they are worth because they should be pretty rare in practice. From 2fe09895697f57a4bcf94ac8f93f64d10f09586f Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Sat, 18 Mar 2023 13:32:22 +0100 Subject: [PATCH 15/17] refactor: eliminate superfluous `try` --- .../diffdetective/diff/git/GitDiffer.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java b/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java index a79f8936a..600519c76 100644 --- a/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java +++ b/src/main/java/org/variantsync/diffdetective/diff/git/GitDiffer.java @@ -111,14 +111,12 @@ public static CommitDiffResult createCommitDiff( final CanonicalTreeParser currentTreeParser = new CanonicalTreeParser(); final CanonicalTreeParser prevTreeParser = new CanonicalTreeParser(); try (ObjectReader reader = repository.getGitRepo().getRepository().newObjectReader()) { - try { - currentTreeParser.reset(reader, childCommit.getTree()); - if (parentCommit != null) { - prevTreeParser.reset(reader, parentCommit.getTree()); - } - } catch (IOException e) { - return CommitDiffResult.Failure(DiffError.JGIT_ERROR, e.toString()); + currentTreeParser.reset(reader, childCommit.getTree()); + if (parentCommit != null) { + prevTreeParser.reset(reader, parentCommit.getTree()); } + } catch (IOException e) { + return CommitDiffResult.Failure(DiffError.JGIT_ERROR, e.toString()); } final AbstractTreeIterator parentTreeIterator; From fca3a9c44b57e3cda694ee995d744f3dd3faede0 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Thu, 25 Sep 2025 12:26:12 +0200 Subject: [PATCH 16/17] docs: note that the diff parser does not require stacks --- .../variation/diff/parse/VariationDiffParser.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java b/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java index fc7a42b79..9f11bc653 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/parse/VariationDiffParser.java @@ -79,6 +79,15 @@ public record DiffLine(DiffType diffType, String content) { /* State */ + /* Implementation note: + * We use stacks to keep track of the path from the current node (the top element in the stack) + * to the root (the bottom element in the stack) of the variation diff. This is not strictly + * necessary because as soon as a node is pushed onto the stack, the corresponding edge is also + * inserted. Hence, we could reconstruct the stack by traversing the current graph using + * {@link DiffNode#getParent} and check for the root using {@link DiffNode#isRoot}. + * However, for consistency with the papers that explain this algorithm and for ease of + * implementation, we keep the stack based implementation. + */ /** * A stack containing the current path before the edit from the root of the currently parsed From f2e36e2ca6aec5814d3b32381e9eb76f8a4832c5 Mon Sep 17 00:00:00 2001 From: Benjamin Moosherr Date: Thu, 25 Sep 2025 12:26:46 +0200 Subject: [PATCH 17/17] docs: add a disclaimer to `LineGraphImport` --- .../variation/diff/serialize/LineGraphImport.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java index e91593a12..3d9750b98 100644 --- a/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java +++ b/src/main/java/org/variantsync/diffdetective/variation/diff/serialize/LineGraphImport.java @@ -22,6 +22,11 @@ /** * Import VariationDiffs from line graph files. + *

+ * This is a very rudimentary implementation of a deserializer that supports a similar format than + * {@link LineGraphExport}. Rudimentary means that it only deserializes the structure of a variation + * diff. Most other properties, including the label, line numbers and formulas, are not (always) + * correctly deserialized. Hence, this is not an inverse of {@link LineGraphExport}. * * @author Kevin Jedelhauser, Paul Maximilian Bittner */