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

Add parallel letter frequency #1638

Merged
merged 8 commits into from
Mar 4, 2024

Conversation

ccadden
Copy link
Contributor

@ccadden ccadden commented Feb 23, 2024

Would love some input about the additional instructions for Ruby parallelism/concurrency specifically!

Forum Post: https://forum.exercism.org/t/add-parallel-letter-frequency-exercise/9948

@github-actions github-actions bot closed this Feb 23, 2024
@kotp kotp reopened this Feb 23, 2024
@kotp kotp changed the title Add parallel leter frequency Add parallel letter frequency Feb 23, 2024
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch 2 times, most recently from ad12275 to 091c8b8 Compare February 23, 2024 16:59
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch 2 times, most recently from 0f6526c to cabb8ab Compare February 23, 2024 22:29
@ccadden ccadden requested a review from kotp February 23, 2024 22:36
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch 3 times, most recently from 644adcc to 8a0c9ee Compare February 24, 2024 00:06
@exercism exercism deleted a comment from github-actions bot Feb 24, 2024
@kotp
Copy link
Member

kotp commented Feb 24, 2024

warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.

Do we or should we show this as part of the exercise until this is no longer considered experimental?

@ccadden ccadden force-pushed the add-parallel-leter-frequency branch from e83d940 to ec60c84 Compare February 24, 2024 11:28
@ccadden ccadden requested a review from kotp February 24, 2024 11:30
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch 3 times, most recently from 5d85c7b to 31ccfc2 Compare February 27, 2024 00:33
class ParallelLetterFrequency
def self.count(texts)
ractors = (0...texts.length).map do |i|
Ractor.new(texts[i]) do |text|
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is Ractor a gem that is not installed by default?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ractor may be a gem, but it is included in the core/standard libraries.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder of the *.txt files might best be moved to their own directory (inputs or texts or something like that).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably "data" directory.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved files to data directory.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it might be confusing for students to see this file when they download the directory. I would suggest copying the code to a method in the test class and then to remove this file.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with this, it is a helper method for the benefit of the tests, not something that should be outside of the test.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved class file to helper method within the tests.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you remove this file?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be treated like the other files that are used for processing. Just because it is about Ruby does not change the idea that it is just a data file of words for processing. (Stroop Effect in play here?)

Comment on lines 167 to 181
def test_faster_than_serialized_answer
skip
texts = Array.new(10, 'a' * 100_000)

GC.start
t0_parallel = Minitest.clock_time
ParallelLetterFrequency.count(texts)
parallel_time = Minitest.clock_time - t0_parallel

t0_sequential = Minitest.clock_time
SequentialLetterFrequency.count(texts)
sequential_time = Minitest.clock_time - t0_sequential

assert parallel_time < sequential_time,
'Parallel execution should be faster than sequential for batches of large texts'
end
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you have any idea what the execution time of this code is? In other words: how long does this run (on average)?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is coming from (and not the idea of but the actual) clock_time.

Minitest has benchmark support, we can use that more directly, I think.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the file end with _test?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Renamed.

require_relative 'sequential_letter_frequency'
require_relative 'parallel_letter_frequency'

class ParallelLetterFrequencyBenchmarkTest < Minitest::Benchmark
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if there are other exercises that use benchmarking, but in any case I expect the students to not necessarily know what to do with this file. I would suggest adding some text to the instructions.append.md file and some comments to this file to help the student figure out what they can do with this file.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The instructions may only apply for those that are working locally, rather than solely on the platform, as well.

But, we can also use https://ruby-doc.org/3.0.6/gems/minitest/Minitest/Benchmark.html as it is included.

@ccadden ccadden force-pushed the add-parallel-leter-frequency branch 2 times, most recently from dd8e640 to 3c5e737 Compare March 2, 2024 15:52
@ccadden ccadden requested a review from ErikSchierboom March 2, 2024 15:53
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch from 3c5e737 to db308ad Compare March 2, 2024 15:56
@kotp
Copy link
Member

kotp commented Mar 3, 2024

To expand on the benchmark, might want to link to https://github.com/evanphx/benchmark-ips at least "for further reading". It is the one I will usually use, for the more fixed time comparisons.

Copy link
Member

@kotp kotp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With some pending changes, and some optional changes.

@ccadden ccadden force-pushed the add-parallel-leter-frequency branch 3 times, most recently from 276d407 to ae75090 Compare March 4, 2024 01:15
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch from ae75090 to b40cc9b Compare March 4, 2024 01:17
@ccadden ccadden force-pushed the add-parallel-leter-frequency branch from b40cc9b to 268ea0a Compare March 4, 2024 01:22
@kotp kotp merged commit d6f34f8 into exercism:main Mar 4, 2024
4 checks passed
@ErikSchierboom
Copy link
Member

@kotp You merged this, but didn't we also need to install the gem in the test runner? Could you verify that this exercise works via the online editor?

@kotp
Copy link
Member

kotp commented Mar 5, 2024

@kotp You merged this, but didn't we also need to install the gem in the test runner? Could you verify that this exercise works via the online editor?

Getting reports of failure on the platform earlier, timing out(??). But not sure I can see the reason.

@ErikSchierboom
Copy link
Member

I'll have a look.

@kotp
Copy link
Member

kotp commented Mar 5, 2024

Ruby 3.0.4 should work (no gem required), and Ruby 3.3 should work as well. Looking at ruby-test-runner repository now.

@kotp
Copy link
Member

kotp commented Mar 5, 2024

The tests only reports "failed" in the platform test runner.

@kotp
Copy link
Member

kotp commented Mar 5, 2024

   1   │ ast (2.4.2)
   2   │ bundler (2.2.22)
   3   │ docile (1.4.0)
   4   │ json (default: 2.6.3)
   5   │ minitest (5.14.4)
   6   │ mocha (1.13.0)
   7   │ parallel (1.23.0)
   8   │ parser (3.2.2.1)
   9   │ rainbow (3.1.1)
  10   │ rake (13.0.6)
  11   │ regexp_parser (2.8.0)
  12   │ rexml (3.2.5)
  13   │ rubocop (1.50.2)
  14   │ rubocop-ast (1.28.0)
  15   │ rubocop-minitest (0.15.0)
  16   │ rubocop-rake (0.6.0)
  17   │ ruby-progressbar (1.13.0)
  18   │ simplecov (0.21.2)
  19   │ simplecov-html (0.12.3)
  20   │ simplecov_json_formatter (0.1.3)
  21   │ unicode-display_width (2.4.2)

Gem list as above, and the tests for parallel letter test runs fine (locally) and was passing CI, as far as I remember.

Locally:

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
/home/testRunner/.rvm/rubies/ruby-3.2.2/bin/ruby -I lib -r disable_skip.rb /tmp/parallel-letter-frequency20240305-1907475-a6smxp/parallel_letter_frequency_test.rb 


----------------------------------------------------------------
running tests for: parallel-letter-frequency
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
/tmp/parallel-letter-frequency20240305-1907475-a6smxp/parallel_letter_frequency.rb:4: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
Run options: --seed 63307

# Running:

..............

Finished in 2.734469s, 5.1198 runs/s, 5.1198 assertions/s.

14 runs, 14 assertions, 0 failures, 0 errors, 0 skips

@ErikSchierboom
Copy link
Member

The first problem is that the Ruby test runner runs without networking, which causes:

SYSTEM: Failed to open TCP connection to local.exercism.io:3021 (Connection refused - connect(2) for "local.exercism.io" port 3021)
SYSTEM: ["/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/net/http.rb:1271:in `initialize'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/net/http.rb:1271:in `open'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/net/http.rb:1271:in `block in connect'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/timeout.rb:196:in `timeout'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/net/http.rb:1269:in `connect'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/net/http.rb:1248:in `do_start'", "/home/erik/.rubies/ruby-3.2.1/lib/ruby/3.2.0/net/http.rb:1237:in `start'", "/home/erik/.gem/ruby/3.2.1/gems/rest-client-2.1.0/lib/restclient/request.rb:727:in `transmit'", "/home/erik/.gem/ruby/3.2.1/gems/rest-client-2.1.0/lib/restclient/request.rb:163:in `execute'", "/home/erik/.gem/ruby/3.2.1/gems/rest-client-2.1.0/lib/restclient/request.rb:63:in `execute'", "/home/erik/.gem/ruby/3.2.1/gems/rest-client-2.1.0/lib/restclient.rb:66:in `get'", "/home/erik/exercism/tooling-invoker/lib/tooling_invoker/worker/retrieve_job.rb:9:in `call'", "/home/erik/.gem/ruby/3.2.1/gems/mandate-2.2.0/lib/mandate/call_injector.rb:10:in `call'", "/home/erik/exercism/tooling-invoker/lib/tooling_invoker/worker.rb:39:in `block in start!'", "/home/erik/exercism/tooling-invoker/lib/tooling_invoker/worker.rb:26:in `loop'", "/home/erik/exercism/tooling-invoker/lib/tooling_invoker/worker.rb:26:in `start!'", "bin/dev:13:in `<main>'"]

