Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid Enso/Python & co. interop problems by using Truffle TCK tests #5238

Closed
wdanilo opened this issue Feb 5, 2023 · 8 comments · Fixed by #8685
Closed

Avoid Enso/Python & co. interop problems by using Truffle TCK tests #5238

wdanilo opened this issue Feb 5, 2023 · 8 comments · Fixed by #8685
Assignees
Labels
-compiler p-medium Should be completed in the next few sprints

Comments

@wdanilo
Copy link
Member

wdanilo commented Feb 5, 2023

This task is automatically imported from the old Task Issue Board and it was originally created by Pavel Marek.
Original issue is here.


Truffle provides a TCK for truffle languages, which tests interoperability. We should integrate these tests in Enso.

References:

@Akirathan Akirathan added p-medium Should be completed in the next few sprints and removed p-low Low priority labels Jul 31, 2023
@Akirathan
Copy link
Member

Integrating Truffle TCK tests might help to prevent issues with interop, like the one mentioned in #7418

@JaroslavTulach JaroslavTulach changed the title Add Truffle TCK tests for Enso Avoid Enso/Python & co. interop problems by using Truffle TCK tests Aug 9, 2023
@JaroslavTulach JaroslavTulach removed the x-new-feature Type: new feature request label Aug 9, 2023
@JaroslavTulach
Copy link
Member

JaroslavTulach commented Jan 4, 2024

Tried to mimic SL pom.xml configuration, but I don't fully understand our JMSUtils, so not all dependencies are satisfied. Anyway, this is what I have:

diff --git build.sbt build.sbt
index abf65aec3e..a0dd0a9b8f 100644
--- build.sbt
+++ build.sbt
@@ -1507,7 +1507,11 @@ lazy val `runtime-test-instruments` =
         JPMSUtils.filterModulesFromUpdate(
           update.value,
           GraalVM.modules ++ Seq(
-            "org.netbeans.api" % "org-openide-util-lookup" % netbeansApiVersion
+            "org.graalvm.sdk"     % "polyglot-tck"            % graalMavenPackagesVersion,
+            "org.graalvm.truffle" % "truffle-tck"             % graalMavenPackagesVersion,
+            "org.graalvm.truffle" % "truffle-tck-common"      % graalMavenPackagesVersion,
+            "org.graalvm.truffle" % "truffle-tck-tests"       % graalMavenPackagesVersion,
+            "org.netbeans.api"    % "org-openide-util-lookup" % netbeansApiVersion
           ),
           streams.value.log,
           shouldContainAll = true
@@ -1515,6 +1519,7 @@ lazy val `runtime-test-instruments` =
       },
       libraryDependencies ++= GraalVM.modules,
       libraryDependencies ++= Seq(
+        "org.graalvm.sdk"  % "polyglot-tck"            % graalMavenPackagesVersion,
         "org.netbeans.api" % "org-openide-util-lookup" % netbeansApiVersion % "provided"
       )
     )
@@ -1557,6 +1562,12 @@ lazy val runtime = (project in file("engine/runtime"))
     },
     Test / parallelExecution := false,
     Test / logBuffered := false,
+    Test / javaOptions ++= Seq(
+      "-Dtck.values=java-host,enso",
+      "-Dtck.language=enso",
+      "-Dtck.inlineVerifierInstrument=false",
+      "-Dpolyglot.engine.AllowExperimentalOptions=true"
+    ),
     Test / testOptions += Tests.Argument(
       "-oD"
     ), // show timings for individual tests
@@ -1569,8 +1580,9 @@ lazy val runtime = (project in file("engine/runtime"))
       "org.graalvm.sdk"      % "polyglot-tck"            % graalMavenPackagesVersion % "provided",
       "org.graalvm.truffle"  % "truffle-api"             % graalMavenPackagesVersion % "provided",
       "org.graalvm.truffle"  % "truffle-dsl-processor"   % graalMavenPackagesVersion % "provided",
-      "org.graalvm.truffle"  % "truffle-tck"             % graalMavenPackagesVersion % "provided",
-      "org.graalvm.truffle"  % "truffle-tck-common"      % graalMavenPackagesVersion % "provided",
+      "org.graalvm.truffle"  % "truffle-tck"             % graalMavenPackagesVersion % Test,
+      "org.graalvm.truffle"  % "truffle-tck-common"      % graalMavenPackagesVersion % Test,
+      "org.graalvm.truffle"  % "truffle-tck-tests"       % graalMavenPackagesVersion % Test,
       "org.netbeans.api"     % "org-openide-util-lookup" % netbeansApiVersion        % "provided",
       "org.scalacheck"      %% "scalacheck"              % scalacheckVersion         % Test,
       "org.scalactic"       %% "scalactic"               % scalacticVersion          % Test,
