diff options
author | Marc-Andre Lafortune <github@marc-andre.ca> | 2020-09-26 15:49:43 -0400 |
---|---|---|
committer | Marc-André Lafortune <github@marc-andre.ca> | 2020-12-09 02:15:41 -0500 |
commit | a7dccd08e7c9cf0e5d0c0fdbe659ccc921624e6f (patch) | |
tree | 1cbb857586e30af448e5cd59321a09799ce74f5d | |
parent | 6b264e833f9b9c86819feff88048ffcdf8d67af8 (diff) | |
download | ruby-a7dccd08e7c9cf0e5d0c0fdbe659ccc921624e6f.tar.gz |
[ruby/matrix] Make frozen matrices Ractor shareable
-rw-r--r-- | lib/matrix.rb | 6 | ||||
-rw-r--r-- | test/matrix/test_matrix.rb | 9 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/matrix.rb b/lib/matrix.rb index c6193ebee1..32f1e233ce 100644 --- a/lib/matrix.rb +++ b/lib/matrix.rb @@ -532,7 +532,8 @@ class Matrix alias map! collect! def freeze - @rows.freeze + @rows.each(&:freeze).freeze + super end @@ -2141,6 +2142,9 @@ class Vector all?(&:zero?) end + # + # Makes the matrix frozen and Ractor-shareable + # def freeze @elements.freeze super diff --git a/test/matrix/test_matrix.rb b/test/matrix/test_matrix.rb index 8125fb2bcb..03e6bf1e09 100644 --- a/test/matrix/test_matrix.rb +++ b/test/matrix/test_matrix.rb @@ -818,4 +818,13 @@ class TestMatrix < Test::Unit::TestCase assert_equal(Matrix[[(1-2i), 1], [(0-1i), 2], [0, 3]], @c1.adjoint) assert_equal(Matrix.empty(0,2), @e1.adjoint) end + + def test_ractor + obj1 = @m1.freeze + + obj2 = Ractor.new obj1 do |obj| + obj + end.take + assert_same obj1, obj2 + end if defined?(Ractor) end |