[前][次][番号順一覧][スレッド一覧]

ruby-changes:52585

From: marcandre <ko1@a...>
Date: Fri, 21 Sep 2018 03:24:24 +0900 (JST)
Subject: [ruby-changes:52585] marcandRe: r64796 (trunk): Matrix: Add #reflexive? method. [Fix GH-1730]

marcandre	2018-09-21 03:24:16 +0900 (Fri, 21 Sep 2018)

  New Revision: 64796

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=64796

  Log:
    Matrix: Add #reflexive? method. [Fix GH-1730]
    
    Adapted from a patch by Yilo

  Added files:
    trunk/spec/ruby/library/matrix/reflexive_spec.rb
  Modified files:
    trunk/NEWS
    trunk/lib/matrix.rb
Index: lib/matrix.rb
===================================================================
--- lib/matrix.rb	(revision 64795)
+++ lib/matrix.rb	(revision 64796)
@@ -814,6 +814,15 @@ class Matrix https://github.com/ruby/ruby/blob/trunk/lib/matrix.rb#L814
   end
 
   #
+  # Returns +true+ if this is a reflexive matrix.
+  # Raises an error if matrix is not square.
+  #
+  def reflexive?
+    Matrix.Raise ErrDimensionMismatch unless square?
+    each(:diagonal).all? { |e| e == 1 }
+  end
+
+  #
   # Returns +true+ if this is a unitary matrix
   # Raises an error if matrix is not square.
   #
Index: spec/ruby/library/matrix/reflexive_spec.rb
===================================================================
--- spec/ruby/library/matrix/reflexive_spec.rb	(nonexistent)
+++ spec/ruby/library/matrix/reflexive_spec.rb	(revision 64796)
@@ -0,0 +1,31 @@ https://github.com/ruby/ruby/blob/trunk/spec/ruby/library/matrix/reflexive_spec.rb#L1
+require File.expand_path('../../../spec_helper', __FILE__)
+require 'matrix'
+
+ruby_version_is '2.6' do
+  describe "Matrix.reflexive?" do
+    it "returns true for a reflexive Matrix" do
+      Matrix[[1, 2, 3], [4, 1, 3], [5, 3, 1]].reflexive?.should be_true
+    end
+
+    it "returns true for a 0x0 empty matrix" do
+      Matrix.empty.reflexive?.should be_true
+    end
+
+    it "returns false for a non-reflexive Matrix" do
+      Matrix[[1, 1],[2, 2]].reflexive?.should be_false
+    end
+
+    it "raises an error for non-square matrices" do
+      [
+        Matrix[[0], [0]],
+        Matrix[[0, 0]],
+        Matrix.empty(0, 2),
+        Matrix.empty(2, 0),
+      ].each do |rectangular_matrix|
+        lambda {
+          rectangular_matrix.reflexive?
+        }.should raise_error(Matrix::ErrDimensionMismatch)
+      end
+    end
+  end
+end
Index: NEWS
===================================================================
--- NEWS	(revision 64795)
+++ NEWS	(revision 64796)
@@ -264,10 +264,12 @@ sufficient information, see the ChangeLo https://github.com/ruby/ruby/blob/trunk/NEWS#L264
 
 * `Matrix`
 
-    * New method:
+    * New methods:
 
         * `Matrix#antisymmetric?`
 
+        * `Matrix#reflexive?`
+
 * `Net`
 
     * New options:

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]