# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-module Align
- # Error class for all exceptions to do with matrix class.
- class MatrixError < StandardError; end
-
- class Matrix
- attr_accessor :rows, :cols
-
- def initialize(rows, cols)
- @rows = rows
- @cols = cols
-
- raise MatrixError, "Bad rows value: #{rows}" if rows <= 0
- raise MatrixError, "Bad columns value: #{cols}" if cols <= 0
-
- @matrix = matrix
- end
-
- def set(row, col)
- raise MatrixError, "Bad row value: #{row}" unless (0 ... @rows).include? row
- raise MatrixError, "Bad column value: #{col}" unless (0 ... @cols).include? col
-
- @matrix[@cols * row + col] = 1
- @matrix
- end
-
- def to_s
- rows = ""
- (0 ... @rows).each do |row|
- rows << @matrix[@cols * row, @cols].join(" ") + "\n"
- end
-
- rows
- end
-
- def slice(row_beg, row_end, col_beg, col_end)
- raise MatrixError, "Bad row_beg value: #{row_beg}" unless (0 ... @rows).include? row_beg
- raise MatrixError, "Bad col_beg value: #{col_beg}" unless (0 ... @cols).include? col_beg
- raise MatrixError, "Bad row_end value: #{row_end}" unless (row_beg ... @rows).include? row_end
- raise MatrixError, "Bad col_end value: #{col_end}" unless (col_beg ... @rows).include? col_end
-
- new_rows = row_end - row_beg + 1
- new_cols = col_end - col_beg + 1
- submatrix = Matrix.new(new_rows, new_cols)
-
- (0 ... @rows).each do |row|
- (0 ... @cols).each do |col|
- if set?(row, col)
- if (0 ... new_rows).include? row - row_beg and (0 ... new_cols).include? col - col_beg
- submatrix.set(row - row_beg, col - col_beg)
- end
- end
- end
- end
-
- submatrix
- end
-
- private
-
- def matrix
- [0] * (@rows * @cols)
- end
-
- def set?(row, col)
- if @matrix[@cols * row + col] == 0
- return false
- else
- return true
- end
- end
- end
-
- # Error class for all exceptions to do with matrix class.
- class AlignError < StandardError; end
-
- class Align
- end
-end
require 'align'
require 'pp'
-class MatrixTest < Test::Unit::TestCase
- def test_Matrix_initialize_raise_on_bad_rows_value
- [-2, 0].each do |val|
- assert_raise(Align::MatrixError) { Align::Matrix.new(val, 2) }
- end
- end
-
- def test_Matrix_initialize_raise_on_bad_cols_value
- [-2, 0].each do |val|
- assert_raise(Align::MatrixError) { Align::Matrix.new(2, val) }
- end
- end
-
- def test_Matrix_initialize_dont_raise_on_ok_values
- assert_nothing_raised { Align::Matrix.new(2, 2) }
- end
-
- def test_Matrix_set_raise_on_bad_row_value
- matrix = Align::Matrix.new(2,3)
- [-1, 2, 3].each do |row|
- assert_raise(Align::MatrixError) { matrix.set(row, 2) }
- end
- end
-
- def test_Matrix_set_raise_on_bad_col_value
- matrix = Align::Matrix.new(2,3)
- [-1, 3, 4].each do |col|
- assert_raise(Align::MatrixError) { matrix.set(1, col) }
- end
- end
-
- def test_Matrix_set_dont_raise_on_ok_values
- matrix = Align::Matrix.new(2,3)
- (0 ... 2).each do |row|
- (0 ... 3).each do |col|
- matrix.set(row, col)
- end
- end
- end
-
- def test_Matrix_set_returns_corretly
- matrix = Align::Matrix.new(2,3)
- assert_equal([0, 0, 1, 0, 0, 0], matrix.set(0, 2))
- end
-
- def test_Matrix_to_s_returns_correctly
- matrix = Align::Matrix.new(2,3)
- matrix.set(0,0)
- matrix.set(0,2)
- matrix.set(1,0)
- matrix.set(1,2)
- assert_equal("1 0 1\n1 0 1\n", matrix.to_s)
- end
-
- def test_Matrix_slice_raise_on_bad_row_beg_values
- matrix = Align::Matrix.new(4,4)
- [-1, 4].each do |val|
- assert_raise(Align::MatrixError) { matrix.slice(val, 1, 1, 1) }
- end
- end
-
- def test_Matrix_slice_raise_on_bad_row_end_values
- matrix = Align::Matrix.new(4,4)
- [-1, 2, 4].each do |val|
- assert_raise(Align::MatrixError) { matrix.slice(3, val, 1, 1) }
- end
- end
-
- def test_Matrix_slice_raise_on_bad_col_beg_values
- matrix = Align::Matrix.new(4,4)
- [-1, 4].each do |val|
- assert_raise(Align::MatrixError) { matrix.slice(1, 1, val, 1) }
- end
- end
-
- def test_Matrix_slice_raise_on_bad_col_end_values
- matrix = Align::Matrix.new(4,4)
- [-1, 2, 4].each do |val|
- assert_raise(Align::MatrixError) { matrix.slice(1, 1, 3, val) }
- end
- end
-
- def test_Matrix_slice_dont_raise_on_ok_values
- matrix = Align::Matrix.new(4,4)
- (0 ... 4).each do |val|
- assert_nothing_raised {matrix.slice(val, val, val, val) }
- end
- end
-
- def test_Matrix_slice_returns_correctly
- matrix = Align::Matrix.new(4,4)
- matrix.set(1,1)
- matrix.set(2,2)
- assert_equal( "0 0\n0 1\n", matrix.slice(0, 1, 0, 1).to_s )
- assert_equal( "1 0\n0 1\n", matrix.slice(1, 2, 1, 2).to_s )
- assert_equal( "1 0\n0 0\n", matrix.slice(2, 3, 2, 3).to_s )
- end
+class AlignTest < Test::Unit::TestCase
+ def test_
end
-