From 2bdf9850225225c65c92b4bf99f97696894a20e9 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 16 Feb 2025 12:14:42 -0700 Subject: [PATCH] [decycler] Add alternative way of using it to tests --- src/test-decycler.cc | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) 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