Loading e-Knife/src/main/java/eknife/BencherTest.javadeleted 100644 → 0 +0 −151 Original line number Diff line number Diff line package eknife; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Scanner; import java.util.function.Consumer; import java.util.function.Supplier; public class BencherTest { private static final String TEST_PKG = "bencher"; private static final String TEST_PKG_INTRA = "bencher_intraprocedural"; private static final String DOT_ERLANG = ".erl"; private static final String EDG_CRITERION = ".edg.criterion"; private static final String EDG_SLICE = ".edg.sliced"; private static final String EDG_OUTPUT_SLICE = ".edg.slice.output"; public static int cont = 1; public static void findFiles(File directory, String suffix, Consumer<File> consumer) { File[] files = directory.listFiles(); if (files == null) return; for (File f : files) { if (f.isDirectory()) findFiles(f, suffix, consumer); else if (f.getName().endsWith(suffix)) consumer.accept(f); } } private static String readFile(File file, Supplier<String> separator) { try (Scanner in = new Scanner(file)) { StringBuilder builder = new StringBuilder(); while (in.hasNextLine()) builder.append(in.nextLine()).append(separator.get()); return builder.toString(); } catch (FileNotFoundException e) { return ""; } } private static String readFile(File file) { return readFile(file, () -> "\n"); } private static boolean slicesMatch(File slice, File referenceSlice) { return Objects.equals(readFile(slice), readFile(referenceSlice)); } public static void main0(String[] args) { new File(EKnife.sliceGenerationCsv).delete(); new File(EKnife.graphGenerationCsv).delete(); EKnife.printHeadings(EKnife.graphGenerationCsv, EKnife.sliceGenerationCsv); Scanner in = new Scanner(System.in); File testFolder = new File("./e-knife-v1.1.0-src/e-Knife/src/test/resources/regression/", TEST_PKG); findFiles(testFolder, DOT_ERLANG, file -> { File sliceFile = new File(file.getParent(), file.getName() + EDG_CRITERION); if (!sliceFile.exists()) { int[] counter = new int[] { 1 }; System.out.printf("%3d", counter[0]++); System.out.print(readFile(file, () -> String.format("\n%3d", counter[0]++))); System.out.printf("No criterion found for this program (%s), please input one (-1 to skip)\nCriterion: ", file); int line = in.nextInt(); if (line == -1) return; while (line <= 0 || line >= counter[0] - 2) { System.out.printf("Your input is out-of-bounds, please try again [1-%d]: ", counter[0] - 2); line = in.nextInt(); } System.out.printf("Saving line %d as slicing criterion for %s... ", line, file); try (PrintWriter pw = new PrintWriter(sliceFile)) { pw.write(line + ""); System.out.println("DONE"); } catch (FileNotFoundException e) { System.out.println("ERROR"); } } else { String[] arguments = {"-i", "", "-o" ,"", "-l", "", "-v", ""}; File outputDir = testFolder.getAbsoluteFile(); String inputFileName = testFolder.getAbsolutePath() + File.separator + file.getName(); String outputFileName = outputDir + File.separator + file.getName() + EDG_OUTPUT_SLICE; try (Scanner in2 = new Scanner(sliceFile)) { int lineNumber = in2.nextInt(); String var = in2.nextLine(); arguments[1] = inputFileName; arguments[3] = outputFileName; arguments[5] = lineNumber+""; arguments[7] = var.trim(); System.out.print("Slicing program "+ file.getName() + " " + BencherTest.cont + "/23: "); BencherTest.cont++; EKnife.main(arguments); if (slicesMatch(new File(outputFileName),new File(inputFileName + EDG_SLICE))) { System.out.println("SUCCESS"); } else { System.out.println("Failure"); } } catch (FileNotFoundException | NoSuchElementException e) { System.out.println("Error reading the criterion file"); } } }); } public static void main2(String[] args) { EKnife.printHeadings(EKnife.graphGenerationCsv, EKnife.sliceGenerationCsv); File testFolder = new File("./e-knife-v1.1.0-src/e-Knife/src/test/resources/regression/", TEST_PKG_INTRA); findFiles(testFolder, DOT_ERLANG, file -> { String[] arguments = {"-i", "", "-o" ,"", "-l", "", "-v", ""}; File outputDir = testFolder.getAbsoluteFile(); String inputFileName = testFolder.getAbsolutePath() + File.separator + file.getName(); String outputFileName = outputDir + File.separator + file.getName() + EDG_OUTPUT_SLICE; arguments[1] = inputFileName; arguments[3] = outputFileName; arguments[5] = "1"; arguments[7] = "X"; System.out.println("Slicing program "+ file.getName() + " " + BencherTest.cont + "/13"); BencherTest.cont++; EKnife.main(arguments); }); } public static void main(String[] args) { TEST_PKG = "SetB"; File testFolder = new File("./e-knife-v1.1.0-src/e-Knife/src/test/resources/PaperExperiments/", TEST_PKG); findFiles(testFolder, DOT_ERLANG, file -> { File outputDir = testFolder.getAbsoluteFile(); String inputFileName = testFolder.getAbsolutePath() + File.separator + file.getName(); String outputFileName = outputDir + File.separator + file.getName() + EDG_OUTPUT_SLICE; String[] arguments = {"-i", inputFileName, "-o", outputFileName, "-l", "1", "-v", "X"}; System.out.println("Slicing program "+ file.getName() + " " + BencherTest.cont + (TEST_PKG.equals("SetA") ? "/13": "/17")); BencherTest.cont++; EKnife.generateAllSlices(arguments); }); } } e-Knife/src/main/java/eknife/EKnife.java +1 −29 Original line number Diff line number Diff line Loading @@ -35,24 +35,12 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.*; public class EKnife { public enum Language { Java, Erlang, Php } // TODO: OUTPUT FILES PATH // Graph Generation Time public static final String graphGenerationCsv = "/Users/serperu/Desktop/SlicerOutput/Times/generationTimeMilliseconds.csv"; public static final String sliceGenerationCsv = "/Users/serperu/Desktop/SlicerOutput/Times/slicingStatisticsMicroseconds.csv"; public static final String nodeCounterFile = "/Users/serperu/Desktop/SlicerOutput/Times/programSizes.txt"; public static final String outputSliceGenerationFolder = "/Users/serperu/Desktop/SlicerOutput/Slices/"; public static void main(String[] args) { if (args.length == 0) { Loading @@ -70,22 +58,6 @@ public class EKnife } public static void generateAllSlices(String[] args){ if (args.length == 0) { EKnife.printHelp(); return; } final Args arguments = EKnife.processArguments(args); if (!arguments.isValid()) { EKnife.printHelp(); System.exit(3); } EKnife.sliceGenerationRun(arguments); } private static Args processArguments(String[] args) { Args kArgs = new Args(); Loading Loading
e-Knife/src/main/java/eknife/BencherTest.javadeleted 100644 → 0 +0 −151 Original line number Diff line number Diff line package eknife; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.NoSuchElementException; import java.util.Objects; import java.util.Scanner; import java.util.function.Consumer; import java.util.function.Supplier; public class BencherTest { private static final String TEST_PKG = "bencher"; private static final String TEST_PKG_INTRA = "bencher_intraprocedural"; private static final String DOT_ERLANG = ".erl"; private static final String EDG_CRITERION = ".edg.criterion"; private static final String EDG_SLICE = ".edg.sliced"; private static final String EDG_OUTPUT_SLICE = ".edg.slice.output"; public static int cont = 1; public static void findFiles(File directory, String suffix, Consumer<File> consumer) { File[] files = directory.listFiles(); if (files == null) return; for (File f : files) { if (f.isDirectory()) findFiles(f, suffix, consumer); else if (f.getName().endsWith(suffix)) consumer.accept(f); } } private static String readFile(File file, Supplier<String> separator) { try (Scanner in = new Scanner(file)) { StringBuilder builder = new StringBuilder(); while (in.hasNextLine()) builder.append(in.nextLine()).append(separator.get()); return builder.toString(); } catch (FileNotFoundException e) { return ""; } } private static String readFile(File file) { return readFile(file, () -> "\n"); } private static boolean slicesMatch(File slice, File referenceSlice) { return Objects.equals(readFile(slice), readFile(referenceSlice)); } public static void main0(String[] args) { new File(EKnife.sliceGenerationCsv).delete(); new File(EKnife.graphGenerationCsv).delete(); EKnife.printHeadings(EKnife.graphGenerationCsv, EKnife.sliceGenerationCsv); Scanner in = new Scanner(System.in); File testFolder = new File("./e-knife-v1.1.0-src/e-Knife/src/test/resources/regression/", TEST_PKG); findFiles(testFolder, DOT_ERLANG, file -> { File sliceFile = new File(file.getParent(), file.getName() + EDG_CRITERION); if (!sliceFile.exists()) { int[] counter = new int[] { 1 }; System.out.printf("%3d", counter[0]++); System.out.print(readFile(file, () -> String.format("\n%3d", counter[0]++))); System.out.printf("No criterion found for this program (%s), please input one (-1 to skip)\nCriterion: ", file); int line = in.nextInt(); if (line == -1) return; while (line <= 0 || line >= counter[0] - 2) { System.out.printf("Your input is out-of-bounds, please try again [1-%d]: ", counter[0] - 2); line = in.nextInt(); } System.out.printf("Saving line %d as slicing criterion for %s... ", line, file); try (PrintWriter pw = new PrintWriter(sliceFile)) { pw.write(line + ""); System.out.println("DONE"); } catch (FileNotFoundException e) { System.out.println("ERROR"); } } else { String[] arguments = {"-i", "", "-o" ,"", "-l", "", "-v", ""}; File outputDir = testFolder.getAbsoluteFile(); String inputFileName = testFolder.getAbsolutePath() + File.separator + file.getName(); String outputFileName = outputDir + File.separator + file.getName() + EDG_OUTPUT_SLICE; try (Scanner in2 = new Scanner(sliceFile)) { int lineNumber = in2.nextInt(); String var = in2.nextLine(); arguments[1] = inputFileName; arguments[3] = outputFileName; arguments[5] = lineNumber+""; arguments[7] = var.trim(); System.out.print("Slicing program "+ file.getName() + " " + BencherTest.cont + "/23: "); BencherTest.cont++; EKnife.main(arguments); if (slicesMatch(new File(outputFileName),new File(inputFileName + EDG_SLICE))) { System.out.println("SUCCESS"); } else { System.out.println("Failure"); } } catch (FileNotFoundException | NoSuchElementException e) { System.out.println("Error reading the criterion file"); } } }); } public static void main2(String[] args) { EKnife.printHeadings(EKnife.graphGenerationCsv, EKnife.sliceGenerationCsv); File testFolder = new File("./e-knife-v1.1.0-src/e-Knife/src/test/resources/regression/", TEST_PKG_INTRA); findFiles(testFolder, DOT_ERLANG, file -> { String[] arguments = {"-i", "", "-o" ,"", "-l", "", "-v", ""}; File outputDir = testFolder.getAbsoluteFile(); String inputFileName = testFolder.getAbsolutePath() + File.separator + file.getName(); String outputFileName = outputDir + File.separator + file.getName() + EDG_OUTPUT_SLICE; arguments[1] = inputFileName; arguments[3] = outputFileName; arguments[5] = "1"; arguments[7] = "X"; System.out.println("Slicing program "+ file.getName() + " " + BencherTest.cont + "/13"); BencherTest.cont++; EKnife.main(arguments); }); } public static void main(String[] args) { TEST_PKG = "SetB"; File testFolder = new File("./e-knife-v1.1.0-src/e-Knife/src/test/resources/PaperExperiments/", TEST_PKG); findFiles(testFolder, DOT_ERLANG, file -> { File outputDir = testFolder.getAbsoluteFile(); String inputFileName = testFolder.getAbsolutePath() + File.separator + file.getName(); String outputFileName = outputDir + File.separator + file.getName() + EDG_OUTPUT_SLICE; String[] arguments = {"-i", inputFileName, "-o", outputFileName, "-l", "1", "-v", "X"}; System.out.println("Slicing program "+ file.getName() + " " + BencherTest.cont + (TEST_PKG.equals("SetA") ? "/13": "/17")); BencherTest.cont++; EKnife.generateAllSlices(arguments); }); } }
e-Knife/src/main/java/eknife/EKnife.java +1 −29 Original line number Diff line number Diff line Loading @@ -35,24 +35,12 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.*; public class EKnife { public enum Language { Java, Erlang, Php } // TODO: OUTPUT FILES PATH // Graph Generation Time public static final String graphGenerationCsv = "/Users/serperu/Desktop/SlicerOutput/Times/generationTimeMilliseconds.csv"; public static final String sliceGenerationCsv = "/Users/serperu/Desktop/SlicerOutput/Times/slicingStatisticsMicroseconds.csv"; public static final String nodeCounterFile = "/Users/serperu/Desktop/SlicerOutput/Times/programSizes.txt"; public static final String outputSliceGenerationFolder = "/Users/serperu/Desktop/SlicerOutput/Slices/"; public static void main(String[] args) { if (args.length == 0) { Loading @@ -70,22 +58,6 @@ public class EKnife } public static void generateAllSlices(String[] args){ if (args.length == 0) { EKnife.printHelp(); return; } final Args arguments = EKnife.processArguments(args); if (!arguments.isValid()) { EKnife.printHelp(); System.exit(3); } EKnife.sliceGenerationRun(arguments); } private static Args processArguments(String[] args) { Args kArgs = new Args(); Loading