File indexing completed on 2025-08-27 08:47:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #pragma once
0021
0022 #include <cstdint>
0023 #include <iosfwd>
0024
0025 #include "arrow/util/macros.h"
0026 #include "arrow/util/visibility.h"
0027
0028 namespace arrow {
0029
0030 class Array;
0031 class DataType;
0032 class Tensor;
0033 class SparseTensor;
0034 struct Scalar;
0035
0036 static constexpr double kDefaultAbsoluteTolerance = 1E-5;
0037
0038
0039 class EqualOptions {
0040 public:
0041
0042 bool nans_equal() const { return nans_equal_; }
0043
0044
0045 EqualOptions nans_equal(bool v) const {
0046 auto res = EqualOptions(*this);
0047 res.nans_equal_ = v;
0048 return res;
0049 }
0050
0051
0052 bool signed_zeros_equal() const { return signed_zeros_equal_; }
0053
0054
0055 EqualOptions signed_zeros_equal(bool v) const {
0056 auto res = EqualOptions(*this);
0057 res.signed_zeros_equal_ = v;
0058 return res;
0059 }
0060
0061
0062 double atol() const { return atol_; }
0063
0064
0065 EqualOptions atol(double v) const {
0066 auto res = EqualOptions(*this);
0067 res.atol_ = v;
0068 return res;
0069 }
0070
0071
0072
0073 std::ostream* diff_sink() const { return diff_sink_; }
0074
0075
0076
0077
0078 EqualOptions diff_sink(std::ostream* diff_sink) const {
0079 auto res = EqualOptions(*this);
0080 res.diff_sink_ = diff_sink;
0081 return res;
0082 }
0083
0084 static EqualOptions Defaults() { return {}; }
0085
0086 protected:
0087 double atol_ = kDefaultAbsoluteTolerance;
0088 bool nans_equal_ = false;
0089 bool signed_zeros_equal_ = true;
0090
0091 std::ostream* diff_sink_ = NULLPTR;
0092 };
0093
0094
0095 ARROW_EXPORT bool ArrayEquals(const Array& left, const Array& right,
0096 const EqualOptions& = EqualOptions::Defaults());
0097
0098
0099
0100 ARROW_EXPORT bool ArrayApproxEquals(const Array& left, const Array& right,
0101 const EqualOptions& = EqualOptions::Defaults());
0102
0103
0104 ARROW_EXPORT bool ArrayRangeEquals(const Array& left, const Array& right,
0105 int64_t start_idx, int64_t end_idx,
0106 int64_t other_start_idx,
0107 const EqualOptions& = EqualOptions::Defaults());
0108
0109
0110 ARROW_EXPORT bool ArrayRangeApproxEquals(const Array& left, const Array& right,
0111 int64_t start_idx, int64_t end_idx,
0112 int64_t other_start_idx,
0113 const EqualOptions& = EqualOptions::Defaults());
0114
0115 ARROW_EXPORT bool TensorEquals(const Tensor& left, const Tensor& right,
0116 const EqualOptions& = EqualOptions::Defaults());
0117
0118
0119 ARROW_EXPORT bool SparseTensorEquals(const SparseTensor& left, const SparseTensor& right,
0120 const EqualOptions& = EqualOptions::Defaults());
0121
0122
0123
0124
0125
0126
0127 ARROW_EXPORT bool TypeEquals(const DataType& left, const DataType& right,
0128 bool check_metadata = true);
0129
0130
0131
0132
0133
0134 ARROW_EXPORT bool ScalarEquals(const Scalar& left, const Scalar& right,
0135 const EqualOptions& options = EqualOptions::Defaults());
0136
0137
0138
0139
0140
0141 ARROW_EXPORT bool ScalarApproxEquals(
0142 const Scalar& left, const Scalar& right,
0143 const EqualOptions& options = EqualOptions::Defaults());
0144
0145 }