function(add_component_example name source target)
    if(NOT TARGET ${target})
        return()
    endif()
    add_executable(${name} ${source})
    target_link_libraries(${name} PRIVATE ${target})
    add_test(NAME ${name} COMMAND ${name} ${ARGN})
endfunction()

add_component_example(example01 example01.cpp gmpxx_mkII)
add_component_example(example02_mpf example02_mpf.cpp gmpxx_mkII)
add_component_example(example02_mpfr example02_mpfr.cpp mpfrxx_mkII)
add_component_example(example02_mpc example02_mpc.cpp mpcxx_mkII)
add_component_example(example03_mpf example03_mpf.cpp gmpxx_mkII)
add_component_example(example03_mpfr example03_mpfr.cpp mpfrxx_mkII)
add_component_example(example03_mpfc example03_mpfc.cpp gmpxx_mkII)
add_component_example(example04_mpf example04_mpf.cpp gmpxx_mkII)
add_component_example(example04_mpfr example04_mpfr.cpp mpfrxx_mkII)
add_component_example(example05_mpf example05_mpf.cpp gmpxx_mkII)
add_component_example(example05_mpfr example05_mpfr.cpp mpfrxx_mkII)
add_component_example(example06_mpfc example06_mpfc.cpp gmpxx_mkII)
add_component_example(example06_mpc example06_mpc.cpp mpcxx_mkII)
add_component_example(example07_mpfc example07_mpfc.cpp gmpxx_mkII --width 24 --height 10 --iterations 24)
add_component_example(example07_mpc example07_mpc.cpp mpcxx_mkII --width 24 --height 10 --iterations 24)
add_component_example(example08_mpfc example08_mpfc.cpp gmpxx_mkII)
add_component_example(example08_mpc example08_mpc.cpp mpcxx_mkII)
add_component_example(example09_mpfc example09_mpfc.cpp gmpxx_mkII)
add_component_example(example09_mpc example09_mpc.cpp mpcxx_mkII)
add_component_example(example10_mpf example10_mpf.cpp gmpxx_mkII)
add_component_example(example10_mpfr example10_mpfr.cpp mpfrxx_mkII)
add_component_example(example11_mpf example11_mpf.cpp gmpxx_mkII)
add_component_example(example11_mpfr example11_mpfr.cpp mpfrxx_mkII)
add_component_example(example12_mpf example12_mpf.cpp gmpxx_mkII)
add_component_example(example12_mpfr example12_mpfr.cpp mpfrxx_mkII)
add_component_example(example13_mpf example13_mpf.cpp gmpxx_mkII)
add_component_example(example13_mpfr example13_mpfr.cpp mpfrxx_mkII)
add_component_example(example14_mpf example14_mpf.cpp gmpxx_mkII)
add_component_example(example14_mpfr example14_mpfr.cpp mpfrxx_mkII)
add_component_example(example15_mpf example15_mpf.cpp gmpxx_mkII --digits 32)
add_component_example(example15_mpfr example15_mpfr.cpp mpfrxx_mkII --digits 32)
add_component_example(example16_mpf_thread_context example16_mpf_thread_context.cpp gmpxx_mkII_default_context_provider)
add_component_example(example16_mpfr_thread_context example16_mpfr_thread_context.cpp mpfrxx_mkII)

if(TARGET example15_mpf)
    add_test(NAME example15_mpf_bbp COMMAND example15_mpf --constant pi --start 16 --digits 16 --method bbp)
endif()
if(TARGET example15_mpfr)
    add_test(NAME example15_mpfr_bbp COMMAND example15_mpfr --constant pi --start 16 --digits 16 --method bbp)
endif()
