From 97bb19c6de5568f64e29248b702858403860cf24 Mon Sep 17 00:00:00 2001 From: Thierry Moisan Date: Fri, 6 Jun 2008 20:40:14 -0400 Subject: [PATCH] Adding tests to Matrix and 4 functions. --- Matrix.i | 4 +- lib/Math/GSL/Matrix/Test.pm | 231 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 218 insertions(+), 17 deletions(-) diff --git a/Matrix.i b/Matrix.i index bbde006..3ca86e0 100644 --- a/Matrix.i +++ b/Matrix.i @@ -92,7 +92,8 @@ int fclose(FILE *); gsl_matrix_int_ispos gsl_matrix_int_isneg gsl_matrix_int_isnonneg gsl_matrix_int_add gsl_matrix_int_sub gsl_matrix_int_mul_elements gsl_matrix_int_div_elements gsl_matrix_int_scale - gsl_matrix_int_add_constant gsl_matrix_int_add_diagonal + gsl_matrix_int_add_constant gsl_matrix_int_add_diagonal + gsl_matrix_get_row gsl_matrix_get_col gsl_matrix_set_row gsl_matrix_set_col /; %EXPORT_TAGS = ( all => [ @EXPORT_OK ], char => [gsl_matrix_char_alloc, gsl_matrix_char_calloc, gsl_matrix_char_alloc_from_block, gsl_matrix_char_alloc_from_matrix, gsl_vector_char_alloc_row_from_matrix, gsl_vector_char_alloc_col_from_matrix, gsl_matrix_char_free, gsl_matrix_char_submatrix, gsl_matrix_char_row, gsl_matrix_char_column, gsl_matrix_char_diagonal, gsl_matrix_char_subdiagonal, gsl_matrix_char_superdiagonal, gsl_matrix_char_subrow, gsl_matrix_char_subcolumn, gsl_matrix_char_view_array, gsl_matrix_char_view_array_with_tda, gsl_matrix_char_view_vector, gsl_matrix_char_view_vector_with_tda, gsl_matrix_char_const_submatrix, gsl_matrix_char_const_row, gsl_matrix_char_const_column, gsl_matrix_char_const_diagonal, gsl_matrix_char_const_subdiagonal, gsl_matrix_char_const_superdiagonal, gsl_matrix_char_const_subrow, gsl_matrix_char_const_subcolumn, gsl_matrix_char_const_view_array, gsl_matrix_char_const_view_array_with_tda, gsl_matrix_char_const_view_vector, gsl_matrix_char_const_view_vector_with_tda, gsl_matrix_char_get, gsl_matrix_char_set, gsl_matrix_char_ptr, gsl_matrix_char_const_ptr, gsl_matrix_char_set_zero, gsl_matrix_char_set_identity, gsl_matrix_char_set_all, gsl_matrix_char_fread, gsl_matrix_char_fwrite, gsl_matrix_char_fscanf, gsl_matrix_char_fprintf, gsl_matrix_char_memcpy, gsl_matrix_char_swap, gsl_matrix_char_swap_rows, gsl_matrix_char_swap_columns, gsl_matrix_char_swap_rowcol, gsl_matrix_char_transpose, gsl_matrix_char_transpose_memcpy, gsl_matrix_char_max, gsl_matrix_char_min, gsl_matrix_char_minmax, gsl_matrix_char_max_index, gsl_matrix_char_min_index, gsl_matrix_char_minmax_index, gsl_matrix_char_isnull, gsl_matrix_char_ispos, gsl_matrix_char_isneg, gsl_matrix_char_isnonneg, gsl_matrix_char_add, gsl_matrix_char_sub, gsl_matrix_char_mul_elements, gsl_matrix_char_div_elements, gsl_matrix_char_scale, gsl_matrix_char_add_constant, gsl_matrix_char_add_diagonal], double => [ gsl_matrix_alloc, gsl_matrix_calloc, gsl_matrix_alloc_from_block, gsl_matrix_alloc_from_matrix, gsl_vector_alloc_row_from_matrix, gsl_vector_alloc_col_from_matrix, gsl_matrix_free, gsl_matrix_submatrix, gsl_matrix_row, gsl_matrix_column, gsl_matrix_diagonal, gsl_matrix_subdiagonal, gsl_matrix_superdiagonal, gsl_matrix_subrow, gsl_matrix_subcolumn, gsl_matrix_view_array, gsl_matrix_view_array_with_tda, gsl_matrix_view_vector, gsl_matrix_view_vector_with_tda, gsl_matrix_const_submatrix, gsl_matrix_const_row, gsl_matrix_const_column, gsl_matrix_const_diagonal, gsl_matrix_const_subdiagonal, gsl_matrix_const_superdiagonal, gsl_matrix_const_subrow, gsl_matrix_const_subcolumn, gsl_matrix_const_view_array, gsl_matrix_const_view_array_with_tda, gsl_matrix_const_view_vector, gsl_matrix_const_view_vector_with_tda, gsl_matrix_get, gsl_matrix_set, gsl_matrix_ptr, gsl_matrix_const_ptr, gsl_matrix_set_zero, gsl_matrix_set_identity, gsl_matrix_set_all, gsl_matrix_fread, gsl_matrix_fwrite, gsl_matrix_fscanf, gsl_matrix_fprintf, gsl_matrix_memcpy, gsl_matrix_swap, gsl_matrix_swap_rows, gsl_matrix_swap_columns, gsl_matrix_swap_rowcol, gsl_matrix_transpose, gsl_matrix_transpose_memcpy, gsl_matrix_max, gsl_matrix_minmax, gsl_matrix_max_index, gsl_matrix_min_index, gsl_matrix_minmax_index, gsl_matrix_isnull, gsl_matrix_ispos, gsl_matrix_isneg, gsl_matrix_isnonneg, gsl_matrix_add, gsl_matrix_mul_elements, gsl_matrix_div_elements, gsl_matrix_scale, gsl_matrix_add_constant, gsl_matrix_add_diagonal], int => [gsl_matrix_int_alloc, gsl_matrix_int_alloc_from_matrix, gsl_matrix_int_free, gsl_matrix_int_column, gsl_matrix_int_superdiagonal, gsl_matrix_int_view_array_with_tda, gsl_matrix_int_const_submatrix, gsl_matrix_int_const_diagonal, gsl_matrix_int_const_subrow, gsl_matrix_int_const_view_array_with_tda, gsl_matrix_int_get, gsl_matrix_int_ptr, gsl_matrix_int_set_zero, gsl_matrix_int_fread, gsl_matrix_int_fscanf, gsl_matrix_int_memcpy, gsl_matrix_int_swap_rows, gsl_matrix_int_transpose, gsl_matrix_int_max, gsl_matrix_int_max_index, gsl_matrix_int_minmax_index, gsl_matrix_int_ispos, gsl_matrix_int_add, gsl_matrix_int_mul_elements, gsl_matrix_int_add_constant]); @@ -185,6 +186,7 @@ gsl_matrix_int_ispos gsl_matrix_int_isneg gsl_matrix_int_isnonneg gsl_matrix_int_add gsl_matrix_int_sub gsl_matrix_int_mul_elements gsl_matrix_int_div_elements gsl_matrix_int_scale gsl_matrix_int_add_constant gsl_matrix_int_add_diagonal +gsl_matrix_get_row gsl_matrix_get_col gsl_matrix_set_row gsl_matrix_set_col You have to add the functions you want to use inside the qw /put_funtion_here /. You can also write use Math::GSL::PowInt qw/:name_of_tag/ to use all avaible functions of the module. Other tags are also avaible, here is a complete list of all tags for this module : diff --git a/lib/Math/GSL/Matrix/Test.pm b/lib/Math/GSL/Matrix/Test.pm index 8d03aee..25a23e4 100644 --- a/lib/Math/GSL/Matrix/Test.pm +++ b/lib/Math/GSL/Matrix/Test.pm @@ -59,24 +59,25 @@ sub GSL_MATRIX_SUBMATRIX : Tests { } sub GSL_MATRIX_ROW : Tests { - my $matrix = gsl_matrix_alloc(4,4); - map { gsl_matrix_set($matrix, $_,0, $_) } (0..3); - map { gsl_matrix_set($matrix, $_,1, $_) } (0..3); - map { gsl_matrix_set($matrix, $_,2, $_) } (0..3); - map { gsl_matrix_set($matrix, $_,3, $_) } (0..3); - my $vector_view = gsl_matrix_row($matrix, 1); - my @got = map { gsl_vector_get($vector_view->{vector}, $_) } (0..3); - map { is($got[$_], $_) } (0..3); + my $self = shift; + my $line; + for ($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $_,$line, $_) } (0..4); } + + my $vector_view = gsl_matrix_row($self->{matrix}, 1); + my @got = map { gsl_vector_get($vector_view->{vector}, $_) } (0..4); + map { is($got[$_], $_) } (0..4); } sub GSL_MATRIX_COLUMN : Tests { - my $matrix = gsl_matrix_alloc(4,4); - map { gsl_matrix_set($matrix, 2,$_, $_) } (0..3); - my $view = gsl_matrix_column($matrix, 2); - print Dumper [ $view ]; - #my @views = map { gsl_vector_get($vector, $_) } (0..3); - #print Dumper [ @views ]; - #map { is($got[$_], 1) } (0..3); + my $self = shift; + my $vector_view->{vector} = gsl_vector_alloc(5); + my $line; + for ($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line,$_, $_) } (0..4); } + $vector_view->{vector} = gsl_matrix_column($self->{matrix}, 1); + my @got = map { gsl_vector_get($vector_view->{vector}, $_) } (0..4); + map { is($got[$_], $_) } (0..4); } sub GSL_MATRIX_DIAGONAL : Tests { @@ -154,5 +155,203 @@ sub GSL_MATRIX_SWAP_ROWCOL : Tests { map { is($got[$_], 2) } (0..4); } - +sub GSL_MATRIX_TRANSPOSE_MEMCPY : Tests { + my $self = shift; + map { gsl_matrix_set($self->{matrix}, 0,$_, $_) } (0..4); + my $matrix = gsl_matrix_alloc(5,5); + is(gsl_matrix_transpose_memcpy($matrix, $self->{matrix}), 0); + my @got = map { gsl_matrix_get($matrix, $_, 0) } (0..4); + map { is($got[$_], $_) } (0..4); +} + +sub GSL_MATRIX_TRANSPOSE : Tests { + my $self = shift; + map { gsl_matrix_set($self->{matrix}, 0,$_, $_) } (0..4); + is(gsl_matrix_transpose($self->{matrix}), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, 0) } (0..4); + map { is($got[$_], $_) } (0..4); +} + +sub GSL_MATRIX_ADD : Tests { + my $self = shift; + my $matrix = gsl_matrix_alloc(5, 5); + map { gsl_matrix_set($self->{matrix}, $_, $_, $_) } (0..4); + map { gsl_matrix_set($matrix, $_, $_, $_) } (0..4); + is(gsl_matrix_add($self->{matrix}, $matrix), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, $_) } (0..4); + map { is($got[$_], $_*2) } (0..4); +} + +sub GSL_MATRIX_SUB : Tests { + my $self = shift; + my $matrix = gsl_matrix_alloc(5, 5); + map { gsl_matrix_set($self->{matrix}, $_, $_, $_) } (0..4); + map { gsl_matrix_set($matrix, $_, $_, $_) } (0..4); + is(gsl_matrix_sub($self->{matrix}, $matrix), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, $_) } (0..4); + map { is($got[$_], 0) } (0..4); +} + +sub GSL_MATRIX_MUL_ELEMENTS : Tests { + my $self = shift; + my $matrix = gsl_matrix_alloc(5, 5); + map { gsl_matrix_set($self->{matrix}, $_, $_, $_) } (0..4); + map { gsl_matrix_set($matrix, $_, $_, $_) } (0..4); + is(gsl_matrix_mul_elements($self->{matrix}, $matrix), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, $_) } (0..4); + map { is($got[$_], $_**2) } (0..4); +} + +sub GSL_MATRIX_DIV_ELEMENTS : Tests { + my $self = shift; + my $matrix = gsl_matrix_alloc(5, 5); + map { gsl_matrix_set($self->{matrix}, $_, $_, $_+1) } (0..4); + map { gsl_matrix_set($matrix, $_, $_, $_+1) } (0..4); + is(gsl_matrix_div_elements($self->{matrix}, $matrix), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, $_) } (0..4); + map { is($got[$_], 1) } (0..4); +} + +sub GSL_MATRIX_SCALE : Tests { + my $self = shift; + map { gsl_matrix_set($self->{matrix}, $_, $_, $_) } (0..4); + is(gsl_matrix_scale($self->{matrix}, 4), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, $_) } (0..4); + map { is($got[$_], $_*4) } (0..4); +} + +sub GSL_MATRIX_ADD_CONSTANT : Tests { + my $self = shift; + map { gsl_matrix_set($self->{matrix}, $_, $_, $_) } (0..4); + is(gsl_matrix_add_constant($self->{matrix}, 8), 0); + my @got = map { gsl_matrix_get($self->{matrix}, $_, $_) } (0..4); + map { is($got[$_], $_+8) } (0..4); +} + +sub GSL_MATRIX_MAX : Tests { + my $self = shift; + my $line; + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, $_**2 ) } (0..4); } + is(gsl_matrix_max($self->{matrix}), 16); +} + +sub GSL_MATRIX_MIN : Tests { + my $self = shift; + my $line; + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, $_**2 ) } (0..4); } + is(gsl_matrix_min($self->{matrix}), 0); +} + +sub GSL_MATRIX_MINMAX : Test { + my $self = shift; + my ($min, $max); + map { gsl_matrix_set($self->{matrix}, $_, $_, $_**2) } (0..4); + gsl_matrix_minmax($self->{matrix}, \$min, \$max); + is($min, 0); + is($max, 16); +} + +sub GSL_MATRIX_MAX_INDEX : Tests { + my $self = shift; + my ($imax, $jmax); + map { gsl_matrix_set($self->{matrix}, $_, $_, $_**2) } (0..4); + gsl_matrix_max_index($self->{matrix}, \$imax, \$jmax); + is($imax, 4); + is($jmax, 4); +} + +sub GSL_MATRIX_ISNULL : Tests { + my $self = shift; + my $line; + is(gsl_matrix_isnull($self->{matrix}), 0); + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 0) } (0..4); } + is(gsl_matrix_isnull($self->{matrix}), 1); +} + +sub GSL_MATRIX_ISPOS : Tests { + my $self = shift; + my $line; + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, -1) } (0..4); } + is(gsl_matrix_ispos($self->{matrix}), 0); + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 1) } (0..4); } + is(gsl_matrix_ispos($self->{matrix}), 1); + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 0) } (0..4); } + is(gsl_matrix_ispos($self->{matrix}), 0); +} + +sub GSL_MATRIX_ISNEG : Tests { + my $self = shift; + my $line; + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, -1) } (0..4); } + is(gsl_matrix_isneg($self->{matrix}), 1); + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 1) } (0..4); } + is(gsl_matrix_isneg($self->{matrix}), 0); + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 0) } (0..4); } + is(gsl_matrix_isneg($self->{matrix}), 0); +} + +sub GSL_MATRIX_ISNONNEG : Tests { + my $self = shift; + my $line; + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, -1) } (0..4); } + is(gsl_matrix_isnonneg($self->{matrix}), 0); + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 1) } (0..4); } + is(gsl_matrix_isnonneg($self->{matrix}), 1); + + for($line=0; $line<5; $line++) { + map { gsl_matrix_set($self->{matrix}, $line, $_, 0) } (0..4); } + is(gsl_matrix_isnonneg($self->{matrix}), 1); +} + +sub GSL_MATRIX_GET_ROW : Tests { + my $self = shift; + my $vector->{vector} = gsl_vector_alloc(5); + map { gsl_matrix_set($self->{matrix}, 0, $_, $_) } (0..4); + is(gsl_matrix_get_row($vector->{vector}, $self->{matrix}, 0), 0); + map { is(gsl_vector_get($vector->{vector}, $_), $_) } (0..4); +} + +sub GSL_MATRIX_GET_COL : Tests { + my $self = shift; + my $vector->{vector} = gsl_vector_alloc(5); + map { gsl_matrix_set($self->{matrix}, $_, 0, $_) } (0..4); + is(gsl_matrix_get_col($vector->{vector}, $self->{matrix}, 0), 0); + map { is(gsl_vector_get($vector->{vector}, $_), $_) } (0..4); +} + +sub GSL_MATRIX_SET_ROW : Tests { + my $self = shift; + my $vector->{vector} = gsl_vector_alloc(5); + map { gsl_vector_set($vector->{vector}, $_, $_**2) } (0..4); + is(gsl_matrix_set_row($self->{matrix}, 1, $vector->{vector}), 0); + map { is(gsl_matrix_get($self->{matrix}, 1, $_), $_**2) } (0..4); +} + +sub GSL_MATRIX_SET_COL : Tests { + my $self = shift; + my $vector->{vector} = gsl_vector_alloc(5); + map { gsl_vector_set($vector->{vector}, $_, $_**2) } (0..4); + is(gsl_matrix_set_col($self->{matrix}, 1, $vector->{vector}), 0); + map { is(gsl_matrix_get($self->{matrix}, $_, 1), $_**2) } (0..4); +} + 1; -- 2.11.4.GIT