mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Lots of f-strings
This commit is contained in:
		
							parent
							
								
									356c6fae80
								
							
						
					
					
						commit
						bdfc9dac71
					
				@ -53,8 +53,8 @@ class CacheLine:
 | 
			
		||||
        self.dirty = False
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        string = "(V: " + str(self.valid) + ", D: " + str(self.dirty)
 | 
			
		||||
        string +=  ", Tag: " + str(hex(self.tag)) + ")"
 | 
			
		||||
        string = f"(V: {self.valid}, D: {self.dirty}"
 | 
			
		||||
        string += f", Tag: {hex(self.tag)})"
 | 
			
		||||
        return string
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
@ -193,9 +193,9 @@ class Cache:
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        string = ""
 | 
			
		||||
        for i in range(self.numways):
 | 
			
		||||
            string += "Way " + str(i) + ": "
 | 
			
		||||
            string += f"Way {i}: "
 | 
			
		||||
            for line in self.ways[i]:
 | 
			
		||||
                string += str(line) + ", "
 | 
			
		||||
                string += f"{line}, "
 | 
			
		||||
            string += "\n\n"
 | 
			
		||||
        return string
 | 
			
		||||
 | 
			
		||||
@ -285,13 +285,13 @@ def main(args):
 | 
			
		||||
                            atoms += 1
 | 
			
		||||
 | 
			
		||||
                    if not result == lninfo[2]:
 | 
			
		||||
                        print("Result mismatch at address", lninfo[0]+ ". Wally:", lninfo[2]+", Sim:", result)
 | 
			
		||||
                        print(f"Result mismatch at address {lninfo[0]}. Wally: {lninfo[2]}, Sim: {result}")
 | 
			
		||||
                        mismatches += 1
 | 
			
		||||
    if args.dist:
 | 
			
		||||
        percent_loads = str(round(100*loads/totalops))
 | 
			
		||||
        percent_stores = str(round(100*stores/totalops))
 | 
			
		||||
        percent_atoms = str(round(100*atoms/totalops))
 | 
			
		||||
        print("This log had", percent_loads+"% loads,", percent_stores+"% stores, and", percent_atoms+"% atomic operations.")
 | 
			
		||||
        print(f"This log had {percent_loads}% loads, {percent_stores}% stores, and {percent_atoms}% atomic operations.")
 | 
			
		||||
 | 
			
		||||
    if args.perf:
 | 
			
		||||
        ratio = round(hits/misses,3)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								bin/iterelf
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								bin/iterelf
									
									
									
									
									
								
							@ -30,7 +30,6 @@ def search_log_for_mismatches(logfile):
 | 
			
		||||
    greperr = "grep -H Error: " + logfile
 | 
			
		||||
    os.system(greperr)
 | 
			
		||||
    grepcmd = f"grep -a -e 'Mismatches            : 0' '{logfile}' > /dev/null"
 | 
			
		||||
#    print("  search_log_for_text invoking %s" % grepcmd)
 | 
			
		||||
    return os.system(grepcmd) == 0
 | 
			
		||||
 | 
			
		||||
def run_test_case(elf):
 | 
			
		||||
@ -47,14 +46,14 @@ def run_test_case(elf):
 | 
			
		||||
