diff --git a/PerfTest.hx b/PerfTest.hx new file mode 100644 index 0000000..0b9c160 --- /dev/null +++ b/PerfTest.hx @@ -0,0 +1,63 @@ +import haxe.Timer; +import hscript.Interp; +import hscript.Parser; + +class PerfTest { + static function main() { + var parser = new Parser(); + parser.allowTypes = true; + + var testScript = " + var sum = 0; + var a = 1; + var b = 2; + var c = 3; + for (i in 0...10000) { + sum = sum + a * b + c - a / b; + a = a + 1; + b = b + 1; + c = c + 1; + if (sum > 1000000) sum = 0; + if (a > 100) a = 1; + if (b > 200) b = 2; + if (c > 300) c = 3; + } + sum; + "; + + var program = parser.parseString(testScript); + + var interp = new Interp(); + interp.variables.set("Math", Math); + + var iterations = 100; + + Sys.println("=== Fast Binops (switch) Mode ==="); + + var totalTests = 5; + var times:Array = []; + + for (testNum in 0...totalTests) { + var interp = new Interp(); + interp.variables.set("Math", Math); + + var startTime = Timer.stamp(); + for (i in 0...iterations) { + interp.execute(program); + } + var endTime = Timer.stamp(); + var elapsed = endTime - startTime; + times.push(elapsed); + Sys.println('Test ${testNum + 1}: ${Std.string(elapsed * 1000).substr(0, 8)} ms'); + } + + var avg = Lambda.fold(times, function(a, b) return a + b, 0.0) / times.length; + var minTime = Lambda.fold(times, function(a, b) return a < b ? a : b, times[0]); + var maxTime = Lambda.fold(times, function(a, b) return a > b ? a : b, times[0]); + + Sys.println(""); + Sys.println('Average: ${Std.string(avg * 1000).substr(0, 8)} ms'); + Sys.println('Min: ${Std.string(minTime * 1000).substr(0, 8)} ms'); + Sys.println('Max: ${Std.string(maxTime * 1000).substr(0, 8)} ms'); + } +}