Skip to content

Commit d038d96

Browse files
committed
Remove RealToCType
Since github.com//pull/46981, HalfFloatBuilder now accepts Float16 values, making RealToCType's usage unnecessary in several places.
1 parent 2e53f4a commit d038d96

File tree

3 files changed

+35
-61
lines changed

3 files changed

+35
-61
lines changed

cpp/src/arrow/array/array_test.cc

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2122,14 +2122,16 @@ void CheckSliceApproxEquals() {
21222122

21232123
template <typename TYPE>
21242124
void CheckFloatingNanEquality() {
2125+
using V =
2126+
std::conditional_t<is_half_float_type<TYPE>::value, Float16, typename TYPE::c_type>;
21252127
std::shared_ptr<Array> a, b;
21262128
std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton();
21272129

2128-
const auto nan_value = RealToCType<TYPE>(NAN);
2130+
const auto nan_value = std::numeric_limits<V>::quiet_NaN();
21292131

21302132
// NaN in a null entry
2131-
ArrayFromVector<TYPE>(type, {true, false}, {RealToCType<TYPE>(0.5), nan_value}, &a);
2132-
ArrayFromVector<TYPE>(type, {true, false}, {RealToCType<TYPE>(0.5), nan_value}, &b);
2133+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), nan_value}, &a);
2134+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), nan_value}, &b);
21332135
ASSERT_TRUE(a->Equals(b));
21342136
ASSERT_TRUE(b->Equals(a));
21352137
ASSERT_TRUE(a->ApproxEquals(b));
@@ -2140,8 +2142,8 @@ void CheckFloatingNanEquality() {
21402142
ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1));
21412143

21422144
// NaN in a valid entry
2143-
ArrayFromVector<TYPE>(type, {false, true}, {RealToCType<TYPE>(0.5), nan_value}, &a);
2144-
ArrayFromVector<TYPE>(type, {false, true}, {RealToCType<TYPE>(0.5), nan_value}, &b);
2145+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), nan_value}, &a);
2146+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), nan_value}, &b);
21452147
ASSERT_FALSE(a->Equals(b));
21462148
ASSERT_FALSE(b->Equals(a));
21472149
ASSERT_TRUE(a->Equals(b, EqualOptions().nans_equal(true)));
@@ -2160,9 +2162,8 @@ void CheckFloatingNanEquality() {
21602162
ASSERT_TRUE(b->RangeEquals(a, 0, 1, 0));
21612163

21622164
// NaN != non-NaN
2163-
ArrayFromVector<TYPE>(type, {false, true}, {RealToCType<TYPE>(0.5), nan_value}, &a);
2164-
ArrayFromVector<TYPE>(type, {false, true},
2165-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(0.0)}, &b);
2165+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), nan_value}, &a);
2166+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), V(0.0)}, &b);
21662167
ASSERT_FALSE(a->Equals(b));
21672168
ASSERT_FALSE(b->Equals(a));
21682169
ASSERT_FALSE(a->Equals(b, EqualOptions().nans_equal(true)));
@@ -2183,17 +2184,17 @@ void CheckFloatingNanEquality() {
21832184

21842185
template <typename TYPE>
21852186
void CheckFloatingInfinityEquality() {
2187+
using V =
2188+
std::conditional_t<is_half_float_type<TYPE>::value, Float16, typename TYPE::c_type>;
21862189
std::shared_ptr<Array> a, b;
21872190
std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton();
21882191

2189-
const auto infinity = RealToCType<TYPE>(std::numeric_limits<double>::infinity());
2192+
const auto infinity = std::numeric_limits<V>::infinity();
21902193

21912194
for (auto nans_equal : {false, true}) {
21922195
// Infinity in a null entry
2193-
ArrayFromVector<TYPE>(type, {true, false},
2194-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(infinity)}, &a);
2195-
ArrayFromVector<TYPE>(type, {true, false},
2196-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(-infinity)}, &b);
2196+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), infinity}, &a);
2197+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), -infinity}, &b);
21972198
ASSERT_TRUE(a->Equals(b));
21982199
ASSERT_TRUE(b->Equals(a));
21992200
ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
@@ -2204,10 +2205,8 @@ void CheckFloatingInfinityEquality() {
22042205
ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1));
22052206