#    print("cmd = " + cmd)
 | 
			
		||||
    os.system(cmd)
 | 
			
		||||
    if search_log_for_mismatches(logfile):
 | 
			
		||||
        print(f"{bcolors.OKGREEN}%s: Success{bcolors.ENDC}" % (cmd))
 | 
			
		||||
        print(f"{bcolors.OKGREEN}{cmd}: Success{bcolors.ENDC}")
 | 
			
		||||
        return 0
 | 
			
		||||
    elif "WALLY-cbom-01" in elf:
 | 
			
		||||
        # Remove this when CBO instructions are modeled in ImperasDV
 | 
			
		||||
        print(f"{bcolors.OKCYAN}%s: Expected mismatch because ImperasDV does not yet model cache for CBO instructions {bcolors.ENDC}" % (cmd))
 | 
			
		||||
        print(f"{bcolors.OKCYAN}{cmd}: Expected mismatch because ImperasDV does not yet model cache for CBO instructions {bcolors.ENDC}")
 | 
			
		||||
        return 0
 | 
			
		||||
    else:
 | 
			
		||||
        print(f"{bcolors.FAIL}%s: Failures detected in output{bcolors.ENDC}" % (cmd))
 | 
			
		||||
        print(f"{bcolors.FAIL}{cmd}: Failures detected in output{bcolors.ENDC}")
 | 
			
		||||
        print(f"  Check {logfile}")
 | 
			
		||||
        return 1
 | 
			
		||||
 | 
			
		||||
