Create structs (RayList, MultiRowModel, Tableau)

This commit is contained in:
2017-04-29 23:49:45 -04:00
parent c6e6d3d817
commit 3ded5cd96f
13 changed files with 427 additions and 458 deletions

View File

@@ -22,6 +22,8 @@ extern "C" {
#include <math.h>
#include <multirow/lp.h>
#include <multirow/util.h>
#include <multirow/lfree2d.h>
#include <multirow/cg.h>
#include <infinity/greedy-nd.h>
}
@@ -363,19 +365,26 @@ TEST(GreedyNDTest, generate_cut_test_1)
{
int rval = 0;
double f[] = { 0.5, 0.5 };
double rays[] =
{
1.0, 1.0,
1.0, -1.0,
-1.0, -1.0,
-1.0, 1.0,
0.0, 1.0,
1.0, 0.0
};
double r0[] = { 1.0, 1.0 };
double r1[] = { 1.0, -1.0 };
double r2[] = { -1.0, -1.0 };
double r3[] = { -1.0, 1.0 };
double r4[] = { 0.0, 1.0 };
double r5[] = { 1.0, 0.0 };
double beta[6];
rval = GREEDY_ND_generate_cut(2, 6, f, rays, beta);
struct MultiRowModel model;
CG_malloc_model(&model, 2, 6);
LFREE_push_ray(&model.rays, r0);
LFREE_push_ray(&model.rays, r1);
LFREE_push_ray(&model.rays, r2);
LFREE_push_ray(&model.rays, r3);
LFREE_push_ray(&model.rays, r4);
LFREE_push_ray(&model.rays, r5);
model.f[0] = 0.5;
model.f[1] = 0.5;
rval = GREEDY_ND_generate_cut(&model, beta);
abort_if(rval, "GREEDY_ND_generate_cut failed");
EXPECT_NEAR(beta[0], 0.5, 1e-6);
@@ -393,19 +402,27 @@ TEST(GreedyNDTest, generate_cut_test_2)
{
int rval = 0;
double f[] = { 0.75, 0.75, 0.75};
double rays[] =
{
1.0, 0.0, 0.0,
-1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, -1.0, 0.0,
0.0, 0.0, 1.0,
0.0, 0.0, -1.0
};
double r0[] = { 1.0, 0.0, 0.0 };
double r1[] = {-1.0, 0.0, 0.0 };
double r2[] = { 0.0, 1.0, 0.0 };
double r3[] = { 0.0, -1.0, 0.0 };
double r4[] = { 0.0, 0.0, 1.0 };
double r5[] = { 0.0, 0.0, -1.0 };
double beta[6];
rval = GREEDY_ND_generate_cut(3, 6, f, rays, beta);
struct MultiRowModel model;
CG_malloc_model(&model, 3, 6);
LFREE_push_ray(&model.rays, r0);
LFREE_push_ray(&model.rays, r1);
LFREE_push_ray(&model.rays, r2);
LFREE_push_ray(&model.rays, r3);
LFREE_push_ray(&model.rays, r4);
LFREE_push_ray(&model.rays, r5);
model.f[0] = 0.75;
model.f[1] = 0.75;
model.f[2] = 0.75;
rval = GREEDY_ND_generate_cut(&model, beta);
abort_if(rval, "GREEDY_ND_generate_cut failed");
EXPECT_NEAR(beta[0], 0.75, 1e-6);
@@ -416,6 +433,7 @@ TEST(GreedyNDTest, generate_cut_test_2)
EXPECT_NEAR(beta[5], 2.25, 1e-6);
CLEANUP:
CG_free_model(&model);
if(rval) FAIL();
}

View File

@@ -53,39 +53,36 @@ TEST(InfinityTest, sort_rays_angle_test)
{
int rval = 0;
int n_rays = 5;
double beta[] = {0, 1, 2, 3, 4};
double r0[] = { 1.0, 1.0 };
double r1[] = { 1.0, 0.0 };
double r2[] = { 1.0, -1.0 };
double r3[] = { -1.0, 0.0 };
double r4[] = { 2.0, 0.0 };
RayList rays;
LFREE_init_ray_list(&rays, 2, 5);
LFREE_push_ray(&rays, r0);
LFREE_push_ray(&rays, r1);
LFREE_push_ray(&rays, r2);
LFREE_push_ray(&rays, r3);
LFREE_push_ray(&rays, r4);
rval = sort_rays_by_angle(&rays);
abort_if(rval, "sort_rays_by_angle failed");
SortPair sp0, sp1, sp2, sp3, sp4;
double rays[] = {
1.0, 1.0,
1.0, 0.0,
1.0, -1.0,
-1.0, 0.0,
2.0, 0.0,
};
rval = sort_rays_angle(rays, n_rays, beta);
abort_if(rval, "sort_rays_angle failed");
sp0 = { 0, &rays[0] };
sp1 = { 1, &rays[2] };
sp2 = { 2, &rays[4] };
sp3 = { 3, &rays[6] };
sp4 = { 4, &rays[8] };
sp0 = { 0, LFREE_get_ray(&rays, 0) };
sp1 = { 1, LFREE_get_ray(&rays, 1) };
sp2 = { 2, LFREE_get_ray(&rays, 2) };
sp3 = { 3, LFREE_get_ray(&rays, 3) };
sp4 = { 4, LFREE_get_ray(&rays, 4) };
EXPECT_LE(_qsort_cmp_rays_angle(&sp0, &sp1), 0);
EXPECT_LE(_qsort_cmp_rays_angle(&sp1, &sp2), 0);
EXPECT_LE(_qsort_cmp_rays_angle(&sp2, &sp3), 0);
EXPECT_LE(_qsort_cmp_rays_angle(&sp3, &sp4), 0);
EXPECT_EQ(beta[0], 3);
EXPECT_EQ(beta[1], 0);
EXPECT_TRUE(beta[2] == 1 || beta[2] == 4);
EXPECT_TRUE(beta[3] == 1 || beta[3] == 4);
EXPECT_TRUE(beta[2] != beta[3]);
EXPECT_EQ(beta[4], 2);
CLEANUP:
LFREE_free_ray_list(&rays);
if (rval) FAIL();
}