include(GUDHI_boost_test)

### Column Tests

# Base columns

add_executable(Persistence_matrix_test_persistence_matrix_column_base_z2_no_row test_persistence_matrix_column_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_base_z2_no_row PUBLIC -DPM_TEST_Z2 -DPM_TEST_NO_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_base_z2_no_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_base_z2_with_row test_persistence_matrix_column_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_base_z2_with_row PUBLIC -DPM_TEST_Z2)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_base_z2_with_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_base_z2_with_rem_row test_persistence_matrix_column_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_base_z2_with_rem_row PUBLIC -DPM_TEST_Z2 -DPM_TEST_REM_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_base_z2_with_rem_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_base_z5_no_row test_persistence_matrix_column_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_base_z5_no_row PUBLIC -DPM_TEST_Z5 -DPM_TEST_NO_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_base_z5_no_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_base_z5_with_row test_persistence_matrix_column_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_base_z5_with_row PUBLIC -DPM_TEST_Z5)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_base_z5_with_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_base_z5_with_rem_row test_persistence_matrix_column_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_base_z5_with_rem_row PUBLIC -DPM_TEST_Z5 -DPM_TEST_REM_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_base_z5_with_rem_row)

# Boundary columns

add_executable(Persistence_matrix_test_persistence_matrix_column_boundary_z2_no_row test_persistence_matrix_column_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_boundary_z2_no_row PUBLIC -DPM_TEST_Z2 -DPM_TEST_NO_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_boundary_z2_no_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_boundary_z2_with_row test_persistence_matrix_column_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_boundary_z2_with_row PUBLIC -DPM_TEST_Z2)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_boundary_z2_with_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_boundary_z2_with_rem_row test_persistence_matrix_column_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_boundary_z2_with_rem_row PUBLIC -DPM_TEST_Z2 -DPM_TEST_REM_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_boundary_z2_with_rem_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_boundary_z5_no_row test_persistence_matrix_column_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_boundary_z5_no_row PUBLIC -DPM_TEST_Z5 -DPM_TEST_NO_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_boundary_z5_no_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_boundary_z5_with_row test_persistence_matrix_column_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_boundary_z5_with_row PUBLIC -DPM_TEST_Z5)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_boundary_z5_with_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_boundary_z5_with_rem_row test_persistence_matrix_column_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_boundary_z5_with_rem_row PUBLIC -DPM_TEST_Z5 -DPM_TEST_REM_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_boundary_z5_with_rem_row)

# Chain columns

add_executable(Persistence_matrix_test_persistence_matrix_column_chain_z2_no_row test_persistence_matrix_column_chain.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_chain_z2_no_row PUBLIC -DPM_TEST_Z2 -DPM_TEST_NO_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_chain_z2_no_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_chain_z2_with_row test_persistence_matrix_column_chain.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_chain_z2_with_row PUBLIC -DPM_TEST_Z2)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_chain_z2_with_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_chain_z2_with_rem_row test_persistence_matrix_column_chain.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_chain_z2_with_rem_row PUBLIC -DPM_TEST_Z2 -DPM_TEST_REM_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_chain_z2_with_rem_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_chain_z5_no_row test_persistence_matrix_column_chain.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_chain_z5_no_row PUBLIC -DPM_TEST_Z5 -DPM_TEST_NO_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_chain_z5_no_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_chain_z5_with_row test_persistence_matrix_column_chain.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_chain_z5_with_row PUBLIC -DPM_TEST_Z5)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_chain_z5_with_row)

add_executable(Persistence_matrix_test_persistence_matrix_column_chain_z5_with_rem_row test_persistence_matrix_column_chain.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_column_chain_z5_with_rem_row PUBLIC -DPM_TEST_Z5 -DPM_TEST_REM_ROW)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_column_chain_z5_with_rem_row)

### Matrix Tests

set(COL_TYPE -DPM_TEST_INTR_LIST)
set(TEST_ALL -DPM_TEST_ALL=0)
set(COMP_ALL FALSE)