I can fix that by using a fake "internal" network, but we get another error:

warning: parser/current is loading parser/ruby30, which recognizes
warning: 3.0.x-compliant syntax, but you are running 3.2.2.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
/mnt/exercism-iteration/parallel_letter_frequency.rb:4: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
/opt/test-runner/lib/minitest_ext/exercism_reporter.rb:106:in `index': undefined method `[]' for nil:NilClass (NoMethodError)

        metadata[:index]
                ^^^^^^^^
	from /opt/test-runner/lib/minitest_ext/exercism_reporter.rb:30:in `each'
	from /opt/test-runner/lib/minitest_ext/exercism_reporter.rb:30:in `sort_by'
	from /opt/test-runner/lib/minitest_ext/exercism_reporter.rb:30:in `report'
	from /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest.rb:896:in `each'
	from /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest.rb:896:in `report'
	from /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest.rb:164:in `run'
	from /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest.rb:83:in `block in autorun'
bin/run.rb: unexpected return
bin/run.rb: [BUG] Segmentation fault at 0x0000000000000048
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux-musl]

-- Control frame information -----------------------------------------------
c:0001 p:0000 s:0003 E:001be0 DUMMY  [FINISH]


-- Machine register context ------------------------------------------------
 RIP: 0x00007f51531e109c RBP: 0x00007ffd10c575f4 RSP: 0x00007ffd10c57588
 RAX: 0x0000000000000000 RBX: 0x00007f51429afea8 RCX: 0x0000000000000003
 RDX: 0x0000000000000000 RDI: 0x00007f51429afea8 RSI: 0x00007f514fd1e7f8
  R8: 0x0000000000000000  R9: 0x0000000000000000 R10: 0x00007ffd10c56bd0
 R11: 0x0000000000000206 R12: 0x00007ffd10c575f8 R13: 0x00007ffd10c57788
 R14: 0x00007f51536c0940 R15: 0x00007f51536c0ac0 EFL: 0x0000000000010246

-- Other runtime information -----------------------------------------------

* Loaded script: bin/run.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 fiber.so
    3 rational.so
    4 complex.so
    5 ruby2_keywords.rb
    6 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/encdb.so
    7 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/transdb.so
    8 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/rbconfig.rb
    9 /usr/local/lib/ruby/3.2.0/rubygems/compatibility.rb
   10 /usr/local/lib/ruby/3.2.0/rubygems/defaults.rb
   11 /usr/local/lib/ruby/3.2.0/rubygems/deprecate.rb
   12 /usr/local/lib/ruby/3.2.0/rubygems/errors.rb
   13 /usr/local/lib/ruby/3.2.0/rubygems/unknown_command_spell_checker.rb
   14 /usr/local/lib/ruby/3.2.0/rubygems/exceptions.rb
   15 /usr/local/lib/ruby/3.2.0/rubygems/basic_specification.rb
   16 /usr/local/lib/ruby/3.2.0/rubygems/stub_specification.rb
   17 /usr/local/lib/ruby/3.2.0/rubygems/platform.rb
   18 /usr/local/lib/ruby/3.2.0/rubygems/util/list.rb
   19 /usr/local/lib/ruby/3.2.0/rubygems/version.rb
   20 /usr/local/lib/ruby/3.2.0/rubygems/requirement.rb
   21 /usr/local/lib/ruby/3.2.0/rubygems/specification.rb
   22 /usr/local/lib/ruby/3.2.0/rubygems/util.rb
   23 /usr/local/lib/ruby/3.2.0/rubygems/dependency.rb
   24 /usr/local/lib/ruby/3.2.0/rubygems/core_ext/kernel_gem.rb
   25 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/monitor.so
   26 /usr/local/lib/ruby/3.2.0/monitor.rb
   27 /usr/local/lib/ruby/3.2.0/rubygems.rb
   28 /usr/local/lib/ruby/3.2.0/rubygems/path_support.rb
   29 /usr/local/lib/ruby/3.2.0/error_highlight/version.rb
   30 /usr/local/lib/ruby/3.2.0/error_highlight/base.rb
   31 /usr/local/lib/ruby/3.2.0/error_highlight/formatter.rb
   32 /usr/local/lib/ruby/3.2.0/error_highlight/core_ext.rb
   33 /usr/local/lib/ruby/3.2.0/error_highlight.rb
   34 /usr/local/lib/ruby/3.2.0/did_you_mean/version.rb
   35 /usr/local/lib/ruby/3.2.0/did_you_mean/core_ext/name_error.rb
   36 /usr/local/lib/ruby/3.2.0/did_you_mean/levenshtein.rb
   37 /usr/local/lib/ruby/3.2.0/did_you_mean/jaro_winkler.rb
   38 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checker.rb
   39 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   40 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   41 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/name_error_checkers.rb
   42 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/method_name_checker.rb
   43 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/key_error_checker.rb
   44 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/null_checker.rb
   45 /usr/local/lib/ruby/3.2.0/did_you_mean/tree_spell_checker.rb
   46 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/require_path_checker.rb
   47 /usr/local/lib/ruby/3.2.0/did_you_mean/spell_checkers/pattern_key_name_checker.rb
   48 /usr/local/lib/ruby/3.2.0/did_you_mean/formatter.rb
   49 /usr/local/lib/ruby/3.2.0/did_you_mean.rb
   50 /usr/local/lib/ruby/3.2.0/syntax_suggest/core_ext.rb
   51 /usr/local/bundle/gems/mandate-1.0.0/lib/mandate/version.rb
   52 /usr/local/bundle/gems/mandate-1.0.0/lib/mandate/memoize.rb
   53 /usr/local/bundle/gems/mandate-1.0.0/lib/mandate/call_injector.rb
   54 /usr/local/bundle/gems/mandate-1.0.0/lib/mandate/initializer_injector.rb
   55 /usr/local/bundle/gems/mandate-1.0.0/lib/mandate/callbacks.rb
   56 /usr/local/bundle/gems/mandate-1.0.0/lib/mandate.rb
   57 /usr/local/lib/ruby/3.2.0/json/version.rb
   58 /usr/local/lib/ruby/3.2.0/ostruct.rb
   59 /usr/local/lib/ruby/3.2.0/json/generic_object.rb
   60 /usr/local/lib/ruby/3.2.0/json/common.rb
   61 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/parser.so
   62 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/generator.so
   63 /usr/local/lib/ruby/3.2.0/json/ext.rb
   64 /usr/local/lib/ruby/3.2.0/json.rb
   65 /usr/local/lib/ruby/3.2.0/optparse.rb
   66 /usr/local/lib/ruby/3.2.0/mutex_m.rb
   67 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/parallel.rb
   68 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/stringio.so
   69 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/etc.so
   70 /usr/local/lib/ruby/3.2.0/delegate.rb
   71 /usr/local/lib/ruby/3.2.0/fileutils.rb
   72 /usr/local/lib/ruby/3.2.0/tmpdir.rb
   73 /usr/local/lib/ruby/3.2.0/tempfile.rb
   74 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/assertions.rb
   75 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/unit.rb
   76 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/test.rb
   77 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest.rb
   78 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/expectations.rb
   79 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/spec.rb
   80 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/mock.rb
   81 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/autorun.rb
   82 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/pride_plugin.rb
   83 /opt/test-runner/lib/write_report.rb
   84 /usr/local/lib/ruby/3.2.0/set.rb
   85 /usr/local/lib/ruby/3.2.0/racc/info.rb
   86 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/racc/cparse.so
   87 /usr/local/lib/ruby/3.2.0/racc/parser.rb
   88 /usr/local/bundle/gems/ast-2.4.2/lib/ast/node.rb
   89 /usr/local/bundle/gems/ast-2.4.2/lib/ast/processor/mixin.rb
   90 /usr/local/bundle/gems/ast-2.4.2/lib/ast/processor.rb
   91 /usr/local/bundle/gems/ast-2.4.2/lib/ast/sexp.rb
   92 /usr/local/bundle/gems/ast-2.4.2/lib/ast.rb
   93 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/version.rb
   94 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/messages.rb
   95 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/deprecation.rb
   96 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/ast/node.rb
   97 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/ast/processor.rb
   98 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/meta.rb
   99 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/buffer.rb
  100 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/range.rb
  101 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/comment.rb
  102 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/comment/associator.rb
  103 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/rewriter.rb
  104 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/rewriter/action.rb
  105 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/tree_rewriter.rb
  106 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/tree_rewriter/action.rb
  107 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map.rb
  108 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/operator.rb
  109 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/collection.rb
  110 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/constant.rb
  111 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/variable.rb
  112 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/keyword.rb
  113 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/definition.rb
  114 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/method_definition.rb
  115 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/send.rb
  116 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/index.rb
  117 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/condition.rb
  118 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/ternary.rb
  119 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/for.rb
  120 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/rescue_body.rb
  121 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/heredoc.rb
  122 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/source/map/objc_kwarg.rb
  123 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/syntax_error.rb
  124 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/clobbering_error.rb
  125 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/diagnostic.rb
  126 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/diagnostic/engine.rb
  127 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/static_environment.rb
  128 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/lexer.rb
  129 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/lexer/literal.rb
  130 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/lexer/stack_state.rb
  131 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/lexer/dedenter.rb
  132 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/builders/default.rb
  133 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/context.rb
  134 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/max_numparam_stack.rb
  135 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/current_arg_stack.rb
  136 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/variables_stack.rb
  137 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/base.rb
  138 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/rewriter.rb
  139 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/tree_rewriter.rb
  140 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser.rb
  141 /usr/local/lib/ruby/3.2.0/forwardable/impl.rb
  142 /usr/local/lib/ruby/3.2.0/forwardable.rb
  143 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/ext/range.rb
  144 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/cgi/escape.so
  145 /usr/local/lib/ruby/3.2.0/cgi/util.rb
  146 /usr/local/lib/ruby/3.2.0/erb/version.rb
  147 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/strscan.so
  148 /usr/local/lib/ruby/3.2.0/erb/compiler.rb
  149 /usr/local/lib/ruby/3.2.0/erb/def_method.rb
  150 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/erb/escape.so
  151 /usr/local/lib/ruby/3.2.0/erb/util.rb
  152 /usr/local/lib/ruby/3.2.0/erb.rb
  153 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node_pattern.rb
  154 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/sexp.rb
  155 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node.rb
  156 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb
  157 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/binary_operator_node.rb
  158 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/collection_node.rb
  159 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/conditional_node.rb
  160 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/hash_element_node.rb
  161 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/method_dispatch_node.rb
  162 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/modifier_node.rb
  163 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/numeric_node.rb
  164 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/parameterized_node.rb
  165 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/predicate_operator_node.rb
  166 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/mixin/basic_literal_node.rb
  167 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/alias_node.rb
  168 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/and_node.rb
  169 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/args_node.rb
  170 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/array_node.rb
  171 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/block_node.rb
  172 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/break_node.rb
  173 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/case_match_node.rb
  174 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/case_node.rb
  175 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/class_node.rb
  176 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/def_node.rb
  177 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/defined_node.rb
  178 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/ensure_node.rb
  179 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/for_node.rb
  180 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/forward_args_node.rb
  181 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/float_node.rb
  182 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/hash_node.rb
  183 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/if_node.rb
  184 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/index_node.rb
  185 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/indexasgn_node.rb
  186 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/int_node.rb
  187 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/keyword_splat_node.rb
  188 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/lambda_node.rb
  189 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/module_node.rb
  190 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/next_node.rb
  191 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/or_node.rb
  192 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/pair_node.rb
  193 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/range_node.rb
  194 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/regexp_node.rb
  195 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/resbody_node.rb
  196 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/return_node.rb
  197 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/self_class_node.rb
  198 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/send_node.rb
  199 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/str_node.rb
  200 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/super_node.rb
  201 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/symbol_node.rb
  202 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/until_node.rb
  203 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/when_node.rb
  204 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/while_node.rb
  205 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/node/yield_node.rb
  206 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/builder.rb
  207 /usr/local/lib/ruby/3.2.0/digest/version.rb
  208 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest.so
  209 /usr/local/lib/ruby/3.2.0/digest/loader.rb
  210 /usr/local/lib/ruby/3.2.0/digest.rb
  211 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest/sha1.so
  212 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/processed_source.rb
  213 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/token.rb
  214 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/traversal.rb
  215 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast/version.rb
  216 /usr/local/bundle/gems/rubocop-ast-0.3.0/lib/rubocop/ast.rb
  217 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/ruby30.rb
  218 /usr/local/bundle/gems/parser-3.0.2.0/lib/parser/current.rb
  219 /opt/test-runner/lib/extract_metadata.rb
  220 /opt/test-runner/lib/extract_test_metadata.rb
  221 /opt/test-runner/lib/minitest_ext/extract_standard_exception_error_message.rb
  222 /opt/test-runner/lib/minitest_ext/extract_syntax_exception_error_message.rb
  223 /opt/test-runner/lib/minitest_ext/extract_failure_error_message.rb
  224 /opt/test-runner/lib/minitest_ext/exercism_plugin.rb
  225 /opt/test-runner/lib/minitest_ext/exercism_reporter.rb
  226 /opt/test-runner/lib/minitest_ext/minitest.rb
  227 /opt/test-runner/lib/ext/kernel.rb
  228 /usr/local/lib/ruby/gems/3.2.0/gems/minitest-5.16.3/lib/minitest/benchmark.rb
  229 /mnt/exercism-iteration/parallel_letter_frequency.rb
  230 /mnt/exercism-iteration/parallel_letter_frequency_benchmark_test.rb
  231 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/utf_32le.so
  232 /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/utf_16_32.so
  233 /mnt/exercism-iteration/parallel_letter_frequency_test.rb

* Process memory map:

5587a1e49000-5587a1e4a000 r--p 00000000 08:40 1109133                    /usr/local/bin/ruby
5587a1e4a000-5587a1e4b000 r-xp 00001000 08:40 1109133                    /usr/local/bin/ruby
5587a1e4b000-5587a1e4c000 r--p 00002000 08:40 1109133                    /usr/local/bin/ruby
5587a1e4c000-5587a1e4d000 r--p 00002000 08:40 1109133                    /usr/local/bin/ruby
5587a1e4d000-5587a1e4e000 rw-p 00003000 08:40 1109133                    /usr/local/bin/ruby
5587a35fc000-5587a35fd000 ---p 00000000 00:00 0                          [heap]
5587a35fd000-5587a361f000 rw-p 00000000 00:00 0                          [heap]
7f5141e10000-7f5141f20000 rw-p 00000000 00:00 0 
7f5142120000-7f51423a0000 rw-p 00000000 00:00 0 
7f5142690000-7f51427a0000 rw-p 00000000 00:00 0 
7f51428a0000-7f5142c40000 rw-p 00000000 00:00 0 
7f5143000000-7f5143080000 rw-p 00000000 00:00 0 
7f5143290000-7f5143320000 rw-p 00000000 00:00 0 
7f5143430000-7f51434c0000 rw-p 00000000 00:00 0 
7f5143570000-7f5143670000 rw-p 00000000 00:00 0 
7f5143790000-7f51437c0000 rw-p 00000000 00:00 0 
7f51437d0000-7f51437e0000 rw-p 00000000 00:00 0 
7f51437e0000-7f5143980000 rw-p 00000000 00:00 0 
7f5143990000-7f51439a0000 rw-p 00000000 00:00 0 
7f51439a0000-7f5143a70000 rw-p 00000000 00:00 0 
7f5143a80000-7f5143a90000 rw-p 00000000 00:00 0 
7f5143aa0000-7f5143ab0000 rw-p 00000000 00:00 0 
7f5143ab0000-7f5143b50000 rw-p 00000000 00:00 0 
7f5143c00000-7f5143c20000 rw-p 00000000 00:00 0 
7f5143c50000-7f5143c80000 rw-p 00000000 00:00 0 
7f5143cb0000-7f5143cc0000 rw-p 00000000 00:00 0 
7f5143cc0000-7f5143d60000 rw-p 00000000 00:00 0 
7f5143d70000-7f5143da0000 rw-p 00000000 00:00 0 
7f5143dc0000-7f5143dd0000 rw-p 00000000 00:00 0 
7f5143dd0000-7f5143e20000 rw-p 00000000 00:00 0 
7f5143e2d000-7f5143e2f000 ---p 00000000 00:00 0 
7f5143e2f000-7f5144030000 rw-p 00000000 00:00 0 
7f5144030000-7f5144032000 ---p 00000000 00:00 0 
7f5144032000-7f5144233000 rw-p 00000000 00:00 0 
7f5144233000-7f5144235000 ---p 00000000 00:00 0 
7f5144235000-7f5144436000 rw-p 00000000 00:00 0 
7f5144436000-7f5144438000 ---p 00000000 00:00 0 
7f5144438000-7f5144639000 rw-p 00000000 00:00 0 
7f5144639000-7f514463b000 ---p 00000000 00:00 0 
7f514463b000-7f514483c000 rw-p 00000000 00:00 0 
7f514483c000-7f514483e000 ---p 00000000 00:00 0 
7f514483e000-7f5144a58000 rw-p 00000000 00:00 0 
7f5144aa0000-7f5144ab0000 rw-p 00000000 00:00 0 
7f5144ab0000-7f5144b70000 rw-p 00000000 00:00 0 
7f5144b80000-7f5144b90000 rw-p 00000000 00:00 0 
7f5144bb0000-7f5144be0000 rw-p 00000000 00:00 0 
7f5144c70000-7f5144ca0000 rw-p 00000000 00:00 0 
7f5144d30000-7f5144d50000 rw-p 00000000 00:00 0 
7f5144dc0000-7f5144dd0000 rw-p 00000000 00:00 0 
7f5144df0000-7f5144e20000 rw-p 00000000 00:00 0 
7f5144eb0000-7f5144ee0000 rw-p 00000000 00:00 0 
7f5144f70000-7f5144fa0000 rw-p 00000000 00:00 0 
7f5145030000-7f5145060000 rw-p 00000000 00:00 0 
7f51450f0000-7f5145120000 rw-p 00000000 00:00 0 
7f51451b0000-7f51451e0000 rw-p 00000000 00:00 0 
7f5145270000-7f51452a0000 rw-p 00000000 00:00 0 
7f5145330000-7f5145360000 rw-p 00000000 00:00 0 
7f51453f0000-7f5145420000 rw-p 00000000 00:00 0 
7f51454b0000-7f51454e0000 rw-p 00000000 00:00 0 
7f5145570000-7f51455a0000 rw-p 00000000 00:00 0 
7f5145630000-7f5145660000 rw-p 00000000 00:00 0 
7f51456f0000-7f5145720000 rw-p 00000000 00:00 0 
7f51457b0000-7f51457e0000 rw-p 00000000 00:00 0 
7f5145870000-7f51458a0000 rw-p 00000000 00:00 0 
7f5145930000-7f5145960000 rw-p 00000000 00:00 0 
7f51459f0000-7f5145a20000 rw-p 00000000 00:00 0 
7f5145ab0000-7f5145ae0000 rw-p 00000000 00:00 0 
7f5145b70000-7f5145ba0000 rw-p 00000000 00:00 0 
7f5145c30000-7f5145c60000 rw-p 00000000 00:00 0 
7f5145cf0000-7f5145d20000 rw-p 00000000 00:00 0 
7f5145db0000-7f5145de0000 rw-p 00000000 00:00 0 
7f5145e70000-7f5145ea0000 rw-p 00000000 00:00 0 
7f5145f10000-7f5145f30000 rw-p 00000000 00:00 0 
7f5145f60000-7f5145f70000 rw-p 00000000 00:00 0 
7f5145f90000-7f5145fc0000 rw-p 00000000 00:00 0 
7f5146090000-7f51460b0000 rw-p 00000000 00:00 0 
7f51460e0000-7f51460f0000 rw-p 00000000 00:00 0 
7f5146110000-7f5146140000 rw-p 00000000 00:00 0 
7f5146210000-7f5146230000 rw-p 00000000 00:00 0 
7f5146260000-7f5146270000 rw-p 00000000 00:00 0 
7f5146290000-7f51462b0000 rw-p 00000000 00:00 0 
7f5146390000-7f51463b0000 rw-p 00000000 00:00 0 
7f5146410000-7f5146440000 rw-p 00000000 00:00 0 
7f5146460000-7f5146470000 rw-p 00000000 00:00 0 
7f51464a0000-7f51465f0000 rw-p 00000000 00:00 0 
7f5146600000-7f5146610000 rw-p 00000000 00:00 0 
7f514664d000-7f514664f000 ---p 00000000 00:00 0 
7f514664f000-7f5146850000 rw-p 00000000 00:00 0 
7f5146890000-7f51468b0000 rw-p 00000000 00:00 0 
7f5146910000-7f5146940000 rw-p 00000000 00:00 0 
7f5146947000-7f5146949000 ---p 00000000 00:00 0 
7f5146949000-7f5146b4a000 rw-p 00000000 00:00 0 
7f5146b4a000-7f5146b4c000 ---p 00000000 00:00 0 
7f5146b4c000-7f5146d4d000 rw-p 00000000 00:00 0 
7f5146d4d000-7f5146d4f000 ---p 00000000 00:00 0 
7f5146d4f000-7f5146f50000 rw-p 00000000 00:00 0 
7f5146fa0000-7f5146fb0000 rw-p 00000000 00:00 0 
7f5146fb0000-7f5147040000 rw-p 00000000 00:00 0 
7f5147070000-7f51470a0000 rw-p 00000000 00:00 0 
7f51470b0000-7f51470d0000 rw-p 00000000 00:00 0 
7f5147110000-7f5147120000 rw-p 00000000 00:00 0 
7f51471d0000-7f5147220000 rw-p 00000000 00:00 0 
7f5147230000-7f5147240000 rw-p 00000000 00:00 0 
7f51472f0000-7f5147310000 rw-p 00000000 00:00 0 
7f5147350000-7f5147360000 rw-p 00000000 00:00 0 
7f5147370000-7f51473a0000 rw-p 00000000 00:00 0 
7f5147470000-7f5147490000 rw-p 00000000 00:00 0 
7f51474d0000-7f51474e0000 rw-p 00000000 00:00 0 
7f5147510000-7f5147520000 rw-p 00000000 00:00 0 
7f5147590000-7f51475a0000 rw-p 00000000 00:00 0 
7f51475e0000-7f5147600000 rw-p 00000000 00:00 0 
7f5147640000-7f5147650000 rw-p 00000000 00:00 0 
7f5147660000-7f5147670000 rw-p 00000000 00:00 0 
7f5147670000-7f5147680000 rw-p 00000000 00:00 0 
7f51476f0000-7f5147720000 rw-p 00000000 00:00 0 
7f5147730000-7f5147750000 rw-p 00000000 00:00 0 
7f51477c0000-7f51477e0000 rw-p 00000000 00:00 0 
7f5147820000-7f5147830000 rw-p 00000000 00:00 0 
7f51478e0000-7f51478f0000 rw-p 00000000 00:00 0 
7f51478f0000-7f5147900000 rw-p 00000000 00:00 0 
7f5147a00000-7f5147a30000 rw-p 00000000 00:00 0 
7f5147a40000-7f5147a50000 rw-p 00000000 00:00 0 
7f5147a70000-7f5147bd0000 rw-p 00000000 00:00 0 
7f5147c20000-7f5147c40000 rw-p 00000000 00:00 0 
7f5147c60000-7f5147c70000 rw-p 00000000 00:00 0 
7f5147cd0000-7f5147d00000 rw-p 00000000 00:00 0 
7f5147d20000-7f5147d30000 rw-p 00000000 00:00 0 
7f5147d70000-7f5147d90000 rw-p 00000000 00:00 0 
7f5147e50000-7f5147e60000 rw-p 00000000 00:00 0 
7f5147ea0000-7f5147ec0000 rw-p 00000000 00:00 0 
7f5147ee0000-7f5147f00000 rw-p 00000000 00:00 0 
7f5147f40000-7f5147f50000 rw-p 00000000 00:00 0 
7f5147f90000-7f5147fb0000 rw-p 00000000 00:00 0 
7f5148040000-7f5148050000 rw-p 00000000 00:00 0 
7f5148090000-7f51480e0000 rw-p 00000000 00:00 0 
7f5148200000-7f5148210000 rw-p 00000000 00:00 0 
7f5148210000-7f5148230000 rw-p 00000000 00:00 0 
7f5148260000-7f5148280000 rw-p 00000000 00:00 0 
7f5148290000-7f51482a0000 rw-p 00000000 00:00 0 
7f51482a2000-7f51482a3000 rw-p 00000000 00:00 0 
7f5148300000-7f5148330000 rw-p 00000000 00:00 0 
7f5148350000-7f5148380000 rw-p 00000000 00:00 0 
7f5148500000-7f5148520000 rw-p 00000000 00:00 0 
7f5148560000-7f5148570000 rw-p 00000000 00:00 0 
7f5148650000-7f5148660000 rw-p 00000000 00:00 0 
7f5148660000-7f5148680000 rw-p 00000000 00:00 0 
7f51486f0000-7f5148720000 rw-p 00000000 00:00 0 
7f51487d0000-7f51487e0000 rw-p 00000000 00:00 0 
7f5148820000-7f5148840000 rw-p 00000000 00:00 0 
7f5148850000-7f5148860000 rw-p 00000000 00:00 0 
7f5148960000-7f5148970000 rw-p 00000000 00:00 0 
7f5148a00000-7f5148a20000 rw-p 00000000 00:00 0 
7f5148a50000-7f5148a80000 rw-p 00000000 00:00 0 
7f5148b20000-7f5148b50000 rw-p 00000000 00:00 0 
7f5148b88000-7f5148b90000 rw-p 00000000 00:00 0 
7f5148be0000-7f5148c00000 rw-p 00000000 00:00 0 
7f5148c48000-7f5148c60000 rw-p 00000000 00:00 0 
7f5148c60000-7f5148c80000 rw-p 00000000 00:00 0 
7f5148c90000-7f5148cc0000 rw-p 00000000 00:00 0 
7f5148cd0000-7f5148ce0000 rw-p 00000000 00:00 0 
7f5148d68000-7f5148d70000 rw-p 00000000 00:00 0 
7f5148d90000-7f5148dc0000 rw-p 00000000 00:00 0 
7f5148e80000-7f5148ea0000 rw-p 00000000 00:00 0 
7f5148ea4000-7f5148eac000 rw-p 00000000 00:00 0 
7f5148eb0000-7f5148ee0000 rw-p 00000000 00:00 0 
7f5148f90000-7f5148f98000 rw-p 00000000 00:00 0 
7f5149060000-7f5149070000 rw-p 00000000 00:00 0 
7f5149078000-7f5149080000 rw-p 00000000 00:00 0 
7f51490a0000-7f51490b0000 rw-p 00000000 00:00 0 
7f5149180000-7f5149190000 rw-p 00000000 00:00 0 
7f51491a0000-7f51491b0000 rw-p 00000000 00:00 0 
7f5149244000-7f514924c000 rw-p 00000000 00:00 0 
7f5149260000-7f5149280000 rw-p 00000000 00:00 0 
7f51492b0000-7f51492c0000 rw-p 00000000 00:00 0 
7f5149300000-7f5149320000 rw-p 00000000 00:00 0 
7f5149322000-7f514932a000 rw-p 00000000 00:00 0 
7f5149330000-7f5149350000 rw-p 00000000 00:00 0 
7f51493f8000-7f5149400000 rw-p 00000000 00:00 0 
7f5149468000-7f5149470000 rw-p 00000000 00:00 0 
7f5149500000-7f5149520000 rw-p 00000000 00:00 0 
7f5149540000-7f5149560000 rw-p 00000000 00:00 0 
7f5149580000-7f51495a0000 rw-p 00000000 00:00 0 
7f51495f0000-7f5149600000 rw-p 00000000 00:00 0 
7f51496a0000-7f51496b0000 rw-p 00000000 00:00 0 
7f51496d7000-7f51496e7000 rw-p 00000000 00:00 0 
7f5149730000-7f5149740000 rw-p 00000000 00:00 0 
7f5149760000-7f5149770000 rw-p 00000000 00:00 0 
7f51497b4000-7f51497bc000 rw-p 00000000 00:00 0 
7f5149800000-7f5149820000 rw-p 00000000 00:00 0 
7f514986f000-7f5149887000 rw-p 00000000 00:00 0 
7f51498f0000-7f5149900000 rw-p 00000000 00:00 0 
7f5149927000-7f5149947000 rw-p 00000000 00:00 0 
7f5149970000-7f5149972000 ---p 00000000 00:00 0 
7f5149972000-7f5149b73000 rw-p 00000000 00:00 0 
7f5149b73000-7f5149b75000 ---p 00000000 00:00 0 
7f5149b75000-7f5149d76000 rw-p 00000000 00:00 0 
7f5149d76000-7f5149d78000 ---p 00000000 00:00 0 
7f5149d78000-7f5149f79000 rw-p 00000000 00:00 0 
7f5149f79000-7f5149f7b000 ---p 00000000 00:00 0 
7f5149f7b000-7f514a17c000 rw-p 00000000 00:00 0 
7f514a17c000-7f514a17e000 ---p 00000000 00:00 0 
7f514a17e000-7f514a37f000 rw-p 00000000 00:00 0 
7f514a37f000-7f514a381000 ---p 00000000 00:00 0 
7f514a381000-7f514a582000 rw-p 00000000 00:00 0 
7f514a582000-7f514a584000 ---p 00000000 00:00 0 
7f514a584000-7f514a785000 rw-p 00000000 00:00 0 
7f514a785000-7f514a787000 ---p 00000000 00:00 0 
7f514a787000-7f514a988000 rw-p 00000000 00:00 0 
7f514a988000-7f514a98a000 ---p 00000000 00:00 0 
7f514a98a000-7f514ab8b000 rw-p 00000000 00:00 0 
7f514ab8b000-7f514ab8d000 ---p 00000000 00:00 0 
7f514ab8d000-7f514ad8e000 rw-p 00000000 00:00 0 
7f514ad8e000-7f514ad90000 ---p 00000000 00:00 0 
7f514ad90000-7f514af91000 rw-p 00000000 00:00 0 
7f514af91000-7f514af93000 ---p 00000000 00:00 0 
7f514af93000-7f514b194000 rw-p 00000000 00:00 0 
7f514b194000-7f514b196000 ---p 00000000 00:00 0 
7f514b196000-7f514b397000 rw-p 00000000 00:00 0 
7f514b397000-7f514b399000 ---p 00000000 00:00 0 
7f514b399000-7f514b59a000 rw-p 00000000 00:00 0 
7f514b59a000-7f514b59c000 ---p 00000000 00:00 0 
7f514b59c000-7f514b79d000 rw-p 00000000 00:00 0 
7f514b79d000-7f514b79f000 ---p 00000000 00:00 0 
7f514b79f000-7f514b9a0000 rw-p 00000000 00:00 0 
7f514b9a0000-7f514b9a2000 ---p 00000000 00:00 0 
7f514b9a2000-7f514bba3000 rw-p 00000000 00:00 0 
7f514bba3000-7f514bba5000 ---p 00000000 00:00 0 
7f514bba5000-7f514bda6000 rw-p 00000000 00:00 0 
7f514bda6000-7f514bda8000 ---p 00000000 00:00 0 
7f514bda8000-7f514bfa9000 rw-p 00000000 00:00 0 
7f514bfa9000-7f514bfab000 ---p 00000000 00:00 0 
7f514bfab000-7f514c1ac000 rw-p 00000000 00:00 0 
7f514c1ac000-7f514c1ae000 ---p 00000000 00:00 0 
7f514c1ae000-7f514c3af000 rw-p 00000000 00:00 0 
7f514c3af000-7f514c3b1000 ---p 00000000 00:00 0 
7f514c3b1000-7f514c5b2000 rw-p 00000000 00:00 0 
7f514c5b2000-7f514c5b4000 ---p 00000000 00:00 0 
7f514c5b4000-7f514c7b5000 rw-p 00000000 00:00 0 
7f514c7b5000-7f514c7b7000 ---p 00000000 00:00 0 
7f514c7b7000-7f514c9b8000 rw-p 00000000 00:00 0 
7f514c9b8000-7f514c9ba000 ---p 00000000 00:00 0 
7f514c9ba000-7f514cbbb000 rw-p 00000000 00:00 0 
7f514cbbb000-7f514cbbd000 ---p 00000000 00:00 0 
7f514cbbd000-7f514cdef000 rw-p 00000000 00:00 0 
7f514ce09000-7f514cebc000 rw-p 00000000 00:00 0 
7f514cec0000-7f514ced0000 rw-p 00000000 00:00 0 
7f514cef7000-7f514cf07000 rw-p 00000000 00:00 0 
7f514cf55000-7f514cf65000 rw-p 00000000 00:00 0 
7f514cf65000-7f514cf67000 ---p 00000000 00:00 0 
7f514cf67000-7f514d21b000 rw-p 00000000 00:00 0 
7f514d220000-7f514d283000 rw-p 00000000 00:00 0 
7f514d284000-7f514d294000 rw-p 00000000 00:00 0 
7f514d2c6000-7f514d2c8000 ---p 00000000 00:00 0 
7f514d2c8000-7f514d4c9000 rw-p 00000000 00:00 0 
7f514d4c9000-7f514d4cb000 ---p 00000000 00:00 0 
7f514d4cb000-7f514d6cc000 rw-p 00000000 00:00 0 
7f514d6cc000-7f514d6ce000 ---p 00000000 00:00 0 
7f514d6ce000-7f514d9d8000 rw-p 00000000 00:00 0 
7f514d9df000-7f514d9e7000 rw-p 00000000 00:00 0 
7f514da30000-7f514da40000 rw-p 00000000 00:00 0 
7f514da43000-7f514da53000 rw-p 00000000 00:00 0 
7f514da6c000-7f514da8d000 rw-p 00000000 00:00 0 
7f514da8e000-7f514da96000 rw-p 00000000 00:00 0 
7f514dad0000-7f514dae0000 rw-p 00000000 00:00 0 
7f514daec000-7f514daf8000 rw-p 00000000 00:00 0 
7f514daf9000-7f514dc30000 rw-p 00000000 00:00 0 
7f514dc30000-7f514dc4a000 rw-p 00000000 00:00 0 
7f514dc4a000-7f514dc4b000 r--p 00000000 08:40 1110632                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/utf_16_32.so
7f514dc4b000-7f514dc4d000 r-xp 00001000 08:40 1110632                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/utf_16_32.so
7f514dc4d000-7f514dc4e000 r--p 00003000 08:40 1110632                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/utf_16_32.so
7f514dc4e000-7f514dc4f000 r--p 00004000 08:40 1110632                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/utf_16_32.so
7f514dc4f000-7f514dc50000 rw-p 00005000 08:40 1110632                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/utf_16_32.so
7f514dc50000-7f514dc64000 rw-p 00000000 00:00 0 
7f514dc64000-7f514dc65000 r--p 00000000 08:40 1110636                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/utf_32le.so
7f514dc65000-7f514dc66000 r-xp 00001000 08:40 1110636                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/utf_32le.so
7f514dc66000-7f514dc67000 r--p 00002000 08:40 1110636                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/utf_32le.so
7f514dc67000-7f514dc68000 r--p 00002000 08:40 1110636                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/utf_32le.so
7f514dc68000-7f514dc69000 rw-p 00003000 08:40 1110636                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/utf_32le.so
7f514dc69000-7f514de30000 rw-p 00000000 00:00 0 
7f514de30000-7f514de3d000 rw-p 00000000 00:00 0 
7f514de3d000-7f514de3f000 r--p 00000000 08:40 1110580                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest.so
7f514de3f000-7f514de41000 r-xp 00002000 08:40 1110580                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest.so
7f514de41000-7f514de42000 r--p 00004000 08:40 1110580                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest.so
7f514de42000-7f514de43000 r--p 00004000 08:40 1110580                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest.so
7f514de43000-7f514de44000 rw-p 00005000 08:40 1110580                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest.so
7f514de44000-7f514de45000 r--p 00000000 08:40 1110578                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest/sha1.so
7f514de45000-7f514de47000 r-xp 00001000 08:40 1110578                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest/sha1.so
7f514de47000-7f514de48000 r--p 00003000 08:40 1110578                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest/sha1.so
7f514de48000-7f514de49000 r--p 00003000 08:40 1110578                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest/sha1.so
7f514de49000-7f514de4a000 rw-p 00004000 08:40 1110578                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/digest/sha1.so
7f514de4a000-7f514dffd000 rw-p 00000000 00:00 0 
7f514dffd000-7f514e001000 rw-p 00000000 00:00 0 
7f514e001000-7f514e002000 r--p 00000000 08:40 1110645                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/erb/escape.so
7f514e002000-7f514e003000 r-xp 00001000 08:40 1110645                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/erb/escape.so
7f514e003000-7f514e004000 r--p 00002000 08:40 1110645                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/erb/escape.so
7f514e004000-7f514e005000 r--p 00002000 08:40 1110645                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/erb/escape.so
7f514e005000-7f514e006000 rw-p 00003000 08:40 1110645                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/erb/escape.so
7f514e006000-7f514e008000 r--p 00000000 08:40 1110673                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/strscan.so
7f514e008000-7f514e00c000 r-xp 00002000 08:40 1110673                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/strscan.so
7f514e00c000-7f514e00e000 r--p 00006000 08:40 1110673                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/strscan.so
7f514e00e000-7f514e00f000 r--p 00007000 08:40 1110673                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/strscan.so
7f514e00f000-7f514e010000 rw-p 00008000 08:40 1110673                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/strscan.so
7f514e010000-7f514e05a000 rw-p 00000000 00:00 0 
7f514e05a000-7f514e05b000 r--p 00000000 08:40 1110570                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/cgi/escape.so
7f514e05b000-7f514e05d000 r-xp 00001000 08:40 1110570                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/cgi/escape.so
7f514e05d000-7f514e05e000 r--p 00003000 08:40 1110570                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/cgi/escape.so
7f514e05e000-7f514e05f000 r--p 00003000 08:40 1110570                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/cgi/escape.so
7f514e05f000-7f514e060000 rw-p 00004000 08:40 1110570                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/cgi/escape.so
7f514e060000-7f514e1a9000 rw-p 00000000 00:00 0 
7f514e1a9000-7f514e1aa000 r--p 00000000 08:40 1110665                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/racc/cparse.so
7f514e1aa000-7f514e1ad000 r-xp 00001000 08:40 1110665                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/racc/cparse.so
7f514e1ad000-7f514e1ae000 r--p 00004000 08:40 1110665                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/racc/cparse.so
7f514e1ae000-7f514e1af000 r--p 00004000 08:40 1110665                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/racc/cparse.so
7f514e1af000-7f514e1b0000 rw-p 00005000 08:40 1110665                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/racc/cparse.so
7f514e1b0000-7f514e365000 rw-p 00000000 00:00 0 
7f514e365000-7f514e36c000 rw-p 00000000 00:00 0 
7f514e36c000-7f514e36e000 r--p 00000000 08:40 1110646                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/etc.so
7f514e36e000-7f514e371000 r-xp 00002000 08:40 1110646                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/etc.so
7f514e371000-7f514e373000 r--p 00005000 08:40 1110646                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/etc.so
7f514e373000-7f514e374000 r--p 00006000 08:40 1110646                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/etc.so
7f514e374000-7f514e375000 rw-p 00007000 08:40 1110646                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/etc.so
7f514e375000-7f514e377000 r--p 00000000 08:40 1110672                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/stringio.so
7f514e377000-7f514e37c000 r-xp 00002000 08:40 1110672                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/stringio.so
7f514e37c000-7f514e37e000 r--p 00007000 08:40 1110672                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/stringio.so
7f514e37e000-7f514e37f000 r--p 00008000 08:40 1110672                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/stringio.so
7f514e37f000-7f514e380000 rw-p 00009000 08:40 1110672                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/stringio.so
7f514e380000-7f514e3d7000 rw-p 00000000 00:00 0 
7f514e3d7000-7f514e401000 rw-p 00000000 00:00 0 
7f514e401000-7f514e40d000 rw-p 00000000 00:00 0 
7f514e40d000-7f514e40f000 r--p 00000000 08:40 1110655                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/generator.so
7f514e40f000-7f514e416000 r-xp 00002000 08:40 1110655                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/generator.so
7f514e416000-7f514e418000 r--p 00009000 08:40 1110655                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/generator.so
7f514e418000-7f514e419000 r--p 0000a000 08:40 1110655                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/generator.so
7f514e419000-7f514e41a000 rw-p 0000b000 08:40 1110655                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/generator.so
7f514e41a000-7f514e422000 rw-p 00000000 00:00 0 
7f514e422000-7f514e424000 r--p 00000000 08:40 1110656                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/parser.so
7f514e424000-7f514e428000 r-xp 00002000 08:40 1110656                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/parser.so
7f514e428000-7f514e429000 r--p 00006000 08:40 1110656                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/parser.so
7f514e429000-7f514e42a000 r--p 00006000 08:40 1110656                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/parser.so
7f514e42a000-7f514e42b000 rw-p 00007000 08:40 1110656                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/json/ext/parser.so
7f514e42b000-7f514e530000 rw-p 00000000 00:00 0 
7f514e530000-7f514e531000 r--p 00000000 08:40 1110657                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/monitor.so
7f514e531000-7f514e532000 r-xp 00001000 08:40 1110657                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/monitor.so
7f514e532000-7f514e533000 r--p 00002000 08:40 1110657                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/monitor.so
7f514e533000-7f514e534000 r--p 00002000 08:40 1110657                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/monitor.so
7f514e534000-7f514e535000 rw-p 00003000 08:40 1110657                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/monitor.so
7f514e535000-7f514e831000 rw-p 00000000 00:00 0 
7f514e831000-7f514e832000 r--p 00000000 08:40 1110630                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/transdb.so
7f514e832000-7f514e833000 r-xp 00001000 08:40 1110630                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/transdb.so
7f514e833000-7f514e834000 r--p 00002000 08:40 1110630                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/transdb.so
7f514e834000-7f514e835000 r--p 00002000 08:40 1110630                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/transdb.so
7f514e835000-7f514e836000 rw-p 00003000 08:40 1110630                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/trans/transdb.so
7f514e836000-7f514e83a000 rw-p 00000000 00:00 0 
7f514e83a000-7f514e83b000 r--p 00000000 08:40 1110586                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/encdb.so
7f514e83b000-7f514e83c000 r-xp 00001000 08:40 1110586                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/encdb.so
7f514e83c000-7f514e83d000 r--p 00002000 08:40 1110586                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/encdb.so
7f514e83d000-7f514e83e000 r--p 00002000 08:40 1110586                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/encdb.so
7f514e83e000-7f514e83f000 rw-p 00003000 08:40 1110586                    /usr/local/lib/ruby/3.2.0/x86_64-linux-musl/enc/encdb.so
7f514e83f000-7f514e847000 rw-p 00000000 00:00 0 
7f514e847000-7f514e848000 ---p 00000000 00:00 0 
7f514e848000-7f514e8e9000 rw-p 00000000 00:00 0 
7f514e8e9000-7f514e8ea000 ---p 00000000 00:00 0 
7f514e8ea000-7f514e98b000 rw-p 00000000 00:00 0 
7f514e98b000-7f514e98c000 ---p 00000000 00:00 0 
7f514e98c000-7f514ea2d000 rw-p 00000000 00:00 0 
7f514ea2d000-7f514ea2e000 ---p 00000000 00:00 0 
7f514ea2e000-7f514eacf000 rw-p 00000000 00:00 0 
7f514eacf000-7f514ead0000 ---p 00000000 00:00 0 
7f514ead0000-7f514eb71000 rw-p 00000000 00:00 0 
7f514eb71000-7f514eb72000 ---p 00000000 00:00 0 
7f514eb72000-7f514ec13000 rw-p 00000000 00:00 0 
7f514ec13000-7f514ec14000 ---p 00000000 00:00 0 
7f514ec14000-7f514ecb5000 rw-p 00000000 00:00 0 
7f514ecb5000-7f514ecb6000 ---p 00000000 00:00 0 
7f514ecb6000-7f514ed57000 rw-p 00000000 00:00 0 
7f514ed57000-7f514ed58000 ---p 00000000 00:00 0 
7f514ed58000-7f514edf9000 rw-p 00000000 00:00 0 
7f514edf9000-7f514edfa000 ---p 00000000 00:00 0 
7f514edfa000-7f514ee9b000 rw-p 00000000 00:00 0 
7f514ee9b000-7f514ee9c000 ---p 00000000 00:00 0 
7f514ee9c000-7f514ef3d000 rw-p 00000000 00:00 0 
7f514ef3d000-7f514ef3e000 ---p 00000000 00:00 0 
7f514ef3e000-7f514efdf000 rw-p 00000000 00:00 0 
7f514efdf000-7f514efe0000 ---p 00000000 00:00 0 
7f514efe0000-7f514f081000 rw-p 00000000 00:00 0 
7f514f081000-7f514f082000 ---p 00000000 00:00 0 
7f514f082000-7f514f123000 rw-p 00000000 00:00 0 
7f514f123000-7f514f124000 ---p 00000000 00:00 0 
7f514f124000-7f514f1c5000 rw-p 00000000 00:00 0 
7f514f1c5000-7f514f1c6000 ---p 00000000 00:00 0 
7f514f1c6000-7f514f267000 rw-p 00000000 00:00 0 
7f514f267000-7f514f268000 ---p 00000000 00:00 0 
7f514f268000-7f514f309000 rw-p 00000000 00:00 0 
7f514f309000-7f514f30a000 ---p 00000000 00:00 0 
7f514f30a000-7f514f3ab000 rw-p 00000000 00:00 0 
7f514f3ab000-7f514f3ac000 ---p 00000000 00:00 0 
7f514f3ac000-7f514f44d000 rw-p 00000000 00:00 0 
7f514f44d000-7f514f44e000 ---p 00000000 00:00 0 
7f514f44e000-7f514f4ef000 rw-p 00000000 00:00 0 
7f514f4ef000-7f514f4f0000 ---p 00000000 00:00 0 
7f514f4f0000-7f514f591000 rw-p 00000000 00:00 0 
7f514f591000-7f514f592000 ---p 00000000 00:00 0 
7f514f592000-7f514f633000 rw-p 00000000 00:00 0 
7f514f633000-7f514f634000 ---p 00000000 00:00 0 
7f514f634000-7f514f6d5000 rw-p 00000000 00:00 0 
7f514f6d5000-7f514f6d6000 ---p 00000000 00:00 0 
7f514f6d6000-7f514f777000 rw-p 00000000 00:00 0 
7f514f777000-7f514f778000 ---p 00000000 00:00 0 
7f514f778000-7f514f819000 rw-p 00000000 00:00 0 
7f514f819000-7f514f81a000 ---p 00000000 00:00 0 
7f514f81a000-7f514f8bb000 rw-p 00000000 00:00 0 
7f514f8bb000-7f514f8bc000 ---p 00000000 00:00 0 
7f514f8bc000-7f514f95d000 rw-p 00000000 00:00 0 
7f514f95d000-7f514f95e000 ---p 00000000 00:00 0 
7f514f95e000-7f514f9ff000 rw-p 00000000 00:00 0 
7f514f9ff000-7f514fa00000 ---p 00000000 00:00 0 
7f514fa00000-7f514faa1000 rw-p 00000000 00:00 0 
7f514faa1000-7f514faa2000 ---p 00000000 00:00 0 
7f514faa2000-7f514fb43000 rw-p 00000000 00:00 0 
7f514fb43000-7f514fb44000 ---p 00000000 00:00 0 
7f514fb44000-7f514fbe5000 rw-p 00000000 00:00 0 
7f514fbe5000-7f514fbe6000 ---p 00000000 00:00 0 
7f514fbe6000-7f5152f48000 rw-p 00000000 00:00 0 
7f5152f48000-7f5152f4b000 r--p 00000000 08:40 1108804                    /usr/lib/libgcc_s.so.1
7f5152f4b000-7f5152f61000 r-xp 00003000 08:40 1108804                    /usr/lib/libgcc_s.so.1
7f5152f61000-7f5152f64000 r--p 00019000 08:40 1108804                    /usr/lib/libgcc_s.so.1
7f5152f64000-7f5152f65000 r--p 0001c000 08:40 1108804                    /usr/lib/libgcc_s.so.1
7f5152f65000-7f5152f66000 rw-p 0001d000 08:40 1108804                    /usr/lib/libgcc_s.so.1
7f5152f66000-7f5152f71000 r--p 00000000 08:40 1108808                    /usr/lib/libgmp.so.10.4.1
7f5152f71000-7f5152fb4000 r-xp 0000b000 08:40 1108808                    /usr/lib/libgmp.so.10.4.1
7f5152fb4000-7f5152fca000 r--p 0004e000 08:40 1108808                    /usr/lib/libgmp.so.10.4.1
7f5152fca000-7f5152fcc000 r--p 00063000 08:40 1108808                    /usr/lib/libgmp.so.10.4.1
7f5152fcc000-7f5152fcd000 rw-p 00065000 08:40 1108808                    /usr/lib/libgmp.so.10.4.1
7f5152fcd000-7f5152fd0000 r--p 00000000 08:40 1046267                    /lib/libz.so.1.2.13
7f5152fd0000-7f5152fde000 r-xp 00003000 08:40 1046267                    /lib/libz.so.1.2.13
7f5152fde000-7f5152fe5000 r--p 00011000 08:40 1046267                    /lib/libz.so.1.2.13
7f5152fe5000-7f5152fe6000 r--p 00017000 08:40 1046267                    /lib/libz.so.1.2.13
7f5152fe6000-7f5152fe7000 rw-p 00018000 08:40 1046267                    /lib/libz.so.1.2.13
7f5152fe7000-7f515308a000 r--p 00000000 08:40 1109349                    /usr/local/lib/libruby.so.3.2.2
7f515308a000-7f5153455000 r-xp 000a3000 08:40 1109349                    /usr/local/lib/libruby.so.3.2.2
7f5153455000-7f51535f7000 r--p 0046e000 08:40 1109349                    /usr/local/lib/libruby.so.3.2.2
7f51535f7000-7f5153615000 r--p 00610000 08:40 1109349                    /usr/local/lib/libruby.so.3.2.2
7f5153615000-7f5153616000 rw-p 0062e000 08:40 1109349                    /usr/local/lib/libruby.so.3.2.2
7f5153616000-7f5153627000 rw-p 00000000 00:00 0 
7f5153627000-7f515363b000 r--p 00000000 08:40 1046260                    /lib/ld-musl-x86_64.so.1
7f515363b000-7f5153687000 r-xp 00014000 08:40 1046260                    /lib/ld-musl-x86_64.so.1
7f5153687000-7f51536bd000 r--p 00060000 08:40 1046260                    /lib/ld-musl-x86_64.so.1
7f51536bd000-7f51536be000 r--p 00095000 08:40 1046260                    /lib/ld-musl-x86_64.so.1
7f51536be000-7f51536bf000 rw-p 00096000 08:40 1046260                    /lib/ld-musl-x86_64.so.1
7f51536bf000-7f51536c2000 rw-p 00000000 00:00 0 
7ffd1045a000-7ffd10c59000 rw-p 00000000 00:00 0                          [stack]
7ffd10dd0000-7ffd10dd4000 r--p 00000000 00:00 0                          [vvar]
7ffd10dd4000-7ffd10dd6000 r-xp 00000000 00:00 0                          [vdso]


Aborted

Thoughts?

@ErikSchierboom
Copy link
Member

ErikSchierboom commented Mar 5, 2024

I've tried upgrading to Ruby 3.3.0, but to no avail.

edit: it does seem to help, because now we get:

/mnt/exercism-iteration/parallel_letter_frequency.rb:4: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
/opt/test-runner/lib/minitest_ext/exercism_reporter.rb:106:in `index': undefined method `[]' for nil (NoMethodError)

        metadata[:index]
                ^^^^^^^^
	from /opt/test-runner/lib/minitest_ext/exercism_reporter.rb:30:in `each'
	from /opt/test-runner/lib/minitest_ext/exercism_reporter.rb:30:in `sort_by'
	from /opt/test-runner/lib/minitest_ext/exercism_reporter.rb:30:in `report'
	from /usr/local/lib/ruby/gems/3.3.0/gems/minitest-5.20.0/lib/minitest.rb:931:in `each'
	from /usr/local/lib/ruby/gems/3.3.0/gems/minitest-5.20.0/lib/minitest.rb:931:in `report'
	from /usr/local/lib/ruby/gems/3.3.0/gems/minitest-5.20.0/lib/minitest.rb:167:in `run'
	from /usr/local/lib/ruby/gems/3.3.0/gems/minitest-5.20.0/lib/minitest.rb:86:in `block in autorun'
bin/run.rb: unexpected return

@ErikSchierboom
Copy link
Member

Ah, I think I know. It's probably trying to run the benchmark tests, which is shouldn't do in the test runner. I'll work on a fix.

@ErikSchierboom
Copy link
Member

@Mr-sigma @kotp The problem is indeed the benchmark, which are automatically run in the test runner via require "minitest/autorun". Is there a way to test minitest to not autorun benchmarks?

@ErikSchierboom
Copy link
Member

BTW, I think it would be a good idea to add skip to all the benchmark tests. We don't want to bother students with benchmarks when they're starting out with an exercise.

@ErikSchierboom
Copy link
Member

Working on a fix: exercism/ruby-test-runner#144

@ccadden
Copy link
Contributor Author

ccadden commented Mar 5, 2024

@ErikSchierboom if it's simpler to remove the benchmarking test I'd say go for it. I know other tracks have implemented this with the caveat that we cannot really enforce that you solve it with parallel execution, or that it's faster than a sequential answer. This was an attempt to enforce that.

JS: https://github.com/exercism/javascript/blob/main/exercises/practice/parallel-letter-frequency/parallel-letter-frequency.spec.js

Go: https://github.com/exercism/go/blob/main/exercises/practice/parallel-letter-frequency/.docs/instructions.append.md#testing

Rust: https://github.com/exercism/rust/blob/main/exercises/practice/parallel-letter-frequency/tests/parallel-letter-frequency.rs

I also noticed the test takes >1s on the GitHub runner compared to the thousandths of seconds for most other spec suites:

Run options: --seed 31024

# Running:

..............

Finished in 1.194794s, 11.7175 runs/s, 11.7175 assertions/s.

14 runs, 14 assertions, 0 failures, 0 errors, 0 skips

Let me know and I can open a follow-up to this if needed. Sorry for the headache this morning!

@kotp
Copy link
Member

kotp commented Mar 5, 2024

No problem @Mr-sigma , the request to add the name _test to the benchmark file brought it into the minitest/autorun routine. It would likely be avoided if we changed the name back and documented for the user how to get those to run when they test, if they want to (change a constant, or perhaps guard it with $VERBOSE so that it can be switched at the command line.

@kotp
Copy link
Member

kotp commented Mar 5, 2024

diff --git c/exercises/practice/parallel-letter-frequency/parallel_letter_frequency_benchmark_test.rb w/exercises/practice/parallel-letter-frequency/parallel_letter_frequency_benchmark.rb
similarity index 100%
rename from exercises/practice/parallel-letter-frequency/parallel_letter_frequency_benchmark_test.rb
rename to exercises/practice/parallel-letter-frequency/parallel_letter_frequency_benchmark.rb
diff --git c/exercises/practice/parallel-letter-frequency/parallel_letter_frequency_test.rb w/exercises/practice/parallel-letter-frequency/parallel_letter_frequency_test.rb
index 1ca5a992..29ca5379 100644
--- c/exercises/practice/parallel-letter-frequency/parallel_letter_frequency_test.rb
+++ w/exercises/practice/parallel-letter-frequency/parallel_letter_frequency_test.rb
@@ -1,5 +1,6 @@
 require 'minitest/autorun'
 require_relative 'parallel_letter_frequency'
+require_relative 'parallel_letter_frequency_benchmark' if ENV['BENCHMARK']
 
 # rubocop:disable Layout/SpaceInsideHashLiteralBraces
 class ParallelLetterFrequencyTest < Minitest::Test

This patch would restore the benchmark name back to not having the _test portion, and will allow for benchmark to be ran if the environment variable BENCHMARK is set.

@kotp
Copy link
Member

kotp commented Mar 5, 2024

This patch would restore the benchmark name back to not having the _test portion, and will allow for benchmark to be ran if the environment variable BENCHMARK is set.

I know that there was a message to rename the file to include
_test but that brought the benchmarks into the autorun realm.
This will avoid that, and one must set the benchmark environment variable to
enable the benchmarks.

In practice:

  • fish => 'env BENCHMARK=1 ruby parallel_letter_frequency_test.rb'
  • bash/zsh => 'BENCHMARK=1 ruby parallel_letter_frequency_test.rb'
  • Windows => 'set BENCHMARK=1 && ruby parallel_letter_frequency_test.rb`

So if we want to document that for the student that would want to run the benchmark.

@ErikSchierboom
Copy link
Member

I've fixed the issue in the test runner, so we don't need to do anything special.

What I did find was that the example solution did not pass the tests:

image
So we need to do something about that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants