Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions cpp/cmake_modules/ThirdpartyToolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2765,11 +2765,20 @@ if(ARROW_TESTING)
set(ARROW_GTEST_GMOCK_MAIN GTest::gmock_main)
else()
string(APPEND ARROW_TESTING_PC_CFLAGS " -I\${includedir}/arrow-gtest")
string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gtest")
if(MSVC)
# Google Mock DLLs embed GoogleTest on MSVC. Helpers and runners must use
# the same DLL so assertion failures reach the active test reporter.
string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gmock_main")
set(ARROW_GTEST_GMOCK arrow::GTest::gmock_main)
set(ARROW_GTEST_GTEST arrow::GTest::gmock_main)
set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gmock_main)
else()
string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gtest")
set(ARROW_GTEST_GMOCK arrow::GTest::gmock)
set(ARROW_GTEST_GTEST arrow::GTest::gtest)
set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gtest_main)
endif()
set(ARROW_GTEST_GTEST_HEADERS arrow::GTest::gtest_headers)
set(ARROW_GTEST_GMOCK arrow::GTest::gmock)
set(ARROW_GTEST_GTEST arrow::GTest::gtest)
set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gtest_main)
set(ARROW_GTEST_GMOCK_MAIN arrow::GTest::gmock_main)
endif()
endif()
Expand Down
3 changes: 3 additions & 0 deletions cpp/src/arrow/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -742,6 +742,9 @@ set(ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS Arrow::arrow_static)
if(GTest_SOURCE STREQUAL "SYSTEM")
list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ${ARROW_GTEST_GTEST})
list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_GTEST_GTEST})
elseif(MSVC)
list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ArrowTesting::gmock_main)
list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ArrowTesting::gmock_main)
else()
list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ArrowTesting::gtest)
list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ArrowTesting::gtest)
Expand Down
13 changes: 7 additions & 6 deletions cpp/src/arrow/scalar_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -585,8 +585,9 @@ TEST(TestRealScalarUlpDistance, Double) {
// context.
static auto options = EqualOptions::Defaults();
AssertScalarsEqual(0.9999999999999988, 1.0000000000000007, options.ulp_distance(14));
#ifndef _WIN32
// GH-47442
#if !defined(_WIN32) || defined(ARROW_TESTING_STATIC) || \
(defined(GTEST_LINKED_AS_SHARED_LIBRARY) && GTEST_LINKED_AS_SHARED_LIBRARY)
// GH-47442: A static GoogleTest runtime is separate in each Windows DLL.
EXPECT_FATAL_FAILURE(AssertScalarsEqual(0.9999999999999988, 1.0000000000000007,
options.ulp_distance(13)),
"");
Expand All @@ -604,8 +605,8 @@ TEST(TestRealScalarUlpDistance, Double) {
TEST(TestRealScalarUlpDistance, Float) {
static auto options = EqualOptions::Defaults();
AssertScalarsEqual(123.456f, 123.456085f, options.ulp_distance(11));
#ifndef _WIN32
// GH-47442
#if !defined(_WIN32) || defined(ARROW_TESTING_STATIC) || \
(defined(GTEST_LINKED_AS_SHARED_LIBRARY) && GTEST_LINKED_AS_SHARED_LIBRARY)
EXPECT_FATAL_FAILURE(
AssertScalarsEqual(123.456f, 123.456085f, options.ulp_distance(10)), "");
EXPECT_FATAL_FAILURE(
Expand All @@ -622,8 +623,8 @@ TEST(TestRealScalarUlpDistance, Float) {
TEST(TestRealScalarUlpDistance, HalfFloat) {
static auto options = EqualOptions::Defaults();
AssertScalarsEqual(Float16(1.00097656), Float16(0.999511719f), options.ulp_distance(2));
#ifndef _WIN32
// GH-47442
#if !defined(_WIN32) || defined(ARROW_TESTING_STATIC) || \
(defined(GTEST_LINKED_AS_SHARED_LIBRARY) && GTEST_LINKED_AS_SHARED_LIBRARY)
EXPECT_FATAL_FAILURE(AssertScalarsEqual(Float16(1.00097656), Float16(0.999511719f),
options.ulp_distance(1)),
"");
Expand Down
17 changes: 15 additions & 2 deletions cpp/src/arrow/testing/gtest_util_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,19 @@

namespace arrow::util {

TEST(TestAssertionReporting, ArrayEqualityFailure) {
#if defined(_WIN32) && !defined(ARROW_TESTING_STATIC) && \
(!defined(GTEST_LINKED_AS_SHARED_LIBRARY) || !GTEST_LINKED_AS_SHARED_LIBRARY)
GTEST_SKIP() << "Static GoogleTest and shared ArrowTesting have separate failure "
"reporters on Windows";
#else
// The exported helper must report to the same GoogleTest runtime as this test.
EXPECT_FATAL_FAILURE(
AssertArraysEqual(*ArrayFromJSON(int32(), "[1]"), *ArrayFromJSON(int32(), "[2]")),
"");
#endif
}

// Test basic cases for contains NaN.
class TestAssertContainsNaN : public ::testing::Test {};

Expand Down Expand Up @@ -206,8 +219,8 @@ TEST(AssertTestWithinUlp, Basics) {
std::numeric_limits<double>::quiet_NaN(), 2);
AssertWithinUlp(std::numeric_limits<Float16>::quiet_NaN(),
std::numeric_limits<Float16>::quiet_NaN(), 2);
#ifndef _WIN32
// GH-47442
#if !defined(_WIN32) || defined(ARROW_TESTING_STATIC) || \
(defined(GTEST_LINKED_AS_SHARED_LIBRARY) && GTEST_LINKED_AS_SHARED_LIBRARY)
EXPECT_FATAL_FAILURE(AssertWithinUlp(123.4567, 123.45670000000015, 10),
"not within 10 ulps");
EXPECT_FATAL_FAILURE(AssertWithinUlp(123.456f, 123.456085f, 10), "not within 10 ulps");
Expand Down
Loading