/* * Copyright 2012-2016 Institut National des Sciences Appliquées de Lyon (INSA-Lyon) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gololang.microbenchmarks.support; import clojure.lang.Var; import org.junit.Test; import org.python.core.*; import org.python.util.PythonInterpreter; import javax.script.Invocable; import javax.script.ScriptEngine; import java.lang.invoke.MethodHandle; import static java.lang.invoke.MethodType.genericMethodType; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class CodeLoaderTest { @Test public void test_golo_loading() throws Throwable { CodeLoader loader = new CodeLoader(); MethodHandle truth = loader.golo("check", "truth", 0); assertEquals(42, (Object) truth.invokeExact()); MethodHandle incr = loader.golo("check", "incr", 1); assertEquals(42, (Object) incr.invokeExact((Object) 41)); } @Test public void test_groovy_loading() throws Throwable { CodeLoader loader = new CodeLoader(); MethodHandle truth = loader.groovy("Check", "truth", genericMethodType(0)); assertEquals(42, (Object) truth.invokeExact()); MethodHandle incr = loader.groovy("Check", "incr", genericMethodType(1)); assertEquals(42, (Object) incr.invokeExact((Object) 41)); } @Test public void test_groovy_indy_loading() throws Throwable { CodeLoader loader = new CodeLoader(); MethodHandle truth = loader.groovy_indy("Check", "truth", genericMethodType(0)); assertEquals(42, (Object) truth.invokeExact()); MethodHandle incr = loader.groovy_indy("Check", "incr", genericMethodType(1)); assertEquals(42, (Object) incr.invokeExact((Object) 41)); } @Test public void test_clojure_loading() throws Throwable { CodeLoader loader = new CodeLoader(); Var incrementer = loader.clojure("check", "check", "incrementer"); assertEquals(11L, incrementer.invoke(10L)); } @Test public void test_jruby_loading() { CodeLoader loader = new CodeLoader(); JRubyContainerAndReceiver check = loader.jruby("check"); assertEquals((Object) 42, check.container().callMethod(check.receiver(), "truth", Integer.class)); assertEquals((Object) 11, check.container().callMethod(check.receiver(), "incrementing", new Object[]{10}, Integer.class)); } @Test public void test_nashorn_loading() throws Throwable { CodeLoader loader = new CodeLoader(); ScriptEngine check = loader.nashorn("check"); Invocable invocable = (Invocable) check; assertEquals(42, invocable.invokeFunction("truth")); assertEquals(11.0, invocable.invokeFunction("incr", 10)); } @Test public void test_jython_loading() throws Throwable { CodeLoader loader = new CodeLoader(); PythonInterpreter interpreter = loader.jython("check"); PyObject object = interpreter.get("truth"); assertTrue(object instanceof PyFunction); PyFunction fun = (PyFunction) object; assertEquals(new PyInteger(42), fun.__call__()); object = interpreter.get("incr"); assertTrue(object instanceof PyFunction); fun = (PyFunction) object; assertEquals(new PyInteger(3), fun.__call__(new PyInteger(2))); fun = (PyFunction) interpreter.get("foo"); interpreter.exec("from org.gololang.microbenchmarks.support import Foo"); PyObject foo = interpreter.eval("Foo()"); assertEquals(new PyString("foo"), fun.__call__(foo)); } }