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 )