22062207
// Infinity in a valid entry
2207-
ArrayFromVector<TYPE>(type, {false, true},
2208-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(infinity)}, &a);
2209-
ArrayFromVector<TYPE>(type, {false, true},
2210-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(infinity)}, &b);
2208+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), infinity}, &a);
2209+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), infinity}, &b);
22112210
ASSERT_TRUE(a->Equals(b));
22122211
ASSERT_TRUE(b->Equals(a));
22132212
ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
@@ -2224,21 +2223,17 @@ void CheckFloatingInfinityEquality() {
22242223
ASSERT_TRUE(b->RangeEquals(a, 0, 1, 0));
22252224

22262225
// Infinity != non-infinity
2227-
ArrayFromVector<TYPE>(type, {false, true},
2228-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(-infinity)}, &a);
2229-
ArrayFromVector<TYPE>(type, {false, true},
2230-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(0.0)}, &b);
2226+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), -infinity}, &a);
2227+
ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), V(0.0)}, &b);
22312228
ASSERT_FALSE(a->Equals(b));
22322229
ASSERT_FALSE(b->Equals(a));
22332230
ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
22342231
ASSERT_FALSE(b->ApproxEquals(a));
22352232
ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
22362233
ASSERT_FALSE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
22372234
// Infinity != Negative infinity
2238-
ArrayFromVector<TYPE>(type, {true, true},
2239-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(-infinity)}, &a);
2240-
ArrayFromVector<TYPE>(type, {true, true},
2241-
{RealToCType<TYPE>(0.5), RealToCType<TYPE>(infinity)}, &b);
2235+
ArrayFromVector<TYPE, V>(type, {true, true}, {V(0.5), -infinity}, &a);
2236+
ArrayFromVector<TYPE, V>(type, {true, true}, {V(0.5), infinity}, &b);
22422237
ASSERT_FALSE(a->Equals(b));
22432238
ASSERT_FALSE(b->Equals(a));
22442239
ASSERT_FALSE(a->ApproxEquals(b));
@@ -2258,13 +2253,13 @@ void CheckFloatingInfinityEquality() {
22582253

22592254
template <typename TYPE>
22602255
void CheckFloatingZeroEquality() {
2256+
using V =
2257+
std::conditional_t<is_half_float_type<TYPE>::value, Float16, typename TYPE::c_type>;
22612258
std::shared_ptr<Array> a, b;
22622259
std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton();
22632260

2264-
ArrayFromVector<TYPE>(type, {true, false},
2265-
{RealToCType<TYPE>(0.0), RealToCType<TYPE>(1.0)}, &a);
2266-
ArrayFromVector<TYPE>(type, {true, false},
2267-
{RealToCType<TYPE>(0.0), RealToCType<TYPE>(1.0)}, &b);
2261+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.0), V(1.0)}, &a);
2262+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.0), V(1.0)}, &b);
22682263
ASSERT_TRUE(a->Equals(b));
22692264
ASSERT_TRUE(b->Equals(a));
22702265
for (auto nans_equal : {false, true}) {
@@ -2280,10 +2275,8 @@ void CheckFloatingZeroEquality() {
22802275
}
22812276
}
22822277

