#include "c_Test.h" #include "c_Digraph.h" #include "c_NonrecursiveGabowSCC.h" TEST_CASE(test_nonrecursive_gabow_scc) { c_Digraph_t g; c_err_t err = c_Digraph_Init(&g, 5, NULL); ASSERT_INT_EQ(C_SUCCESS, err); /* Setup cyclic component tracking bounds: * Component 1: 0 -> 1 -> 2 -> 0 * Exit Bridge: 2 -> 3 * Component 2: 3 -> 4 -> 3 */ c_Digraph_AddEdge(&g, 0, 1); c_Digraph_AddEdge(&g, 1, 2); c_Digraph_AddEdge(&g, 2, 0); c_Digraph_AddEdge(&g, 2, 3); c_Digraph_AddEdge(&g, 3, 4); c_Digraph_AddEdge(&g, 4, 3); c_NonrecursiveGabowSCC_t scc; err = c_NonrecursiveGabowSCC_Init(&scc, &g, NULL); ASSERT_INT_EQ(C_SUCCESS, err); /* Verify proper isolation partitions count values */ ASSERT_LL_EQ(2, c_NonrecursiveGabowSCC_GetCount(&scc)); /* Verify connected state mappings */ ASSERT_TRUE(c_NonrecursiveGabowSCC_StronglyConnected(&scc, 0, 1)); ASSERT_TRUE(c_NonrecursiveGabowSCC_StronglyConnected(&scc, 1, 2)); ASSERT_TRUE(c_NonrecursiveGabowSCC_StronglyConnected(&scc, 3, 4)); ASSERT_FALSE(c_NonrecursiveGabowSCC_StronglyConnected(&scc, 0, 3)); c_NonrecursiveGabowSCC_Destroy(&scc); c_Digraph_Destroy(&g); } int main(void) { /* Bootstrapping test environment wrapper */ TEST_START(Test); /* Run specified edge cases */ RUN_TEST(test_nonrecursive_gabow_scc); /* Generate total logging matrix summaries sheet */ TEST_REPORT(); /* Unwind tracking status frames code signals */ RETURN_TEST_STATUS; }