Added time measurement option

This commit is contained in:
Boyan 2024-11-25 02:25:03 +01:00
parent 4bee3f28df
commit afc31abe30

View File

@ -15,7 +15,7 @@ def check_dependencies() -> None:
print(f"{Fore.RED}Error: {command} not found{Style.RESET_ALL}") print(f"{Fore.RED}Error: {command} not found{Style.RESET_ALL}")
return 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")) input_files = glob(os.path.join(tests_dir, "*.in"))
if len(input_files) < 1: 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: with open(out_file, 'r') as f:
expected_output = f.read() 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) result = subprocess.run(end_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
program_output = result.stdout program_output = result.stdout
@ -74,29 +76,29 @@ def run_input_cases(program, verbose, output=False, tests_dir="."):
print("-----------") print("-----------")
return return
def python_compile(file_name, verbose=False, tests_dir="."): def python_compile(file_name, verbose=False, tests_dir=".", time=False):
run_input_cases("python3 " + file_name, verbose, tests_dir=tests_dir) run_input_cases("python3 " + file_name, verbose, tests_dir=tests_dir, time=time)
return 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: if maven:
os.system("mvn clean verify") os.system("mvn clean verify")
os.system("java -jar target/*.jar") os.system("java -jar target/*.jar")
return return
os.system("javac " + file_name) 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 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") 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 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 # Style the code in Meijster's way
os.system("astyle -A2s2cxgk3W3xbj " + file_name) os.system("astyle -A2s2cxgk3W3xbj " + file_name)
os.system("gcc -Wall -pedantic --std=c99 -g -o program -lm -Wno-unused-result " + 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 return
def main(): 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("-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("-o", "--output", action="store_true", default=False, help="Checks diff for each .in file with .out file")
parser.add_argument("-t", "--tests", metavar="<path>", type=str, help="Directory to run tests") parser.add_argument("-t", "--tests", metavar="<path>", 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() args = parser.parse_args()
file_name = args.filename file_name = args.filename
@ -122,13 +125,13 @@ def main():
tests_dir = args.tests if args.tests else "." tests_dir = args.tests if args.tests else "."
if file_ext == ".c": 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": 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": 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": 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 return
if __name__ == "__main__": if __name__ == "__main__":