diff --git a/src/test-decycler.cc b/src/test-decycler.cc index b6fa0f747..b09faf48d 100644 --- a/src/test-decycler.cc +++ b/src/test-decycler.cc @@ -28,9 +28,9 @@ #include "hb-decycler.hh" static void -tree_recurse (unsigned value, - unsigned max_value, - hb_decycler_t &decycler) +tree_recurse_binary (unsigned value, + unsigned max_value, + hb_decycler_t &decycler) { if (value >= max_value) return; @@ -40,15 +40,41 @@ tree_recurse (unsigned value, bool ret = node.visit (value); assert (ret); - tree_recurse (value * 2 + 1, max_value, decycler); - tree_recurse (value * 2 + 2, max_value, decycler); + tree_recurse_binary (value * 2 + 1, max_value, decycler); + tree_recurse_binary (value * 2 + 2, max_value, decycler); +} + +static void +tree_recurse_tertiary (unsigned value, + unsigned max_value, + hb_decycler_t &decycler) +{ + /* This function implements an alternative way to use the + * decycler. It checks for each node before visiting it. + * It demonstrates reusing a node for multiple visits. */ + + if (value >= max_value) + return; + + hb_decycler_node_t node (decycler); + + value *= 3; + + for (unsigned i = 1; i <= 3; i++) + { + bool ret = node.visit (value + i); + assert (ret); + + tree_recurse_tertiary (value + i, max_value, decycler); + } } static void test_tree () { hb_decycler_t decycler; - tree_recurse (0, 64, decycler); + tree_recurse_binary (0, 64, decycler); + tree_recurse_tertiary (0, 1000, decycler); } static void