_ _
| |_ ___| |_ _
| | . | | | |
|_|_|___|_|_ |
|___|
git mirror - github.com/owenewans/holy - branch master
file tests/solver.c
#include "solve.h"
#include <assert.h>
#include <stdio.h>
int main(void)
{
const char *b_provides[] = {"package:local:b"};
const char *c_provides[] = {"package:local:c"};
const char *a_conflicts[] = {"package:local:b"};
struct holy_solver_requirement a_requires[] = {
{"package:local:b", NULL}
};
struct holy_solver_item items[] = {
{"artifact-a", NULL, 0, a_requires, 1, NULL, 0},
{"artifact-b", b_provides, 1, NULL, 0, NULL, 0},
{"artifact-c", c_provides, 1, NULL, 0, NULL, 0}
};
int selected[3] = {9, 9, 9};
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 1);
assert(selected[0] && selected[1] && !selected[2]);
assert(holy_solve_exact_set(items, 3, selected) == 1);
assert(selected[0] && selected[1] && selected[2]);
items[0].conflicts = a_conflicts;
items[0].conflicts_count = 1;
assert(holy_solve_exact_set(items, 3, selected) == 2);
assert(!selected[0] && !selected[1] && !selected[2]);
items[0].conflicts = NULL;
items[0].conflicts_count = 0;
items[2].requires = a_requires;
items[2].requires_count = 1;
items[0].requires_count = 0;
items[1].provides_count = 0;
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 1);
assert(holy_solve_exact_set(items, 3, selected) == 2);
assert(!selected[0] && !selected[1] && !selected[2]);
items[0].requires_count = 1;
items[1].provides_count = 1;
items[2].requires = NULL;
items[2].requires_count = 0;
assert(holy_solve_exact_unique(items, 3, "artifact-a", selected) == 1);
assert(selected[0] && selected[1] && !selected[2]);
items[1].provides_count = 0;
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 2);
assert(!selected[0] && !selected[1] && !selected[2]);
a_requires[0].alternative = "package:local:c";
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 1);
assert(selected[0] && !selected[1] && selected[2]);
assert(holy_solve_exact_unique(items, 3, "artifact-a", selected) == 1);
items[1].provides_count = 1;
items[0].conflicts = a_conflicts;
items[0].conflicts_count = 1;
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 1);
assert(selected[0] && !selected[1] && selected[2]);
assert(holy_solve_exact_unique(items, 3, "artifact-a", selected) == 1);
a_requires[0].alternative = NULL;
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 2);
assert(!selected[0] && !selected[1] && !selected[2]);
items[0].conflicts = NULL;
items[0].conflicts_count = 0;
items[2].provides = b_provides;
assert(holy_solve_exact_unique(items, 3, "artifact-a", selected) == 3);
assert(!selected[0] && !selected[1] && !selected[2]);
items[2].provides = c_provides;
a_requires[0].alternative = "package:local:c";
assert(holy_solve_exact_unique(items, 3, "artifact-a", selected) == 3);
assert(!selected[0] && !selected[1] && !selected[2]);
a_requires[0].alternative = NULL;
a_requires[0].first = "package:local:b";
{
const struct holy_solver_requirement b_requires[] = {
{"package:local:a", NULL}
};
const char *a_provides[] = {"package:local:a"};
items[0].provides = a_provides;
items[0].provides_count = 1;
items[1].requires = b_requires;
items[1].requires_count = 1;
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 1);
assert(selected[0] && selected[1] && !selected[2]);
items[1].requires = NULL;
items[1].requires_count = 0;
items[0].provides = NULL;
items[0].provides_count = 0;
}
items[1].id = "artifact-a";
assert(holy_solve_exact(items, 3, "artifact-a", selected) == 0);
assert(!selected[0] && !selected[1] && !selected[2]);
items[1].id = "artifact-b";
selected[0] = 9;
assert(holy_solve_exact(items, 3, "missing-artifact", selected) == 0);
assert(!selected[0] && !selected[1] && !selected[2]);
selected[0] = 9;
assert(holy_solve_exact(items, 3, "", selected) == 0);
assert(!selected[0] && !selected[1] && !selected[2]);
puts("libsolv fixtures passed");
return 0;
}