Skip to content

Commit 5bdb8f1

Browse files
eugen-shulimovibbem
authored andcommitted
feat: change some things in the analysis
1 parent 870b76a commit 5bdb8f1

6 files changed

Lines changed: 240 additions & 79 deletions

File tree

src/main/java/org/variantsync/diffdetective/experiments/thesis_es/Main.java

Lines changed: 104 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package org.variantsync.diffdetective.experiments.thesis_es;
22

33
import java.io.IOException;
4+
import java.nio.file.Files;
45
import java.nio.file.Path;
56
import java.nio.file.Paths;
7+
import java.util.ArrayList;
68
import java.util.List;
79
import java.util.function.BiConsumer;
810
import java.util.function.BiFunction;
11+
import java.util.stream.Stream;
912
import org.variantsync.diffdetective.AnalysisRunner;
1013
import org.variantsync.diffdetective.analysis.Analysis;
1114
import org.variantsync.diffdetective.datasets.PatchDiffParseOptions;
15+
import org.variantsync.diffdetective.datasets.PatchDiffParseOptions.DiffStoragePolicy;
1216
import org.variantsync.diffdetective.datasets.Repository;
1317
import org.variantsync.diffdetective.diff.git.DiffFilter;
1418
import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions;
@@ -19,6 +23,7 @@ public class Main {
1923

2024
public static void main(String[] args) throws IOException {
2125
startAnalysis();
26+
// evaluationAnalysis(Path.of("docs","datasets","eugen-bachelor-thesis.md"));
2227

2328
}
2429

@@ -28,7 +33,7 @@ private static void startAnalysis() throws IOException {
2833
Paths.get("results", "thesis_es"),
2934
Paths.get("docs", "datasets", "eugen-bachelor-thesis.md"),
3035
repo -> new PatchDiffParseOptions(
31-
PatchDiffParseOptions.DiffStoragePolicy.DO_NOT_REMEMBER,
36+
DiffStoragePolicy.REMEMBER_FULL_DIFF,
3237
VariationDiffParseOptions.Default),
3338
repo -> new DiffFilter.Builder().allowMerge(true)
3439
.allowedFileExtensions("c", "cpp").build(),
@@ -49,4 +54,102 @@ protected static BiConsumer<Repository, Path> extractionRunner() {
4954
};
5055
}
5156

57+
private static void evaluationAnalysis(Path path) throws IOException {
58+
int count = 0;
59+
int error = 0;
60+
int[] diffTest = { 0, 0, 0, 0, 0, 0, 0, 0 };
61+
int[] diffSemEqTest = { 0, 0, 0, 0, };
62+
int[] treeTest = { 0, 0, 0, 0, 0, 0, 0, 0 };
63+
List<String> errorList = new ArrayList<>();
64+
String data = Files.readString(path);
65+
String[] splitPathData = data.split("\n");
66+
for (int i = 2; i < splitPathData.length; i++) {
67+
String name = splitPathData[i].split("|")[0].replaceAll("\\s+", "");
68+
Stream<Path> files = Files
69+
.list(Path.of("results", "thesis_es", name))
70+
.filter(filename -> filename.getFileName().toString().endsWith(".thesis_es.csv"));
71+
for (Path tempPath : files.toList()) {
72+
String[] splitFileData = Files.readString(tempPath).split("\n");
73+
for (int j = 1; j < splitFileData.length; j++) {
74+
String[] splitLineData = splitFileData[j].split(";");
75+
count = count + 1;
76+
diffTest[0] = diffTest[0] + Integer.parseInt(splitLineData[8]);
77+
diffTest[1] = diffTest[1] + Integer.parseInt(splitLineData[9]);
78+
diffTest[2] = diffTest[2] + Integer.parseInt(splitLineData[10]);
79+
diffTest[3] = diffTest[3] + Integer.parseInt(splitLineData[11]);
80+
diffTest[4] = diffTest[4] + Integer.parseInt(splitLineData[12]);
81+
diffTest[5] = diffTest[5] + Integer.parseInt(splitLineData[13]);
82+
diffTest[6] = diffTest[6] + Integer.parseInt(splitLineData[14]);
83+
diffTest[7] = diffTest[7] + Integer.parseInt(splitLineData[15]);
84+
diffSemEqTest[0] = diffSemEqTest[0] + Integer.parseInt(splitLineData[16]);
85+
diffSemEqTest[1] = diffSemEqTest[1] + Integer.parseInt(splitLineData[17]);
86+
diffSemEqTest[2] = diffSemEqTest[2] + Integer.parseInt(splitLineData[18]);
87+
diffSemEqTest[3] = diffSemEqTest[3] + Integer.parseInt(splitLineData[19]);
88+
treeTest[0] = treeTest[0] + Integer.parseInt(splitLineData[20]);
89+
treeTest[1] = treeTest[1] + Integer.parseInt(splitLineData[21]);
90+
treeTest[2] = treeTest[2] + Integer.parseInt(splitLineData[22]);
91+
treeTest[3] = treeTest[3] + Integer.parseInt(splitLineData[23]);
92+
treeTest[4] = treeTest[4] + Integer.parseInt(splitLineData[24]);
93+
treeTest[5] = treeTest[5] + Integer.parseInt(splitLineData[25]);
94+
treeTest[6] = treeTest[6] + Integer.parseInt(splitLineData[26]);
95+
treeTest[7] = treeTest[7] + Integer.parseInt(splitLineData[27]);
96+
treeTest[0] = treeTest[0] + Integer.parseInt(splitLineData[28]);
97+
treeTest[1] = treeTest[1] + Integer.parseInt(splitLineData[29]);
98+
treeTest[2] = treeTest[2] + Integer.parseInt(splitLineData[30]);
99+
treeTest[3] = treeTest[3] + Integer.parseInt(splitLineData[31]);
100+
treeTest[4] = treeTest[4] + Integer.parseInt(splitLineData[32]);
101+
treeTest[5] = treeTest[5] + Integer.parseInt(splitLineData[33]);
102+
treeTest[6] = treeTest[6] + Integer.parseInt(splitLineData[34]);
103+
treeTest[7] = treeTest[7] + Integer.parseInt(splitLineData[35]);
104+
int errorCode = Integer.parseInt(splitLineData[36]);
105+
if (errorCode != 1) {
106+
if (errorCode % 2 == 0) {
107+
errorList.add(splitLineData[37]);
108+
error = error + 1;
109+
}
110+
if (errorCode % 3 == 0) {
111+
errorList.add(splitLineData[38]);
112+
error = error + 1;
113+
}
114+
if (errorCode % 5 == 0) {
115+
errorList.add(splitLineData[39]);
116+
error = error + 1;
117+
}
118+
}
119+
}
120+
}
121+
}
122+
List<String> result = new ArrayList<>();
123+
result.add("Anzahl geprüfter Diffs : " + count);
124+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine0 und EmptyLine0 : " + diffTest[0]);
125+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine1 und EmptyLine0 : " + diffTest[1]);
126+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine0 und EmptyLine1 : " + diffTest[2]);
127+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine1 und EmptyLine1 : " + diffTest[3]);
128+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine0 und EmptyLine0 : " + diffTest[4]);
129+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine1 und EmptyLine0 : " + diffTest[5]);
130+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine0 und EmptyLine1 : " + diffTest[6]);
131+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine1 und EmptyLine1 : " + diffTest[7]);
132+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine0 und EmptyLine0 : " + diffSemEqTest[0]);
133+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine1 und EmptyLine0 : " + diffSemEqTest[1]);
134+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine0 und EmptyLine1 : " + diffSemEqTest[2]);
135+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine1 und EmptyLine1 : " + diffSemEqTest[3]);
136+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine0 und EmptyLine0 : " + treeTest[0]);
137+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine1 und EmptyLine0 : " + treeTest[1]);
138+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine0 und EmptyLine1 : " + treeTest[2]);
139+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine1 und EmptyLine1 : " + treeTest[3]);
140+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine0 und EmptyLine0 : " + treeTest[4]);
141+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine1 und EmptyLine0 : " + treeTest[5]);
142+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine0 und EmptyLine1 : " + treeTest[6]);
143+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine1 und EmptyLine1 : " + treeTest[7]);
144+
result.add("Anzahl Fehler : " + error);
145+
146+
Files.write(Path.of("results", "thesis_es", "resultOfAnalysis.txt"), result);
147+
int c = 1;
148+
for (String line : errorList) {
149+
Files.writeString(Path.of("results", "thesis_es", "errors", c + "error.txt"), line);
150+
c = c + 1;
151+
}
152+
153+
}
154+
52155
}

