Project

General

Profile

Actions

Misc #19149

closed

Minimal covered tests with the --enable-yjit case?

Added by jaruga (Jun Aruga) over 1 year ago. Updated over 1 year ago.

Status:
Closed
Assignee:
-
[ruby-core:110881]

Description

In the Fedora Ruby's RPM recipe file, we were running the commands below.

$ ./autogen.sh
$ ./configure ...
$ make
$ make check

What is the minimal covered tests?

Now the we want to add the --enable-yjit option. Could you tell me what is the minimal covered test commands in the --enable-yjit case?

$ ./autogen.sh
$ ./configure --enable-yjit ...
$ make
$ ??

Then do we need to run the make check 2 times with both with yjit and without yjit as follows? The yjit command options --yjit-call-threshold=1 --yjit-verify-ctx comes from the https://github.com/ruby/ruby/blob/d2fa67de81f66cb42cfeebc81a03c57a4621c09a/.github/workflows/yjit-ubuntu.yml#L59.

$ make check
$ make check RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx"

Or is it good enough to run the make check and the specific tests with the yjit options as follows?

$ make check
$ make test-all RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx" TESTS="test/ruby/{test_yjit_exit_locations.rb,test_yjit.rb}"

Or is it good enough to run the make check with the YJIT options as follows?

$ make check RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx"

YJIT command options

Could you explain why the command options --yjit-call-threshold=1 --yjit-verify-ctx above is better to test the YJIT cases rather than just --yjit?

Ideal situation

I want to see the just running make check covers necessary cases in YJIT. Because it is convenience, and I think users tend to be satisfied with only running the make check. What do you think?

$ ./autogen.sh
$ ./configure --enable-yjit ...
$ make
$ make check

I tried to inject the YJIT command options in a test file for that. Perhaps it might be like this. But so far I am not succeeded.

diff --git a/test/lib/jit_support.rb b/test/lib/jit_support.rb
index 26f8542dc2..3fce402e32 100644
--- a/test/lib/jit_support.rb
+++ b/test/lib/jit_support.rb
@@ -69,8 +69,10 @@ def supported?
   end
 
   def yjit_supported?
+    return @yjit_supported if defined?(@yjit_supported)
     # e.g. x86_64-linux, x64-mswin64_140, x64-mingw32, x64-mingw-ucrt
-    RUBY_PLATFORM.match?(/^(x86_64|x64|arm64|aarch64)-/)
+    @yjit_supported = RbConfig::CONFIG["YJIT_SUPPORT"] != 'no' &&
+      RUBY_PLATFORM.match?(/^(x86_64|x64|arm64|aarch64)-/)
   end
 
   def remove_mjit_logs(stderr)
diff --git a/test/ruby/test_yjit.rb b/test/ruby/test_yjit.rb
index 9ab058d97b..10c8e3b891 100644
--- a/test/ruby/test_yjit.rb
+++ b/test/ruby/test_yjit.rb
@@ -8,7 +8,7 @@
 require 'tmpdir'
 require_relative '../lib/jit_support'
 
-return unless defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled?
+return unless JITSupport.yjit_supported?
 
 # Tests for YJIT with assertions on compilation and side exits
 # insipired by the MJIT tests in test/ruby/test_mjit.rb
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0