package jsr223; import abstrasy.Node_float; import abstrasy.Node_ref; import java.util.List; import javax.script.Compilable; import javax.script.CompiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class Benchmarks1 { public Benchmarks1() { } private static int B1_LOOPS = 100000; private static double b5_nashorn(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("nashorn"); System.out.println(" * Benchmarking Nashorn engine..."); long s = System.currentTimeMillis(); Compilable engineCompilable = (Compilable) engine; CompiledScript scriptCompile = engineCompilable.compile("while(i>0){ o = Math.sqrt(i) + o; i = i - 1; }"); engine.put("o", 0); engine.put("i", B1_LOOPS); scriptCompile.eval(); Object o = engine.get("o"); long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b5_rhino(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("rhino"); System.out.println(" * Benchmarking Rhino engine..."); long s = System.currentTimeMillis(); Compilable engineCompilable = (Compilable) engine; CompiledScript scriptCompile = engineCompilable.compile("while(i>0){ o = Math.sqrt(i) + o; i = i - 1; }"); engine.put("o", 0); engine.put("i", B1_LOOPS); scriptCompile.eval(); Object o = engine.get("o"); long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b5_abstrasy(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("abstrasy"); System.out.println(" * Benchmarking Abstrasy 2.0 engine..."); long s = System.currentTimeMillis(); engine.put("$o", new Node_ref(new Node_float(0),null)); engine.put("$i", new Node_ref(new Node_float(B1_LOOPS),null)); engine.eval("(while{$i} {(set! $o (+ (sqrt $i) $o))(set! $i (- $i 1))})"); Object o = engine.get("$o"); long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o + ", soit: " + ((Node_ref) o).getRef_unsafe()); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b4_nashorn(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("nashorn"); System.out.println(" * Benchmarking Nashorn engine..."); long s = System.currentTimeMillis(); Compilable engineCompilable = (Compilable) engine; CompiledScript scriptCompile = engineCompilable.compile("o = Math.sqrt(i) + o"); Object o = new Integer(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", i); scriptCompile.eval(); o = engine.get("o"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b4_rhino(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("rhino"); System.out.println(" * Benchmarking Rhino engine..."); long s = System.currentTimeMillis(); Compilable engineCompilable = (Compilable) engine; CompiledScript scriptCompile = engineCompilable.compile("o = Math.sqrt(i) + o"); Object o = new Integer(0); for (int i = B1_LOOPS; i>0 ; i--){ engine.put("o", o); engine.put("i", i); scriptCompile.eval(); o = engine.get("o"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b4_abstrasy(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("abstrasy"); System.out.println(" * Benchmarking Abstrasy 2.0 engine..."); long s = System.currentTimeMillis(); Object o = new Node_ref(new Node_float(0),null); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("$o", o); engine.put("i", new Node_float(i)); engine.eval("(set! $o (+ (sqrt i) $o))"); o = engine.get("$o"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o + ", soit: " + ((Node_ref) o).getRef_unsafe()); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b3_nashorn(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("nashorn"); System.out.println(" * Benchmarking Nashorn engine..."); long s = System.currentTimeMillis(); Compilable engineCompilable = (Compilable) engine; CompiledScript scriptCompile = engineCompilable.compile("Math.sqrt(i) + o"); Object o = new Integer(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", i); o = scriptCompile.eval(); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b3_rhino(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("rhino"); System.out.println(" * Benchmarking Rhino engine..."); long s = System.currentTimeMillis(); Compilable engineCompilable = (Compilable) engine; CompiledScript scriptCompile = engineCompilable.compile("Math.sqrt(i) + o"); Object o = new Integer(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", i); o = scriptCompile.eval(); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b3_abstrasy(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("abstrasy"); System.out.println(" * Benchmarking Abstrasy 2.0 engine..."); long s = System.currentTimeMillis(); Object o = new Node_float(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", new Node_float(i)); o = engine.eval("(+ (sqrt i) o)"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b2_nashorn(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("nashorn"); System.out.println(" * Benchmarking Nashorn engine..."); long s = System.currentTimeMillis(); Object o = new Integer(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", i); o = engine.eval("Math.sqrt(i) + o"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b2_rhino(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("rhino"); System.out.println(" * Benchmarking Rhino engine..."); long s = System.currentTimeMillis(); Object o = new Integer(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", i); o = engine.eval("Math.sqrt(i) + o"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b2_abstrasy(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("abstrasy"); System.out.println(" * Benchmarking Abstrasy 2.0 engine..."); long s = System.currentTimeMillis(); Object o = new Node_float(0); for (int i = B1_LOOPS; i>0 ; i--) { engine.put("o", o); engine.put("i", new Node_float(i)); o = engine.eval("(+ (sqrt i) o)"); } long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b1_nashorn(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("nashorn"); System.out.println(" * Benchmarking Nashorn engine..."); long s = System.currentTimeMillis(); Object o = new Double(0); for (int i = B1_LOOPS; i>0 ; i--) o = engine.eval("Math.sqrt(" + i + ") + " + o); long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b1_rhino(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("rhino"); System.out.println(" * Benchmarking Rhino engine..."); long s = System.currentTimeMillis(); Object o = new Double(0); for (int i = B1_LOOPS; i>0 ; i--) o = engine.eval("Math.sqrt(" + i + ") + " + o); long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static double b1_abstrasy(ScriptEngineManager manager) { double t0 = 0; try { ScriptEngine engine = manager.getEngineByName("abstrasy"); System.out.println(" * Benchmarking Abstrasy 2.0 engine..."); long s = System.currentTimeMillis(); Object o = new Double(0); for (int i = B1_LOOPS; i>0 ; i--) o = engine.eval("(+ (sqrt " + ((double)i) + ") " + o + ")"); long e = System.currentTimeMillis(); t0 = e - s; System.out.println(" Last Result : " + o); System.out.println(" Time : " + t0 + "ms."); } catch (Exception e) { e.printStackTrace(); } System.out.println(); return t0; } private static final double MAX(double... v) { double r = v[0]; for (int i = 0; i < v.length; i++) r = Math.max(r, v[i]); return r; } private static final double MIN(double... v) { double r = v[0]; for (int i = 0; i < v.length; i++) r = Math.min(r, v[i]); return r; } public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); List factories = manager.getEngineFactories(); System.out.println("(JSR-223) Liste des ScriptEngines disponibles:"); System.out.println("============================================================================="); System.out.println(); for (ScriptEngineFactory factory: factories) { System.out.println(" " + factory.getEngineName()); System.out.println(" ---------------------------------------------------------------------------"); System.out.println(" Name : " + factory.getEngineName()); System.out.println(" Version : " + factory.getEngineVersion()); System.out.println(" Language name : " + factory.getLanguageName()); System.out.println(" Language version : " + factory.getLanguageVersion()); System.out.println(" Extensions : " + factory.getExtensions()); System.out.println(" Mime types : " + factory.getMimeTypes()); System.out.println(" Names : " + factory.getNames()); System.out.println(); } System.out.println(" ---------------------------------------------------------------------------"); System.out.println(); System.out.println(); boolean hasNashorn = manager.getEngineByName("nashorn") != null; System.out.println("Benchmark #1:"); System.out.println("============================================================================="); System.out.println(); double t1 = b1_rhino(manager); double t2 = hasNashorn ? b1_nashorn(manager) : t1; double t0 = b1_abstrasy(manager); System.out.println(" => Ratio : " + (MAX(t0, t1, t2) / MIN(t0, t1, t2))); System.out.println(" ---------------------------------------------------------------------------"); System.out.println(); System.out.println(); System.out.println("Benchmark #2:"); System.out.println("============================================================================="); System.out.println(); t1 = b2_rhino(manager); t2 = hasNashorn ? b2_nashorn(manager) : t1; t0 = b2_abstrasy(manager); System.out.println(" => Ratio : " + (MAX(t0, t1, t2) / MIN(t0, t1, t2))); System.out.println(" ---------------------------------------------------------------------------"); System.out.println(); System.out.println(); System.out.println("Benchmark #3:"); System.out.println("============================================================================="); System.out.println(); t1 = b3_rhino(manager); t2 = hasNashorn ? b3_nashorn(manager) : t1; t0 = b3_abstrasy(manager); System.out.println(" => Ratio : " + (MAX(t0, t1, t2) / MIN(t0, t1, t2))); System.out.println(" ---------------------------------------------------------------------------"); System.out.println(); System.out.println(); System.out.println("Benchmark #4:"); System.out.println("============================================================================="); System.out.println(); t1 = b4_rhino(manager); t2 = hasNashorn ? b4_nashorn(manager) : t1; t0 = b4_abstrasy(manager); System.out.println(" => Ratio : " + (MAX(t0, t1, t2) / MIN(t0, t1, t2))); System.out.println(" ---------------------------------------------------------------------------"); System.out.println(); System.out.println(); System.out.println("Benchmark #5:"); System.out.println("============================================================================="); System.out.println(); t1 = b5_rhino(manager); t2 = hasNashorn ? b5_nashorn(manager) : t1; t0 = b5_abstrasy(manager); System.out.println(" => Ratio : " + (MAX(t0, t1, t2) / MIN(t0, t1, t2))); System.out.println(" ---------------------------------------------------------------------------"); System.out.println(); System.out.println(); } }