# Base matrices

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_base test_persistence_matrix_matrix_z2_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_base PUBLIC ${COL_TYPE} ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_base)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_base test_persistence_matrix_matrix_zp_base.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_base PUBLIC ${COL_TYPE} ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_base)

# Base matrices with column compression

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_compression test_persistence_matrix_matrix_z2_compression.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_compression PUBLIC ${COL_TYPE})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_compression)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_compression test_persistence_matrix_matrix_zp_compression.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_compression PUBLIC ${COL_TYPE})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_compression)

# Boundary matrices

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_boundary_pos_idx test_persistence_matrix_matrix_z2_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_boundary_pos_idx PUBLIC ${COL_TYPE} ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_boundary_pos_idx)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_boundary_pos_idx test_persistence_matrix_matrix_zp_boundary.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_boundary_pos_idx PUBLIC ${COL_TYPE} ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_boundary_pos_idx)

if(COMP_ALL)
  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_boundary_id_idx test_persistence_matrix_matrix_z2_boundary.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_boundary_id_idx PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_boundary_id_idx)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_boundary_id_idx test_persistence_matrix_matrix_zp_boundary.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_boundary_id_idx PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_boundary_id_idx)
endif()

# RU matrices

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_no_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_no_barcode_no_max_dim PUBLIC ${COL_TYPE} ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_no_barcode_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_no_barcode_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_no_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_no_barcode_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_barcode_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_barcode_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE -DPM_TEST_MAX_DIM ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_pos_idx_barcode_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_no_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_no_barcode_no_max_dim PUBLIC ${COL_TYPE})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_no_barcode_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_no_barcode_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_no_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_no_barcode_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_barcode_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_barcode_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_pos_idx_barcode_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_no_barcode_no_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_no_barcode_no_max_dim PUBLIC ${COL_TYPE})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_no_barcode_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_no_barcode_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_no_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_no_barcode_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_barcode_no_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_barcode_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_barcode_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_pos_idx_barcode_max_dim)

if(COMP_ALL)
  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_no_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_no_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_no_barcode_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_no_barcode_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_no_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_no_barcode_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_barcode_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_barcode_max_dim test_persistence_matrix_matrix_z2_ru_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE -DPM_TEST_MAX_DIM ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_vine_id_idx_barcode_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_no_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_no_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_no_barcode_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_no_barcode_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_no_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_no_barcode_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_barcode_no_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_barcode_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_barcode_max_dim test_persistence_matrix_matrix_z2_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_ru_rep_id_idx_barcode_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_no_barcode_no_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_no_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_no_barcode_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_no_barcode_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_no_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_no_barcode_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_barcode_no_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_barcode_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_barcode_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_barcode_max_dim test_persistence_matrix_matrix_zp_ru_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_barcode_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_ru_rep_id_idx_barcode_max_dim)
endif()

# Chain matrices

if(COMP_ALL)
  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_no_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_BARCODE)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM -DPM_TEST_BARCODE ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_no_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_REM_COL -DPM_TEST_BARCODE ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_REM_COL -DPM_TEST_MAX_DIM -DPM_TEST_BARCODE ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_no_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_no_max_dim_no_barcode PUBLIC ${COL_TYPE})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_no_max_dim_no_barcode)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_no_rem_col_max_dim_no_barcode)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_no_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_no_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_REM_COL)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_no_max_dim_no_barcode)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_REM_COL -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_pos_idx_rem_col_max_dim_no_barcode)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_pos_idx_col_no_max_dim test_persistence_matrix_matrix_z2_chain_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_pos_idx_col_no_max_dim PUBLIC ${COL_TYPE} ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_pos_idx_col_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_pos_idx_col_max_dim test_persistence_matrix_matrix_z2_chain_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_pos_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_pos_idx_col_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_pos_idx_col_no_max_dim test_persistence_matrix_matrix_zp_chain_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_pos_idx_col_no_max_dim PUBLIC ${COL_TYPE} ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_pos_idx_col_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_pos_idx_col_max_dim test_persistence_matrix_matrix_zp_chain_rep.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_pos_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM ${TEST_ALL})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_pos_idx_col_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_pos_idx_col_no_max_dim test_persistence_matrix_matrix_z2_chain_barcode.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_pos_idx_col_no_max_dim PUBLIC ${COL_TYPE})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_pos_idx_col_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_pos_idx_col_max_dim test_persistence_matrix_matrix_z2_chain_barcode.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_pos_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_pos_idx_col_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_pos_idx_col_no_max_dim test_persistence_matrix_matrix_zp_chain_barcode.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_pos_idx_col_no_max_dim PUBLIC ${COL_TYPE})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_pos_idx_col_no_max_dim)

  add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_pos_idx_col_max_dim test_persistence_matrix_matrix_zp_chain_barcode.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_pos_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_MAX_DIM)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_pos_idx_col_max_dim)
