From dfb26e14c93a3144569a7b44ad0f0fddd2f0a5ee Mon Sep 17 00:00:00 2001 From: Boyan Date: Mon, 25 Nov 2024 18:22:30 +0100 Subject: [PATCH] Fixed timing of tcs --- ucompile | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/ucompile b/ucompile index 6b4a8b7..eb4b0e4 100755 --- a/ucompile +++ b/ucompile @@ -4,6 +4,7 @@ import os from glob import glob import subprocess from colorama import Fore, Style +import time def check_dependencies() -> None: @@ -15,11 +16,21 @@ 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=".", time=False): + +def run_input_cases(program, verbose, output=False, tests_dir=".", time_flag=False): input_files = glob(os.path.join(tests_dir, "*.in")) if len(input_files) < 1: - return os.system(program) + if time_flag: + start_time = time.perf_counter() + result = subprocess.run(program, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) + end_time = time.perf_counter() + elapsed_time = end_time - start_time + print(result.stdout.strip()) + print(f"Time taken: {elapsed_time:.4f} seconds") + return + else: + return os.system(program) for input_file in input_files: print(f"Running {input_file}") @@ -34,9 +45,15 @@ def run_input_cases(program, verbose, output=False, tests_dir=".", time=False): 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) + # Measure time if time_flag is True + if time_flag: + start_time = time.perf_counter() + result = subprocess.run(end_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) + end_time = time.perf_counter() + elapsed_time = end_time - start_time + else: + result = subprocess.run(end_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) + program_output = result.stdout if verbose and not output: @@ -50,7 +67,6 @@ def run_input_cases(program, verbose, output=False, tests_dir=".", time=False): print("Program output:") print(program_output.strip()) print("") - if output: if expected_output is not None: @@ -72,35 +88,43 @@ def run_input_cases(program, verbose, output=False, tests_dir=".", time=False): else: if not verbose: print(program_output.strip()) - + + if time_flag: + print(f"Time taken: {elapsed_time:.4f} seconds") + print("-----------") return + def python_compile(file_name, verbose=False, tests_dir=".", time=False): - run_input_cases("python3 " + file_name, verbose, tests_dir=tests_dir, time=time) + run_input_cases("python3 " + file_name, verbose, tests_dir=tests_dir, time_flag=time) return + 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") + run_input_cases("java -jar target/*.jar", verbose, tests_dir=tests_dir, time_flag=time) return os.system("javac " + file_name) - run_input_cases("java " + file_name[:file_name.rfind(".")], verbose, tests_dir=tests_dir, time=time) + run_input_cases("java " + file_name[:file_name.rfind(".")], verbose, tests_dir=tests_dir, time_flag=time) return + 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, time=time) + run_input_cases("./program", verbose, tests_dir=tests_dir, time_flag=time) return + 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, time=time) + run_input_cases("./program", verbose, output, tests_dir=tests_dir, time_flag=time) return + def main(): SUPPORTED_LANGS = [".c", ".py", ".java", ".hs"] parser = argparse.ArgumentParser( @@ -134,6 +158,7 @@ def main(): haskell_compile(file_name, args.verbose, tests_dir=tests_dir, time=args.time) return + if __name__ == "__main__": check_dependencies() main()