private static void compilerTest(File file) throws Exception {
		// Compile to .java
		try {
			JavaCompiler.compile(file, new PrintWriter(new BufferedWriter(new FileWriter("temp/Main.java"))));
		} catch (Exception ex) {
			System.err.println("Failed to compile to Java: " + file.getName());
			ex.printStackTrace(System.err);
			return;
		}
		// Compile to .class
		String s;
		BufferedReader stdInput;
		Process compiler = new ProcessBuilder("javac", "-cp", "temp", "temp/Main.java").redirectErrorStream(true).start();
		stdInput = new BufferedReader(new InputStreamReader(compiler.getInputStream()));
		s = null;
		boolean compileFailed = false;
		StringBuilder compileMessages = new StringBuilder();
		while ((s = stdInput.readLine()) != null) {
			compileMessages.append(s + "\n");
			if (s.startsWith("Note: ")) {
				continue;
			} else {
				compileFailed = true;
			}
		}
		compiler.waitFor();
		if (compileFailed) {
			System.err.println("javac failed for " + file.getName());
			System.err.println(compileMessages);
			return;
		}
		// Execute the .class
		Process executor = new ProcessBuilder("java", "-cp", "temp;temp", "Main").redirectErrorStream(true).start();
		stdInput = new BufferedReader(new InputStreamReader(executor.getInputStream()));
		s = null;
		StringBuilder compiledOutputStrBuilder = new StringBuilder();
		while ((s = stdInput.readLine()) != null) {
			compiledOutputStrBuilder.append(s + "\n");
		}
		executor.waitFor();
		// Interpret the original script
		boolean hadError = false;
		StringBuilder interpretedOutputStrBuilder = null;
		try {
			interpretedOutputStrBuilder = interpreterExecute(file);
		} catch (AmbroscumError ex) {
			// NOTE: Not sure if this is actually necessary
			hadError = true;
		}
		if (interpretedOutputStrBuilder == null) {
			// Something went horribly wrong
			System.err.println("Something bad happened when interpreting " + file.getName());
			return;
		}
		// Compare the two results
		Scanner compiledOutputScanner = new Scanner(fixNewlines(compiledOutputStrBuilder.toString()));
		Scanner interpretedOutputScanner = new Scanner(fixNewlines(interpretedOutputStrBuilder.toString()));
		Object[] result = compare(compiledOutputScanner, interpretedOutputScanner, hadError);
		// Output the comparison
		boolean correct = (boolean) result[0];
		String testOutputStr = (String) result[1];
		String correctOutputStr = (String) result[2];
		if (correct) {
			System.err.println("Tests passed for " + file.getName());
		} else {
			System.err.println("Incorrect output for " + file.getName());
			System.err.println("-----------");
			System.err.println(testOutputStr);
			System.err.println("-----------");
			System.err.println(correctOutputStr);
		}
	}