diff --git a/ucompile b/ucompile index 277534d..6b4a8b7 100755 --- a/ucompile +++ b/ucompile @@ -15,7 +15,7 @@ def check_dependencies() -> None: print(f"{Fore.RED}Error: {command} not found{Style.RESET_ALL}") return -def run_input_cases(program, verbose, output=False, tests_dir="."): +def run_input_cases(program, verbose, output=False, tests_dir=".", time=False): input_files = glob(os.path.join(tests_dir, "*.in")) if len(input_files) < 1: @@ -34,6 +34,8 @@ def run_input_cases(program, verbose, output=False, tests_dir="."): with open(out_file, 'r') as f: expected_output = f.read() + if time: + end_command = f"time {end_command}" result = subprocess.run(end_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) program_output = result.stdout @@ -74,29 +76,29 @@ def run_input_cases(program, verbose, output=False, tests_dir="."): print("-----------") return -def python_compile(file_name, verbose=False, tests_dir="."): - run_input_cases("python3 " + file_name, verbose, tests_dir=tests_dir) +def python_compile(file_name, verbose=False, tests_dir=".", time=False): + run_input_cases("python3 " + file_name, verbose, tests_dir=tests_dir, time=time) return -def java_compile(file_name, maven=False, verbose=False, tests_dir="."): +def java_compile(file_name, maven=False, verbose=False, tests_dir=".", time=False): if maven: os.system("mvn clean verify") os.system("java -jar target/*.jar") return os.system("javac " + file_name) - run_input_cases("java " + file_name[:file_name.rfind(".")], verbose, tests_dir=tests_dir) + run_input_cases("java " + file_name[:file_name.rfind(".")], verbose, tests_dir=tests_dir, time=time) return -def haskell_compile(file_name, verbose=False, tests_dir="."): +def haskell_compile(file_name, verbose=False, tests_dir=".", time=False): os.system("ghc -O2 " + file_name + " -o program") - run_input_cases("./program", verbose, tests_dir=tests_dir) + run_input_cases("./program", verbose, tests_dir=tests_dir, time=time) return -def c_compile(file_name, verbose=False, output=False, tests_dir="."): +def c_compile(file_name, verbose=False, output=False, tests_dir=".", time=False): # Style the code in Meijster's way os.system("astyle -A2s2cxgk3W3xbj " + file_name) os.system("gcc -Wall -pedantic --std=c99 -g -o program -lm -Wno-unused-result " + file_name) - run_input_cases("./program", verbose, output, tests_dir=tests_dir) + run_input_cases("./program", verbose, output, tests_dir=tests_dir, time=time) return def main(): @@ -110,6 +112,7 @@ def main(): parser.add_argument("-a", "--alternative", action="store_true", default=False, help="Uses alternative compiler to compile") parser.add_argument("-o", "--output", action="store_true", default=False, help="Checks diff for each .in file with .out file") parser.add_argument("-t", "--tests", metavar="", type=str, help="Directory to run tests") + parser.add_argument("-T", "--time", action="store_true", default=False, help="Prints time taken to run each test case") args = parser.parse_args() file_name = args.filename @@ -122,13 +125,13 @@ def main(): tests_dir = args.tests if args.tests else "." if file_ext == ".c": - c_compile(file_name, args.verbose, args.output, tests_dir=tests_dir) + c_compile(file_name, args.verbose, args.output, tests_dir=tests_dir, time=args.time) elif file_ext == ".py": - python_compile(file_name, args.verbose, tests_dir=tests_dir) + python_compile(file_name, args.verbose, tests_dir=tests_dir, time=args.time) elif file_ext == ".java": - java_compile(file_name, args.alternative, args.verbose, tests_dir=tests_dir) + java_compile(file_name, args.alternative, args.verbose, tests_dir=tests_dir, time=args.time) elif file_ext == ".hs": - haskell_compile(file_name, args.verbose, tests_dir=tests_dir) + haskell_compile(file_name, args.verbose, tests_dir=tests_dir, time=args.time) return if __name__ == "__main__":