@@ -25,6 +25,12 @@ GRIN_GRAPH get_graph(int argc, char** argv) {
2525 GRIN_PARTITION_LIST local_partitions = grin_get_local_partition_list (pg );
2626 GRIN_PARTITION partition =
2727 grin_get_partition_from_list (pg , local_partitions , 0 );
28+ GRIN_PARTITION_ID partition_id = grin_get_partition_id (pg , partition );
29+ GRIN_PARTITION p1 = grin_get_partition_by_id (pg , partition_id );
30+ if (!grin_equal_partition (pg , partition , p1 )) {
31+ printf ("partition not match\n" );
32+ }
33+ grin_destroy_partition (pg , p1 );
2834 GRIN_GRAPH g = grin_get_local_graph_by_partition (pg , partition );
2935 grin_destroy_partition (pg , partition );
3036 grin_destroy_partition_list (pg , local_partitions );
@@ -35,6 +41,20 @@ GRIN_GRAPH get_graph(int argc, char** argv) {
3541 return g ;
3642}
3743
44+
45+ #ifdef GRIN_ENABLE_GRAPH_PARTITION
46+ GRIN_PARTITION get_partition (int argc , char * * argv ) {
47+ GRIN_PARTITIONED_GRAPH pg =
48+ grin_get_partitioned_graph_from_storage (argc - 1 , & (argv [1 ]));
49+ GRIN_PARTITION_LIST local_partitions = grin_get_local_partition_list (pg );
50+ GRIN_PARTITION partition =
51+ grin_get_partition_from_list (pg , local_partitions , 0 );
52+ grin_destroy_partition_list (pg , local_partitions );
53+ grin_destroy_partitioned_graph (pg );
54+ return partition ;
55+ }
56+ #endif
57+
3858#ifdef GRIN_ENABLE_GRAPH_PARTITION
3959GRIN_PARTITIONED_GRAPH get_partitioend_graph (int argc , char * * argv ) {
4060 GRIN_PARTITIONED_GRAPH pg =
@@ -864,7 +884,124 @@ void test_property(int argc, char** argv) {
864884 test_error_code (argc , argv );
865885}
866886
887+
888+ void test_partition_reference (int argc , char * * argv ) {
889+ printf ("+++++++++++++++++++++ Test partition/reference +++++++++++++++++++++\n" );
890+ GRIN_GRAPH g = get_graph (argc , argv );
891+ GRIN_PARTITION p0 = get_partition (argc , argv );
892+
893+ GRIN_VERTEX_LIST vlist = grin_get_vertex_list (g );
894+ GRIN_VERTEX_LIST_ITERATOR vli = grin_get_vertex_list_begin (g , vlist );
895+ GRIN_VERTEX_LIST mvlist = grin_select_master_for_vertex_list (g , vlist );
896+ grin_destroy_vertex_list (g , vlist );
897+
898+ size_t cnt = 0 ;
899+ while (!grin_is_vertex_list_end (g , vli )) {
900+ cnt ++ ;
901+ GRIN_VERTEX v = grin_get_vertex_from_iter (g , vli );
902+ GRIN_VERTEX_REF vref = grin_get_vertex_ref_by_vertex (g , v );
903+ #ifdef GRIN_TRAIT_FAST_VERTEX_REF
904+ long long int sref = grin_serialize_vertex_ref_as_int64 (g , vref );
905+ GRIN_VERTEX_REF vref1 = grin_deserialize_int64_to_vertex_ref (g , sref );
906+ #else
907+ const char * sref = grin_serialize_vertex_ref (g , vref );
908+ GRIN_VERTEX_REF vref1 = grin_deserialize_vertex_ref (g , sref );
909+ grin_destroy_string_value (g , sref );
910+ #endif
911+ GRIN_VERTEX v1 = grin_get_vertex_from_vertex_ref (g , vref1 );
912+ if (!grin_equal_vertex (g , v , v1 )) {
913+ printf ("vertex not match\n" );
914+ }
915+
916+ if (grin_is_master_vertex (g , v ) && !grin_is_mirror_vertex (g , v )) {
917+ GRIN_PARTITION p = grin_get_master_partition_from_vertex_ref (g , vref );
918+ if (!grin_equal_partition (g , p , p0 )) {
919+ printf ("partition not match\n" );
920+ }
921+ } else {
922+ printf ("(Wrong) test only has one partition\n" );
923+ }
924+
925+ grin_destroy_vertex_ref (g , vref );
926+ grin_destroy_vertex (g , v );
927+ grin_get_next_vertex_list_iter (g , vli );
928+ }
929+ printf ("num of vertex checked: %zu\n" , cnt );
930+
931+ #ifdef GRIN_ENABLE_VERTEX_LIST_ARRAY
932+ size_t mvlist_size = grin_get_vertex_list_size (g , mvlist );
933+ if (mvlist_size != cnt ) {
934+ printf ("(Wrong) master vertex list size not match\n" );
935+ }
936+ #endif
937+
938+ grin_destroy_vertex_list (g , mvlist );
939+ grin_destroy_graph (g );
940+ }
941+
942+ void test_partition (int argc , char * * argv ) {
943+ #ifdef GRIN_ENABLE_GRAPH_PARTITION
944+ test_partition_reference (argc , argv );
945+ #endif
946+ }
947+
948+
949+ void test_topology_adjacent_list (int argc , char * * argv ) {
950+ GRIN_GRAPH g = get_graph (argc , argv );
951+
952+ GRIN_VERTEX v = get_one_vertex (g );
953+
954+ GRIN_ADJACENT_LIST al = grin_get_adjacent_list (g , OUT , v );
955+ GRIN_ADJACENT_LIST_ITERATOR ali = grin_get_adjacent_list_begin (g , al );
956+ grin_destroy_adjacent_list (g , al );
957+ size_t cnt = 0 ;
958+
959+ while (!grin_is_adjacent_list_end (g , ali )) {
960+ cnt ++ ;
961+
962+ GRIN_EDGE e = grin_get_edge_from_adjacent_list_iter (g , ali );
963+ GRIN_VERTEX v1 = grin_get_src_vertex_from_edge (g , e );
964+ if (!grin_equal_vertex (g , v , v1 )) {
965+ printf ("vertex not match\n" );
966+ }
967+
968+ GRIN_VERTEX v2 = grin_get_dst_vertex_from_edge (g , e );
969+ GRIN_VERTEX u = grin_get_neighbor_from_adjacent_list_iter (g , ali );
970+ if (!grin_equal_vertex (g , v2 , u )) {
971+ printf ("vertex not match\n" );
972+ }
973+
974+ grin_destroy_vertex (g , v1 );
975+ grin_destroy_vertex (g , v2 );
976+ grin_destroy_vertex (g , u );
977+ grin_destroy_edge (g , e );
978+ grin_get_next_adjacent_list_iter (g , ali );
979+ }
980+
981+ printf ("num of edge checked: %zu\n" , cnt );
982+
983+ grin_destroy_adjacent_list_iter (g , ali );
984+ grin_destroy_vertex (g , v );
985+ grin_destroy_graph (g );
986+ }
987+
988+ void test_topology_structure (int argc , char * * argv ) {
989+ GRIN_GRAPH g = get_graph (argc , argv );
990+
991+ printf ("vnum: %zu, enum: %zu\n" , grin_get_vertex_num (g ), grin_get_edge_num (g ));
992+
993+ grin_destroy_graph (g );
994+ }
995+
996+
997+ void test_topology (int argc , char * * argv ) {
998+ test_topology_structure (argc , argv );
999+ test_topology_adjacent_list (argc , argv );
1000+ }
1001+
8671002int main (int argc , char * * argv ) {
8681003 test_property (argc , argv );
1004+ test_partition (argc , argv );
1005+ test_topology (argc , argv );
8691006 return 0 ;
8701007}
0 commit comments