class TestCase::Point {
  use Point;
  
  static method basic : int () {
    {
      my $point = Point->new;
      $point->set_x(1);
      $point->set_y(2);
      
      my $x = $point->x;
      my $y = $point->y;
      
      unless ($x == 1) {
        return 0;
      }
      
      unless ($y == 2) {
        return 0;
      }
    }
    
    
    {
      my $point = Point->new_xy(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_xy(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_xy(1, 2);
      my $cloneable = (Cloneable)$point;
      my $point_clone = (Point)$cloneable->cloneable_clone;
      unless ($point_clone->x == $point->x && $point_clone->y == $point->y) {
        return 0;
      }
      
      if ($point_clone == $point) {
        return 0;
      }
    }
    
    return 1;
  }
}