summaryrefslogtreecommitdiff
path: root/debian/patches/disable-double-double-tests.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/disable-double-double-tests.diff')
-rw-r--r--debian/patches/disable-double-double-tests.diff489
1 files changed, 0 insertions, 489 deletions
diff --git a/debian/patches/disable-double-double-tests.diff b/debian/patches/disable-double-double-tests.diff
deleted file mode 100644
index e80a8a78..00000000
--- a/debian/patches/disable-double-double-tests.diff
+++ /dev/null
@@ -1,489 +0,0 @@
-From: Benjamin Barenblat <bbaren@google.com>
-Subject: Stop testing with double-double random variables
-Forwarded: yes
-Applied-Upstream: https://github.com/abseil/abseil-cpp/commit/ab21820d47e4f83875dda008b600514d3520fd35
-
-On POWER, long double is often represented as a pair of doubles added
-together (double-double arithmetic). We’ve already special-cased
-double-double arithmetic in a number of tests, but compiler
-bugs [1, 2, 3] have now triggered both false positives and false
-negatives, which suggests testing with double doubles is unlikely to
-yield useful signal. Remove the special casing and detect if we’re on a
-double-double system; if so, just don’t test long doubles.
-
-[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99048
-[2] https://bugs.llvm.org/show_bug.cgi?id=49131
-[3] https://bugs.llvm.org/show_bug.cgi?id=49132
-
-The author works at Google. Upstream applied this patch as Piper
-revision 360793161 and exported it to GitHub; the the Applied-Upstream
-URL above points to the exported commit.
-
---- a/CMake/AbseilDll.cmake
-+++ b/CMake/AbseilDll.cmake
-@@ -126,6 +126,7 @@ set(ABSL_INTERNAL_DLL_FILES
- "meta/type_traits.h"
- "numeric/int128.cc"
- "numeric/int128.h"
-+ "numeric/internal/representation.h"
- "random/bernoulli_distribution.h"
- "random/beta_distribution.h"
- "random/bit_gen_ref.h"
---- a/absl/numeric/BUILD.bazel
-+++ b/absl/numeric/BUILD.bazel
-@@ -72,3 +72,15 @@
- "@com_github_google_benchmark//:benchmark_main",
- ],
- )
-+
-+cc_library(
-+ name = "representation",
-+ hdrs = [
-+ "internal/representation.h",
-+ ],
-+ copts = ABSL_DEFAULT_COPTS,
-+ linkopts = ABSL_DEFAULT_LINKOPTS,
-+ deps = [
-+ "//absl/base:config",
-+ ],
-+)
---- a/absl/numeric/CMakeLists.txt
-+++ b/absl/numeric/CMakeLists.txt
-@@ -59,3 +59,15 @@
- absl::int128
- PUBLIC
- )
-+
-+absl_cc_library(
-+ NAME
-+ numeric_representation
-+ HDRS
-+ "internal/representation.h"
-+ COPTS
-+ ${ABSL_DEFAULT_COPTS}
-+ DEPS
-+ absl::config
-+ PUBLIC
-+)
---- /dev/null
-+++ b/absl/numeric/internal/representation.h
-@@ -0,0 +1,55 @@
-+// Copyright 2021 The Abseil Authors
-+//
-+// Licensed under the Apache License, Version 2.0 (the "License");
-+// you may not use this file except in compliance with the License.
-+// You may obtain a copy of the License at
-+//
-+// https://www.apache.org/licenses/LICENSE-2.0
-+//
-+// Unless required by applicable law or agreed to in writing, software
-+// distributed under the License is distributed on an "AS IS" BASIS,
-+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+// See the License for the specific language governing permissions and
-+// limitations under the License.
-+
-+#ifndef ABSL_NUMERIC_INTERNAL_REPRESENTATION_H_
-+#define ABSL_NUMERIC_INTERNAL_REPRESENTATION_H_
-+
-+#include <limits>
-+
-+#include "absl/base/config.h"
-+
-+namespace absl {
-+ABSL_NAMESPACE_BEGIN
-+namespace numeric_internal {
-+
-+// Returns true iff long double is represented as a pair of doubles added
-+// together.
-+inline constexpr bool IsDoubleDouble() {
-+ // A double-double value always has exactly twice the precision of a double
-+ // value--one double carries the high digits and one double carries the low
-+ // digits. This property is not shared with any other common floating-point
-+ // representation, so this test won't trigger false positives. For reference,
-+ // this table gives the number of bits of precision of each common
-+ // floating-point representation:
-+ //
-+ // type precision
-+ // IEEE single 24 b
-+ // IEEE double 53
-+ // x86 long double 64
-+ // double-double 106
-+ // IEEE quadruple 113
-+ //
-+ // Note in particular that a quadruple-precision float has greater precision
-+ // than a double-double float despite taking up the same amount of memory; the
-+ // quad has more of its bits allocated to the mantissa than the double-double
-+ // has.
-+ return std::numeric_limits<long double>::digits ==
-+ 2 * std::numeric_limits<double>::digits;
-+}
-+
-+} // namespace numeric_internal
-+ABSL_NAMESPACE_END
-+} // namespace absl
-+
-+#endif // ABSL_NUMERIC_INTERNAL_REPRESENTATION_H_
---- a/absl/random/BUILD.bazel
-+++ b/absl/random/BUILD.bazel
-@@ -187,6 +187,7 @@ cc_test(name = "beta_distribution_test",
- ":distributions",
- ":random",
- "//absl/base:raw_logging_internal",
-+ "//absl/numeric:representation",
- "//absl/random/internal:distribution_test_util",
- "//absl/random/internal:pcg_engine",
- "//absl/random/internal:sequence_urbg",
-@@ -307,6 +308,7 @@ cc_test(name = "exponential_distribution_test",
- ":random",
- "//absl/base:core_headers",
- "//absl/base:raw_logging_internal",
-+ "//absl/numeric:representation",
- "//absl/random/internal:distribution_test_util",
- "//absl/random/internal:pcg_engine",
- "//absl/random/internal:sequence_urbg",
-@@ -330,6 +332,7 @@ cc_test(name = "gaussian_distribution_test",
- ":random",
- "//absl/base:core_headers",
- "//absl/base:raw_logging_internal",
-+ "//absl/numeric:representation",
- "//absl/random/internal:distribution_test_util",
- "//absl/random/internal:sequence_urbg",
- "//absl/strings",
-@@ -376,6 +379,7 @@ cc_test(name = "uniform_real_distribution_test",
- ":distributions",
- ":random",
- "//absl/base:raw_logging_internal",
-+ "//absl/numeric:representation",
- "//absl/random/internal:distribution_test_util",
- "//absl/random/internal:pcg_engine",
- "//absl/random/internal:sequence_urbg",
---- a/absl/random/CMakeLists.txt
-+++ b/absl/random/CMakeLists.txt
-@@ -259,6 +259,7 @@ absl_cc_test(NAME random_beta_distribution_test
- LINKOPTS
- ${ABSL_DEFAULT_LINKOPTS}
- DEPS
-+ absl::numeric_representation
- absl::random_distributions
- absl::random_random
- absl::random_internal_distribution_test_util
-@@ -381,6 +382,7 @@ absl_cc_test(NAME random_exponential_distribution_test
- ${ABSL_DEFAULT_LINKOPTS}
- DEPS
- absl::core_headers
-+ absl::numeric_representation
- absl::random_distributions
- absl::random_internal_distribution_test_util
- absl::random_internal_pcg_engine
-@@ -404,6 +406,7 @@ absl_cc_test(NAME random_gaussian_distribution_test
- ${ABSL_DEFAULT_LINKOPTS}
- DEPS
- absl::core_headers
-+ absl::numeric_representation
- absl::random_distributions
- absl::random_internal_distribution_test_util
- absl::random_internal_sequence_urbg
-@@ -446,6 +449,7 @@ absl_cc_test(NAME random_uniform_real_distribution_test
- LINKOPTS
- ${ABSL_DEFAULT_LINKOPTS}
- DEPS
-+ absl::numeric_representation
- absl::random_distributions
- absl::random_internal_distribution_test_util
- absl::random_internal_pcg_engine
---- a/absl/random/beta_distribution_test.cc
-+++ b/absl/random/beta_distribution_test.cc
-@@ -21,12 +21,14 @@
- #include <random>
- #include <sstream>
- #include <string>
-+#include <type_traits>
- #include <unordered_map>
- #include <vector>
-
- #include "gmock/gmock.h"
- #include "gtest/gtest.h"
- #include "absl/base/internal/raw_logging.h"
-+#include "absl/numeric/internal/representation.h"
- #include "absl/random/internal/chi_square.h"
- #include "absl/random/internal/distribution_test_util.h"
- #include "absl/random/internal/pcg_engine.h"
-@@ -42,7 +44,15 @@
- template <typename IntType>
- class BetaDistributionInterfaceTest : public ::testing::Test {};
-
--using RealTypes = ::testing::Types<float, double, long double>;
-+// double-double arithmetic is not supported well by either GCC or Clang; see
-+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99048,
-+// https://bugs.llvm.org/show_bug.cgi?id=49131, and
-+// https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests
-+// with double doubles until compiler support is better.
-+using RealTypes =
-+ std::conditional<absl::numeric_internal::IsDoubleDouble(),
-+ ::testing::Types<float, double>,
-+ ::testing::Types<float, double, long double>>::type;
- TYPED_TEST_CASE(BetaDistributionInterfaceTest, RealTypes);
-
- TYPED_TEST(BetaDistributionInterfaceTest, SerializeTest) {
-@@ -53,9 +63,6 @@ TYPED_TEST(BetaDistributionInterfaceTest, SerializeTest {
- const TypeParam kLargeA =
- std::exp(std::log((std::numeric_limits<TypeParam>::max)()) -
- std::log(std::log((std::numeric_limits<TypeParam>::max)())));
-- const TypeParam kLargeAPPC = std::exp(
-- std::log((std::numeric_limits<TypeParam>::max)()) -
-- std::log(std::log((std::numeric_limits<TypeParam>::max)())) - 10.0f);
- using param_type = typename absl::beta_distribution<TypeParam>::param_type;
-
- constexpr int kCount = 1000;
-@@ -76,9 +83,6 @@ TYPED_TEST(BetaDistributionInterfaceTest, SerializeTest {
- kLargeA, //
- std::nextafter(kLargeA, TypeParam(0)), //
- std::nextafter(kLargeA, std::numeric_limits<TypeParam>::max()),
-- kLargeAPPC, //
-- std::nextafter(kLargeAPPC, TypeParam(0)),
-- std::nextafter(kLargeAPPC, std::numeric_limits<TypeParam>::max()),
- // Boundary cases.
- std::numeric_limits<TypeParam>::max(),
- std::numeric_limits<TypeParam>::epsilon(),
-@@ -125,28 +129,6 @@ TYPED_TEST(BetaDistributionInterfaceTest, SerializeTest {
-
- ss >> after;
-
--#if defined(__powerpc64__) || defined(__PPC64__) || defined(__powerpc__) || \
-- defined(__ppc__) || defined(__PPC__)
-- if (std::is_same<TypeParam, long double>::value) {
-- // Roundtripping floating point values requires sufficient precision
-- // to reconstruct the exact value. It turns out that long double
-- // has some errors doing this on ppc.
-- if (alpha <= std::numeric_limits<double>::max() &&
-- alpha >= std::numeric_limits<double>::lowest()) {
-- EXPECT_EQ(static_cast<double>(before.alpha()),
-- static_cast<double>(after.alpha()))
-- << ss.str();
-- }
-- if (beta <= std::numeric_limits<double>::max() &&
-- beta >= std::numeric_limits<double>::lowest()) {
-- EXPECT_EQ(static_cast<double>(before.beta()),
-- static_cast<double>(after.beta()))
-- << ss.str();
-- }
-- continue;
-- }
--#endif
--
- EXPECT_EQ(before.alpha(), after.alpha());
- EXPECT_EQ(before.beta(), after.beta());
- EXPECT_EQ(before, after) //
---- a/absl/random/exponential_distribution_test.cc
-+++ b/absl/random/exponential_distribution_test.cc
-@@ -30,6 +30,7 @@
- #include "gtest/gtest.h"
- #include "absl/base/internal/raw_logging.h"
- #include "absl/base/macros.h"
-+#include "absl/numeric/internal/representation.h"
- #include "absl/random/internal/chi_square.h"
- #include "absl/random/internal/distribution_test_util.h"
- #include "absl/random/internal/pcg_engine.h"
-@@ -50,7 +51,15 @@
- #if defined(__EMSCRIPTEN__)
- using RealTypes = ::testing::Types<float, double>;
- #else
--using RealTypes = ::testing::Types<float, double, long double>;
-+// double-double arithmetic is not supported well by either GCC or Clang; see
-+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99048,
-+// https://bugs.llvm.org/show_bug.cgi?id=49131, and
-+// https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests
-+// with double doubles until compiler support is better.
-+using RealTypes =
-+ std::conditional<absl::numeric_internal::IsDoubleDouble(),
-+ ::testing::Types<float, double>,
-+ ::testing::Types<float, double, long double>>::type;
- #endif // defined(__EMSCRIPTEN__)
- TYPED_TEST_CASE(ExponentialDistributionTypedTest, RealTypes);
-
-@@ -130,23 +139,6 @@ TYPED_TEST(ExponentialDistributionTypedTest, SerializeTest) {
-
- ss >> after;
-
--#if defined(__powerpc64__) || defined(__PPC64__) || defined(__powerpc__) || \
-- defined(__ppc__) || defined(__PPC__)
-- if (std::is_same<TypeParam, long double>::value) {
-- // Roundtripping floating point values requires sufficient precision to
-- // reconstruct the exact value. It turns out that long double has some
-- // errors doing this on ppc, particularly for values
-- // near {1.0 +/- epsilon}.
-- if (lambda <= std::numeric_limits<double>::max() &&
-- lambda >= std::numeric_limits<double>::lowest()) {
-- EXPECT_EQ(static_cast<double>(before.lambda()),
-- static_cast<double>(after.lambda()))
-- << ss.str();
-- }
-- continue;
-- }
--#endif
--
- EXPECT_EQ(before.lambda(), after.lambda()) //
- << ss.str() << " " //
- << (ss.good() ? "good " : "") //
---- a/absl/random/gaussian_distribution_test.cc
-+++ b/absl/random/gaussian_distribution_test.cc
-@@ -21,12 +21,14 @@
- #include <iterator>
- #include <random>
- #include <string>
-+#include <type_traits>
- #include <vector>
-
- #include "gmock/gmock.h"
- #include "gtest/gtest.h"
- #include "absl/base/internal/raw_logging.h"
- #include "absl/base/macros.h"
-+#include "absl/numeric/internal/representation.h"
- #include "absl/random/internal/chi_square.h"
- #include "absl/random/internal/distribution_test_util.h"
- #include "absl/random/internal/sequence_urbg.h"
-@@ -43,7 +45,15 @@
- template <typename RealType>
- class GaussianDistributionInterfaceTest : public ::testing::Test {};
-
--using RealTypes = ::testing::Types<float, double, long double>;
-+// double-double arithmetic is not supported well by either GCC or Clang; see
-+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99048,
-+// https://bugs.llvm.org/show_bug.cgi?id=49131, and
-+// https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests
-+// with double doubles until compiler support is better.
-+using RealTypes =
-+ std::conditional<absl::numeric_internal::IsDoubleDouble(),
-+ ::testing::Types<float, double>,
-+ ::testing::Types<float, double, long double>>::type;
- TYPED_TEST_CASE(GaussianDistributionInterfaceTest, RealTypes);
-
- TYPED_TEST(GaussianDistributionInterfaceTest, SerializeTest) {
-@@ -129,32 +139,6 @@ TYPED_TEST(GaussianDistributionInterfaceTest, SerializeTest) {
-
- ss >> after;
-
--#if defined(__powerpc64__) || defined(__PPC64__) || defined(__powerpc__) || \
-- defined(__ppc__) || defined(__PPC__) || defined(__EMSCRIPTEN__)
-- if (std::is_same<TypeParam, long double>::value) {
-- // Roundtripping floating point values requires sufficient precision
-- // to reconstruct the exact value. It turns out that long double
-- // has some errors doing this on ppc, particularly for values
-- // near {1.0 +/- epsilon}.
-- //
-- // Emscripten is even worse, implementing long double as a 128-bit
-- // type, but shipping with a strtold() that doesn't support that.
-- if (mean <= std::numeric_limits<double>::max() &&
-- mean >= std::numeric_limits<double>::lowest()) {
-- EXPECT_EQ(static_cast<double>(before.mean()),
-- static_cast<double>(after.mean()))
-- << ss.str();
-- }
-- if (stddev <= std::numeric_limits<double>::max() &&
-- stddev >= std::numeric_limits<double>::lowest()) {
-- EXPECT_EQ(static_cast<double>(before.stddev()),
-- static_cast<double>(after.stddev()))
-- << ss.str();
-- }
-- continue;
-- }
--#endif
--
- EXPECT_EQ(before.mean(), after.mean());
- EXPECT_EQ(before.stddev(), after.stddev()) //
- << ss.str() << " " //
---- a/absl/random/uniform_real_distribution_test.cc
-+++ b/absl/random/uniform_real_distribution_test.cc
-@@ -20,11 +20,13 @@
- #include <random>
- #include <sstream>
- #include <string>
-+#include <type_traits>
- #include <vector>
-
- #include "gmock/gmock.h"
- #include "gtest/gtest.h"
- #include "absl/base/internal/raw_logging.h"
-+#include "absl/numeric/internal/representation.h"
- #include "absl/random/internal/chi_square.h"
- #include "absl/random/internal/distribution_test_util.h"
- #include "absl/random/internal/pcg_engine.h"
-@@ -58,7 +60,15 @@
- #if defined(__EMSCRIPTEN__)
- using RealTypes = ::testing::Types<float, double>;
- #else
--using RealTypes = ::testing::Types<float, double, long double>;
-+// double-double arithmetic is not supported well by either GCC or Clang; see
-+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99048,
-+// https://bugs.llvm.org/show_bug.cgi?id=49131, and
-+// https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests
-+// with double doubles until compiler support is better.
-+using RealTypes =
-+ std::conditional<absl::numeric_internal::IsDoubleDouble(),
-+ ::testing::Types<float, double>,
-+ ::testing::Types<float, double, long double>>::type;
- #endif // defined(__EMSCRIPTEN__)
-
- TYPED_TEST_SUITE(UniformRealDistributionTest, RealTypes);
---- a/absl/strings/BUILD.bazel
-+++ b/absl/strings/BUILD.bazel
-@@ -645,6 +645,7 @@ cc_library(name = "str_format_internal",
- "//absl/functional:function_ref",
- "//absl/meta:type_traits",
- "//absl/numeric:int128",
-+ "//absl/numeric:representation",
- "//absl/types:optional",
- "//absl/types:span",
- ],
---- a/absl/strings/CMakeLists.txt
-+++ b/absl/strings/CMakeLists.txt
-@@ -396,6 +396,7 @@ absl_cc_library(NAME str_format_internal
- absl::strings
- absl::config
- absl::core_headers
-+ absl::numeric_representation
- absl::type_traits
- absl::int128
- absl::span
---- a/absl/strings/internal/str_format/float_conversion.cc
-+++ b/absl/strings/internal/str_format/float_conversion.cc
-@@ -15,6 +15,7 @@
- #include "absl/functional/function_ref.h"
- #include "absl/meta/type_traits.h"
- #include "absl/numeric/int128.h"
-+#include "absl/numeric/internal/representation.h"
- #include "absl/strings/numbers.h"
- #include "absl/types/optional.h"
- #include "absl/types/span.h"
-@@ -25,6 +26,8 @@
-
- namespace {
-
-+using ::absl::numeric_internal::IsDoubleDouble;
-+
- // The code below wants to avoid heap allocations.
- // To do so it needs to allocate memory on the stack.
- // `StackArray` will allocate memory on the stack in the form of a uint32_t
-@@ -98,13 +101,6 @@
- return next_carry % divisor;
- }
-
--constexpr bool IsDoubleDouble() {
-- // This is the `double-double` representation of `long double`.
-- // We do not handle it natively. Fallback to snprintf.
-- return std::numeric_limits<long double>::digits ==
-- 2 * std::numeric_limits<double>::digits;
--}
--
- using MaxFloatType =
- typename std::conditional<IsDoubleDouble(), double, long double>::type;
-
-@@ -1391,6 +1387,8 @@
- bool ConvertFloatImpl(long double v, const FormatConversionSpecImpl &conv,
- FormatSinkImpl *sink) {
- if (IsDoubleDouble()) {
-+ // This is the `double-double` representation of `long double`. We do not
-+ // handle it natively. Fallback to snprintf.
- return FallbackToSnprintf(v, conv, sink);
- }
-