add_executable(name name.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(name ${EXTRA_LIBS})
add_test(name "${CMAKE_CURRENT_BINARY_DIR}/name")
add_executable(sequence sequence.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(sequence ${EXTRA_LIBS})
add_test(sequence "${CMAKE_CURRENT_BINARY_DIR}/sequence")
add_executable(sexpr_tst sexpr.cpp $<TARGET_OBJECTS:util> $<TARGET_OBJECTS:numerics> $<TARGET_OBJECTS:sexpr>)
target_link_libraries(sexpr_tst ${EXTRA_LIBS})
add_test(sexpr "${CMAKE_CURRENT_BINARY_DIR}/sexpr_tst")
add_executable(format format.cpp $<TARGET_OBJECTS:util> $<TARGET_OBJECTS:numerics> $<TARGET_OBJECTS:sexpr>)
target_link_libraries(format ${EXTRA_LIBS})
add_test(format "${CMAKE_CURRENT_BINARY_DIR}/format")
add_executable(buffer buffer.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(buffer ${EXTRA_LIBS})
add_test(buffer "${CMAKE_CURRENT_BINARY_DIR}/buffer")
add_executable(list list.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(list ${EXTRA_LIBS})
add_test(list "${CMAKE_CURRENT_BINARY_DIR}/list")
add_executable(scoped_set scoped_set.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(scoped_set ${EXTRA_LIBS})
add_test(scoped_set "${CMAKE_CURRENT_BINARY_DIR}/scoped_set")
add_executable(options options.cpp $<TARGET_OBJECTS:util> $<TARGET_OBJECTS:numerics> $<TARGET_OBJECTS:sexpr>)
target_link_libraries(options ${EXTRA_LIBS})
add_test(options "${CMAKE_CURRENT_BINARY_DIR}/options")
add_executable(scoped_map scoped_map.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(scoped_map ${EXTRA_LIBS})
add_test(scoped_map "${CMAKE_CURRENT_BINARY_DIR}/scoped_map")
add_executable(memory memory.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(memory ${EXTRA_LIBS})
add_test(memory "${CMAKE_CURRENT_BINARY_DIR}/memory")
add_executable(rb_tree rb_tree.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(rb_tree ${EXTRA_LIBS})
add_test(rb_tree "${CMAKE_CURRENT_BINARY_DIR}/rb_tree")
add_executable(rb_map rb_map.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(rb_map ${EXTRA_LIBS})
add_test(rb_map "${CMAKE_CURRENT_BINARY_DIR}/rb_map")
add_executable(splay_tree splay_tree.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(splay_tree ${EXTRA_LIBS})
add_test(splay_tree "${CMAKE_CURRENT_BINARY_DIR}/splay_tree")
add_executable(splay_map splay_map.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(splay_map ${EXTRA_LIBS})
add_test(splay_map "${CMAKE_CURRENT_BINARY_DIR}/splay_map")
add_executable(trace trace.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(trace ${EXTRA_LIBS})
add_test(trace "${CMAKE_CURRENT_BINARY_DIR}/trace")
add_executable(exception exception.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(exception ${EXTRA_LIBS})
add_test(exception "${CMAKE_CURRENT_BINARY_DIR}/exception")
add_executable(bit_tricks bit_tricks.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(bit_tricks ${EXTRA_LIBS})
add_test(bit_tricks "${CMAKE_CURRENT_BINARY_DIR}/bit_tricks")
add_executable(lazy_list lazy_list.cpp  $<TARGET_OBJECTS:util> $<TARGET_OBJECTS:numerics>)
target_link_libraries(lazy_list ${EXTRA_LIBS})
add_test(lazy_list "${CMAKE_CURRENT_BINARY_DIR}/lazy_list")
add_executable(hash hash.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(hash ${EXTRA_LIBS})
add_test(hash "${CMAKE_CURRENT_BINARY_DIR}/hash")
add_executable(safe_arith safe_arith.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(safe_arith ${EXTRA_LIBS})
add_test(safe_arith "${CMAKE_CURRENT_BINARY_DIR}/safe_arith")
add_executable(set set.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(set ${EXTRA_LIBS})
add_test(set "${CMAKE_CURRENT_BINARY_DIR}/set")
add_executable(optional optional.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(optional ${EXTRA_LIBS})
add_test(optional "${CMAKE_CURRENT_BINARY_DIR}/optional")
add_executable(stackinfo stackinfo.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(stackinfo ${EXTRA_LIBS})
add_test(stackinfo "${CMAKE_CURRENT_BINARY_DIR}/stackinfo")
add_executable(serializer serializer.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(serializer ${EXTRA_LIBS})
add_test(serializer "${CMAKE_CURRENT_BINARY_DIR}/serializer")
add_executable(trie trie.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(trie ${EXTRA_LIBS})
add_test(trie "${CMAKE_CURRENT_BINARY_DIR}/trie")
add_executable(lru_cache lru_cache.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(lru_cache ${EXTRA_LIBS})
add_test(lru_cache "${CMAKE_CURRENT_BINARY_DIR}/lru_cache")
add_executable(worker_queue worker_queue.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(worker_queue ${EXTRA_LIBS})
add_test(worker_queue "${CMAKE_CURRENT_BINARY_DIR}/worker_queue")
# thread.cpp used import_test.lua
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/import_test.lua"
  COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/import_test.lua" "${CMAKE_CURRENT_BINARY_DIR}/import_test.lua"
  DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/import_test.lua")
add_custom_target("import_test" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/import_test.lua")
add_executable(thread thread.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(thread ${EXTRA_LIBS})
add_test(thread "${CMAKE_CURRENT_BINARY_DIR}/thread")
add_dependencies(thread import_test)
add_executable(bitap_fuzzy_search bitap_fuzzy_search.cpp $<TARGET_OBJECTS:util>)
target_link_libraries(bitap_fuzzy_search ${EXTRA_LIBS})
add_test(bitap_fuzzy_search "${CMAKE_CURRENT_BINARY_DIR}/bitap_fuzzy_search")
