package jcgp.backend.parsers; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; import jcgp.backend.modules.problem.TestCaseProblem; import jcgp.backend.resources.ModifiableResources; public abstract class TestCaseParser { public static void parse(File file, TestCaseProblem problem, ModifiableResources resources) { FileReader fr; try { fr = new FileReader(file); } catch (FileNotFoundException e) { resources.println("[Parser] Error: could not find " + file.getAbsolutePath() + "."); return; } resources.println("[Parser] Parsing file: " + file.getAbsolutePath() + "..."); Scanner in = new Scanner(fr); boolean readingTestCases = false; int inputs = 0, outputs = 0; int cases = 0; problem.clearTestCases(); while (in.hasNextLine()) { String nextLine = in.nextLine(); if (nextLine.startsWith(".i")) { String[] split = nextLine.split(" +"); inputs = Integer.parseInt(split[1]); } else if (nextLine.startsWith(".o")) { String[] split = nextLine.split(" +"); outputs = Integer.parseInt(split[1]); } else if (nextLine.startsWith(".p") || nextLine.startsWith(".t")) { readingTestCases = true; } else if (nextLine.startsWith(".e")) { readingTestCases = false; } else if (readingTestCases) { String[] split = nextLine.split("( |\t)+"); String[] inputCases = new String[inputs]; String[] outputCases = new String[outputs]; for (int i = 0; i < inputs; i++) { inputCases[i] = split[i]; } for (int o = 0; o < outputs; o++) { outputCases[o] = split[o + inputs]; } problem.addTestCase(inputCases, outputCases); cases++; } } resources.println("[Parser] Finished, added " + cases + " test cases."); in.close(); } public static void parseParameters(File file, ModifiableResources resources) { FileReader fr; try { fr = new FileReader(file); } catch (FileNotFoundException e) { resources.println("[Parser] Error: could not find " + file.getAbsolutePath() + "."); return; } resources.println("[Parser] Parsing parameters..."); Scanner in = new Scanner(fr); while (in.hasNextLine()) { String nextLine = in.nextLine(); if (nextLine.startsWith(".i")) { String[] split = nextLine.split(" +"); resources.setInputs(Integer.parseInt(split[1])); resources.println("[Parser] Number of inputs set to " + resources.inputs()); } else if (nextLine.startsWith(".o")) { String[] split = nextLine.split(" +"); resources.setOutputs(Integer.parseInt(split[1])); resources.println("[Parser] Number of outputs set to " + resources.outputs()); } } in.close(); resources.println("[Parser] Finished parsing parameters."); } }