Skip to content

Commit f743e2c

Browse files
eugen-shulimovibbem
authored andcommitted
feat: rework the unparse experiment evaluation
1 parent e312978 commit f743e2c

4 files changed

Lines changed: 206 additions & 113 deletions

File tree

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
Project name | Domain | Source code available (\*\*y\*\*es/\*\*n\*\*o)? | Is it a git repository (\*\*y\*\*es/\*\*n\*\*o)? | Repository URL | Clone URL | Estimated number of commits
22
-------------------|-------------------------|-------------------------------------------------|--------------------------------------------------|--------------------------------------------------------------|----------------------------------------------------|---------------------------------
3-
xfig | vector graphics editor | y | y | https://github.com/hhoeflin/xfig | https://github.com/hhoeflin/xfig.git | 9
3+
berkeley-db-libdb | database system | y | y | https://github.com/berkeleydb/libdb | https://github.com/berkeleydb/libdb.git | 7
4+
sylpheed | e-mail client | y | y | https://github.com/jan0sch/sylpheed | https://github.com/jan0sch/sylpheed.git | 2,682
5+
vim | text editor | y | y | https://github.com/vim/vim | https://github.com/vim/vim.git | 17,109

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

Lines changed: 82 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.util.stream.Stream;
1212
import org.variantsync.diffdetective.AnalysisRunner;
1313
import org.variantsync.diffdetective.analysis.Analysis;
14+
import org.variantsync.diffdetective.datasets.DatasetDescription;
15+
import org.variantsync.diffdetective.datasets.DefaultDatasets;
1416
import org.variantsync.diffdetective.datasets.PatchDiffParseOptions;
1517
import org.variantsync.diffdetective.datasets.PatchDiffParseOptions.DiffStoragePolicy;
1618
import org.variantsync.diffdetective.datasets.Repository;
@@ -19,11 +21,9 @@
1921

2022
public class Main {
2123

22-
public static String dataSetPath = "";
23-
2424
public static void main(String[] args) throws IOException {
2525
startAnalysis();
26-
// evaluationAnalysis(Path.of("docs","datasets","eugen-bachelor-thesis.md"));
26+
evaluationAnalysis(Path.of("docs", "datasets", "eugen-bachelor-thesis.md"));
2727

2828
}
2929

@@ -54,24 +54,32 @@ protected static BiConsumer<Repository, Path> extractionRunner() {
5454
};
5555
}
5656