endif()

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_no_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_BARCODE ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM -DPM_TEST_BARCODE ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_no_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_REM_COL -DPM_TEST_BARCODE ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_max_dim test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_REM_COL -DPM_TEST_MAX_DIM -DPM_TEST_BARCODE ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_no_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_no_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_no_max_dim_no_barcode)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_no_rem_col_max_dim_no_barcode)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_no_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_no_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_REM_COL)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_no_max_dim_no_barcode)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_max_dim_no_barcode test_persistence_matrix_matrix_z2_chain_vine.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_max_dim_no_barcode PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_REM_COL -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_vine_id_idx_rem_col_max_dim_no_barcode)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_id_idx_col_no_max_dim test_persistence_matrix_matrix_z2_chain_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_id_idx_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_id_idx_col_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_id_idx_col_max_dim test_persistence_matrix_matrix_z2_chain_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_id_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_rep_id_idx_col_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_id_idx_col_no_max_dim test_persistence_matrix_matrix_zp_chain_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_id_idx_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_id_idx_col_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_id_idx_col_max_dim test_persistence_matrix_matrix_zp_chain_rep.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_id_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM ${TEST_ALL})
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_rep_id_idx_col_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_id_idx_col_no_max_dim test_persistence_matrix_matrix_z2_chain_barcode.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_id_idx_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_id_idx_col_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_id_idx_col_max_dim test_persistence_matrix_matrix_z2_chain_barcode.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_id_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_z2_chain_barcode_id_idx_col_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_id_idx_col_no_max_dim test_persistence_matrix_matrix_zp_chain_barcode.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_id_idx_col_no_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_id_idx_col_no_max_dim)

add_executable(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_id_idx_col_max_dim test_persistence_matrix_matrix_zp_chain_barcode.cpp)
target_compile_options(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_id_idx_col_max_dim PUBLIC ${COL_TYPE} -DPM_TEST_ID_IDX -DPM_TEST_MAX_DIM)
gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_matrix_zp_chain_barcode_id_idx_col_max_dim)

### Field Tests

if(GMP_FOUND AND GMPXX_FOUND)
  add_executable(Persistence_matrix_test_persistence_matrix_field test_persistence_matrix_field.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_field PUBLIC -DPM_GMP_FOUND)
  target_link_libraries(Persistence_matrix_test_persistence_matrix_field ${GMPXX_LIBRARIES} ${GMP_LIBRARIES})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_field)

  add_executable(Persistence_matrix_test_persistence_matrix_field_operators test_persistence_matrix_field_operators.cpp)
  target_compile_options(Persistence_matrix_test_persistence_matrix_field_operators PUBLIC -DPM_GMP_FOUND)
  target_link_libraries(Persistence_matrix_test_persistence_matrix_field_operators ${GMPXX_LIBRARIES} ${GMP_LIBRARIES})
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_field_operators)
else()
  add_executable(Persistence_matrix_test_persistence_matrix_field test_persistence_matrix_field.cpp)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_field)

  add_executable(Persistence_matrix_test_persistence_matrix_field_operators test_persistence_matrix_field_operators.cpp)
  gudhi_add_boost_test(Persistence_matrix_test_persistence_matrix_field_operators)
endif()



