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

311 lines
8.7 KiB
Ruby
Executable file

#!/usr/bin/env ruby
# -*- mode: ruby; coding: utf-8 -*-
require 'test/unit'
require 'opencv'
require File.expand_path(File.dirname(__FILE__)) + '/helper'
include OpenCV
# Tests for OpenCV::CvSeq
class TestCvSeq < OpenCVTestCase
def test_initialize
types = [CV_SEQ_ELTYPE_POINT, CV_SEQ_ELTYPE_POINT3D, CV_SEQ_ELTYPE_CODE, CV_SEQ_ELTYPE_INDEX]
kinds = [CV_SEQ_KIND_GENERIC, CV_SEQ_KIND_CURVE, CV_SEQ_KIND_BIN_TREE, CV_SEQ_KIND_GRAPH, CV_SEQ_KIND_SUBDIV2D]
flags = [CV_SEQ_FLAG_CLOSED, CV_SEQ_FLAG_SIMPLE, CV_SEQ_FLAG_CONVEX, CV_SEQ_FLAG_HOLE]
types.each { |type|
kinds.each { |kind|
flags.each { |flag|
seq_flag = type | kind | flag
assert_equal(CvSeq, CvSeq.new(seq_flag).class)
}
}
}
[CV_SEQ_POINT_SET, CV_SEQ_POINT3D_SET, CV_SEQ_POLYLINE, CV_SEQ_POLYGON,
CV_SEQ_CONTOUR, CV_SEQ_SIMPLE_POLYGON, CV_SEQ_CHAIN, CV_SEQ_CHAIN_CONTOUR,
CV_SEQ_INDEX ].each { |seq_flag|
assert_equal(CvSeq, CvSeq.new(seq_flag).class)
}
# Unsupported types
[CV_SEQ_ELTYPE_PTR, CV_SEQ_ELTYPE_PPOINT].each { |type|
assert_raise(ArgumentError) {
CvSeq.new(type)
}
}
end
def test_total
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT)
assert_equal(0, seq1.total)
seq1.push(CvPoint.new(1, 2))
assert_equal(1, seq1.total)
seq1.push(CvPoint.new(3, 4))
assert_equal(2, seq1.total)
# Alias
assert_equal(2, seq1.length)
assert_equal(2, seq1.size)
end
def test_empty
assert(CvSeq.new(CV_SEQ_ELTYPE_POINT).empty?)
end
def test_aref
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT)
seq1.push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
assert_equal(CvPoint, seq1[0].class)
assert_equal(10, seq1[0].x)
assert_equal(20, seq1[0].y)
assert_equal(30, seq1[1].x)
assert_equal(40, seq1[1].y)
assert_equal(50, seq1[2].x)
assert_equal(60, seq1[2].y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX)
seq2.push(10, 20, 30)
assert_equal(Fixnum, seq2[0].class)
assert_equal(10, seq2[0])
assert_equal(20, seq2[1])
assert_equal(30, seq2[2])
end
def test_push
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
assert_equal(2, seq1.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(10, seq1[0].x)
assert_equal(20, seq1[0].y)
assert_equal(CvPoint, seq1[1].class)
assert_equal(30, seq1[1].x)
assert_equal(40, seq1[1].y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(50, 60))
seq2.push(seq1)
assert_equal(3, seq2.total)
assert_equal(CvPoint, seq2[0].class)
assert_equal(50, seq2[0].x)
assert_equal(60, seq2[0].y)
assert_equal(CvPoint, seq2[1].class)
assert_equal(10, seq2[1].x)
assert_equal(20, seq2[1].y)
assert_equal(CvPoint, seq2[2].class)
assert_equal(30, seq2[2].x)
assert_equal(40, seq2[2].y)
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10)
seq4 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(20, 30)
seq3.push(seq4)
assert_equal(3, seq3.total)
assert_equal(Fixnum, seq3[0].class)
assert_equal(10, seq3[0])
assert_equal(20, seq3[1])
assert_equal(30, seq3[2])
assert_raise(TypeError) {
seq1.push(55.5, 66.6)
}
assert_raise(TypeError) {
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(55, 66)
seq1.push(seq3)
}
end
def test_pop
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
point1 = seq1.pop
assert_equal(CvPoint, point1.class)
assert_equal(30, point1.x)
assert_equal(40, point1.y)
assert_equal(1, seq1.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(10, seq1[0].x)
assert_equal(20, seq1[0].y)
assert_nil(CvSeq.new(CV_SEQ_ELTYPE_POINT).pop)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
assert_equal(30, seq2.pop)
assert_equal(20, seq2.pop)
assert_equal(10, seq2.pop)
end
def test_clear
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
seq1.clear
assert_not_nil(seq1)
assert_equal(0, seq1.total)
end
def test_unshift
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).unshift(CvPoint.new(10, 20), CvPoint.new(30, 40))
assert_equal(2, seq1.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(30, seq1[0].x)
assert_equal(40, seq1[0].y)
assert_equal(CvPoint, seq1[1].class)
assert_equal(10, seq1[1].x)
assert_equal(20, seq1[1].y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_POINT).unshift(CvPoint.new(50, 60))
seq2.unshift(seq1)
assert_equal(3, seq2.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(30, seq1[0].x)
assert_equal(40, seq1[0].y)
assert_equal(CvPoint, seq1[1].class)
assert_equal(10, seq1[1].x)
assert_equal(20, seq1[1].y)
assert_equal(CvPoint, seq2[2].class)
assert_equal(50, seq2[2].x)
assert_equal(60, seq2[2].y)
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).unshift(10, 20, 30)
assert_equal(3, seq3.total)
assert_equal(30, seq3[0])
assert_equal(20, seq3[1])
assert_equal(10, seq3[2])
assert_raise(TypeError) {
seq1.unshift(10)
}
assert_raise(TypeError) {
seq3 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
seq1.unshift(seq3)
}
end
def test_shift
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
point1 = seq1.shift
assert_equal(CvPoint, point1.class)
assert_equal(10, point1.x)
assert_equal(20, point1.y)
assert_equal(1, seq1.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(30, seq1[0].x)
assert_equal(40, seq1[0].y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
assert_equal(10, seq2.shift)
assert_equal(20, seq2.shift)
assert_equal(30, seq2.shift)
assert_nil(CvSeq.new(CV_SEQ_ELTYPE_POINT).shift)
end
def test_first
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
point1 = seq1.first
assert_equal(CvPoint, point1.class)
assert_equal(10, point1.x)
assert_equal(20, point1.y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
assert_equal(10, seq2.first)
end
def test_last
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
point1 = seq1.last
assert_equal(CvPoint, point1.class)
assert_equal(50, point1.x)
assert_equal(60, point1.y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
assert_equal(30, seq2.last)
end
def test_each
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
i = 0
seq1.each { |s|
assert_equal(CvPoint, s.class)
assert_equal(seq1[i].x, s.x)
assert_equal(seq1[i].y, s.y)
i += 1
}
assert_equal(3, i)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20, 30)
i = 0
seq2.each { |s|
assert_equal(seq2[i], s)
i += 1
}
assert_equal(3, i)
end
def test_each_index
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
n = 0
seq1.each_index { |i|
assert_equal(n, i)
n += 1
}
assert_equal(3, n)
end
def test_insert
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40))
seq1.insert(1, CvPoint.new(50, 60))
assert_equal(3, seq1.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(10, seq1[0].x)
assert_equal(20, seq1[0].y)
assert_equal(CvPoint, seq1[1].class)
assert_equal(50, seq1[1].x)
assert_equal(60, seq1[1].y)
assert_equal(CvPoint, seq1[2].class)
assert_equal(30, seq1[2].x)
assert_equal(40, seq1[2].y)
seq2 = CvSeq.new(CV_SEQ_ELTYPE_INDEX).push(10, 20)
seq2.insert(1, 15)
assert_equal(3, seq2.total)
assert_equal(10, seq2[0])
assert_equal(15, seq2[1])
assert_equal(20, seq2[2])
end
def test_remove
seq1 = CvSeq.new(CV_SEQ_ELTYPE_POINT).push(CvPoint.new(10, 20), CvPoint.new(30, 40), CvPoint.new(50, 60))
seq1.remove(1)
assert_equal(2, seq1.total)
assert_equal(CvPoint, seq1[0].class)
assert_equal(10, seq1[0].x)
assert_equal(20, seq1[0].y)
assert_equal(CvPoint, seq1[1].class)
assert_equal(50, seq1[1].x)
assert_equal(60, seq1[1].y)
end
# These methods are tested in TestCvMat_imageprocessing#test_find_contours
# (test_cvmat_imageprocessing.rb)
# def test_h_prev
# flunk('FIXME: CvSeq#h_prev is not tested yet.')
# end
# def test_h_next
# flunk('FIXME: CvSeq#h_next is not tested yet.')
# end
# def test_v_prev
# flunk('FIXME: CvSeq#v_prev is not tested yet.')
# end
# def test_v_next
# flunk('FIXME: CvSeq#v_next is not tested yet.')
# end
end