blob: 28cdf7b6ec2a7ffe09850327323755d5a1607dd9 [file] [log] [blame]
/*!
* Copyright (c) 2017 by Contributors
* \file test_main.cc
* \brief operator unit test utility functions
* \author Chris Olivier
*/
#include <gtest/gtest.h>
#include "mxnet/base.h"
#ifdef USE_BREAKPAD
#include <breakpad/client/linux/handler/exception_handler.h>
static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
void* context, bool succeeded) {
printf("Dump path: %s\n", descriptor.path());
return succeeded;
}
#endif
namespace mxnet { namespace test {
bool unitTestsWithCuda = false;
#ifdef NDEBUG
bool debugOutput = false;
#else
bool debugOutput = false;
#endif
}}
#if MXNET_USE_CUDA
static bool checkForWorkingCuda() {
int count = 0;
if (cudaSuccess == cudaGetDeviceCount(&count)) {
if (count == 0) return -1;
for (int device = 0; device < count; ++device) {
cudaDeviceProp prop;
if (cudaSuccess == cudaGetDeviceProperties(&prop, device)) {
std::printf("%d.%d ", prop.major, prop.minor);
return true;
}
}
}
std::fprintf(stderr, "Warning: Could not find working CUDA driver\n");
return false;
}
#else
static bool checkForWorkingCuda() {
return false;
}
#endif
int main(int argc, char ** argv) {
#ifdef USE_BREAKPAD
google_breakpad::MinidumpDescriptor descriptor("/tmp");
google_breakpad::ExceptionHandler eh(descriptor, NULL, dumpCallback, NULL, true, -1);
#endif
testing::InitGoogleTest(&argc, argv);
testing::FLAGS_gtest_death_test_style = "threadsafe";
mxnet::test::unitTestsWithCuda = checkForWorkingCuda(); // auto-determine
for (int x = 1; x < argc; ++x) {
// force checks with CUDA
if (!strcmp(argv[x], "--with-cuda")) {
// override (ie force attempt CUDA)
mxnet::test::unitTestsWithCuda = true;
} else if (!strcmp(argv[x], "--debug")) {
mxnet::test::debugOutput = true;
}
}
std::cout << std::endl << std::flush;
return RUN_ALL_TESTS();
}