Esempio n. 1
0
        public static int NumberRepToUINumber(NumberRep r)
        {
            switch (r)
            {
            case NumberRep.StringmodeChar:
                return(-4);

            case NumberRep.Stringify:
                return(-3);

            case NumberRep.Digit:
                return(-2);

            case NumberRep.Boolean:
                return(-1);

            case NumberRep.Base9:
                return(0);

            case NumberRep.Factorization:
                return(1);

            case NumberRep.Best:
                return(2);

            default:
                return(int.MinValue);
            }
        }
Esempio n. 2
0
        public static string GenerateBenchmark(int cnt, bool doNeg)
        {
            ASTObject.CGO.NumberLiteralRepresentation = NumberRep.Best;

            int min = (doNeg) ? -(cnt / 2) : (0);
            int max = (doNeg) ? +(cnt / 2) : (cnt);

            List <NumberRep> reps = Enum.GetValues(typeof(NumberRep)).Cast <NumberRep>().Where(p => p != NumberRep.Best).ToList();

            int[] count = new int[reps.Count];
            Array.Clear(count, 0, reps.Count);

            //int mxw = Enumerable.Range(MIN, MAX + 1).Max(p1 => generateAllCode(p1, true).Max(p2 => p2.Item2.Width)) + 3;
            int mxw = 24;

            StringBuilder txt = new StringBuilder();

            txt.AppendFormat("{0, -7} ", "Number");
            txt.AppendFormat("{0, -16} {1, -" + mxw + "}", "Best", "Best");
            reps.ForEach(p => txt.AppendFormat("{0, -" + mxw + "} ", p.ToString()));
            txt.AppendLine();
            txt.AppendLine();

            long ticks = Environment.TickCount;

            for (int i = min; i <= max; i++)
            {
                List <Tuple <NumberRep, CodePiece> > all = GenerateAllCode(i, false);
                CodePiece best  = GenerateCode(i);
                NumberRep rbest = LastRep;

                count[reps.IndexOf(rbest)]++;

                txt.AppendFormat("{0, -7} ", i.ToString());
                txt.AppendFormat("{0, -16} ", rbest.ToString());
                txt.AppendFormat("{0, -" + mxw + "} ", best.ToSimpleString());
                reps.ForEach(p => txt.AppendFormat("{0, -" + mxw + "} ", (all.Single(p2 => p2.Item1 == p).Item2 != null) ? (all.Single(p2 => p2.Item1 == p).Item2.ToSimpleString()) : ("")));
                txt.AppendLine();
            }

            txt.AppendLine();
            txt.AppendLine(new String('#', 32));
            txt.AppendLine();

            ticks = Environment.TickCount - ticks;

            reps.ForEach(p => txt.AppendLine(String.Format("{0,-16}: {1}", p.ToString(), count[reps.IndexOf(p)])));

            txt.AppendLine();

            txt.AppendLine(String.Format("Time taken for {0} Elements: {1}ms", cnt, ticks));
            txt.AppendLine(String.Format("Time/Number: {0:0.000}ms", (ticks * 1.0) / cnt));

            return(txt.ToString());
        }
Esempio n. 3
0
        public static NumberRep UINumberToNumberRep(int r, NumberRep def)
        {
            switch (r)
            {
            case 0:
                return(NumberRep.Base9);

            case 1:
                return(NumberRep.Factorization);

            case 2:
                return(NumberRep.Best);

            default:
                return(def);
            }
        }
Esempio n. 4
0
        public static CodePiece GenerateCode(long value)
        {
            CodePiece p;

            if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.Best)
            {
                List <Tuple <NumberRep, CodePiece> > representations = GenerateAllCode(value, true);

                int min = representations.Min(lp => lp.Item2.Width);

                foreach (var rep in representations)
                {
                    if (rep.Item2.Width == min)
                    {
                        LastRep = rep.Item1;
                        p       = rep.Item2;

                        return(p);
                    }
                }
            }
            else if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.StringmodeChar)
            {
                p       = NumberCodeFactoryStringmodeChar.GenerateCode(value);
                LastRep = NumberRep.StringmodeChar;

                return(p);
            }
            else if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.Base9)
            {
                p       = NumberCodeFactoryBase9.GenerateCode(value);
                LastRep = NumberRep.Base9;

                return(p);
            }
            else if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.Factorization)
            {
                p       = NumberCodeFactoryFactorization.GenerateCode(value);
                LastRep = NumberRep.Factorization;

                return(p);
            }
            else if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.Stringify)
            {
                p       = NumberCodeFactoryStringify.GenerateCode(value);
                LastRep = NumberRep.Stringify;

                return(p);
            }
            else if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.Digit)
            {
                p       = NumberCodeFactoryDigit.GenerateCode(value);
                LastRep = NumberRep.Digit;

                return(p);
            }
            else if (ASTObject.CGO.NumberLiteralRepresentation == NumberRep.Boolean)
            {
                p       = NumberCodeFactoryBoolean.GenerateCode(value);
                LastRep = NumberRep.Boolean;

                return(p);
            }

            throw new WTFException();
        }