summaryrefslogtreecommitdiff
path: root/spec/ruby/library/matrix/spec_helper.rb
diff options
Diffstat (limited to 'spec/ruby/library/matrix/spec_helper.rb')
-rw-r--r--spec/ruby/library/matrix/spec_helper.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/spec/ruby/library/matrix/spec_helper.rb b/spec/ruby/library/matrix/spec_helper.rb
new file mode 100644
index 0000000000..d44612981a
--- /dev/null
+++ b/spec/ruby/library/matrix/spec_helper.rb
@@ -0,0 +1,35 @@
+class BeCloseToMatrixMatcher
+ def initialize(expected, tolerance = TOLERANCE)
+ SpecExpectation.matcher! rescue "Used with the balance_should_and_match branch of mspec"
+ @expected = Matrix[*expected]
+ @tolerance = tolerance
+ end
+
+ def matches?(actual)
+ @actual = actual
+ return false unless @actual.is_a? Matrix
+ return false unless @actual.row_size == @expected.row_size
+ @actual.row_size.times do |i|
+ a, e = @actual.row(i), @expected.row(i)
+ return false unless a.size == e.size
+ a.size.times do |j|
+ return false unless (a[j] - e[j]).abs < @tolerance
+ end
+ end
+ true
+ end
+
+ def failure_message
+ ["Expected #{@expected}", "to be within +/- #{@tolerance} of #{@actual}"]
+ end
+
+ def negative_failure_message
+ ["Expected #{@expected}", "not to be within +/- #{@tolerance} of #{@actual}"]
+ end
+end
+
+class Object
+ def be_close_to_matrix(expected, tolerance = TOLERANCE)
+ BeCloseToMatrixMatcher.new(expected, tolerance)
+ end
+end