1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

added error handling to some CvMat method

This commit is contained in:
ser1zw 2011-07-12 04:47:46 +09:00
parent d983d80fa6
commit 8b48490a43
3 changed files with 581 additions and 263 deletions

File diff suppressed because it is too large Load diff

View file

@ -16,32 +16,32 @@ class OpenCVTestCase < Test::Unit::TestCase
CvMat.class_eval do CvMat.class_eval do
# Range check for debug # Range check for debug
alias original_aref [] # alias original_aref []
alias original_aset []=; # alias original_aset []=;
def [](*idx) # def [](*idx)
if idx.size == 1 and idx[0].is_a? Numeric # if idx.size == 1 and idx[0].is_a? Numeric
n = idx[0] # n = idx[0]
throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols # throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols
elsif idx.all? { |elem| elem.is_a? Numeric } # elsif idx.all? { |elem| elem.is_a? Numeric }
j, i = *(idx.map { |x| x.to_i }) # j, i = *(idx.map { |x| x.to_i })
throw ArgumentError.new("index for row #{j} is out of range") if j >= rows # 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 # throw ArgumentError.new("index for column #{i} is out of range") if i >= cols
end # end
original_aref(*idx) # original_aref(*idx)
end # end
def []=(*args) # def []=(*args)
if args.size == 2 and args[0].is_a? Numeric # if args.size == 2 and args[0].is_a? Numeric
n = args[0] # index # n = args[0] # index
throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols # throw ArgumentError.new("index #{n} is out of range") if n >= rows * cols
elsif args[0..1].all? { |elem| elem.is_a? Numeric } # elsif args[0..1].all? { |elem| elem.is_a? Numeric }
j, i = *args # j, i = *args
throw ArgumentError.new("index for row #{j} is out of range") if j.to_i >= rows # throw ArgumentError.new("index for row #{j} is out of range") if j.to_i >= rows
throw ArgumentError.new("index for column #{i} is out of range") if i.to_i >= cols # throw ArgumentError.new("index for column #{i} is out of range") if i.to_i >= cols
end # end
original_aset(*args) # original_aset(*args)
end # end
end end
def snap(*images) def snap(*images)

View file

@ -443,12 +443,11 @@ class TestCvMat < OpenCVTestCase
assert_cvscalar_equal(s, d[i]) assert_cvscalar_equal(s, d[i])
} }
flunk('FIXME: Not handle out of range error yet') [m.rows, m.cols, -m.rows, -m.cols].each { |d|
# [m.rows, m.cols, -m.rows, -m.cols].each { |d| assert_raise(CvStsOutOfRange) {
# assert_raise(ArgumentError) { m.diag(d)
# m.diag(d) }
# } }
# }
end end
def test_size def test_size
@ -487,6 +486,25 @@ class TestCvMat < OpenCVTestCase
assert_raise(TypeError) { assert_raise(TypeError) {
m[DUMMY_OBJ] m[DUMMY_OBJ]
} }
assert_raise(CvStsOutOfRange) {
m[-1]
}
assert_raise(CvStsOutOfRange) {
m[6]
}
assert_raise(CvStsOutOfRange) {
m[2, 2]
}
assert_raise(CvStsOutOfRange) {
m[1, 3]
}
assert_raise(CvStsOutOfRange) {
m[2, 2, 1]
}
assert_raise(CvStsOutOfRange) {
m[1, 3, 1]
}
end end
def test_aset def test_aset
@ -506,6 +524,25 @@ class TestCvMat < OpenCVTestCase
assert_raise(TypeError) { assert_raise(TypeError) {
m[0] = DUMMY_OBJ m[0] = DUMMY_OBJ
} }
assert_raise(CvStsOutOfRange) {
m[-1]
}
assert_raise(CvStsOutOfRange) {
m[6]
}
assert_raise(CvStsOutOfRange) {
m[2, 2]
}
assert_raise(CvStsOutOfRange) {
m[1, 3]
}
assert_raise(CvStsOutOfRange) {
m[2, 2, 1]
}
assert_raise(CvStsOutOfRange) {
m[1, 3, 1]
}
end end
def test_set_data def test_set_data
@ -837,14 +874,14 @@ class TestCvMat < OpenCVTestCase
assert_raise(ArgumentError) { assert_raise(ArgumentError) {
CvMat.merge(m1, m2, m3, m4, m5) CvMat.merge(m1, m2, m3, m4, m5)
} }
assert_raise(StandardError) { assert_raise(ArgumentError) {
CvMat.merge(CvMat.new(1, 2, :cv8u, 2)) CvMat.merge(CvMat.new(1, 2, :cv8u, 2))
} }
assert_raise(StandardError) { assert_raise(ArgumentError) {
CvMat.merge(CvMat.new(1, 2, :cv8u, 1), CvMat.merge(CvMat.new(1, 2, :cv8u, 1),
CvMat.new(2, 2, :cv8u, 1)) CvMat.new(2, 2, :cv8u, 1))
} }
assert_raise(StandardError) { assert_raise(ArgumentError) {
CvMat.merge(CvMat.new(1, 2, :cv8u, 1), CvMat.merge(CvMat.new(1, 2, :cv8u, 1),
CvMat.new(1, 2, :cv32f, 1)) CvMat.new(1, 2, :cv32f, 1))
} }