The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;

use mop;

my $x;

class Foo {
    method inc { ++$x }
    method dec { --$x }
}

{
    $x = 1;

    my $foo = Foo->new;

    is($x, 1);
    is($foo->inc, 2);
    is($foo->inc, 3);
    is($x, 3);
    is($foo->dec, 2);
    is($foo->dec, 1);
    is($x, 1);
}

my $y;

class Bar is abstract {
    method get_y;

    method inc { ++$y }
    method dec { --$y }
}

class Baz extends Bar {
    method get_y { $y }
}

{
    $y = 1;

    my $baz = Baz->new;

    is($baz->get_y, 1);
    is($baz->inc, 2);
    is($baz->inc, 3);
    is($baz->get_y, 3);
    is($baz->dec, 2);
    is($baz->dec, 1);
    is($baz->get_y, 1);
}

done_testing;