Algorithm-CP-IZ

 view release on metacpan or  search on metacpan

t/04constraint.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More tests => 270;
BEGIN { use_ok('Algorithm::CP::IZ') };

# Add
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->create_int(0, 10);
    my $v3 = $iz->Add($v1, $v2);

    $v1->Eq(3);
    $v2->Eq(5);
    is($v3->value, 8);
}

# Add
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Add(9, $v1);

    $v1->Eq(3);
    is($v2->value, 12);
}

# Add
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Add($v1, 2);

    $v1->Eq(3);
    is($v2->value, 5);
}

# Add
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->Add(123, 456);

    is($v1->value, 579);
}

# Add
{
    for my $i (11..50) {
      my $iz = Algorithm::CP::IZ->new();
      my @vars = map{$iz->create_int($_, $_)} (1..$i);
      my $sum = (($i + 1) * $i) / 2;
      my $v = $iz->Add(@vars);

      is($v->value, $sum);
    }
}

# Add error
{
    my $iz = Algorithm::CP::IZ->new();
    my @vars = map{$iz->create_int($_, $_)} (1..2);
    my $err = 1;
    eval {
	my $v = $iz->Add();
	$err = 0;
    };

    my $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);

    eval {
	my $v = $iz->Add("x");
	$err = 0;
    };

    $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);
}

# Mul
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->create_int(0, 10);
    my $v3 = $iz->Mul($v1, $v2);

    $v1->Eq(3);
    $v2->Eq(5);
    is($v3->value, 15);
}

# Mul
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Mul(9, $v1);

    $v1->Eq(3);
    is($v2->value, 27);
}

# Mul
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Mul($v1, 2);

    $v1->Eq(3);
    is($v2->value, 6);
}

# Mul
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->Mul(123, 456);

    is($v1->value, 123 * 456);
}

# Mul
{
    my $iz = Algorithm::CP::IZ->new();
  my $v = $iz->Mul(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3);

  is($v->value, 6 * 6 * 6 * 6 * 6);
}

# Mul error
{
    my $iz = Algorithm::CP::IZ->new();
    my @vars = map{$iz->create_int($_, $_)} (1..2);
    my $err = 1;
    eval {
	my $v = $iz->Mul();
	$err = 0;
    };

    my $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);

    eval {
	my $v = $iz->Mul("x");
	$err = 0;
    };

    $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);
}

# Sub
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->create_int(0, 10);
    my $v3 = $iz->Sub($v1, $v2);

    $v1->Eq(3);
    $v2->Eq(5);
    is($v3->value, -2);
}

# Sub
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Sub(9, $v1);

    $v1->Eq(3);
    is($v2->value, 6);
}

# Sub
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Sub($v1, 2);

    $v1->Eq(3);
    is($v2->value,1);
}

# Sub
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->Sub(5, 2);

    is($v1->value, 3);
}

# Sub
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->Sub(5, 2, 1);

    is($v1->value, 2);
}

# Sub error
{
    my $iz = Algorithm::CP::IZ->new();
    my @vars = map{$iz->create_int($_, $_)} (1..2);
    my $err = 1;
    eval {
	my $v = $iz->Sub();
	$err = 0;
    };

    my $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);

    eval {
	my $v = $iz->Sub("x", "y");
	$err = 0;
    };

    $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);
}

# Div
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->create_int(0, 10);
    my $v3 = $iz->Div($v1, $v2);

    $v1->Eq(4);
    $v2->Eq(2);
    is($v3->value, 2);
}

# Div
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Div(9, $v1);

    $v1->Eq(3);
    is($v2->value, 3);
}

# Div
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Div($v1, 2);

    $v1->Eq(8);
    is($v2->value, 4);
}

# Div (segfault in cs_Div)
{
    my $iz = Algorithm::CP::IZ->new();
    # my $v1 = $iz->Div(7, 2);
    # ok(!defined($v1));
    ok(1);
}

# Div error
{
    my $iz = Algorithm::CP::IZ->new();
    my @vars = map{$iz->create_int($_, $_)} (1..2);
    my $err = 1;
    eval {
	my $v = $iz->Div();
	$err = 0;
    };

    my $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);

    eval {
	my $v = $iz->Div(5, "a");
	$err = 0;
    };

    $msg = $@;
    is($err, 1);
    ok($msg =~ /^Algorithm::CP::IZ:/);
}

# Sigma
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->Sigma([9, $v1]);

    $v1->Eq(3);
    is($v2->value, 12);
}

# Sigma empty
{
    my $iz = Algorithm::CP::IZ->new();
    my $v = $iz->Sigma([]);

    is($v->value, 0);
}

# ScalProd
{
    my $iz = Algorithm::CP::IZ->new();
    my $v1 = $iz->create_int(0, 10);
    my $v2 = $iz->ScalProd([9, $v1], [4, 3]);

    $v1->Eq(3);
    is($v2->value, 9 * 4 + 3 * 3);

    # using same variables and constants
    my $v3 = $iz->ScalProd([9, $v1], [4, 3]);
    is($v3->value, $v2->value);
}

# ScalProd empty
{
    my $iz = Algorithm::CP::IZ->new();
    my $v = $iz->ScalProd([], []);



( run in 0.419 second using v1.01-cache-2.11-cpan-2398b32b56e )