@ -99,9 +98,9 @@ with Pool(processes=min(len(ElfList),multiprocessing.cpu_count(), ImperasDVLicen
 | 
			
		||||
            num_fail+=result.get(timeout=TIMEOUT_DUR)
 | 
			
		||||
        except MPTimeoutError:
 | 
			
		||||
            num_fail+=1
 | 
			
		||||
            print(f"{bcolors.FAIL}%s: Timeout - runtime exceeded %d seconds{bcolors.ENDC}" % (elf, TIMEOUT_DUR))
 | 
			
		||||
            print(f"{bcolors.FAIL}{elf}: Timeout - runtime exceeded {TIMEOUT_DUR} seconds{bcolors.ENDC}")
 | 
			
		||||
 | 
			
		||||
if num_fail == 0:
 | 
			
		||||
    print(f"{bcolors.OKGREEN}SUCCESS! All tests ran without failures{bcolors.ENDC}")
 | 
			
		||||
else:
 | 
			
		||||
    print(f"{bcolors.FAIL}Completed %d tests with %d failures{bcolors.ENDC}" % (len(ElfList), num_fail))
 | 
			
		||||
    print(f"{bcolors.FAIL}Completed {len(ElfList)} tests with {num_fail} failures{bcolors.ENDC}")
 | 
			
		||||
 | 
			
		||||
@ -264,21 +264,21 @@ class bcolors:
 | 
			
		||||
    UNDERLINE = '\033[4m'
 | 
			
		||||
 | 
			
		||||
def addTests(tests, sim):
 | 
			
		||||
    sim_logdir = WALLY+ "/sim/" + sim + "/logs/"
 | 
			
		||||
    sim_logdir = f"{WALLY}/sim/{sim}/logs/"
 | 
			
		||||
    for test in tests:
 | 
			
		||||
        config = test[0]
 | 
			
		||||
        suites = test[1]
 | 
			
		||||
        if len(test) >= 3:
 | 
			
		||||
            args = " --args " + " ".join(test[2])
 | 
			
		||||
            args = f" --args {test[2]}"
 | 
			
		||||
        else:
 | 
			
		||||
            args = ""
 | 
			
		||||
        if len(test) >= 4:
 | 
			
		||||
            gs = test[3]
 | 
			
		||||
        else:
 | 
			
		||||
            gs = "All tests ran without failures"
 | 
			
		||||
        cmdPrefix="wsim --sim " + sim + " " + coverStr + " " + config
 | 
			
		||||
        cmdPrefix=f"wsim --sim {sim} {coverStr} {config}"
 | 
			
		||||
        for t in suites:
 | 
			
		||||
            sim_log = sim_logdir + config + "_" + t + ".log"
 | 
			
		||||
            sim_log = f"{sim_logdir}{config}_{t}.log"
 | 
			
		||||
            if len(test) >= 5:
 | 
			
		||||
                grepfile = sim_logdir + test[4]
 | 
			
		||||
            else:
 | 
			
		||||
@ -286,7 +286,7 @@ def addTests(tests, sim):
 | 
			
		||||
            tc = TestCase(
 | 
			
		||||
                    name=t,
 | 
			
		||||
                    variant=config,
 | 
			
		||||
                    cmd=cmdPrefix + " " + t + args + " > " + sim_log,
 | 
			
		||||
                    cmd=f"{cmdPrefix} {t} {args} > {sim_log}",
 | 
			
		||||
                    grepstr=gs,
 | 
			
		||||
                    grepfile = grepfile)
 | 
			
		||||
            configs.append(tc)
 | 
			
		||||
@ -294,27 +294,27 @@ def addTests(tests, sim):
 | 
			
		||||
 | 
			
		||||
def addTestsByDir(testDir, config, sim, lockstepMode=0):
 | 
			
		||||
    if os.path.isdir(testDir):
 | 
			
		||||
        sim_logdir = WALLY+ "/sim/" + sim + "/logs/"
 | 
			
		||||
        sim_logdir = f"{WALLY}/sim/{sim}/logs/"
 | 
			
		||||
        if coverStr == "--fcov": # use --fcov in place of --lockstep
 | 
			
		||||
            cmdPrefix="wsim --sim " + sim + " " + coverStr + " " + config
 | 
			
		||||
            cmdPrefix=f"wsim --sim {sim} {coverStr} {config}"
 | 
			
		||||
            gs="Mismatches            : 0"
 | 
			
		||||
            if ("cvw-arch-verif/tests" in testDir and not "priv" in testDir):
 | 
			
		||||
                fileEnd = "ALL.elf"
 | 
			
		||||
            else:
 | 
			
		||||
                fileEnd = ".elf"
 | 
			
		||||
        elif coverStr == "--ccov":
 | 
			
		||||
            cmdPrefix="wsim --sim " + sim + " " + coverStr + " " + config
 | 
			
		||||
            cmdPrefix=f"wsim --sim {sim} {coverStr} {config}"
 | 
			
		||||
            gs="Single Elf file tests are not signatured verified."
 | 
			
		||||
            if ("cvw-arch-verif/tests" in testDir and not "priv" in testDir):
 | 
			
		||||
                fileEnd = "ALL.elf"
 | 
			
		||||
            else:
 | 
			
		||||
                fileEnd = ".elf"
 | 
			
		||||
        elif lockstepMode:
 | 
			
		||||
            cmdPrefix="wsim --lockstep --sim " + sim + " " + config
 | 
			
		||||
            cmdPrefix=f"wsim --lockstep --sim {sim} {config}"
 | 
			
		||||
            gs="Mismatches            : 0"
 | 
			
		||||
            fileEnd = ".elf"
 | 
			
		||||
        else:
 | 
			
		||||
            cmdPrefix="wsim --sim " + sim + " " + config
 | 
			
		||||
            cmdPrefix=f"wsim --sim {sim} {config}"
 | 
			
		||||
            gs="Single Elf file tests are not signatured verified."
 | 
			
		||||
            fileEnd = ".elf"
 | 
			
		||||
        for dirpath, _, filenames in os.walk(os.path.abspath(testDir)):
 | 
			
		||||
@ -324,29 +324,29 @@ def addTestsByDir(testDir, config, sim, lockstepMode=0):
 | 
			
		||||
                    fullfile = os.path.join(dirpath, file)
 | 
			
		||||
                    fields = fullfile.rsplit('/', 3)
 | 
			
		||||
                    if fields[2] == "ref":
 | 
			
		||||
                        shortelf = fields[1] + "_" + fields[3]
 | 
			
		||||
                        shortelf = f"{fields[1]}_{fields[3]}"
 | 
			
		||||
                    else:
 | 
			
		||||
                        shortelf = fields[2] + "_" + fields[3]
 | 
			
		||||
                        shortelf = f"{fields[2]}_{fields[3]}"
 | 
			
		||||
                    if shortelf in lockstepwaivers: # skip tests that itch bugs in ImperasDV
 | 
			
		||||
                        print(f"{bcolors.WARNING}Skipping waived test {shortelf}{bcolors.ENDC}")
 | 
			
		||||
                        continue
 | 
			
		||||
                    sim_log = sim_logdir + config + "_" + shortelf + ".log"
 | 
			
		||||
                    sim_log = f"{sim_logdir}{config}_{shortelf}.log"
 | 
			
		||||
                    tc = TestCase(
 | 
			
		||||
                            name=file,
 | 
			
		||||
                            variant=config,
 | 
			
		||||
                            cmd=cmdPrefix + " " + fullfile + " > " + sim_log,
 | 
			
		||||
                            cmd=f"{cmdPrefix} {fullfile} > {sim_log}",
 | 
			
		||||
                            grepstr=gs,
 | 
			
		||||
                            grepfile = sim_log)
 | 
			
		||||
                    configs.append(tc)
 | 
			
		||||
    else:
 | 
			
		||||
        print("Error: Directory not found: " + testDir)
 | 
			
		||||
        print(f"Error: Directory not found: {testDir}")
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
def search_log_for_text(text, grepfile):
 | 
			
		||||
    """Search through the given log file for text, returning True if it is found or False if it is not"""
 | 
			
		||||
    grepwarn = "grep -i -H Warning: " + grepfile
 | 
			
		||||
    grepwarn = f"grep -i -H Warning: {grepfile}"
 | 
			
		||||
    os.system(grepwarn)
 | 
			
		||||
    greperr = "grep -i -H Error: " + grepfile
 | 
			
		||||
    greperr = f"grep -i -H Error: {grepfile}"
 | 
			
		||||
    os.system(greperr)
 | 
			
		||||
    grepcmd = f"grep -a -e '{text}' '{grepfile}' > /dev/null"
 | 
			
		||||
    return os.system(grepcmd) == 0
 | 
			
		||||
@ -367,10 +367,10 @@ def run_test_case(config, dryrun: bool = False):
 | 
			
		||||
        os.system(cmd)
 | 
			
		||||
        if search_log_for_text(config.grepstr, grepfile):
 | 
			
		||||
            # Flush is needed to flush output to stdout when running in multiprocessing Pool
 | 
			
		||||
            print(f"{bcolors.OKGREEN}%s: Success{bcolors.ENDC}" % (config.cmd), flush=True)
 | 
			
		||||
            print(f"{bcolors.OKGREEN}{config.cmd}: Success{bcolors.ENDC}", flush=True)
 | 
			
		||||
            return 0
 | 
			
		||||
        else:
 | 
			
		||||
            print(f"{bcolors.FAIL}%s: Failures detected in output{bcolors.ENDC}" % (config.cmd), flush=True)
 | 
			
		||||
            print(f"{bcolors.FAIL}{config.cmd}: Failures detected in output{bcolors.ENDC}", flush=True)
 | 
			
		||||
            print(f"  Check {grepfile}", flush=True)
 | 
			
		||||
            return 1
 | 
			
		||||
 | 
			
		||||
@ -418,9 +418,9 @@ configs = [
 | 
			
		||||
    TestCase(
 | 
			
		||||
        name="lints",
 | 
			
		||||
        variant="all",
 | 
			
		||||
        cmd="lint-wally " + nightMode + " | tee " + WALLY + "/sim/verilator/logs/all_lints.log",
 | 
			
		||||
        cmd=f"lint-wally {nightMode} | tee {WALLY}/sim/verilator/logs/all_lints.log",
 | 
			
		||||
        grepstr="lints run with no errors or warnings",
 | 
			
		||||
        grepfile = WALLY + "/sim/verilator/logs/all_lints.log")
 | 
			
		||||
        grepfile = f"{WALLY}/sim/verilator/logs/all_lints.log")
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -467,11 +467,11 @@ if (args.testfloat or args.nightly): # for nightly, run testfloat along with oth
 | 
			
		||||
        if "f_" in config:
 | 
			
		||||
            tests.remove("cvtfp")
 | 
			
		||||
        for test in tests:
 | 
			
		||||
            sim_log = WALLY + "/sim/" + testfloatsim + "/logs/"+config+"_"+test+".log"
 | 
			
		||||
            sim_log = f"{WALLY}/sim/{testfloatsim}/logs/{config}_{test}.log"
 | 
			
		||||
            tc = TestCase(
 | 
			
		||||
                    name=test,
 | 
			
		||||
                    variant=config,
 | 
			
		||||
                    cmd="wsim --tb testbench_fp --sim " + testfloatsim + " " + config + " " + test + " > " + sim_log,
 | 
			
		||||
                    cmd=f"wsim --tb testbench_fp --sim {testfloatsim} {config} {test} > {sim_log}",
 | 
			
		||||
                    grepstr="All Tests completed with          0 errors",
 | 
			
		||||
                    grepfile = sim_log)
 | 
			
		||||
            configs.append(tc)
 | 
			
		||||
@ -509,13 +509,13 @@ if (args.testfloat or args.nightly): # for nightly, run testfloat along with oth
 | 
			
		||||
        if "f_" in config:
 | 
			
		||||
            tests.remove("cvtfp")
 | 
			
		||||
        for test in tests:
 | 
			
		||||
            sim_log = WALLY + "/sim/questa/logs/"+config+"_"+test+".log"
 | 
			
		||||
            sim_log = f"{WALLY}/sim/{testfloatsim}/logs/{config}_{test}.log"
 | 
			
		||||
            tc = TestCase(
 | 
			
		||||
                    name=test,
 | 
			
		||||
                    variant=config,
 | 
			
		||||
                    cmd="wsim --tb testbench_fp " + config + " " + test + " > " + sim_log,
 | 
			
		||||
                    cmd=f"wsim --tb testbench_fp --sim {testfloatsim} {config} {test} > {sim_log}",
 | 
			
		||||
                    grepstr="All Tests completed with          0 errors",
 | 
			
		||||
                    grepfile = WALLY + "/sim/questa/logs/"+config+"_"+test+".log")
 | 
			
		||||
                    grepfile = f"{WALLY}/sim/{testfloatsim}/logs/{config}_{test}.log")
 | 
			
		||||
            configs.append(tc)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -560,7 +560,7 @@ def main():
 | 
			
		||||
            except MPTimeoutError:
 | 
			
		||||
                pool.terminate()
 | 
			
		||||
                num_fail+=1
 | 
			
		||||
                print(f"{bcolors.FAIL}%s: Timeout - runtime exceeded %d seconds{bcolors.ENDC}" % (config.cmd, TIMEOUT_DUR))
 | 
			
		||||
                print(f"{bcolors.FAIL}{config.cmd}: Timeout - runtime exceeded {TIMEOUT_DUR} seconds{bcolors.ENDC}")
 | 
			
		||||
 | 
			
		||||
    # Coverage report
 | 
			
		||||
    if args.ccov:
 | 
			
		||||
@ -569,7 +569,7 @@ def main():
 | 
			
		||||
        os.system('make -C '+WALLY+'/addins/cvw-arch-verif merge')
 | 
			
		||||
    # Count the number of failures
 | 
			
		||||
    if num_fail:
 | 
			
		||||
        print(f"{bcolors.FAIL}Regression failed with %s failed configurations{bcolors.ENDC}" % num_fail)
 | 
			
		||||
        print(f"{bcolors.FAIL}Regression failed with {num_fail} failed configurations{bcolors.ENDC}")
 | 
			
		||||
    else:
 | 
			
		||||
        print(f"{bcolors.OKGREEN}SUCCESS! All tests ran without failures{bcolors.ENDC}")
 | 
			
		||||
    return num_fail
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user