[decycler] Add alternative way of using it to tests

This commit is contained in:
Behdad Esfahbod 2025-02-16 12:14:42 -07:00
parent 3cb4971729
commit 2bdf985022

View file

@ -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