|
|
@ -27,7 +27,6 @@ extern "C" {
|
|
|
|
#include "../src/infinity-nd.c"
|
|
|
|
#include "../src/infinity-nd.c"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const double E = 1e-6;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST(InfinityNDTest, find_violated_cone_test)
|
|
|
|
TEST(InfinityNDTest, find_violated_cone_test)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -165,11 +164,11 @@ TEST(InfinityNDTest, cone_bound_test_1)
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound(2, 6, f, rays, rx1, x, beta, &epsilon);
|
|
|
|
rval = cone_bound(2, 6, f, rays, rx1, x, beta, &epsilon);
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
EXPECT_NEAR(0.5, epsilon, E);
|
|
|
|
EXPECT_NEAR(0.5, epsilon, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound(2, 6, f, rays, rx2, x, beta, &epsilon);
|
|
|
|
rval = cone_bound(2, 6, f, rays, rx2, x, beta, &epsilon);
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
EXPECT_NEAR(1.0, epsilon, E);
|
|
|
|
EXPECT_NEAR(1.0, epsilon, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
CLEANUP:
|
|
|
|
if(rval) FAIL();
|
|
|
|
if(rval) FAIL();
|
|
|
@ -198,7 +197,7 @@ TEST(InfinityNDTest, cone_bound_test_2)
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x1, beta1, &epsilon);
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x1, beta1, &epsilon);
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
EXPECT_NEAR(1.0, epsilon, E);
|
|
|
|
EXPECT_NEAR(1.0, epsilon, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x1, beta2, &epsilon);
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x1, beta2, &epsilon);
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
@ -206,7 +205,7 @@ TEST(InfinityNDTest, cone_bound_test_2)
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x2, beta2, &epsilon);
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x2, beta2, &epsilon);
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
EXPECT_NEAR(1.0, epsilon, E);
|
|
|
|
EXPECT_NEAR(1.0, epsilon, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x2, beta3, &epsilon);
|
|
|
|
rval = cone_bound(2, 2, f, rays, rx, x2, beta3, &epsilon);
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
|
abort_if(rval, "cone_bound failed");
|
|
|
@ -240,7 +239,7 @@ TEST(InfinityNDTest, bound_test_1)
|
|
|
|
|
|
|
|
|
|
|
|
rval = bound(2, 6, f, rays, x, beta1, &epsilon, tx);
|
|
|
|
rval = bound(2, 6, f, rays, x, beta1, &epsilon, tx);
|
|
|
|
abort_if(rval, "bound failed");
|
|
|
|
abort_if(rval, "bound failed");
|
|
|
|
EXPECT_NEAR(epsilon, 0.5, E);
|
|
|
|
EXPECT_NEAR(epsilon, 0.5, 1e-6);
|
|
|
|
EXPECT_TRUE(tx[0]);
|
|
|
|
EXPECT_TRUE(tx[0]);
|
|
|
|
EXPECT_FALSE(tx[1]);
|
|
|
|
EXPECT_FALSE(tx[1]);
|
|
|
|
EXPECT_FALSE(tx[2]);
|
|
|
|
EXPECT_FALSE(tx[2]);
|
|
|
@ -250,7 +249,7 @@ TEST(InfinityNDTest, bound_test_1)
|
|
|
|
|
|
|
|
|
|
|
|
rval = bound(2, 6, f, rays, x, beta2, &epsilon, tx);
|
|
|
|
rval = bound(2, 6, f, rays, x, beta2, &epsilon, tx);
|
|
|
|
abort_if(rval, "bound failed");
|
|
|
|
abort_if(rval, "bound failed");
|
|
|
|
EXPECT_NEAR(epsilon, 1.0, E);
|
|
|
|
EXPECT_NEAR(epsilon, 1.0, 1e-6);
|
|
|
|
EXPECT_TRUE(tx[0]);
|
|
|
|
EXPECT_TRUE(tx[0]);
|
|
|
|
EXPECT_FALSE(tx[1]);
|
|
|
|
EXPECT_FALSE(tx[1]);
|
|
|
|
EXPECT_FALSE(tx[2]);
|
|
|
|
EXPECT_FALSE(tx[2]);
|
|
|
@ -309,11 +308,11 @@ TEST(InfinityNDTest, psi_test)
|
|
|
|
|
|
|
|
|
|
|
|
rval = INFINITY_psi(2, q1, 1.0, &lp, &value);
|
|
|
|
rval = INFINITY_psi(2, q1, 1.0, &lp, &value);
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
EXPECT_NEAR(value, 2.0, E);
|
|
|
|
EXPECT_NEAR(value, 2.0, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
rval = INFINITY_psi(2, q2, 2.0, &lp, &value);
|
|
|
|
rval = INFINITY_psi(2, q2, 2.0, &lp, &value);
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
EXPECT_NEAR(value, 8.0, E);
|
|
|
|
EXPECT_NEAR(value, 8.0, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
CLEANUP:
|
|
|
|
LP_free(&lp);
|
|
|
|
LP_free(&lp);
|
|
|
@ -361,64 +360,17 @@ TEST(InfinityNDTest, psi_test_2)
|
|
|
|
|
|
|
|
|
|
|
|
rval = INFINITY_psi(3, q1, 1.0, &lp, &value);
|
|
|
|
rval = INFINITY_psi(3, q1, 1.0, &lp, &value);
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
EXPECT_NEAR(value, 1.0, E);
|
|
|
|
EXPECT_NEAR(value, 1.0, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
rval = INFINITY_psi(3, q2, 1.0, &lp, &value);
|
|
|
|
rval = INFINITY_psi(3, q2, 1.0, &lp, &value);
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
EXPECT_NEAR(value, 2.0, E);
|
|
|
|
EXPECT_NEAR(value, 2.0, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
CLEANUP:
|
|
|
|
if(rval) FAIL();
|
|
|
|
if(rval) FAIL();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TEST(InfinityNDTest, psi_test_3)
|
|
|
|
TEST(InfinityNDTest, generate_cut_test_1)
|
|
|
|
{
|
|
|
|
|
|
|
|
int rval = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double f[] = { 0.671875, 0.671875 };
|
|
|
|
|
|
|
|
double rays[] = {
|
|
|
|
|
|
|
|
-0.007812500000, 0.000000000000,
|
|
|
|
|
|
|
|
-0.039062500000, 0.046875000000,
|
|
|
|
|
|
|
|
0.000000000000, 0.046875000000,
|
|
|
|
|
|
|
|
0.046875000000, 0.000000000000,
|
|
|
|
|
|
|
|
0.000000000000, -0.039062500000
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double beta[] = {
|
|
|
|
|
|
|
|
66.909090909091,
|
|
|
|
|
|
|
|
29.440000000000,
|
|
|
|
|
|
|
|
14.000000000000,
|
|
|
|
|
|
|
|
14.000000000000,
|
|
|
|
|
|
|
|
29.440000000000,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double q[] = { 0 - f[0], 1 - f[1]};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct ConvLFreeSet lfree;
|
|
|
|
|
|
|
|
lfree.f = f;
|
|
|
|
|
|
|
|
lfree.beta = beta;
|
|
|
|
|
|
|
|
lfree.rays.nrays = 5;
|
|
|
|
|
|
|
|
lfree.rays.values = rays;
|
|
|
|
|
|
|
|
lfree.nrows = lfree.rays.dim = 2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double value;
|
|
|
|
|
|
|
|
struct LP lp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rval = LP_open(&lp);
|
|
|
|
|
|
|
|
abort_if(rval, "LP_open failed");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rval = INFINITY_create_psi_lp(&lfree, &lp);
|
|
|
|
|
|
|
|
abort_if(rval, "INFINITY_create_psi_lp failed");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rval = INFINITY_psi(lfree.nrows, q, 1.0, &lp, &value);
|
|
|
|
|
|
|
|
abort_if(rval, "GREDDY_ND_psi failed");
|
|
|
|
|
|
|
|
EXPECT_NEAR(value, 1.0, E);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
|
|
|
|
if(rval) FAIL();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST(DISABLED_InfinityNDTest, generate_cut_test_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int rval = 0;
|
|
|
|
int rval = 0;
|
|
|
|
|
|
|
|
|
|
|
@ -446,12 +398,12 @@ TEST(DISABLED_InfinityNDTest, generate_cut_test_1)
|
|
|
|
rval = INFINITY_ND_generate_lfree(&model, &lfree);
|
|
|
|
rval = INFINITY_ND_generate_lfree(&model, &lfree);
|
|
|
|
abort_if(rval, "INFINITY_ND_generate_lfree failed");
|
|
|
|
abort_if(rval, "INFINITY_ND_generate_lfree failed");
|
|
|
|
|
|
|
|
|
|
|
|
EXPECT_NEAR(lfree.beta[0], 0.5, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[0], 0.5, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[1], 0.5, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[1], 0.5, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[2], 0.5, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[2], 0.5, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[3], 0.5, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[3], 0.5, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[4], 1.0, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[4], 1.0, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[5], 1.0, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[5], 1.0, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
CLEANUP:
|
|
|
|
if(rval) FAIL();
|
|
|
|
if(rval) FAIL();
|
|
|
@ -486,12 +438,12 @@ TEST(InfinityNDTest, generate_cut_test_2)
|
|
|
|
rval = INFINITY_ND_generate_lfree(&model, &lfree);
|
|
|
|
rval = INFINITY_ND_generate_lfree(&model, &lfree);
|
|
|
|
abort_if(rval, "INFINITY_ND_generate_lfree failed");
|
|
|
|
abort_if(rval, "INFINITY_ND_generate_lfree failed");
|
|
|
|
|
|
|
|
|
|
|
|
EXPECT_NEAR(lfree.beta[0], 0.75, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[0], 0.75, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[1], 2.25, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[1], 2.25, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[2], 0.75, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[2], 0.75, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[3], 2.25, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[3], 2.25, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[4], 0.75, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[4], 0.75, 1e-6);
|
|
|
|
EXPECT_NEAR(lfree.beta[5], 2.25, E);
|
|
|
|
EXPECT_NEAR(lfree.beta[5], 2.25, 1e-6);
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
CLEANUP:
|
|
|
|
CG_free_model(&model);
|
|
|
|
CG_free_model(&model);
|
|
|
@ -535,68 +487,3 @@ TEST(InfinityNDTest, scale_to_ahull_test)
|
|
|
|
CLEANUP:
|
|
|
|
CLEANUP:
|
|
|
|
if(rval) FAIL();
|
|
|
|
if(rval) FAIL();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TEST(InfinityNDTest, cone_bound_find_lambda_test)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int rval = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double f[] = { 1/2.0, 1/3.0 };
|
|
|
|
|
|
|
|
double x[] = { 3.0, 3.0 };
|
|
|
|
|
|
|
|
double ray_values[] = {
|
|
|
|
|
|
|
|
1.0, 2.0,
|
|
|
|
|
|
|
|
3.0, 2.0,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct RayList rays = {.values = ray_values, .nrays = 2, .dim = 2};
|
|
|
|
|
|
|
|
double lambda[2];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound_find_lambda(&rays, f, x, lambda);
|
|
|
|
|
|
|
|
abort_if(rval, "cone_bound_find_lambda failed");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXPECT_NEAR(lambda[0], 3/4.0, E);
|
|
|
|
|
|
|
|
EXPECT_NEAR(lambda[1], 7/12.0, E);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
|
|
|
|
if(rval) FAIL();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST(InfinityNDTest, cone_bound_find_lambda_test_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int rval = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double f[] = { 1/2.0, 1/3.0, 5/6.0 };
|
|
|
|
|
|
|
|
double x[] = { 3.0, 3.0, 6.0 };
|
|
|
|
|
|
|
|
double ray_values[] = {
|
|
|
|
|
|
|
|
1.0, 2.0, 3.0,
|
|
|
|
|
|
|
|
3.0, 2.0, 5.0,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct RayList rays = {.values = ray_values, .nrays = 2, .dim = 3};
|
|
|
|
|
|
|
|
double lambda[2];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound_find_lambda(&rays, f, x, lambda);
|
|
|
|
|
|
|
|
abort_if(rval, "cone_bound_find_lambda failed");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXPECT_NEAR(lambda[0], 3/4.0, E);
|
|
|
|
|
|
|
|
EXPECT_NEAR(lambda[1], 7/12.0, E);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CLEANUP:
|
|
|
|
|
|
|
|
if(rval) FAIL();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST(InfinityNDTest, cone_bound_find_lambda_test_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int rval = 0;
|
|
|
|
|
|
|
|
double f[] = { 1/2.0, 1/2.0 };
|
|
|
|
|
|
|
|
double x[] = { 3.0, 3.0 };
|
|
|
|
|
|
|
|
double ray_values[] = {
|
|
|
|
|
|
|
|
0.0, -1.0,
|
|
|
|
|
|
|
|
-1.0, 0.0,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct RayList rays = {.values = ray_values, .nrays = 2, .dim = 2};
|
|
|
|
|
|
|
|
double lambda[2];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rval = cone_bound_find_lambda(&rays, f, x, lambda);
|
|
|
|
|
|
|
|
EXPECT_NE(rval, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|