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}")
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="<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()
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__":