gtests = {
  'cancel': [stdplus_dep, gtest_main_dep],
  'exception': [stdplus_dep, gtest_main_dep],
  'function_view': [stdplus_dep, gtest_main_dep],
  'handle/copyable': [stdplus_dep, gtest_main_dep],
  'handle/managed': [stdplus_dep, gtest_main_dep],
  'hash': [stdplus_dep, gtest_main_dep],
  'hash/array': [stdplus_dep, gtest_main_dep],
  'hash/tuple': [stdplus_dep, gtest_main_dep],
  'net/addr/ether': [stdplus_dep, gtest_main_dep],
  'net/addr/ip': [stdplus_dep, gtest_main_dep],
  'net/addr/sock': [stdplus_dep, gtest_main_dep],
  'net/addr/subnet': [stdplus_dep, gtest_main_dep],
  'numeric/endian': [stdplus_dep, gtest_main_dep],
  'numeric/str': [stdplus_dep, gtest_main_dep],
  'pinned': [stdplus_dep, gtest_main_dep],
  'print': [stdplus_dep, gtest_main_dep],
  'raw': [stdplus_dep, gmock_dep, gtest_main_dep],
  'signal': [stdplus_dep, gtest_main_dep],
  'str/buf': [stdplus_dep, gtest_main_dep],
  'str/cat': [stdplus_dep, gtest_main_dep],
  'str/cexpr': [stdplus_dep, gtest_main_dep],
  'str/conv': [stdplus_dep, gmock_dep, gtest_main_dep],
  'str/maps': [stdplus_dep, gmock_dep, gtest_main_dep],
  'util/cexec': [stdplus_dep, gtest_main_dep],
  'variant': [stdplus_dep, gtest_main_dep],
  'zstring': [stdplus_dep, gtest_main_dep],
  'zstring_view': [stdplus_dep, gtest_main_dep],
}

if has_dl
  gtests += {
    'dl': [stdplus_dl_dep, gtest_main_dep],
  }
elif build_tests.enabled()
  error('Not testing libdl feature')
else
  warning('Not testing libdl feature')
endif

if has_fd
  gtests += {
    'fd/dupable': [stdplus_fd_dep],
    'fd/managed': [stdplus_fd_dep],
    'fd/fmt': [stdplus_fd_dep, stdplus_dep, gtest_main_dep],
    'fd/intf': [stdplus_fd_dep],
    'fd/impl': [stdplus_fd_dep],
    'fd/line': [stdplus_fd_dep, stdplus_dep, gmock_dep, gtest_main_dep],
    'fd/mmap': [stdplus_fd_dep, gtest_main_dep],
    'fd/mock': [stdplus_fd_dep, gmock_dep, gtest_main_dep],
    'fd/ops': [stdplus_fd_dep, stdplus_dep, gmock_dep, gtest_main_dep],
  }
  if has_gtest
    gtests += {
      'fd/atomic': [stdplus_fd_dep, stdplus_gtest_dep, gtest_main_dep],
    }
  elif build_tests.enabled()
    error('Not testing fd/atomic feature')
  else
    warning('Not testing fd/atomic feature')
  endif
elif build_tests.enabled()
  error('Not testing file descriptor feature')
else
  warning('Not testing file descriptor feature')
endif

if has_io_uring
  gtests += {
    'io_uring': [stdplus_io_uring_dep, stdplus_dep, gmock_dep, gtest_main_dep],
  }
elif build_tests.enabled()
  error('Not testing io_uring feature')
else
  warning('Not testing io_uring feature')
endif

if has_gtest
  gtests += {
    'gtest/tmp': [stdplus_gtest_dep, gtest_main_dep],
  }
elif build_tests.enabled()
  error('Not testing gtest lib feature')
else
  warning('Not testing gtest lib feature')
endif

add_test_setup(
  'stdplus',
  exe_wrapper: run_with_tmp,
  env: {'TMPTMPL': 'stdplus-test.XXXXXXXXXX'},
  is_default: true)

add_test_setup(
  'valgrind',
  exe_wrapper: [run_with_tmp, 'valgrind'],
  env: {'TMPTMPL': 'stdplus-test.XXXXXXXXXX'})

if gtest_dep.found() and gmock_dep.found()
  foreach t, deps : gtests
    test(
      t,
      executable(
        t.underscorify(), t + '.cpp',
        build_by_default: false,
        implicit_include_directories: false,
        cpp_args: '-Wno-missing-braces',
        dependencies: deps))
  endforeach
endif
