class TestCase::Module::Point { use Point; static method interfaces : int () { # Interface { my $point = Point->new; unless ($point isa Stringable) { return 0; } unless ($point isa Cloneable) { return 0; } } # Stringable { my $point = Point->new(1, 2); my $stringable = (Stringable)$point; my $point_string = $stringable->to_string; unless ($point_string eq "(1,2)") { return 0; } } # Cloneable { my $point = Point->new(1, 2); my $cloneable = (Cloneable)$point; my $point_clone = (Point)$cloneable->clone; unless ($point_clone->x == $point->x && $point_clone->y == $point->y) { return 0; } if ($point_clone == $point) { return 0; } } return 1; } static method fields : int () { { my $point = Point->new(1, 2); unless ($point isa Point) { return 0; } unless ($point->x == 1) { return 0; } unless ($point->y == 2) { return 0; } } return 1; } static method new : int () { { my $point = Point->new; unless ($point isa Point) { return 0; } unless ($point->x == 0) { return 0; } unless ($point->y == 0) { return 0; } } { my $point = Point->new(1); unless ($point isa Point) { return 0; } unless ($point->x == 1) { return 0; } unless ($point->y == 0) { return 0; } } { my $point = Point->new(1, 2); unless ($point isa Point) { return 0; } unless ($point->x == 1) { return 0; } unless ($point->y == 2) { return 0; } } return 1; } static method clear : int () { { my $point = Point->new(1, 2); $point->clear; unless ($point->x == 0) { return 0; } unless ($point->y == 0) { return 0; } } return 1; } static method to_string: int () { { my $point = Point->new(1, 2); unless ($point->to_string eq "(1,2)") { return 0; } } return 1; } static method extra : int () { { my $point = Point->new(1, 2); my $x = $point->x; my $y = $point->y; unless ($x == 1) { return 0; } unless ($y == 2) { return 0; } } { my $point = Point->new(1, 2); my $x = $point->x; my $y = $point->y; unless ($x == 1) { return 0; } unless ($y == 2) { return 0; } } # Stringable { my $point = Point->new(1, 2); my $stringable = (Stringable)$point; my $point_string = $stringable->to_string; unless ($point_string eq "(1,2)") { return 0; } } # Cloneable { my $point = Point->new(1, 2); my $cloneable = (Cloneable)$point; my $point_clone = (Point)$cloneable->clone; unless ($point_clone->x == $point->x && $point_clone->y == $point->y) { return 0; } if ($point_clone == $point) { return 0; } } # Basic { my $point = Point->new(1, 2); unless ($point isa Point) { return 0; } unless ($point->x == 1) { return 0; } unless ($point->y == 2) { return 0; } my $string = $point->to_string; unless ($string eq "(1,2)") { return 0; } $point->clear; unless ($point->x == 0 && $point->y == 0) { return 0; } } return 1; } static method eq : int () { { my $point = Point->new; unless ($point isa EqualityCheckable) { return 0; } { my $ret = $point->eq(Point->new(1, 2), Point->new(1, 3)); unless ($ret == 0) { return 0; } } { my $ret = $point->eq(Point->new(1, 2), Point->new(1, 2)); unless ($ret == 1) { return 0; } } { my $ret = $point->eq(undef, undef); unless ($ret == 1) { return 0; } } { my $ret = $point->eq(undef, Point->new); unless ($ret == 0) { return 0; } } { my $ret = $point->eq(Point->new, undef); unless ($ret == 0) { return 0; } } } return 1; } }