def test_randconfig_kmax(dimacs_): passed = 0 common = list() init = True # check if randconfig exists cdir = os.path.dirname(dimacs_) + "/correctness/randconfigs/" if not os.path.exists(cdir): print("randconfig not found") return # get features and clauses _features, _clauses, _vars = read_dimacs(dimacs_) _names = [i[1] for i in _features] # iterate over each randconfig configurations for file in os.listdir(cdir): if file.endswith('.config'): with open(cdir + "/" + file, 'r') as f: _existing = set() sol = list() for line in f: # line: # FEATURE is not set if line.startswith('#'): line = line[0:len(line) - 1] data = line.split() if len(data) > 4: if data[1] in _names: i = _names.index(data[1]) _existing.add(data[1]) if i != -1: sol.append('-' + _features[i][0]) # line: FEATURE=y or FEATURE="nonbool value" else: line = line[0:len(line) - 1] data = line.split('=') if len(data) > 1: if data[0] in _names: i = _names.index(data[0]) _existing.add(data[0]) if data[1] == 'y': sol.append(str(_features[i][0])) #print(_features[i][0]) elif data[1] == '\"\"' or data[1] == '0': if _features[i][3] != '\"\"' and _features[ i][3] != '0': sol.append('-' + _features[i][0]) #print('-' + _features[i][0]) # else: # #print(_features[i][1]) else: sol.append(str(_features[i][0])) #print(str(_features[i][0])) outfile = cdir + '/check.dimacs' gen_dimacs(_vars, _clauses, sol, outfile) res = getoutput(SHARPSAT + ' -q ' + outfile) print(line + ": " + str(res)) if not is_int(res): print(file + " failed") return # set all nonexistent variables to false # for f in _features: # if f[1] not in _existing: # sol.append('-' + str(f[0])) # sol.append('-55') # sol.append('-109') outfile = cdir + '/check.dimacs' gen_dimacs(_vars, _clauses, sol, outfile) res = getoutput(SHARPSAT + ' -q ' + outfile) if is_int(res): if res != '1': print(file + ": " + str(res)) else: passed += 1 else: print(file + ": " + str(res)) if init: common = sol init = False else: for s in common: if s not in sol: common.remove(s) print("Passed:" + str(passed)) print(common)
def get_rank_unigen(dimacs_, sampleFile_): # read dimacs file for feature list _features, _clauses, _vars = read_dimacs(dimacs_) # read tree structure from file _treefile = os.path.dirname(dimacs_) + '/smarch/tree.json' # node = AnyNode(count=-1, cube=[]) if os.path.exists(_treefile): with open(_treefile, 'r') as file: data = file.read() importer = JsonImporter() _root = importer.import_(data) total = _root.count else: print("ERROR: tree file not found!") return with open(sampleFile_, 'r') as f: i = 1 for line in f: line = line[1:len(line)] raw = line.split() if len(raw) != 0: sol = raw[1:len(raw) - 1] #print(sol) # traverse tree based on solution _node = _root _precision = 0 _number = 0 _cdir = os.path.dirname(dimacs_) + '/' sdimacs = _cdir + "/sample.dimacs" ssol = _cdir + "/" + "sample.sol" gen_dimacs(_vars, _clauses, sol, sdimacs) getoutput("minisat " + sdimacs + " " + ssol) _outfile = os.path.dirname(sampleFile_) + '/validCheck.dimacs' gen_dimacs(_vars, _clauses, sol, _outfile) res = getoutput(SHARPSAT + ' -q ' + _outfile) fsol = list() with open(ssol, 'r') as f: fsol = f.read().split() del fsol[0] if is_int(res): print(res, end=',') while _precision == 0: _node, _precision, _number = traverse_cube( _node, fsol, _number) if _precision > 0: print( str(_number / total) + "," + str(_precision / total)) else: print("ERROR: tree traverse failure") else: print("ERROR: sample invalid") i += 1
def test_randconfig_kcr(dimacs_, target_): # check if randconfig exists cdir = os.path.dirname(dimacs_) + "/randconfigs" if not os.path.exists(cdir): print("randconfig not found") return # get features and clauses _features, _clauses, _vars = read_dimacs(dimacs_) kf, kc, kv = read_dimacs("/home/jeho/kmax/kconfig_case_studies/cases/" + target_ + "/kconfig.dimacs") _names = list() kn = [i[1] for i in kf] prefix = False for f in _features: if len(f) > 2: name = f[1] for i in range(2, len(f)): name = name + ' ' + f[i] if not name.startswith('CONFIG_') and prefix: name = 'CONFIG_' + name _names.append(name) else: name = f[1] if not name.startswith('CONFIG_') and prefix: name = 'CONFIG_' + name _names.append(name) # iterate over each randconfig configurations for file in os.listdir(cdir): if file.endswith('.config'): with open(cdir + "/" + file, 'r') as f: sol = set() ambig = set() for line in f: if line.startswith('#'): line = line[0:len(line) - 1] data = line.split() if len(data) > 4: if data[1] in _names: i = _names.index(data[1]) if i != -1: sol.add('-' + _features[i][0]) # else: # print(line) else: line = line[0:len(line) - 1] data = line.split('=') if len(data) > 1: if data[1] == 'y': if data[0] in _names: i = _names.index(data[0]) sol.add(str(_features[i][0])) # else: # print('y: '+data[0]) elif data[1] == '\"\"' or data[1] == '0': if data[0] in kn: k = kn.index(data[0]) if kf[k][3] != '\"\"' and kf[k][3] != '0': feature = data[0] + '=n' if feature in _names: i = _names.index(feature) sol.add(str(_features[i][0])) # else: # print("Not in dimacs: " + feature) else: # print('n: ' + line) ambig.add(data[0]) # feature = data[0] + '=n' # if feature in _names: # i = _names.index(feature) # sol.add(str(_features[i][0])) else: temp = line.replace('\"', '') feature = temp.replace('\\\\', '\\') if feature in _names: i = _names.index(feature) sol.add(str(_features[i][0])) else: if data[0] in kn: k = kn.index(data[0]) dv = kf[k][3].replace('\"', '') dv = dv.replace('\\\\', '\\') feature = data[0] + '=' + dv if feature in _names: i = _names.index(feature) sol.add(str(_features[i][0])) # else: # print("Not in dimacs: " + feature) else: for ft in kn: print(ft) print('nb: ' + line + "," + feature) # outfile = cdir + '/check.dimacs' # gen_dimacs(_vars, _clauses, sol, outfile) # res = getoutput(SHARPSAT + ' -q ' + outfile) # print(line + ": " + str(res)) # print(sol) # if not is_int(res): # print(file + " failed") # return outfile = cdir + '/check.dimacs' gen_dimacs(_vars, _clauses, sol, outfile) res = getoutput(SHARPSAT + ' -q ' + outfile) if is_int(res): print(file + "," + str(len(_features) - len(sol)) + "," + str(len(ambig)) + "," + str(res) + "," + str(ambig)) else: print(file + "," + str(len(_features) - len(sol)) + "," + str(len(ambig)) + ",0")
def test_randconfig_kcr(dimacs_, target_, cdir_): # get features and clauses _features, _clauses, _vars = read_dimacs(dimacs_) kf, kc, kv = read_dimacs("/home/jeho/kmax/kconfig_case_studies/cases/" + target_ + "/kconfig.dimacs") _names = list() kn = [i[1] for i in kf] passed = 0 common = list() init = True prefix = False for f in _features: if len(f) > 2: name = f[1] for i in range(2, len(f)): name = name + ' ' + f[i] if not name.startswith('CONFIG_') and prefix: name = 'CONFIG_' + name _names.append(name) else: name = f[1] if not name.startswith('CONFIG_') and prefix: name = 'CONFIG_' + name _names.append(name) # iterate over each randconfig configurations for file in os.listdir(cdir_): if file.endswith('.config'): with open(cdir_ + "/" + file, 'r') as f: sol = set() ambig = set() for line in f: if line.startswith('#'): line = line[0:len(line) - 1] data = line.split() if len(data) > 4: if data[1] in _names: i = _names.index(data[1]) if i != -1: sol.add(-1 * _features[i][0]) # else: # print(line) else: line = line[0:len(line) - 1] data = line.split('=') if len(data) > 1: if data[1] == 'y': if data[0] in _names: i = _names.index(data[0]) sol.add(_features[i][0]) # else: # print('y: '+data[0]) elif data[1] == '\"\"' or data[1] == '0': if data[0] in kn: k = kn.index(data[0]) if kf[k][3] != '\"\"' and kf[k][3] != '0': feature = data[0] + '=n' if feature in _names: i = _names.index(feature) sol.add(_features[i][0]) # else: # print("Not in dimacs: " + feature) else: # print('n: ' + line) ambig.add(k) # feature = data[0] + '=n' # if feature in _names: # i = _names.index(feature) # sol.add(str(_features[i][0])) else: temp = line.replace('\"', '') feature = temp.replace('\\\\', '\\') if feature in _names: i = _names.index(feature) sol.add(_features[i][0]) else: if data[0] in kn: k = kn.index(data[0]) dv = kf[k][3].replace('\"', '') dv = dv.replace('\\\\', '\\') feature = data[0] + '=' + dv if feature in _names: i = _names.index(feature) sol.add(_features[i][0]) # else: # print("Not in dimacs: " + feature) else: for ft in kn: print(ft) print('nb: ' + line + "," + feature) # outfile = cdir + '/check.dimacs' # gen_dimacs(_vars, _clauses, sol, outfile) # res = getoutput(SHARPSAT + ' -q ' + outfile) # print(line + ": " + str(res)) # print(sol) # if not is_int(res): # print(file + " failed") # return outfile = cdir_ + '/check.dimacs' gen_dimacs(_vars, _clauses, sol, outfile) res = getoutput(SHARPSAT + ' -q ' + outfile) freecount = 0 for a in ambig: free = True test = sol.copy() test.add(a) gen_dimacs(_vars, _clauses, test, outfile) ares = getoutput(SHARPSAT + ' -q ' + outfile) if not is_int(ares): free = False test = sol.copy() test.add(-1 * a) gen_dimacs(_vars, _clauses, test, outfile) ares = getoutput(SHARPSAT + ' -q ' + outfile) if not is_int(ares): free = False if free: freecount += 1 # else: # print(file + ": " + str(res)) # if init: # common = sol # init = False # else: # for s in common: # if s not in sol: # common.remove(s) if is_int(res): val = int(res) / (2**freecount) print(file + ": " + str(val)) if val == 1.0: passed += 1 else: print(file + ": " + "INV") # if is_int(res): # print(file + ":" + str(len(_features) - len(sol)) + "," + str(len(ambig)) + "," + str(res) + "," + str(ambig)) # else: # print(file + ":" + str(len(_features) - len(sol)) + "," + str(len(ambig)) + ",0") print("Passed:" + str(passed)) print(common)