Files

60 lines
1.8 KiB
C
Raw Permalink Normal View History

2026-09-07 18:48:16 +08:00
#include "c_Bipartite.h"
#include "c_Test.h"
#include <stdlib.h>
#include <stdio.h>
TEST_CASE(test_c_bipartite_classification) {
// Test Scenario A: Valid Bipartite Structure (Square structure: 0-1, 1-2, 2-3, 3-0)
c_Graph_t g_bipartite;
c_Graph_Init(&g_bipartite, 4, 0);
c_Graph_AddEdge(&g_bipartite, 0, 1);
c_Graph_AddEdge(&g_bipartite, 1, 2);
c_Graph_AddEdge(&g_bipartite, 2, 3);
c_Graph_AddEdge(&g_bipartite, 3, 0);
c_Bipartite_t b1;
c_err_t err = c_Bipartite_Init(&b1, &g_bipartite, 0);
ASSERT_INT_EQ(C_SUCCESS, err);
ASSERT_TRUE(c_Bipartite_IsBipartite(&b1));
// Neighbors must have matching complementary colored configurations
ASSERT_TRUE(c_Bipartite_Color(&b1, 0) != c_Bipartite_Color(&b1, 1));
ASSERT_TRUE(c_Bipartite_Color(&b1, 0) == c_Bipartite_Color(&b1, 2));
// Test Scenario B: Non-Bipartite Structure (Triangle layout containing odd cycle: 0-1, 1-2, 2-0)
c_Graph_t g_invalid;
c_Graph_Init(&g_invalid, 3, 0);
c_Graph_AddEdge(&g_invalid, 0, 1);
c_Graph_AddEdge(&g_invalid, 1, 2);
c_Graph_AddEdge(&g_invalid, 2, 0);
c_Bipartite_t b2;
err = c_Bipartite_Init(&b2, &g_invalid, 0);
ASSERT_INT_EQ(C_SUCCESS, err);
ASSERT_FALSE(c_Bipartite_IsBipartite(&b2)); // Must fail check validation rules
// Odd cycle array container details checking rules
const c_VertexIdList_t* cyc = c_Bipartite_Cycle(&b2);
ASSERT_PTR_NOT_NULL(cyc);
ASSERT_TRUE(cyc->size > 0);
c_Bipartite_Destroy(&b1);
c_Bipartite_Destroy(&b2);
c_Graph_Destroy(&g_bipartite);
c_Graph_Destroy(&g_invalid);
}
int main(int argc, char** argv){
TEST_START(Component Tests);
// Execution list configurations
RUN_TEST(test_c_bipartite_classification);
TEST_REPORT();
RETURN_TEST_STATUS;
}