diff --git a/ext/cvmat.cpp b/ext/cvmat.cpp index 205f38f..6a6a475 100644 --- a/ext/cvmat.cpp +++ b/ext/cvmat.cpp @@ -245,17 +245,17 @@ void define_ruby_class() rb_define_method(rb_klass, "not", RUBY_METHOD_FUNC(rb_not), 0); rb_define_method(rb_klass, "not!", RUBY_METHOD_FUNC(rb_not_bang), 0); rb_define_method(rb_klass, "eq", RUBY_METHOD_FUNC(rb_eq), 1); - rb_define_alias(rb_klass, "==", "eq"); + // rb_define_alias(rb_klass, "==", "eq"); rb_define_method(rb_klass, "gt", RUBY_METHOD_FUNC(rb_gt), 1); - rb_define_alias(rb_klass, ">", "gt"); + // rb_define_alias(rb_klass, ">", "gt"); rb_define_method(rb_klass, "ge", RUBY_METHOD_FUNC(rb_ge), 1); - rb_define_alias(rb_klass, ">=", "ge"); + // rb_define_alias(rb_klass, ">=", "ge"); rb_define_method(rb_klass, "lt", RUBY_METHOD_FUNC(rb_lt), 1); - rb_define_alias(rb_klass, "<", "lt"); + // rb_define_alias(rb_klass, "<", "lt"); rb_define_method(rb_klass, "le", RUBY_METHOD_FUNC(rb_le), 1); - rb_define_alias(rb_klass, "<=", "le"); + // rb_define_alias(rb_klass, "<=", "le"); rb_define_method(rb_klass, "ne", RUBY_METHOD_FUNC(rb_ne), 1); - rb_define_alias(rb_klass, "!=", "ne"); + // rb_define_alias(rb_klass, "!=", "ne"); rb_define_method(rb_klass, "in_range", RUBY_METHOD_FUNC(rb_in_range), 2); rb_define_method(rb_klass, "abs_diff", RUBY_METHOD_FUNC(rb_abs_diff), 1); rb_define_method(rb_klass, "count_non_zero", RUBY_METHOD_FUNC(rb_count_non_zero), 0); diff --git a/test/helper.rb b/test/helper.rb index 5d0de83..7fef4d8 100755 --- a/test/helper.rb +++ b/test/helper.rb @@ -6,6 +6,36 @@ require 'opencv' include OpenCV class OpenCVTestCase < Test::Unit::TestCase + CvMat.class_eval do + # Range check for debug + alias original_aref [] + alias original_aset []=; + + def [](*idx) + if idx.size == 1 + n = idx[0] + throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols + else + j, i = *idx + throw ArgumentError.new("index for row #{j} is out of range") if j >= rows + throw ArgumentError.new("index for column #{i} is out of range") if i >= cols + end + original_aref(*idx) + end + + def []=(*idx, val) + if idx.size == 1 + n = idx[0] + throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols + else + j, i = *idx + throw ArgumentError.new("index for row #{j} is out of range") if j >= rows + throw ArgumentError.new("index for column #{i} is out of range") if i >= cols + end + original_aset(*idx, val) + end + end + def get_sample(filename, iscolor = nil) IplImage::load('samples/' + filename, iscolor) end diff --git a/test/test_cvmat.rb b/test/test_cvmat.rb index 51c1975..9064428 100755 --- a/test/test_cvmat.rb +++ b/test/test_cvmat.rb @@ -1324,7 +1324,80 @@ class TestCvMat < OpenCVTestCase CvScalar.new(n, 0, 0, 0) } end - + + def test_gt + m0 = create_cvmat(6, 4, :cv8u, 1) { |j, i, c| + CvScalar.new(c, 0, 0, 0) + } + m1 = m0.gt(10) + + assert_equal(m0.height, m1.height) + assert_equal(m0.width, m1.width) + assert_each_cvscalar(m) { |j, i, c| + n = (c > 10) ? 0xff : 0 + CvScalar.new(n, 0, 0, 0) + } + + end + + def test_ge + m0 = create_cvmat(6, 4, :cv8u, 1) { |j, i, c| + CvScalar.new(c, 0, 0, 0) + } + m1 = m0.ge(10) + + assert_equal(m0.height, m1.height) + assert_equal(m0.width, m1.width) + assert_each_cvscalar(m) { |j, i, c| + n = (c >= 10) ? 0xff : 0 + CvScalar.new(n, 0, 0, 0) + } + end + + def test_lt + m0 = create_cvmat(6, 4, :cv8u, 1) { |j, i, c| + CvScalar.new(c, 0, 0, 0) + } + m1 = m0.lt(10) + + assert_equal(m0.height, m1.height) + assert_equal(m0.width, m1.width) + assert_each_cvscalar(m1) { |j, i, c| + n = (c < 10) ? 0xff : 0 + CvScalar.new(n, 0, 0, 0) + } + end + + def test_le + m0 = create_cvmat(6, 4, :cv8u, 1) { |j, i, c| + CvScalar.new(c, 0, 0, 0) + } + m1 = m0.le(10) + + assert_equal(m0.height, m1.height) + assert_equal(m0.width, m1.width) + assert_each_cvscalar(m1) { |j, i, c| + n = (c <= 10) ? 0xff : 0 + CvScalar.new(n, 0, 0, 0) + } + end + + def test_ne + m0 = create_cvmat(6, 4, :cv8u, 1) { |j, i, c| + CvScalar.new(c, 0, 0, 0) + } + m1 = m0.ne(10) + + assert_equal(m0.height, m1.height) + assert_equal(m0.width, m1.width) + assert_each_cvscalar(m1) { |j, i, c| + n = (c != 10) ? 0xff : 0 + CvScalar.new(n, 0, 0, 0) + } + end + + + # def test_avg_sdv # m = CvMat.new(1, 8, CV_32F) # [2, 4, 4, 4, 5, 5, 7, 9].each_with_index { |v, i|