Add == and != operators to Vector
authormoisan <thierry.moisan@gmail.com>
Wed, 18 Nov 2009 01:12:38 +0000 (18 09:12 +0800)
committerJonathan "Duke" Leto <jonathan@leto.net>
Mon, 23 Nov 2009 06:53:09 +0000 (23 14:53 +0800)
pod/Vector.pod
t/Vector.t

index bd34174..5a38e61 100644 (file)
@@ -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 :
index f9dbd94..8799fb4 100644 (file)
@@ -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;