From aa219748829385cfffcc273f8aec390ed0184d5c Mon Sep 17 00:00:00 2001 From: moisan Date: Wed, 18 Nov 2009 09:12:38 +0800 Subject: [PATCH] Add == and != operators to Vector --- pod/Vector.pod | 18 ++++++++++++++++++ t/Vector.t | 21 ++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pod/Vector.pod b/pod/Vector.pod index bd34174..5a38e61 100644 --- a/pod/Vector.pod +++ b/pod/Vector.pod @@ -4,11 +4,14 @@ use Data::Dumper; use Carp qw/croak/; use Math::GSL::Errno qw/:all/; use Math::GSL::BLAS qw/gsl_blas_ddot/; +use Math::GSL::Test qw/is_similar/; use overload '*' => \&_multiplication, '+' => \&_addition, '-' => \&_subtract, 'abs' => \&_abs, + '==' => \&_equal, + '!=' => \&_not_equal, fallback => 1, ; @@ -376,6 +379,21 @@ sub dot_product { return $product; } +sub _equal { + my ($left,$right) = @_; + if ($left->length != $right->length) + { + return 0; + } + return is_similar( [$left->as_list ], + [$right->as_list ]); +} + +sub _not_equal { + my ($left, $right) = @_; + return !_equal($left,$right); +} + =head1 DESCRIPTION Here is a list of all the functions included in this module : diff --git a/t/Vector.t b/t/Vector.t index f9dbd94..8799fb4 100644 --- a/t/Vector.t +++ b/t/Vector.t @@ -1,6 +1,6 @@ package Math::GSL::Vector::Test; use base q{Test::Class}; -use Test::More tests => 136; +use Test::More tests => 142; use Math::GSL qw/:all/; use Math::GSL::Test qw/:all/; use Math::GSL::Errno qw/:all/; @@ -453,4 +453,23 @@ sub GSL_VECTOR_NORM_OVERLOAD: Tests(2) { ok_similar( [ abs $w ], [ sqrt(101) ], 'abs = norm' ) } +sub GSL_VECTOR_EQUAL : Tests(3){ + my $v = Math::GSL::Vector->new([1,2,3]); + my $w = Math::GSL::Vector->new([10,0,1]); + my $x = Math::GSL::Vector->new([1,2,3,0]); + + ok_similar($v == $v, 1); + ok_similar($v == $w, 0); + ok_similar($v == $x, 0); +} + +sub GSL_VECTOR_NOT_EQUAL : Tests(3){ + my $v = Math::GSL::Vector->new([1,2,3]); + my $w = Math::GSL::Vector->new([10,0,1]); + my $x = Math::GSL::Vector->new([1,2,3,0]); + + ok_similar($v != $v, 0); + ok_similar($v != $w, 1); + ok_similar($v != $x, 1); +} Test::Class->runtests; -- 2.11.4.GIT