The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl -w

use strict;
use warnings;

BEGIN { require "t/test.pl" }


note "Positive_Int"; {
    {
        package My::Positive::Int;

        use TB2::Mouse;
        use TB2::Types;

        has positive_int =>
          is        => 'rw',
          isa       => 'TB2::Positive_Int';
    }

    my $obj = My::Positive::Int->new;

    $obj->positive_int(0);
    is $obj->positive_int, 0;

    $obj->positive_int(1);
    is $obj->positive_int, 1;

    $obj->positive_int(2_000_000);
    is $obj->positive_int, 2_000_000;

    ok !eval { $obj->positive_int(-1);    1 },  "negative integer";
    ok !eval { $obj->positive_int(1.5);   1 },  "decimals";
    ok !eval { $obj->positive_int(undef); 1 },  "undef";
    ok !eval { $obj->positive_int("one"); 1 },  "strings";
    ok !eval { $obj->positive_int("");    1 },  "empty strings";
    ok !eval { $obj->positive_int(" 12 "); 1 }, "stringy numbers";
}


note "Positive_NonZero_Int"; {
    {
        package My::Positive::NonZero::Int;

        use TB2::Mouse;
        use TB2::Types;

        has positive_nonzero_int =>
          is        => 'rw',
          isa       => 'TB2::Positive_NonZero_Int';
    }

    my $obj = My::Positive::NonZero::Int->new;

    $obj->positive_nonzero_int(1);
    is $obj->positive_nonzero_int, 1;

    $obj->positive_nonzero_int(2_000_000);
    is $obj->positive_nonzero_int, 2_000_000;

    ok !eval { $obj->positive_nonzero_int(0);     1 },  "zero";
    ok !eval { $obj->positive_nonzero_int(-1);    1 },  "negative integer";
    ok !eval { $obj->positive_nonzero_int(1.5);   1 },  "decimals";
    ok !eval { $obj->positive_nonzero_int(undef); 1 },  "undef";
    ok !eval { $obj->positive_nonzero_int("one"); 1 },  "strings";
    ok !eval { $obj->positive_nonzero_int("");    1 },  "empty strings";
    ok !eval { $obj->positive_nonzero_int(" 12 "); 1 }, "stringy numbers";
}

done_testing;