diff --git engine/runtime-test-instruments/src/main/java/module-info.java engine/runtime-test-instruments/src/main/java/module-info.java
index 7d3cfa8e86..6e816f6ba8 100644
--- engine/runtime-test-instruments/src/main/java/module-info.java
+++ engine/runtime-test-instruments/src/main/java/module-info.java
@@ -1,10 +1,15 @@
 module org.enso.runtime.test {
   requires org.graalvm.truffle;
   requires org.openide.util.lookup.RELEASE180;
+  requires org.graalvm.polyglot;
+  requires org.graalvm.polyglot_tck;
 
   exports org.enso.interpreter.test.instruments;
   exports org.enso.interpreter.test.instruments.service;
 
+  provides org.graalvm.polyglot.tck.LanguageProvider with
+      org.enso.interpreter.test.instruments.tck.EnsoTckLanguageProvider;
+
   provides com.oracle.truffle.api.instrumentation.provider.TruffleInstrumentProvider with
       org.enso.interpreter.test.instruments.CodeIdsTestInstrumentProvider,
       org.enso.interpreter.test.instruments.CodeLocationsTestInstrumentProvider,
diff --git engine/runtime-test-instruments/src/main/java/org/enso/interpreter/test/instruments/tck/EnsoTckLanguageProvider.java engine/runtime-test-instruments/src/main/java/org/enso/interpreter/test/instruments/tck/EnsoTckLanguageProvider.java
new file mode 100644
index 0000000000..b5dffeb78d
--- /dev/null
+++ engine/runtime-test-instruments/src/main/java/org/enso/interpreter/test/instruments/tck/EnsoTckLanguageProvider.java
@@ -0,0 +1,49 @@
+package org.enso.interpreter.test.instruments.tck;
+
+import java.util.Collection;
+
+import org.graalvm.polyglot.Context;
+import org.graalvm.polyglot.Source;
+import org.graalvm.polyglot.Value;
+import org.graalvm.polyglot.tck.LanguageProvider;
+import org.graalvm.polyglot.tck.Snippet;
+
+public class EnsoTckLanguageProvider implements LanguageProvider {
+    public EnsoTckLanguageProvider() {
+    }
+
+    @Override
+    public String getId() {
+        return "enso";
+    }
+
+    @Override
+    public Value createIdentityFunction(Context context) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Collection<? extends Snippet> createValueConstructors(Context context) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Collection<? extends Snippet> createExpressions(Context context) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Collection<? extends Snippet> createStatements(Context context) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Collection<? extends Snippet> createScripts(Context context) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Collection<? extends Source> createInvalidSyntaxScripts(Context context) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+}
\ No newline at end of file
diff --git engine/runtime/src/test/java/org/enso/interpreter/test/tck/EnsoTckErrorTypeTest.java engine/runtime/src/test/java/org/enso/interpreter/test/tck/EnsoTckErrorTypeTest.java
new file mode 100644
index 0000000000..9879dbbecc
--- /dev/null
+++ engine/runtime/src/test/java/org/enso/interpreter/test/tck/EnsoTckErrorTypeTest.java
@@ -0,0 +1,7 @@
+package org.enso.interpreter.test.tck;
+
+public class EnsoTckErrorTypeTest extends com.oracle.truffle.tck.tests.ErrorTypeTest {
+  public EnsoTckErrorTypeTest(com.oracle.truffle.tck.tests.TestRun r) {
+    super(r);
+  }
+}

however trying:

sbt:enso> runtime/testOnly *EnsoTckErrorTypeTest
Error occurred during initialization of boot layer
java.lang.module.FindException: Module org.graalvm.polyglot_tck not found, required by org.enso.runtime.test

@Akirathan, can you please take a look fix my --module-path configuration mistakes? Thank you Pavel, for your changes: ad4d991 - branch wip/jtulach/Tck_5238 is now ready for further development.

@enso-bot
Copy link

enso-bot bot commented Jan 8, 2024

Jaroslav Tulach reports a new STANDUP for yesterday (2024-01-07):

Progress: - ImportExportCache: 9109ca0

Next Day: TCK, interop & co.

@enso-bot
Copy link

enso-bot bot commented Jan 9, 2024

Jaroslav Tulach reports a new STANDUP for yesterday (2024-01-08):

Progress: - Character to Text: #8685 (comment)

Next Day: TCK, interop, big decimal & bugfixes

Discord
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.
Discord
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.

@enso-bot
Copy link

enso-bot bot commented Jan 10, 2024

Jaroslav Tulach reports a new STANDUP for yesterday (2024-01-09):

Progress: - Fix CI & editions: 77deb71

Next Day: TCK, interop, big decimal & bugfixes

Discord
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.

@enso-bot
Copy link

enso-bot bot commented Jan 11, 2024

Jaroslav Tulach reports a new STANDUP for yesterday (2024-01-10):

Progress: - investigating TCK failures: #8685 (comment)

Next Day: Finish TCK integration

Discord
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.
Discord
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.

@enso-bot
Copy link

enso-bot bot commented Jan 12, 2024

Jaroslav Tulach reports a new STANDUP for yesterday (2024-01-11):

Progress: - PR is finally green: #8685

Next Day: Integrate TCK, look towards BigDecimal support

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-compiler p-medium Should be completed in the next few sprints
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

3 participants