From e8711dacde88dc8d020b1263a5b263c0b6bd54f0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Quelin?= Date: Tue, 15 Jan 2008 11:25:44 +0100 Subject: [PATCH] LBV::vector_equality() and LBV::vector_inequality() replaced by LBV::_compare() --- lib/Language/Befunge/Vector.pm | 41 +++++++++++++---------------------------- t/1-classes/vector.t | 36 +++++++++++++----------------------- 2 files changed, 26 insertions(+), 51 deletions(-) diff --git a/lib/Language/Befunge/Vector.pm b/lib/Language/Befunge/Vector.pm index 4e5cb28..f44cd13 100644 --- a/lib/Language/Befunge/Vector.pm +++ b/lib/Language/Befunge/Vector.pm @@ -21,8 +21,7 @@ use overload 'neg' => \&_invert, '+=' => \&_add_inplace, '-=' => \&_substract_inplace, - '==' => \&vector_equality, - '!=' => \&vector_inequality, + '<=>' => \&_compare, '""' => \&vector_as_string; @@ -262,39 +261,25 @@ sub vector_as_string { return "(" . join(",",@$self) . ")"; } +#- comparison # -# vector_equality( v2 ) +# my $bool = $v1->_compare($v2); +# my $bool = $v1 <=> $v2; # -# print("Equal!\n") if $v1->vector_equality($v2); -# print("Equal!\n") if $v1 == $v2; +# Check whether the vectors both point at the same spot. Return 0 if they +# do, 1 if they don't. # -# Checks whether the vectors both point at the same spot. Returns 1 if they -# do, 0 if they don't. -# -sub vector_equality { - my ($v1, $v2) = @_; - croak "uneven dimensions in bounds check!" unless $v1->get_dims == $v2->get_dims; - for(my $d = 0; $d < $v1->get_dims; $d++) { - return 0 unless $v1->get_component($d) == $v2->get_component($d); - } - return 1; +sub _compare { + my ($v1, $v2) = @_; + croak "uneven dimensions in bounds check!" unless $v1->get_dims == $v2->get_dims; + for (my $d = 0; $d < $v1->get_dims; $d++) { + return 1 if $v1->get_component($d) != $v2->get_component($d); + } + return 0; } -# -# vector_inequality( v2 ) -# -# print("Equal!\n") unless $v1->vector_inequality($v2); -# print("Equal!\n") unless $v1 != $v2; -# -# Checks whether the vectors point to different spots. Returns 1 if they -# don't, 0 if they do. Compare vector_equality, above. -# -sub vector_inequality { - return !vector_equality(@_); -} - 1; __END__ diff --git a/t/1-classes/vector.t b/t/1-classes/vector.t index ae7ce25..2ccfb5c 100644 --- a/t/1-classes/vector.t +++ b/t/1-classes/vector.t @@ -15,7 +15,7 @@ use strict; use warnings; -use Test::More tests => 80; +use Test::More tests => 70; use Language::Befunge::IP; use Language::Befunge::Vector; @@ -95,7 +95,7 @@ is($v1->get_component(0), 1, "X is now 1"); is($v1->get_component(1), 2, "Y is now 2"); is($v1->vector_as_string, "(1,2)", "setd works"); -# getd is tested all over this script. +# get_component is tested all over this script. # get_all_components my @list = $v1->get_all_components; @@ -128,7 +128,7 @@ ok(!$v3->bounds_check($v1, $v2), "(0,23) is out of bounds"); # vector_as_string is already tested, above -# vector_equality +# comparison: equality $v1 = Language::Befunge::Vector->new(1, 1); $v2 = Language::Befunge::Vector->new(1, 1); $v3 = Language::Befunge::Vector->new(1, 2); @@ -137,13 +137,8 @@ ok( $v2 == $v1 , "v2 == v1"); ok( $v1 == $v1 , "v1 == v1"); ok(!($v1 == $v3), "!(v1 == v3)"); ok(!($v2 == $v3), "!(v2 == v3)"); -ok( $v1->vector_equality($v2) , "v1 == v2"); -ok( $v2->vector_equality($v1) , "v2 == v1"); -ok( $v1->vector_equality($v1) , "v1 == v1"); -ok(!($v1->vector_equality($v3)), "!(v1 == v3)"); -ok(!($v2->vector_equality($v3)), "!(v2 == v3)"); -# vector_inequality +# comparison: inequality $v1 = Language::Befunge::Vector->new(1, 1); $v2 = Language::Befunge::Vector->new(1, 1); $v3 = Language::Befunge::Vector->new(1, 2); @@ -152,11 +147,6 @@ ok(!($v2 != $v1), "!(v2 != v1)"); ok(!($v1 != $v1), "!(v1 != v1)"); ok( ($v1 != $v3), "v1 != v3"); ok( ($v2 != $v3), "v2 != v3"); -ok(!($v1->vector_inequality($v2)), "!(v1 != v2)"); -ok(!($v2->vector_inequality($v1)), "!(v2 != v1)"); -ok(!($v1->vector_inequality($v1)), "!(v1 != v1)"); -ok( ($v1->vector_inequality($v3)), "v1 != v3"); -ok( ($v2->vector_inequality($v3)), "v2 != v3"); # finally, test all the possible ways to die SKIP: { @@ -179,19 +169,19 @@ SKIP: { # addition throws_ok(sub { my $blah = $tref_v + $bef_v }, qr/uneven dimensions/, "misaligned vector arithmetic (+)"); - # vector_add_inplace + # inplace addition throws_ok(sub { $tref_v += $bef_v }, qr/uneven dimensions/, "misaligned vector arithmetic (+=)"); - # setd + # set_component throws_ok(sub { $tref_v->set_component(3, 0) }, - qr/No such dimension/, "setd takes dimension range 0..2 for 3d"); + qr/No such dimension/, "set_component takes dimension range 0..2 for 3d"); throws_ok(sub { $bef_v->set_component(-1, 0) }, - qr/No such dimension/, "setd takes dimension range 0..1 for 2d"); - # getd + qr/No such dimension/, "set_component takes dimension range 0..1 for 2d"); + # get_component throws_ok(sub { $tref_v->get_component(3) }, - qr/No such dimension/, "getd takes dimension range 0..2 for 3d"); + qr/No such dimension/, "get_component takes dimension range 0..2 for 3d"); throws_ok(sub { $bef_v->get_component(-1) }, - qr/No such dimension/, "getd takes dimension range 0..1 for 2d"); + qr/No such dimension/, "get_component takes dimension range 0..1 for 2d"); # bounds_check throws_ok(sub { $tref_v->bounds_check($v1, $v2) }, qr/uneven dimensions/, "bounds check catches wrong dimension in first arg"); @@ -199,10 +189,10 @@ SKIP: { qr/uneven dimensions/, "bounds check catches wrong dimension in second arg"); throws_ok(sub { $v1->bounds_check($v2, $tref_v) }, qr/uneven dimensions/, "bounds check catches wrong dimension in third arg"); - # vector_equality + # comparison: equality throws_ok(sub { $tref_v == $bef_v }, qr/uneven dimensions/, "misaligned vector arithmetic (==)"); - # vector_inequality + # comparison: inequality throws_ok(sub { $tref_v != $bef_v }, qr/uneven dimensions/, "misaligned vector arithmetic (!=)"); } -- 2.11.4.GIT