src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseAnalysis.java

Lines changed: 62 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.variantsync.diffdetective.experiments.thesis_es;
22

33
import java.io.IOException;
4-
import java.nio.file.Files;
5-
import java.nio.file.Path;
64
import org.eclipse.jgit.diff.DiffAlgorithm.SupportedAlgorithm;
75
import org.variantsync.diffdetective.analysis.Analysis;
86
import org.variantsync.diffdetective.diff.git.PatchDiff;
@@ -17,11 +15,14 @@
1715
import org.variantsync.diffdetective.variation.diff.construction.JGitDiff;
1816
import org.variantsync.diffdetective.variation.diff.parse.VariationDiffParseOptions;
1917
import org.variantsync.diffdetective.variation.tree.VariationTree;
18+
import org.variantsync.diffdetective.variation.tree.source.VariationTreeSource;
2019

2120
public class UnparseAnalysis implements Analysis.Hooks {
2221

2322
public static final String CSV_EXTENSION = ".thesis_es.csv";
2423

24+
public static int count = 0;
25+
2526
private StringBuilder csv;
2627

2728
@Override
@@ -38,37 +39,50 @@ public boolean analyzeVariationDiff(Analysis analysis) throws Exception {
3839
String textDiff = patch.getDiff();
3940
String codeBefore = "";
4041
String codeAfter = "";
42+
/*
43+
if (count < 10) {
44+
Path pathTreeBefore = Paths.get("results", "thesis_es", "treeBefore" + count + ".txt");
45+
Path pathTreeAfter = Paths.get("results", "thesis_es", "treeAfter" + count + ".txt");
46+
Path pathDiff = Paths.get("results", "thesis_es", "diff" + count + ".txt");
47+
Files.writeString(pathTreeBefore, codeBefore);
48+
Files.writeString(pathTreeAfter, codeAfter);
49+
Files.writeString(pathDiff, textDiff);
50+
count++;
51+
}
52+
*/
53+
4154
codeBefore = VariationUnparser.undiff(patch.getDiff(), Time.BEFORE);
4255
codeAfter = VariationUnparser.undiff(patch.getDiff(), Time.AFTER);
43-
codeBefore = codeBefore.replaceAll("\\r\\n", "\n");
44-
codeAfter = codeAfter.replaceAll("\\r\\n", "\n");
56+
// codeBefore = codeBefore.replaceAll("\\r\\n", "\n");
57+
// codeAfter = codeAfter.replaceAll("\\r\\n", "\n");
4558
boolean[][] diffTestAll = runTestsDiff(textDiff);
46-
boolean[] treeBeforeTest = runTestsTree(codeBefore, Path.of(patch.getFileName(Time.BEFORE)));
47-
boolean[] treeAfterTest = runTestsTree(codeAfter, Path.of(patch.getFileName(Time.AFTER)));
59+
boolean[] treeBeforeTest = runTestsTree(codeBefore);
60+
boolean[] treeAfterTest = runTestsTree(codeAfter);
4861
boolean[] dataTests = runDataTest(textDiff, codeBefore, codeAfter);
4962
int error = 1;
50-
String[] errorSave = new String[] { null, null, null };
51-
if (!(boolOr(diffTestAll[0]) || (boolOr(diffTestAll[1]) && boolOr(diffTestAll[2])))) {
63+
String[] errorSave = new String[] { "", "", "" };
64+
if (!(boolOr(diffTestAll[0]) || boolOr(diffTestAll[1]))) {
5265
error = error * 2;
53-
errorSave[0] = textDiff;
66+
// errorSave[0] = ;
5467
}
5568
if (!boolOr(treeBeforeTest)) {
5669
error = error * 3;
5770
errorSave[1] = codeBefore;
5871
}
5972
if (!boolOr(treeAfterTest)) {
6073
error = error * 5;
61-
errorSave[2] = codeAfter;
74+
// errorSave[2] = codeAfter;
6275
}
76+
/*
6377
if (!boolOr(dataTests)) {
6478
error = error * 7;
6579
}
80+
*/
6681

6782
final UnparseEvaluation ue = new UnparseEvaluation(
6883
boolToInt(dataTests),
6984
boolToInt(diffTestAll[0]),
7085
boolToInt(diffTestAll[1]),
71-
boolToInt(diffTestAll[2]),
7286
boolToInt(treeBeforeTest),
7387
boolToInt(treeAfterTest),
7488
error,
@@ -84,14 +98,36 @@ public void endBatch(Analysis analysis) throws IOException {
8498
csv.toString());
8599
}
86100

101+
public static String removeWhitespace1(String string) {
102+
string = string.replaceAll("\n(\\s*\n)+", "\n");
103+
string = string.replaceAll("\n\\s+", "\n");
104+
if (!string.isEmpty()) {
105+
if (string.charAt(string.length() - 1) == '\n') {
106+
return string.substring(0, string.length() - 1);
107+
}
108+
}
109+
return string;
110+
}
111+
87112
public static String removeWhitespace(String string) {
88-
return string.replaceAll("\\s+", "");
113+
if (string.isEmpty()) {
114+
return "";
115+
} else {
116+
StringBuilder result = new StringBuilder();
117+
for (String line : string.split("\n")) {
118+
if (!line.replaceAll("\\s+", "").isEmpty()) {
119+
result.append(line.trim());
120+
result.append("\n");
121+
}
122+
}
123+
return result.substring(0, result.length() - 1);
124+
}
89125
}
90126

91-
public static String parseUnparseTree(Path path, VariationDiffParseOptions option) {
127+
public static String parseUnparseTree(String text, VariationDiffParseOptions option) {
92128
String temp = "b";
93129
try {
94-
VariationTree<DiffLinesLabel> tree = VariationTree.fromFile(path, option);
130+
VariationTree<DiffLinesLabel> tree = VariationTree.fromText(text, VariationTreeSource.Unknown, option);
95131
temp = VariationUnparser.variationTreeUnparser(tree);
96132
} catch (Exception e) {
97133
e.printStackTrace();
@@ -131,27 +167,28 @@ public static boolean equalsText(String text1, String text2, boolean whitespace)
131167
}
132168

133169
public static boolean[][] runTestsDiff(String text) {
134-
boolean[][] array = new boolean[3][8];
170+
boolean[][] array = new boolean[2][8];
135171
for (int i = 0; i < 4; i++) {
136172
String diff = parseUnparseDiff(text, optionsSetter(i));
137173
array[0][i] = equalsText(text, diff, true);
138174
array[0][i + 4] = equalsText(text, diff, false);
139-
array[1][i] = equalsText(VariationUnparser.undiff(text, Time.BEFORE),
140-
VariationUnparser.undiff(diff, Time.BEFORE), true);
141-
array[1][i + 4] = equalsText(VariationUnparser.undiff(text, Time.BEFORE),
142-
VariationUnparser.undiff(diff, Time.BEFORE), false);
143-
array[2][i] = equalsText(VariationUnparser.undiff(text, Time.AFTER),
144-
VariationUnparser.undiff(diff, Time.AFTER), true);
145-
array[2][i + 4] = equalsText(VariationUnparser.undiff(text, Time.AFTER),
146-
VariationUnparser.undiff(diff, Time.AFTER), false);
175+
array[1][i] = (equalsText(VariationUnparser.undiff(text, Time.BEFORE),
176+
VariationUnparser.undiff(diff, Time.BEFORE), true)
177+
&& equalsText(VariationUnparser.undiff(text, Time.AFTER),
178+
VariationUnparser.undiff(diff, Time.AFTER), true))
179+
|| (equalsText(VariationUnparser.undiff(text, Time.BEFORE),
180+
VariationUnparser.undiff(diff, Time.BEFORE), false)
181+
&& equalsText(VariationUnparser.undiff(text, Time.AFTER),
182+
VariationUnparser.undiff(diff, Time.AFTER), false));
183+
array[1][i + 4] = false;
147184
}
148185
return array;
149186
}
150187

151-
public static boolean[] runTestsTree(String text, Path path) {
188+
public static boolean[] runTestsTree(String text) {
152189
boolean[] array = new boolean[8];
153190
for (int i = 0; i < 4; i++) {
154-
String temp = parseUnparseTree(path, optionsSetter(i));
191+
String temp = parseUnparseTree(text, optionsSetter(i));
155192
array[i] = equalsText(text, temp, true);
156193
array[i + 4] = equalsText(text, temp, false);
157194
}

src/main/java/org/variantsync/diffdetective/experiments/thesis_es/UnparseEvaluation.java

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
public record UnparseEvaluation(
88
int[] dataTest,
99
int[] diffTest,
10-
int[] diffBeforeTreeTest,
11-
int[] diffAfterTreeTest,
10+
int[] diffSemEqTest,
1211
int[] treeBeforeTest,
1312
int[] treeAfterTest,
1413
int error,
@@ -33,22 +32,10 @@ public String toCSV(String delimiter) {
3332
diffTest[5],
3433
diffTest[6],
3534
diffTest[7],
36-
diffBeforeTreeTest[0],
37-
diffBeforeTreeTest[1],
38-
diffBeforeTreeTest[2],
39-
diffBeforeTreeTest[3],
40-
diffBeforeTreeTest[4],
41-
diffBeforeTreeTest[5],
42-
diffBeforeTreeTest[6],
43-
diffBeforeTreeTest[7],
44-
diffAfterTreeTest[0],
45-
diffAfterTreeTest[1],
46-
diffAfterTreeTest[2],
47-
diffAfterTreeTest[3],
48-
diffAfterTreeTest[4],
49-
diffAfterTreeTest[5],
50-
diffAfterTreeTest[6],
51-
diffAfterTreeTest[7],
35+
diffSemEqTest[0],
36+
diffSemEqTest[1],
37+
diffSemEqTest[2],
38+
diffSemEqTest[3],
5239
treeBeforeTest[0],
5340
treeBeforeTest[1],
5441
treeBeforeTest[2],
@@ -89,22 +76,10 @@ public static String makeHeader(String delimiter) {
8976
"diffEqTestMultiL1EmptyL0White",
9077
"diffEqTestMultiL0EmptyL1White",
9178
"diffEqTestMultiL1EmptyL1White",
92-
"diffEqTestBefTreeMultiL0EmptyL0",
93-
"diffEqTestBefTreeMultiL1EmptyL0",
94-
"diffEqTestBefTreeMultiL0EmptyL1",
95-
"diffEqTestBefTreeMultiL1EmptyL1",
96-
"diffEqTestBefTreeMultiL0EmptyL0White",
97-
"diffEqTestBefTreeMultiL1EmptyL0White",
98-
"diffEqTestBefTreeMultiL0EmptyL1White",
99-
"diffEqTestBefTreeMultiL1EmptyL1White",
100-
"diffEqTestAftTreeMultiL0EmptyL0",
101-
"diffEqTestAftTreeMultiL1EmptyL0",
102-
"diffEqTestAftTreeMultiL0EmptyL1",
103-
"diffEqTestAftTreeMultiL1EmptyL1",
104-
"diffEqTestAftTreeMultiL0EmptyL0White",
105-
"diffEqTestAftTreeMultiL1EmptyL0White",
106-
"diffEqTestAftTreeMultiL0EmptyL1White",
107-
"diffEqTestAftTreeMultiL1EmptyL1White",
79+
"diffSemEqTestMultiL0EmptyL0",
80+
"diffSemEqTestMultiL1EmptyL0",
81+
"diffSemEqTestMultiL0EmptyL1",
82+
"diffSemEqTestMultiL1EmptyL1",
10883
"treeBeforeEqTestMultiL0EmptyL0",
10984
"treeBeforeEqTestMultiL1EmptyL0",
11085
"treeBeforeEqTestMultiL0EmptyL1",

0 commit comments

Comments
 (0)