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); } }
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()); }
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); } }
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(); }