]> git.ozlabs.org Git - ccan/blobdiff - ccan/agar/test/api-dijkstra.c
aga,agar: Rename aga_dijkstra_all_paths()
[ccan] / ccan / agar / test / api-dijkstra.c
index 3ade1580d2a11f4bb079fb8421cdf0e33209cb27..a5de2ea6b31b9e4074d871749293be4405151408 100644 (file)
 
 static void test_trivial(void)
 {
-       struct trivial_graphr tgr;
        struct agar_state *sr;
        aga_icost_t cost;
        const void *node;
 
-       trivial_graphr_init(&tgr);
-
-       ok1(sr = agar_dijkstra_new(NULL, &tgr.gr, int2ptr(1)));
+       ok1(sr = agar_dijkstra_new(NULL, &trivial_graphr.gr, int2ptr(1)));
        ok1(agar_dijkstra_step(sr, &node));
        ok1(ptr2int(node) == 1);
        ok1(!agar_dijkstra_step(sr, &node));
@@ -131,13 +128,10 @@ static void test_chain(void)
 
 static void test_error(void)
 {
-       struct error_graphr egr;
        struct agar_state *sr;
        aga_icost_t cost;
 
-       error_graphr_init(&egr);
-
-       ok1(sr = agar_dijkstra_new(NULL, &egr.gr, int2ptr(1)));
+       ok1(sr = agar_dijkstra_new(NULL, &error_graphr.gr, int2ptr(1)));
        ok1(agar_dijkstra_path(sr, int2ptr(1), &cost, NULL, NULL));
        ok1(cost == 0);
        ok1(agar_dijkstra_path(sr, int2ptr(2), &cost, NULL, NULL));
@@ -146,7 +140,7 @@ static void test_error(void)
        ok1(!agar_dijkstra_path(sr, int2ptr(4), &cost, NULL, NULL));
        tal_free(sr);
 
-       ok1(sr = agar_dijkstra_new(NULL, &egr.gr, int2ptr(3)));
+       ok1(sr = agar_dijkstra_new(NULL, &error_graphr.gr, int2ptr(3)));
        ok1(agar_dijkstra_path(sr, int2ptr(3), &cost, NULL, NULL));
        ok1(cost == 0);
        ok1(!agar_dijkstra_path(sr, int2ptr(4), &cost, NULL, NULL));
@@ -156,15 +150,12 @@ static void test_error(void)
 
 static void test_traversal1(void)
 {
-       struct traversal1_graphr t1gr;
        struct agar_state *sr;
        aga_icost_t cost;
 
        /* This is mostly about testing we correctly handle
         * non-reachable nodes */
-       traversal1_graphr_init(&t1gr);
-
-       ok1(sr = agar_dijkstra_new(NULL, &t1gr.gr, int2ptr(1)));
+       ok1(sr = agar_dijkstra_new(NULL, &traversal1_graphr.gr, int2ptr(1)));
        ok1(agar_dijkstra_path(sr, int2ptr(1),
                              &cost, NULL, NULL));
        ok1(cost == 0);
@@ -191,7 +182,7 @@ static void test_traversal1(void)
                               NULL, NULL, NULL));
        tal_free(sr);
 
-       ok1(sr = agar_dijkstra_new(NULL, &t1gr.gr, int2ptr(9)));
+       ok1(sr = agar_dijkstra_new(NULL, &traversal1_graphr.gr, int2ptr(9)));
        ok1(agar_dijkstra_path(sr, int2ptr(9),
                              &cost, NULL, NULL));
        ok1(cost == 0);
@@ -221,14 +212,11 @@ static void test_traversal1(void)
 
 static void test_shortcut1(void)
 {
-       struct shortcut1_graphr s1gr;
        struct agar_state *sr;
        aga_icost_t cost;
        const void *node;
 
-       shortcut1_graphr_init(&s1gr);
-
-       ok1(sr = agar_dijkstra_new(NULL, &s1gr.gr, int2ptr(1)));
+       ok1(sr = agar_dijkstra_new(NULL, &shortcut1_graphr.gr, int2ptr(1)));
        ok1(agar_dijkstra_path(sr, int2ptr(3), &cost, &node, NULL));
        ok1(cost == 2);
        ok1(node == int2ptr(2));
@@ -238,12 +226,22 @@ static void test_shortcut1(void)
        tal_free(sr);
 }
 
+static void test_shortcut2(void)
+{
+       struct agar_state *sr;
+
+       ok1(sr = agar_dijkstra_new(NULL, &shortcut2_graphr.gr, int2ptr(1)));
+       agar_dijkstra_complete(sr);
+       ok1(agar_error(sr) == AGA_ERR_NEGATIVE_COST);
+       tal_free(sr);
+}
+
 int main(void)
 {
        plan_tests(6 + 23
                   + FULL_LEN * (FULL_LEN*4 - 1)
                   + CHAIN_LEN * (1 + CHAIN_LEN*2)
-                  + 12 + 32 + 7);
+                  + 12 + 32 + 7 + 2);
 
        test_trivial();
        test_parallel();
@@ -252,6 +250,7 @@ int main(void)
        test_error();
        test_traversal1();
        test_shortcut1();
+       test_shortcut2();
        
        return exit_status();
 }