]> git.vpit.fr Git - perl/modules/Test-Leaner.git/commitdiff
Test cmp_ok() with overloading
authorVincent Pit <vince@profvince.com>
Tue, 28 Dec 2010 10:33:05 +0000 (11:33 +0100)
committerVincent Pit <vince@profvince.com>
Tue, 28 Dec 2010 14:32:59 +0000 (15:32 +0100)
t/24-cmp_ok.t

index ad880f35b5995b6206190ef679ecfe9a5d1d7ea4..106ca5f0507fc23dad092d2cae2c7aaf2e8b4e6f 100644 (file)
@@ -3,7 +3,28 @@
 use strict;
 use warnings;
 
-use Test::Leaner tests => 4 * 10 + 7 + 10;
+{
+ package Test::Leaner::TestCmpNum;
+
+ use overload '<=>' => sub {
+  my ($x, $y, $r) = @_;
+
+  $x = $x->{num};
+  $y = $y->{num} if ref $y;
+
+  ($x, $y) = ($y, $x) if $r;
+
+  return $x <=> $y;
+ };
+
+ sub new {
+  my $class = shift;
+
+  bless { num => $_[0] }, $class
+ }
+}
+
+use Test::Leaner tests => 7 * 10 + 4 * 7 + 10;
 
 my @num_tests = (
  [ '1.0', '==', '1.0' ],
@@ -20,10 +41,39 @@ my @num_tests = (
 
 for my $t (@num_tests) {
  my ($x, $op, $y) = @$t;
+
  cmp_ok $x,      $op, $y;
  cmp_ok int($x), $op, $y;
  cmp_ok $x,      $op, int($y);
  cmp_ok int($x), $op, int($y);
+
+ my $ox = Test::Leaner::TestCmpNum->new($x);
+ my $oy = Test::Leaner::TestCmpNum->new($y);
+
+ cmp_ok $ox,     $op, $y;
+ cmp_ok $x,      $op, $oy;
+ cmp_ok $ox,     $op, $oy;
+}
+
+{
+ package Test::Leaner::TestCmpStr;
+
+ use overload 'cmp' => sub {
+  my ($x, $y, $r) = @_;
+
+  $x = $x->{str};
+  $y = $y->{str} if ref $y;
+
+  ($x, $y) = ($y, $x) if $r;
+
+  return $x cmp $y;
+ };
+
+ sub new {
+  my $class = shift;
+
+  bless { str => $_[0] }, $class
+ }
 }
 
 my @str_tests = (
@@ -38,7 +88,15 @@ my @str_tests = (
 
 for my $t (@str_tests) {
  my ($x, $op, $y) = @$t;
+
  cmp_ok $x, $op, $y;
+
+ my $ox = Test::Leaner::TestCmpStr->new($x);
+ my $oy = Test::Leaner::TestCmpStr->new($y);
+
+ cmp_ok $ox, $op, $y;
+ cmp_ok $x,  $op, $oy;
+ cmp_ok $ox, $op, $oy;
 }
 
 my @logic_tests = (