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
  COMMAND true
  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
  heap
  igraph_array
  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_view
  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_qsort_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_i_incident
  igraph_i_neighbors
  igraph_neighbors
)

# iterators.at
add_examples(
  FOLDER examples/simple NAMES
  igraph_es_pairs
  igraph_vs_nonadj
  igraph_vs_seq
  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_adjacency
  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_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_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_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
  components
  coreness
  efficiency
  global_transitivity
  harmonic_centrality
  hub_and_authority
  igraph_adjacent_triangles
  igraph_are_connected
  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_undirected
  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_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_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_similarity
  igraph_transitive_closure_dag
  igraph_transitivity_avglocal_undirected
  igraph_transitivity_barrat
  igraph_unfold_tree
  igraph_voronoi
  igraph_widest_paths
  igraph_spanner
  knn
  random_spanning_tree
  single_target_shortest_path
  topological_sorting
)

add_legacy_tests(
  FOLDER tests/regression NAMES
  bug_1760
  bug_1814
  bug_1970
  bug_2150
)

# components.at
add_examples(
  FOLDER examples/simple NAMES
  igraph_biconnected_components
  igraph_decompose
)

add_legacy_tests(
  FOLDER tests/unit NAMES
  igraph_bridges
  igraph_decompose_strong
  igraph_subcomponent
)

# layout.at
add_examples(
  FOLDER examples/simple NAMES
  igraph_layout_reingold_tilford
)

add_legacy_tests(
  FOLDER tests/unit NAMES
  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
  igraph_coloring
)

add_legacy_tests(
  FOLDER tests/unit NAMES
  igraph_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
  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_difference
  igraph_disjoint_union
  igraph_intersection
  igraph_union
)

add_legacy_tests(
  FOLDER tests/unit NAMES
  igraph_contract_vertices
  igraph_connect_neighborhood
  igraph_graph_power
  igraph_induced_subgraph
  igraph_induced_subgraph_map
  igraph_induced_subgraph_edges
  igraph_intersection2
  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_voronoi
  igraph_compare_communities
  igraph_le_community_to_membership
  igraph_modularity
  igraph_modularity_matrix
  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
)

# 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
)

# 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
)

# 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_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
)

# microscopic.at
add_examples(
  FOLDER examples/simple NAMES
  igraph_deterministic_optimal_imitation
  igraph_roulette_wheel_imitation
  igraph_stochastic_imitation
)

add_legacy_tests(
  FOLDER tests/unit NAMES
  igraph_deterministic_optimal_imitation
  igraph_moran_process
  igraph_roulette_wheel_imitation
  igraph_stochastic_imitation
)

# 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
)

# 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
  igraph_average_path_length_unweighted
  igraph_betweenness
  igraph_betweenness_weighted
  igraph_cliques
  igraph_closeness_weighted
  igraph_coloring
  igraph_decompose
  igraph_degree
  igraph_degree_sequence_game
  igraph_distances
  igraph_ecc
  igraph_induced_subgraph_edges
  igraph_layout_umap
  igraph_matrix_transpose
  igraph_maximal_cliques
  igraph_neighborhood
  igraph_pagerank
  igraph_pagerank_weighted
  igraph_power_law_fit
  igraph_qsort
  igraph_random_walk
  igraph_transitivity
  igraph_vertex_connectivity
  igraph_voronoi
  inc_vs_adj
)

# dot product
add_legacy_tests(
  FOLDER tests/unit NAMES
  igraph_sample_dirichlet
  igraph_sample_sphere
)

# lattices
add_legacy_tests(
  FOLDER tests/unit NAMES
  igraph_triangular_lattice
  igraph_hexagonal_lattice
)

add_legacy_tests(
        FOLDER tests/unit NAMES
        jdm
)
