aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-Andre Lafortune <github@marc-andre.ca>2020-09-26 15:49:43 -0400
committerMarc-André Lafortune <github@marc-andre.ca>2020-12-09 02:15:41 -0500
commita7dccd08e7c9cf0e5d0c0fdbe659ccc921624e6f (patch)
tree1cbb857586e30af448e5cd59321a09799ce74f5d
parent6b264e833f9b9c86819feff88048ffcdf8d67af8 (diff)
downloadruby-a7dccd08e7c9cf0e5d0c0fdbe659ccc921624e6f.tar.gz
[ruby/matrix] Make frozen matrices Ractor shareable
-rw-r--r--lib/matrix.rb6
-rw-r--r--test/matrix/test_matrix.rb9
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