Loading e-Knife/src/main/java/eknife/BencherTest.java 0 → 100644 +109 −0 Original line number Diff line number Diff line package eknife; import eknife.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 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 main(String[] args) { 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.println("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"); } } }); } } Loading
e-Knife/src/main/java/eknife/BencherTest.java 0 → 100644 +109 −0 Original line number Diff line number Diff line package eknife; import eknife.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 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 main(String[] args) { 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.println("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"); } } }); } }