use strict;
use warnings;

use CPAN::Meta::Requirements;

use Test::More 0.88;

{
  my $req = CPAN::Meta::Requirements->new->add_minimum(Foo => 1);

  ok(  $req->accepts_module(Foo => 1), "need 1, got 1");
  ok(! $req->accepts_module(Foo => 0), "need 0, got 1");
}

{
  my $req = CPAN::Meta::Requirements->new->add_minimum(Foo => 0);

  ok(  $req->accepts_module(Foo => 1), "need 0, got 1");
  ok(  $req->accepts_module(Foo => undef), "need 0, got undef");
  ok(  $req->accepts_module(Foo => "v0"), "need 0, got 'v0'");
  ok(  $req->accepts_module(Foo => v1.2.3), "need 0, got v1.2.3");
  ok(  $req->accepts_module(Foo => "v1.2.3"), "need 0, got 'v1.2.3'");
}

{
  my $req = CPAN::Meta::Requirements->new->add_maximum(Foo => 1);

  ok(  $req->accepts_module(Foo => 1), "need <=1, got 1");
  ok(! $req->accepts_module(Foo => 2), "need <=1, got 2");
}

{
  my $req = CPAN::Meta::Requirements->new->add_exclusion(Foo => 1);

  ok(  $req->accepts_module(Foo => 0), "need !1, got 0");
  ok(! $req->accepts_module(Foo => 1), "need !1, got 1");
}

{
  my $req = CPAN::Meta::Requirements::Range->with_minimum(1);

  ok(  $req->accepts(1), "need 1, got 1");
  ok(! $req->accepts(0), "need 0, got 1");
}

{
  my $req = CPAN::Meta::Requirements::Range->with_minimum(0);

  ok(  $req->accepts(1), "need 0, got 1");
  ok(  $req->accepts(undef), "need 0, got undef");
  ok(  $req->accepts("v0"), "need 0, got 'v0'");
  ok(  $req->accepts(v1.2.3), "need 0, got v1.2.3");
  ok(  $req->accepts("v1.2.3"), "need 0, got 'v1.2.3'");
}

{
  my $req = CPAN::Meta::Requirements::Range->with_maximum(1);

  ok(  $req->accepts(1), "need <=1, got 1");
  ok(! $req->accepts(2), "need <=1, got 2");
}

{
  my $req = CPAN::Meta::Requirements::Range->with_exclusion(1);

  ok(  $req->accepts(0), "need !1, got 0");
  ok(! $req->accepts(1), "need !1, got 1");
}

done_testing;
