GitHub Viewer
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include
#include
// --------------------------------------------------------
// Graph generation
// --------------------------------------------------------
struct Node {
std::string name;
size_t idx {0};
size_t level {0};
bool visited {false};
std::atomic dependents {0};
std::vector successors;
void precede(Node& n) {
successors.emplace_back(&n);
n.dependents ++;
}
};
std::unique_ptr make_dag(size_t num_nodes, size_t max_degree) {
std::unique_ptr nodes(new Node[num_nodes]);
// Make sure nodes are in clean state
for(size_t i=0; isuccessors.size();
for(size_t i=0; isuccessors[i]->dependents.fetch_sub(1) == 1) {
n->successors[i]->level = ++level;
subflow.emplace([s=n->successors[i], &traverse](tf::Subflow &subflow){
traverse(s, subflow);
});
}
}
};
size_t max_degree = 4;
size_t num_nodes = 1000;
for(unsigned w=1; wlevel = ++level;
subflow.emplace([s=n->successors[i], &traverse](tf::Subflow &subflow){
traverse(s, subflow);
});
}
}
};
tf::Taskflow tf;
for(size_t i=0; i