Files
Abdelrahman Said a11edf0c53 Add graph references
2026-06-28 13:49:01 +01:00

1068 lines
21 KiB
CMake

include(test_helpers)
include(benchmark_helpers)
add_library(test_utilities OBJECT unit/test_utilities.c)
target_link_libraries(test_utilities PRIVATE igraph)
use_all_warnings(test_utilities)
# Add a compatibility alias to the "test" target so it can also be invoked as
# "make check" - for people who have it in their muscle memories from autotools
add_custom_target(build_tests)
add_custom_target(
check
COMMAND ${CMAKE_CTEST_COMMAND} --progress --output-on-failure -C $<CONFIG>
COMMENT "Executing unit tests..."
USES_TERMINAL
)
add_dependencies(check build_tests)
# Add a custom target for benchmarks and another one for building them
add_custom_target(build_benchmarks)
add_custom_target(
benchmark
COMMENT "Running benchmarks..."
)
add_dependencies(benchmark build_benchmarks)
# Some newer gcc version have --enable-new-dtags on by default. This then leads
# to using RUNPATH instead of RPATH. Since RUNPATH is only considered after
# LD_LIBRARY_PATH, if another version of igraph is installed somewhere it will
# be linked to that library.
include(CheckLinkerFlag)
check_linker_flag(C "-Wl,--enable-new-dtags" HAVE_ENABLE_NEW_DTAGS)
if (HAVE_ENABLE_NEW_DTAGS AND BUILD_SHARED_LIBS)
message(STATUS "Disabling new dtags for testing to use RPATH to ensure the correct library is found.")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
endif()
# tutorial examples and other snippets from the documentation
add_examples(
FOLDER examples/tutorial NAMES
tutorial1
tutorial2
tutorial3
)
# version.at
add_examples(
FOLDER examples/simple NAMES
igraph_version
)
# types.at
add_examples(
FOLDER examples/simple NAMES
dqueue
igraph_sparsemat
igraph_sparsemat3
igraph_sparsemat4
igraph_sparsemat6
igraph_sparsemat7
igraph_sparsemat8
igraph_strvector
igraph_vector_int_list_sort
)
add_legacy_tests(
FOLDER tests/unit NAMES
bitset
heap
igraph_complex
igraph_psumtree
igraph_sparsemat5
igraph_sparsemat9
igraph_sparsemat_droptol
igraph_sparsemat_fkeep
igraph_sparsemat_getelements_sorted
igraph_sparsemat_is_symmetric
igraph_sparsemat_iterator_idx
igraph_sparsemat_minmax
igraph_sparsemat_nonzero_storage
igraph_sparsemat_normalize
igraph_sparsemat_which_minmax
igraph_strvector
igraph_vector_floor
igraph_vector_lex_cmp
matrix
matrix2
matrix3
matrix_complex
stack
strvector_set_len_remove_print
vector
vector2
vector3
vector4
vector_list
vector_ptr
vector_ptr_sort_ind
vector_sort_ind
)
if ((NOT BUILD_SHARED_LIBS) OR (NOT BLAS_IS_VENDORED AND NOT ARPACK_IS_VENDORED))
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_sparsemat2 # Uses ARPACK and BLAS functions which are not publicly available when building with internal ARPACK/BLAS
)
endif()
add_legacy_tests(
FOLDER tests/unit NAMES
2wheap
cutheap
d_indheap
marked_queue
gen2wheap
set
trie
)
# basic.at
add_examples(
FOLDER examples/simple NAMES
creation
igraph_copy
igraph_degree
igraph_delete_edges
igraph_delete_vertices
igraph_get_eid
igraph_get_eids
igraph_is_directed
igraph_neighbors
)
add_legacy_tests(
FOLDER tests/unit NAMES
adj
igraph_add_edges
igraph_add_vertices
igraph_degree
igraph_delete_edges
igraph_delete_vertices
igraph_edges
igraph_empty
igraph_get_eid
igraph_is_same_graph
igraph_incident
igraph_neighbors
)
# iterators.at
add_examples(
FOLDER examples/simple NAMES
igraph_es_pairs
igraph_vs_nonadj
igraph_vs_range
igraph_vs_vector
)
add_legacy_tests(
FOLDER tests/unit NAMES
edge_selectors
igraph_es_path
igraph_es_all_between
vertex_selectors
)
# structure_generators.at
add_examples(
FOLDER examples/simple NAMES
igraph_atlas
igraph_barabasi_game
igraph_barabasi_game2
igraph_create
igraph_degree_sequence_game
igraph_erdos_renyi_game_gnm
igraph_erdos_renyi_game_gnp
igraph_full
igraph_grg_game
igraph_kary_tree
igraph_lcf
igraph_realize_degree_sequence
igraph_regular_tree
igraph_ring
igraph_small
igraph_star
igraph_symmetric_tree
igraph_weighted_adjacency
)
add_legacy_tests(
FOLDER tests/unit NAMES
constructor-failure
erdos_renyi_game_gnm
erdos_renyi_game_gnp
full
igraph_adjacency
igraph_atlas
igraph_barabasi_aging_game
igraph_barabasi_game
igraph_bipartite_game
igraph_callaway_traits_game
igraph_chung_lu_game
igraph_circulant
igraph_cited_type_game
igraph_citing_cited_type_game
igraph_correlated_game
igraph_correlated_pair_game
igraph_create
igraph_degree_sequence_game
igraph_dot_product_game
igraph_establishment_game
igraph_extended_chordal_ring
igraph_forest_fire_game
igraph_from_prufer
igraph_full_bipartite
igraph_full_citation
igraph_full_multipartite
igraph_generalized_petersen
igraph_grg_game
igraph_growing_random_game
igraph_hsbm_game
igraph_hsbm_list_game
igraph_k_regular_game
igraph_lastcit_game
igraph_linegraph
igraph_lcf
igraph_kautz
igraph_preference_game
igraph_perfect
igraph_realize_degree_sequence
igraph_recent_degree_aging_game
igraph_recent_degree_game
igraph_sbm_game
igraph_simple_interconnected_islands_game
igraph_square_lattice
igraph_static_power_law_game
igraph_tree_from_parent_vector
igraph_trussness
igraph_turan
igraph_wheel
igraph_weighted_adjacency
kary_tree
symmetric_tree
tree_game
ring
watts_strogatz_game
)
# structural_properties.at
add_examples(
FOLDER examples/simple NAMES
bellman_ford
distances
igraph_assortativity_degree
igraph_assortativity_nominal
igraph_average_path_length
igraph_cocitation
igraph_diameter
igraph_eccentricity
igraph_feedback_arc_set
igraph_feedback_arc_set_ip
igraph_get_all_shortest_paths_dijkstra
igraph_get_shortest_paths
igraph_get_shortest_paths_dijkstra
igraph_girth
igraph_has_multiple
igraph_is_loop
igraph_is_multiple
igraph_list_triangles
igraph_avg_nearest_neighbor_degree
igraph_minimum_spanning_tree
igraph_pagerank
igraph_radius
igraph_reciprocity
igraph_similarity
igraph_simplify
igraph_topological_sorting
igraph_transitivity
)
add_legacy_tests(
FOLDER tests/unit NAMES
all_shortest_paths
assortativity
igraph_product
components
coreness
efficiency
# The eigen_stress test is disabled by default. The chance of failure on at
# least some platforms, or with some BLAS/LAPACK/ARPACK versions is high
# due to ARPACK's fickleness. The test is still useful for local testing.
# eigen_stress
global_transitivity
harmonic_centrality
hub_and_authority
igraph_count_adjacent_triangles
igraph_are_adjacent
igraph_average_path_length
igraph_average_path_length_dijkstra
igraph_betweenness
igraph_betweenness_subset
igraph_closeness
igraph_constraint
igraph_convergence_degree
igraph_count_multiple
igraph_density
igraph_diameter
igraph_diameter_dijkstra
igraph_diversity
igraph_distances_floyd_warshall
igraph_distances_floyd_warshall_speedup
igraph_distances_johnson
igraph_ecc
igraph_eccentricity
igraph_eccentricity_dijkstra
igraph_edge_betweenness
igraph_edge_betweenness_subset
igraph_feedback_arc_set
igraph_feedback_vertex_set
igraph_get_all_simple_paths
igraph_get_all_shortest_paths_dijkstra
igraph_get_k_shortest_paths
igraph_get_shortest_paths2
igraph_get_shortest_path_astar
igraph_get_shortest_path_bellman_ford
igraph_get_shortest_paths_bellman_ford
igraph_get_shortest_paths_dijkstra
igraph_graph_center
igraph_has_mutual
igraph_is_bipartite
igraph_is_connected
igraph_is_chordal
igraph_is_clique
igraph_is_complete
igraph_is_dag
igraph_is_mutual
igraph_is_tree
igraph_is_forest
igraph_is_forest2
igraph_joint_degree_distribution
igraph_joint_type_distribution
igraph_is_acyclic
igraph_list_triangles
igraph_local_scan_k_ecount
igraph_local_scan_k_ecount_them
igraph_local_scan_subset_ecount
igraph_local_transitivity
igraph_mean_degree
igraph_neighborhood
igraph_neighborhood_graphs
igraph_neighborhood_size
igraph_pagerank
igraph_path_length_hist
igraph_pseudo_diameter
igraph_pseudo_diameter_dijkstra
igraph_random_walk
igraph_rewire # Uses internal igraph_i_rewire
igraph_rooted_product
igraph_simple_cycles
igraph_similarity
igraph_transitive_closure
igraph_transitivity_avglocal_undirected
igraph_transitivity_barrat
igraph_unfold_tree
igraph_voronoi
igraph_spanner
jdm
knn
minimum_spanning_tree
mycielskian
paths
random_spanning_tree
reachability
rich_club
single_target_shortest_path
topological_sorting
widest_paths
)
add_legacy_tests(
FOLDER tests/regression NAMES
bug_1760
bug_1814
bug_1970
bug_2150
bug_2497
bug_2506
bug_2517
)
# components.at
add_examples(
FOLDER examples/simple NAMES
igraph_biconnected_components
igraph_decompose
igraph_is_biconnected
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_biconnected_components
igraph_bridges
igraph_decompose_strong
igraph_is_biconnected
igraph_subcomponent
)
# layout.at
add_examples(
FOLDER examples/simple NAMES
igraph_layout_reingold_tilford
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_layout_align
igraph_layout_drl
igraph_layout_drl_3d
igraph_layout_bipartite
igraph_layout_fruchterman_reingold
igraph_layout_fruchterman_reingold_3d
igraph_layout_gem
igraph_layout_graphopt
igraph_layout_grid
igraph_layout_kamada_kawai
igraph_layout_lgl
igraph_layout_mds
igraph_layout_merge2
igraph_layout_merge3
igraph_layout_random_3d
igraph_layout_reingold_tilford_circular
igraph_layout_reingold_tilford_extended
igraph_layout_sphere
igraph_layout_star
igraph_layout_sugiyama
igraph_layout_umap
)
add_legacy_tests(
FOLDER tests/regression NAMES
igraph_layout_kamada_kawai_3d_bug_1462
igraph_layout_reingold_tilford_bug_879
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_i_layout_sphere
igraph_layout_davidson_harel # Uses igraph_i_layout_segments_intersect and igraph_i_layout_point_segment_dist2
igraph_layout_merge # Uses igraph_i_layout_merge functions
igraph_i_umap_fit_ab
)
# visitors.at
add_examples(
FOLDER examples/simple NAMES
igraph_bfs
igraph_bfs_callback
igraph_bfs_simple
)
add_legacy_tests(
FOLDER tests/unit NAMES
bfs
bfs_simple
)
# topology.at
add_examples(
FOLDER examples/simple NAMES
igraph_isomorphic_vf2
igraph_subisomorphic_lad
)
add_legacy_tests(
FOLDER tests/unit NAMES
simplify_and_colorize
bliss_automorphisms
igraph_get_isomorphisms_vf2
igraph_get_subisomorphisms_vf2
igraph_isomorphic
igraph_isomorphic_vf2
igraph_subisomorphic
igraph_subisomorphic_lad
igraph_isomorphic_bliss
isomorphism_test
isoclasses
isoclasses2
VF2-compat
)
# coloring.at
add_examples(
FOLDER examples/simple NAMES
coloring
)
add_legacy_tests(
FOLDER tests/unit NAMES
coloring
is_coloring
)
# motifs.at
add_examples(
FOLDER examples/simple NAMES
igraph_motifs_randesu
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_dyad_census
igraph_motifs_randesu
igraph_motifs_randesu_estimate
igraph_motifs_randesu_no
triad_census
)
# foreign.at
add_examples(
FOLDER examples/simple NAMES
dot
foreign
gml
graphml
igraph_read_graph_dl
igraph_read_graph_graphdb
igraph_read_graph_lgl
igraph_write_graph_lgl
igraph_write_graph_pajek
safelocale
)
add_legacy_tests(
FOLDER tests/unit NAMES
foreign_empty
gml
igraph_read_graph_graphdb
igraph_read_graph_graphml
igraph_write_graph_leda
igraph_write_graph_dimacs_flow
igraph_write_graph_dot
lineendings
ncol
pajek
pajek2
pajek_bipartite
pajek_bipartite2
pajek_signed
)
# other.at
add_examples(
FOLDER examples/simple NAMES
igraph_power_law_fit
)
# igraph_power_law_fit() output is only deterministic when running with 1 thread
set_property(TEST example::igraph_power_law_fit APPEND PROPERTY ENVIRONMENT "OMP_NUM_THREADS=1")
add_legacy_tests(
FOLDER tests/unit NAMES
all_almost_e
cmp_epsilon
igraph_almost_equals
igraph_convex_hull_2d
igraph_power_law_fit
overflow
prop_caching
zapsmall
)
# igraph_power_law_fit() output is only deterministic when running with 1 thread
set_property(TEST test::igraph_power_law_fit APPEND PROPERTY ENVIRONMENT "OMP_NUM_THREADS=1")
# operators.at
add_examples(
FOLDER examples/simple NAMES
igraph_complementer
igraph_compose
igraph_contract_vertices
igraph_difference
igraph_disjoint_union
igraph_join
igraph_intersection
igraph_union
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_contract_vertices
igraph_connect_neighborhood
igraph_disjoint_union
igraph_graph_power
igraph_induced_subgraph
igraph_induced_subgraph_map
igraph_induced_subgraph_edges
igraph_intersection
igraph_permute_vertices
igraph_reverse_edges
igraph_rewire_directed_edges
igraph_union
)
# conversion.at
add_examples(
FOLDER examples/simple NAMES
adjlist
igraph_get_laplacian
igraph_get_laplacian_sparse
igraph_to_undirected
)
add_legacy_tests(
FOLDER tests/unit NAMES
adjlist
igraph_adjlist_init_complementer
igraph_adjlist_simplify
igraph_get_adjacency
igraph_get_adjacency_sparse
igraph_get_laplacian
igraph_get_stochastic
igraph_get_stochastic_sparse
igraph_to_directed
igraph_to_prufer
inclist
)
# flow.at
add_examples(
FOLDER examples/simple NAMES
dominator_tree
even_tarjan
flow
flow2
igraph_all_st_mincuts
igraph_mincut
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_all_st_mincuts
igraph_dominator_tree
igraph_st_mincut_value
igraph_vertex_disjoint_paths
igraph_adhesion
igraph_cohesion
igraph_maxflow
igraph_residual_graph
igraph_edge_disjoint_paths
igraph_st_edge_connectivity
igraph_st_mincut
igraph_st_vertex_connectivity
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_all_st_cuts # Uses igraph_marked_queue, which is internal.
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_gomory_hu_tree
)
# community.at
add_examples(
FOLDER examples/simple NAMES
igraph_community_edge_betweenness
igraph_community_fastgreedy
igraph_community_label_propagation
igraph_community_leading_eigenvector
igraph_community_leiden
igraph_community_multilevel
igraph_community_optimal_modularity
walktrap
)
add_legacy_tests(
FOLDER tests/unit NAMES
community_indexing
community_leiden
community_label_propagation
community_label_propagation2
community_label_propagation3
community_walktrap
graphlets
igraph_community_eb_get_merges
igraph_community_edge_betweenness
igraph_community_fastgreedy
igraph_community_fluid_communities
igraph_community_infomap
igraph_community_leading_eigenvector2
igraph_community_optimal_modularity
igraph_community_voronoi
igraph_compare_communities
igraph_le_community_to_membership
igraph_modularity
igraph_modularity_matrix
igraph_reindex_membership
igraph_split_join_distance
levc-stress
null_communities
spinglass
)
add_legacy_tests(
FOLDER tests/regression NAMES
bug-1149658
)
# use a higher test timeout for the Infomap algorithm
set_tests_properties("test::igraph_community_infomap" PROPERTIES TIMEOUT 150)
# cliques.at
add_examples(
FOLDER examples/simple NAMES
igraph_cliques
igraph_independent_sets
igraph_maximal_cliques
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_clique_size_hist
igraph_maximal_cliques
igraph_maximal_cliques2
igraph_maximal_cliques3
igraph_maximal_cliques4
igraph_maximal_cliques_file
igraph_weighted_cliques
maximal_cliques_callback
maximal_cliques_hist
max_results
)
# eigen.at
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_eigen_matrix
igraph_eigen_matrix2
igraph_eigen_matrix3
igraph_eigen_matrix4
igraph_eigen_matrix_symmetric
igraph_eigen_matrix_symmetric_arpack
)
# attributes.at
add_examples(
FOLDER examples/simple NAMES
cattributes
cattributes2
cattributes3
cattributes4
igraph_attribute_combination
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_attribute_combination_remove
cattributes5
cattributes6
)
add_legacy_tests(
FOLDER tests/regression NAMES
cattr_bool_bug
cattr_bool_bug2
)
# arpack.at
add_examples(
FOLDER examples/simple NAMES
blas
blas_dgemm
eigenvector_centrality
igraph_lapack_dgeev
igraph_lapack_dgeevx
igraph_lapack_dgesv
igraph_lapack_dsyevr
)
add_legacy_tests(
FOLDER tests/unit NAMES
dgemv
igraph_arpack_rnsolve
igraph_arpack_unpack_complex
igraph_blas_dgemm
igraph_eigenvector_centrality
igraph_lapack_dgeev
igraph_lapack_dgeevx
igraph_lapack_dgehrd
igraph_lapack_dgetrf
igraph_lapack_dgetrs
igraph_lapack_dsyevr
)
# bipartite.at
add_examples(
FOLDER examples/simple NAMES
igraph_bipartite_create
igraph_bipartite_projection
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_bipartite_create
igraph_bipartite_projection
igraph_biadjacency
igraph_get_biadjacency
igraph_weighted_biadjacency
)
# centralization.at
add_examples(
FOLDER examples/simple NAMES
centralization
)
add_legacy_tests(
FOLDER tests/unit NAMES
centralization
)
# eulerian.at
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_is_eulerian
igraph_eulerian_cycle
igraph_eulerian_path
igraph_find_cycle
)
# separators.at
add_examples(
FOLDER examples/simple NAMES
cohesive_blocks
igraph_is_minimal_separator
igraph_is_separator
igraph_minimal_separators
igraph_minimum_size_separators
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_is_separator
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_cohesive_blocks
igraph_minimum_size_separators
)
add_legacy_tests(
FOLDER tests/regression NAMES
bug-1033045
)
# hrg.at
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_hrg
igraph_hrg2
igraph_hrg3
igraph_hrg_create
)
# mt.at -- only if we have pthreads
if(CMAKE_USE_PTHREADS_INIT)
add_legacy_tests(
FOLDER tests/unit NAMES tls1
LIBRARIES Threads::Threads
)
# tls2 should be added only if we use vendored ARPACK because a non-vendored
# ARPACK is not guaranteed to be thread-safe
if(ARPACK_IS_VENDORED AND NOT BUILD_SHARED_LIBS)
add_legacy_tests(
FOLDER tests/unit NAMES tls2
LIBRARIES Threads::Threads
)
endif()
endif()
# random.at
add_examples(
FOLDER examples/simple NAMES
igraph_fisher_yates_shuffle
igraph_random_sample
random_seed
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_random_sample
igraph_rng_get_integer
random_sampling
rng_reproducibility
rng_init_destroy_max_bits_name_set_default
)
# qsort.at
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_qsort
igraph_qsort_r
)
# matching.at
add_examples(
FOLDER examples/simple NAMES
igraph_maximum_bipartite_matching
)
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_maximum_bipartite_matching
)
# embedding.at
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_adjacency_spectral_embedding
)
# graphicality
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_is_graphical
igraph_is_bigraphical
igraph_realize_bipartite_degree_sequence
)
# spatial
add_legacy_tests(
FOLDER tests/unit NAMES
beta_skeletons
igraph_delaunay_graph
igraph_nearest_neighbor_graph
igraph_spatial_edge_lengths
)
# cycle bases
add_legacy_tests(
FOLDER tests/unit NAMES
cycle_bases
)
# handlers
add_legacy_tests(
FOLDER tests/unit NAMES
fatal_handler
igraph_progress_handler_stderr
igraph_set_progress_handler
)
# error output
add_legacy_tests(
FOLDER tests/unit NAMES
error_macros
)
# GLPK
add_legacy_tests(
FOLDER tests/unit NAMES
glpk_error
)
# regression and fuzzing tests
add_legacy_tests(
FOLDER tests/regression NAMES
igraph_read_graph_gml_invalid_inputs
igraph_read_graph_graphml_invalid_inputs
igraph_read_graph_pajek_invalid_inputs
)
# non-graph
add_legacy_tests(
FOLDER tests/unit NAMES
expand_path_to_pairs
igraph_running_mean
igraph_solve_lsap
)
# memory allocation
add_legacy_tests(
FOLDER tests/unit NAMES
zero_allocs
)
# simulation
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_sir
)
# benchmarks
add_benchmarks(
NAMES
community
connectivity
erdos_renyi
graphicality
igraph_adjacency
igraph_average_path_length_unweighted
beta_skeletons
igraph_betweenness
igraph_betweenness_weighted
igraph_cliques
igraph_closeness_weighted
coloring
igraph_decompose
igraph_degree
igraph_degree_sequence_game
igraph_delaunay_graph
igraph_distances
igraph_ecc
igraph_induced_subgraph
igraph_induced_subgraph_edges
igraph_layout_umap
igraph_matrix_transpose
igraph_maximal_cliques
igraph_nearest_neighbor_graph
igraph_neighborhood
igraph_pagerank
igraph_pagerank_weighted
igraph_power_law_fit
igraph_qsort
igraph_random_walk
igraph_realize_degree_sequence
igraph_rewire
igraph_strength
igraph_transitivity
igraph_tree_game
igraph_vertex_connectivity
igraph_voronoi
inc_vs_adj
intersection
lad
modularity
spanning_tree
)
# sampling
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_rng_sample_dirichlet
igraph_rng_sample_sphere
)
# lattices
add_legacy_tests(
FOLDER tests/unit NAMES
igraph_triangular_lattice
igraph_hexagonal_lattice
)
# percolation
add_legacy_tests(
FOLDER tests/unit NAMES
percolation
)