2283-
ArrayFromVector<TYPE>(type, {true, false},
2284-
{RealToCType<TYPE>(0.0), RealToCType<TYPE>(1.0)}, &a);
2285-
ArrayFromVector<TYPE>(type, {true, false},
2286-
{RealToCType<TYPE>(-0.0), RealToCType<TYPE>(1.0)}, &b);
2278+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.0), V(1.0)}, &a);
2279+
ArrayFromVector<TYPE, V>(type, {true, false}, {V(-0.0), V(1.0)}, &b);
22872280
for (auto nans_equal : {false, true}) {
22882281
auto opts = EqualOptions().nans_equal(nans_equal);
22892282
ASSERT_TRUE(a->Equals(b, opts));

cpp/src/arrow/scalar_test.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -323,28 +323,28 @@ TYPED_TEST(TestNumericScalar, MakeScalar) {
323323
template <typename T>
324324
class TestRealScalar : public ::testing::Test {
325325
public:
326-
using CType = typename T::c_type;
326+
using ValueType =
327+
std::conditional_t<is_half_float_type<T>::value, Float16, typename T::c_type>;
327328
using ScalarType = typename TypeTraits<T>::ScalarType;
328329

329330
void SetUp() {
330331
type_ = TypeTraits<T>::type_singleton();
331332

332-
scalar_val_ = std::make_shared<ScalarType>(RealToCType<T>(1));
333+
scalar_val_ = std::make_shared<ScalarType>(static_cast<ValueType>(1));
333334
ASSERT_TRUE(scalar_val_->is_valid);
334335

335-
scalar_other_ = std::make_shared<ScalarType>(RealToCType<T>(1.1));
336+
scalar_other_ = std::make_shared<ScalarType>(static_cast<ValueType>(1.1));
336337
ASSERT_TRUE(scalar_other_->is_valid);
337338

338-
scalar_zero_ = std::make_shared<ScalarType>(RealToCType<T>(0.0));
339-
scalar_other_zero_ = std::make_shared<ScalarType>(RealToCType<T>(0.0));
340-
scalar_neg_zero_ = std::make_shared<ScalarType>(RealToCType<T>(-0.0));
339+
scalar_zero_ = std::make_shared<ScalarType>(static_cast<ValueType>(0.0));
340+
scalar_other_zero_ = std::make_shared<ScalarType>(static_cast<ValueType>(0.0));
341+
scalar_neg_zero_ = std::make_shared<ScalarType>(static_cast<ValueType>(-0.0));
341342

342-
const CType nan_value = RealToCType<T>(std::numeric_limits<double>::quiet_NaN());
343+
const auto nan_value = std::numeric_limits<ValueType>::quiet_NaN();
343344
scalar_nan_ = std::make_shared<ScalarType>(nan_value);
344345
ASSERT_TRUE(scalar_nan_->is_valid);
345346

346-
const CType other_nan_value =
347-
RealToCType<T>(std::numeric_limits<double>::quiet_NaN());
347+
const auto other_nan_value = std::numeric_limits<ValueType>::quiet_NaN();
348348
scalar_other_nan_ = std::make_shared<ScalarType>(other_nan_value);
349349
ASSERT_TRUE(scalar_other_nan_->is_valid);
350350
}

cpp/src/arrow/testing/gtest_util.h

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#pragma once
1919

2020
#include <algorithm>
21-
#include <cmath>
2221
#include <cstdint>
2322
#include <cstdlib>
2423
#include <cstring>
@@ -40,7 +39,6 @@
4039
#include "arrow/testing/visibility.h"
4140
#include "arrow/type_fwd.h"
4241
#include "arrow/type_traits.h"
43-
#include "arrow/util/float16.h"
4442
#include "arrow/util/macros.h"
4543
#include "arrow/util/string_util.h"
4644
#include "arrow/util/type_fwd.h"
@@ -574,21 +572,4 @@ ARROW_TESTING_EXPORT std::shared_ptr<ArrayData> UnalignBuffers(const ArrayData&
574572
/// This method does not recurse into the dictionary or children
575573
ARROW_TESTING_EXPORT std::shared_ptr<Array> UnalignBuffers(const Array& array);
576574

577-
/// \brief Convert a floating point value to it's corresponding C Type
578-
///
579-
/// Useful when testing HalfFloat (uint16_t) values alongside native floating point types
580-
template <typename ARROW_TYPE>
581-
auto RealToCType(double d) {
582-
if constexpr (is_half_float_type<ARROW_TYPE>::value) {
583-
const auto h = util::Float16::FromDouble(d);
584-
// Double check that nan/inf/sign are preserved
585-
EXPECT_EQ(h.is_nan(), std::isnan(d));
586-
EXPECT_EQ(h.is_infinity(), std::isinf(d));
587-
EXPECT_EQ(h.signbit(), std::signbit(d));
588-
return h.bits();
589-
} else {
590-
return static_cast<typename ARROW_TYPE::c_type>(d);
591-
}
592-
}
593-
594575
} // namespace arrow

0 commit comments

Comments
 (0)