package eknife; import java.io.File; import java.io.FileNotFoundException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Objects; import java.util.Scanner; import java.util.function.Consumer; import java.util.function.Supplier; public class BencherTest { private static String TEST_PKG = "erlsom"; private static final String TEST_PKG_INTRA = "bencher_intraprocedural"; private static final String DOT_ERLANG = ".erl"; private static final String EDG_OUTPUT_SLICE = ".edg.slice.output"; public static int cont = 1; public static void findFiles(File directory, String suffix, Consumer 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 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) { // TEST_PKG = "SetA"; // TEST_PKG = "SetB"; File testFolder = new File("./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.printf("[%s] Slicing program #%d %s\n", new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date()), BencherTest.cont, file.getName()); BencherTest.cont++; // EKnife.generateAllSlices(arguments, TEST_PKG); EKnife.timedRun(arguments,TEST_PKG); }); } }