57+
/**
58+
* Verarbeitet die Ergebnisse der Analyse um aus einzelnen
59+
* Angaben eine gesamt Übersicht zu bekommen
60+
*
61+
* @param path Pfad zu der markdown datei, aus der die repositories für die
62+
* Analyse stammen
63+
* @throws IOException
64+
*/
5765
private static void evaluationAnalysis(Path path) throws IOException {
5866
int count = 0;
59-
int error = 0;
6067
int[] diffTest = { 0, 0, 0, 0, 0, 0, 0, 0 };
6168
int[] diffSemEqTest = { 0, 0, 0, 0, };
6269
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+", "");
70+
final List<DatasetDescription> datasets = DefaultDatasets.loadDatasets(path);
71+
72+
for (DatasetDescription description : datasets) {
6873
Stream<Path> files = Files
69-
.list(Path.of("results", "thesis_es", name))
74+
.list(Path.of("results", "thesis_es", description.name()))
7075
.filter(filename -> filename.getFileName().toString().endsWith(".thesis_es.csv"));
7176
for (Path tempPath : files.toList()) {
7277
String[] splitFileData = Files.readString(tempPath).split("\n");
7378
for (int j = 1; j < splitFileData.length; j++) {
7479
String[] splitLineData = splitFileData[j].split(";");
80+
for (int i = 0; i < splitLineData.length; i++) {
81+
splitLineData[i] = parseNumberStringToIntWithLengthGreaterOne(splitLineData[i]);
82+
}
7583
count = count + 1;
7684
diffTest[0] = diffTest[0] + Integer.parseInt(splitLineData[8]);
7785
diffTest[1] = diffTest[1] + Integer.parseInt(splitLineData[9]);
@@ -101,55 +109,77 @@ private static void evaluationAnalysis(Path path) throws IOException {
101109
treeTest[5] = treeTest[5] + Integer.parseInt(splitLineData[33]);
102110
treeTest[6] = treeTest[6] + Integer.parseInt(splitLineData[34]);
103111
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-
}
112+
119113
}
120114
}
121115
}
122116
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);
117+
result.add("Anzahl geprüfter Diffs : " + count + "\n");
118+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine0 und EmptyLine0 : " + diffTest[0] + "\n");
119+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine0 und EmptyLine0 : " + diffTest[4]
120+
+ "\n");
121+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine0 und EmptyLine0 : " + diffSemEqTest[0] + "\n");
122+
result.add("Anzahl von Diffs mit MultiLine0 und EmptyLine0, welche keine Korrektheitskriterium erfühlt haben : "
123+
+ (count - diffSemEqTest[0]) + "\n");
124+
125+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine1 und EmptyLine0 : " + diffTest[1] + "\n");
126+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine1 und EmptyLine0 : " + diffTest[5]
127+
+ "\n");
128+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine1 und EmptyLine0 : " + diffSemEqTest[1] + "\n");
129+
result.add("Anzahl von Diffs mit MultiLine1 und EmptyLine0, welche keine Korrektheitskriterium erfühlt haben : "
130+
+ (count - diffSemEqTest[1]) + "\n");
131+
132+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine0 und EmptyLine1 : " + diffTest[2] + "\n");
133+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine0 und EmptyLine1 : " + diffTest[6]
134+
+ "\n");
135+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine0 und EmptyLine1 : " + diffSemEqTest[2] + "\n");
136+
result.add("Anzahl von Diffs mit MultiLine0 und EmptyLine1, welche keine Korrektheitskriterium erfühlt haben : "
137+
+ (count - diffSemEqTest[2]) + "\n");
138+
139+
result.add("Anzahl syntaktisch korrekter Diffs mit MultiLine1 und EmptyLine1 : " + diffTest[3] + "\n");
140+
result.add("Anzahl syntaktisch korrekter Diffs ohne Whitespace mit MultiLine1 und EmptyLine1 : " + diffTest[7]
141+
+ "\n");
142+
result.add("Anzahl semantisch korrekter Diffs mit MultiLine1 und EmptyLine1 : " + diffSemEqTest[3] + "\n");
143+
result.add("Anzahl von Diffs mit MultiLine1 und EmptyLine1, welche keine Korrektheitskriterium erfühlt haben : "
144+
+ (count - diffSemEqTest[3]) + "\n");
145+
146+
result.add("-------------------------------------------------------------------------------------------");
147+
result.add("Anzahl geprüfter Trees : " + count * 2 + "\n");
148+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine0 und EmptyLine0 : " + treeTest[0] + "\n");
149+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine0 und EmptyLine0 : " + treeTest[4]
150+
+ "\n");
151+
result.add("Anzahl von Trees mit MultiLine0 und EmptyLine0, welche keine Korrektheitskriterium erfühlt haben : "
152+
+ (2 * count - treeTest[4]) + "\n");
153+
154+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine1 und EmptyLine0 : " + treeTest[1] + "\n");
155+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine1 und EmptyLine0 : " + treeTest[5]
156+
+ "\n");
157+
result.add("Anzahl von Trees mit MultiLine1 und EmptyLine0, welche keine Korrektheitskriterium erfühlt haben : "
158+
+ (2 * count - treeTest[5]) + "\n");
159+
160+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine0 und EmptyLine1 : " + treeTest[2] + "\n");
161+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine0 und EmptyLine1 : " + treeTest[6]
162+
+ "\n");
163+
result.add("Anzahl von Trees mit MultiLine0 und EmptyLine1, welche keine Korrektheitskriterium erfühlt haben : "
164+
+ (2 * count - treeTest[6]) + "\n");
165+
166+
result.add("Anzahl syntaktisch korrekter Trees mit MultiLine1 und EmptyLine1 : " + treeTest[3] + "\n");
167+
result.add("Anzahl syntaktisch korrekter Trees ohne Whitespace mit MultiLine1 und EmptyLine1 : " + treeTest[7]
168+
+ "\n");
169+
result.add("Anzahl von Trees mit MultiLine1 und EmptyLine1, welche keine Korrektheitskriterium erfühlt haben : "
170+
+ (2 * count - treeTest[7]) + "\n");
145171

146172
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-
}
152173

153174
}
154175

176+
private static String parseNumberStringToIntWithLengthGreaterOne(String string) {
177+
string = string.trim();
178+
for (char c : string.toCharArray()) {
179+
if (Character.isDigit(c)) {
180+
return Character.toString(c);
181+
}
182+
}
183+
return "";
184+
}
155185
}

0 commit comments

Comments
 (0)