struct parallel_graph pg;
aga_icost_t cost;
struct aga_node *node;
+ const void *edge;
- parallel_graph_init(&pg, 3);
+ parallel_graph_init(&pg, 3, 0);
ok1(aga_dijkstra_start(&pg.sg.g, &pg.sg.nodes[1]) == 0);
ok1(aga_dijkstra_step(&pg.sg.g) == &pg.sg.nodes[1]);
ok1(aga_dijkstra_path(&pg.sg.g, &pg.sg.nodes[1], &cost, NULL, NULL));
ok1(cost == 0);
ok1(aga_dijkstra_path(&pg.sg.g, &pg.sg.nodes[2], &cost, &node, NULL));
- ok1(cost == 1);
+ ok1(cost == 2);
ok1(node == &pg.sg.nodes[1]);
aga_finish(&pg.sg.g);
ok1(cost == 0);
ok1(!aga_dijkstra_path(&pg.sg.g, &pg.sg.nodes[1], NULL, NULL, NULL));
aga_finish(&pg.sg.g);
+
+
+ parallel_graph_init(&pg, 3, 2);
+ ok1(aga_dijkstra_start(&pg.sg.g, &pg.sg.nodes[1]) == 0);
+ ok1(aga_dijkstra_path(&pg.sg.g, &pg.sg.nodes[2], &cost, &node, &edge));
+ ok1(cost == 1);
+ ok1(node == &pg.sg.nodes[1]);
+ ok1(ptr2int(edge) == 2);
+ aga_finish(&pg.sg.g);
}
#define FULL_LEN 4
aga_finish(&t1g.sg.g);
}
+static void test_shortcut1(void)
+{
+ struct shortcut1_graph s1g;
+ aga_icost_t cost;
+ struct aga_node *node;
+
+ shortcut1_graph_init(&s1g);
+
+ ok1(aga_dijkstra_start(&s1g.sg.g, &s1g.sg.nodes[1]) == 0);
+ ok1(aga_dijkstra_path(&s1g.sg.g, &s1g.sg.nodes[3],
+ &cost, &node, NULL));
+ ok1(cost == 2);
+ ok1(node == &s1g.sg.nodes[2]);
+ ok1(aga_dijkstra_path(&s1g.sg.g, &s1g.sg.nodes[2],
+ &cost, &node, NULL));
+ ok1(cost == 1);
+ ok1(node == &s1g.sg.nodes[1]);
+ aga_finish(&s1g.sg.g);
+}
+
+static void test_shortcut2(void)
+{
+ struct shortcut2_graph s2g;
+
+ shortcut2_graph_init(&s2g);
+
+ ok1(aga_dijkstra_start(&s2g.sg.g, &s2g.sg.nodes[1]) == 0);
+ aga_dijkstra_all_paths(&s2g.sg.g);
+ ok1(aga_error(&s2g.sg.g) == AGA_ERR_NEGATIVE_COST);
+ aga_finish(&s2g.sg.g);
+}
+
int main(void)
{
- plan_tests(7 + 15
+ plan_tests(7 + 20
+ FULL_LEN * (1 + FULL_LEN*4)
+ CHAIN_LEN * (1 + CHAIN_LEN*2)
- + 12 + 32);
+ + 12 + 32 + 7 + 2);
test_trivial();
test_parallel();
test_chain();
test_error();
test_traversal1();
+ test_shortcut1();
+ test_shortcut2();
return exit_status();
}