Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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( ));
        }