Skip to content
BencherTest.java 2.52 KiB
Newer Older
Carlos Galindo's avatar
Carlos Galindo committed
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_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) {
//        TEST_PKG = "SetA";
        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, TEST_PKG);
            EKnife.timedRun(arguments,TEST_PKG);
        });
    }

}