| 164 | } |
| 165 | |
| 166 | void test_QueryGraphClone() { |
| 167 | // create a triangle graph |
| 168 | // (A)->(B)->(C)->(A) |
| 169 | size_t node_cap = 3; |
| 170 | size_t edge_cap = 3; |
| 171 | |
| 172 | // create nodes |
| 173 | const char *relation = "R"; |
| 174 | |
| 175 | QGNode *A = QGNode_New("A"); |
| 176 | QGNode *B = QGNode_New("B"); |
| 177 | QGNode *C = QGNode_New("C"); |
| 178 | |
| 179 | QGEdge *AB = QGEdge_New(relation, "AB"); |
| 180 | QGEdge *BC = QGEdge_New(relation, "BC"); |
| 181 | QGEdge *CA = QGEdge_New(relation, "CA"); |
| 182 | |
| 183 | QueryGraph *g = QueryGraph_New(node_cap, edge_cap); |
| 184 | QueryGraph_AddNode(g, A); |
| 185 | QueryGraph_AddNode(g, B); |
| 186 | QueryGraph_AddNode(g, C); |
| 187 | |
| 188 | QueryGraph_ConnectNodes(g, A, B, AB); |
| 189 | QueryGraph_ConnectNodes(g, B, C, BC); |
| 190 | QueryGraph_ConnectNodes(g, C, A, CA); |
| 191 | |
| 192 | QueryGraph *clone = QueryGraph_Clone(g); |
| 193 | |
| 194 | // validations |
| 195 | TEST_ASSERT(QueryGraph_NodeCount(g) == QueryGraph_NodeCount(clone)); |
| 196 | TEST_ASSERT(QueryGraph_EdgeCount(g) == QueryGraph_EdgeCount(clone)); |
| 197 | |
| 198 | // validate nodes |
| 199 | for(int i = 0; i < QueryGraph_NodeCount(g); i++) { |
| 200 | QGNode *a = g->nodes[i]; |
| 201 | QGNode *b = clone->nodes[i]; |
| 202 | compare_nodes(a, b); |
| 203 | } |
| 204 | |
| 205 | // validate edges |
| 206 | for(int i = 0; i < QueryGraph_EdgeCount(g); i++) { |
| 207 | QGEdge *a = g->edges[i]; |
| 208 | QGEdge *b = clone->edges[i]; |
| 209 | compare_edges(a, b); |
| 210 | } |
| 211 | |
| 212 | // clean up |
| 213 | QueryGraph_Free(g); |
| 214 | QueryGraph_Free(clone); |
| 215 | } |
| 216 | |
| 217 | |
| 218 | void test_QueryGraphRemoveEntities() { |
nothing calls this directly
no test coverage detected