public decimal Compare(GFunction gFunc, bool doNormalizeConditionals = false, bool doReorderPhi = false) { PreProcess(gFunc); decimal count = 0; var lhsStmts = GStatements; var rhsStmts = gFunc.GStatements; lhsStmts.RemoveAll(s => s is GBBStmt); rhsStmts.RemoveAll(s => s is GBBStmt); count = LevenshteinDistance(lhsStmts, rhsStmts); decimal result = 100m - 100m * count / Math.Max(lhsStmts.Count, rhsStmts.Count); gFunc.Reset(doNormalizeConditionals, doReorderPhi); return(result); }
public static decimal Compare(GFunction lhs, GFunction rhs) { var results = new List <decimal> ( ); var flags = new List <(bool doNormalizeConditionals, bool doReorderPhi)> { (false, false), (false, true), (true, false), (true, true) }; foreach (var lhsFlag in flags) { lhs.Reset(lhsFlag.doNormalizeConditionals, lhsFlag.doReorderPhi); foreach (var rhsFlag in flags) { rhs.Reset(rhsFlag.doNormalizeConditionals, rhsFlag.doReorderPhi); results.Add(lhs.Compare(rhs, rhsFlag.doNormalizeConditionals, rhsFlag.doReorderPhi)); } } return(results.Max( )); }