proxygen
testing::internal::FloatingPoint< RawType > Class Template Reference

#include <gtest-internal.h>

Classes

union  FloatingPointUnion
 

Public Types

typedef TypeWithSize< sizeof(RawType)>::UInt Bits
 
typedef TypeWithSize< sizeof(RawType)>::UInt Bits
 
typedef TypeWithSize< sizeof(RawType)>::UInt Bits
 

Public Member Functions

 FloatingPoint (const RawType &x)
 
const Bitsbits () const
 
Bits exponent_bits () const
 
Bits fraction_bits () const
 
Bits sign_bit () const
 
bool is_nan () const
 
bool AlmostEquals (const FloatingPoint &rhs) const
 
 FloatingPoint (const RawType &x)
 
const Bitsbits () const
 
Bits exponent_bits () const
 
Bits fraction_bits () const
 
Bits sign_bit () const
 
bool is_nan () const
 
bool AlmostEquals (const FloatingPoint &rhs) const
 
 FloatingPoint (const RawType &x)
 
const Bitsbits () const
 
Bits exponent_bits () const
 
Bits fraction_bits () const
 
Bits sign_bit () const
 
bool is_nan () const
 
bool AlmostEquals (const FloatingPoint &rhs) const
 
template<>
float Max ()
 
template<>
double Max ()
 
template<>
float Max ()
 
template<>
double Max ()
 
template<>
float Max ()
 
template<>
double Max ()
 

Static Public Member Functions

static RawType ReinterpretBits (const Bits bits)
 
static RawType Infinity ()
 
static RawType Max ()
 
static RawType ReinterpretBits (const Bits bits)
 
static RawType Infinity ()
 
static RawType Max ()
 
static RawType ReinterpretBits (const Bits bits)
 
static RawType Infinity ()
 
static RawType Max ()
 

Static Public Attributes

static const size_t kBitCount = 8*sizeof(RawType)
 
static const size_t kFractionBitCount
 
static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount
 
static const Bits kSignBitMask = static_cast<Bits>(1) << (kBitCount - 1)
 
static const Bits kFractionBitMask
 
static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask)
 
static const size_t kMaxUlps = 4
 

Static Private Member Functions

static Bits SignAndMagnitudeToBiased (const Bits &sam)
 
static Bits DistanceBetweenSignAndMagnitudeNumbers (const Bits &sam1, const Bits &sam2)
 
static Bits SignAndMagnitudeToBiased (const Bits &sam)
 
static Bits DistanceBetweenSignAndMagnitudeNumbers (const Bits &sam1, const Bits &sam2)
 
static Bits SignAndMagnitudeToBiased (const Bits &sam)
 
static Bits DistanceBetweenSignAndMagnitudeNumbers (const Bits &sam1, const Bits &sam2)
 

Private Attributes

FloatingPointUnion u_
 

Detailed Description

template<typename RawType>
class testing::internal::FloatingPoint< RawType >

Definition at line 262 of file gtest-internal.h.

Member Typedef Documentation

template<typename RawType>
typedef TypeWithSize<sizeof(RawType)>::UInt testing::internal::FloatingPoint< RawType >::Bits

Definition at line 266 of file gtest-internal.h.

template<typename RawType>
typedef TypeWithSize<sizeof(RawType)>::UInt testing::internal::FloatingPoint< RawType >::Bits

Definition at line 266 of file gtest-internal.h.

template<typename RawType>
typedef TypeWithSize<sizeof(RawType)>::UInt testing::internal::FloatingPoint< RawType >::Bits

Definition at line 266 of file gtest-internal.h.

Constructor & Destructor Documentation

template<typename RawType>
testing::internal::FloatingPoint< RawType >::FloatingPoint ( const RawType &  x)
inlineexplicit

Definition at line 310 of file gtest-internal.h.

References x.

template<typename RawType>
testing::internal::FloatingPoint< RawType >::FloatingPoint ( const RawType &  x)
inlineexplicit

Definition at line 310 of file gtest-internal.h.

References x.

template<typename RawType>
testing::internal::FloatingPoint< RawType >::FloatingPoint ( const RawType &  x)
inlineexplicit

Definition at line 310 of file gtest-internal.h.

References x.

Member Function Documentation

template<typename RawType>
bool testing::internal::FloatingPoint< RawType >::AlmostEquals ( const FloatingPoint< RawType > &  rhs) const
inline

Definition at line 358 of file gtest-internal.h.

References testing::internal::FloatingPoint< RawType >::FloatingPointUnion::bits_, testing::internal::FloatingPoint< RawType >::is_nan(), and testing::internal::FloatingPoint< RawType >::u_.

358  {
359  // The IEEE standard says that any comparison operation involving
360  // a NAN must return false.
361  if (is_nan() || rhs.is_nan()) return false;
362 
364  <= kMaxUlps;
365  }
static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2)
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
template<typename RawType>
bool testing::internal::FloatingPoint< RawType >::AlmostEquals ( const FloatingPoint< RawType > &  rhs) const
inline

Definition at line 358 of file gtest-internal.h.

References testing::internal::FloatingPoint< RawType >::FloatingPointUnion::bits_, testing::internal::FloatingPoint< RawType >::is_nan(), and testing::internal::FloatingPoint< RawType >::u_.

358  {
359  // The IEEE standard says that any comparison operation involving
360  // a NAN must return false.
361  if (is_nan() || rhs.is_nan()) return false;
362 
364  <= kMaxUlps;
365  }
static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2)
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
template<typename RawType>
bool testing::internal::FloatingPoint< RawType >::AlmostEquals ( const FloatingPoint< RawType > &  rhs) const
inline

Definition at line 358 of file gtest-internal.h.

References testing::internal::FloatingPoint< RawType >::FloatingPointUnion::bits_, testing::internal::FloatingPoint< RawType >::is_nan(), and testing::internal::FloatingPoint< RawType >::u_.

358  {
359  // The IEEE standard says that any comparison operation involving
360  // a NAN must return false.
361  if (is_nan() || rhs.is_nan()) return false;
362 
364  <= kMaxUlps;
365  }
static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, const Bits &sam2)
FOLLY_PUSH_WARNING RHS rhs
Definition: Traits.h:649
template<typename RawType>
const Bits& testing::internal::FloatingPoint< RawType >::bits ( ) const
inline
template<typename RawType>
const Bits& testing::internal::FloatingPoint< RawType >::bits ( ) const
inline
template<typename RawType>
const Bits& testing::internal::FloatingPoint< RawType >::bits ( ) const
inline
template<typename RawType>
static Bits testing::internal::FloatingPoint< RawType >::DistanceBetweenSignAndMagnitudeNumbers ( const Bits sam1,
const Bits sam2 
)
inlinestaticprivate

Definition at line 401 of file gtest-internal.h.

402  {
403  const Bits biased1 = SignAndMagnitudeToBiased(sam1);
404  const Bits biased2 = SignAndMagnitudeToBiased(sam2);
405  return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
406  }
static Bits SignAndMagnitudeToBiased(const Bits &sam)
TypeWithSize< sizeof(RawType)>::UInt Bits
template<typename RawType>
static Bits testing::internal::FloatingPoint< RawType >::DistanceBetweenSignAndMagnitudeNumbers ( const Bits sam1,
const Bits sam2 
)
inlinestaticprivate

Definition at line 401 of file gtest-internal.h.

402  {
403  const Bits biased1 = SignAndMagnitudeToBiased(sam1);
404  const Bits biased2 = SignAndMagnitudeToBiased(sam2);
405  return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
406  }
static Bits SignAndMagnitudeToBiased(const Bits &sam)
TypeWithSize< sizeof(RawType)>::UInt Bits
template<typename RawType>
static Bits testing::internal::FloatingPoint< RawType >::DistanceBetweenSignAndMagnitudeNumbers ( const Bits sam1,
const Bits sam2 
)
inlinestaticprivate

Definition at line 401 of file gtest-internal.h.

402  {
403  const Bits biased1 = SignAndMagnitudeToBiased(sam1);
404  const Bits biased2 = SignAndMagnitudeToBiased(sam2);
405  return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
406  }
static Bits SignAndMagnitudeToBiased(const Bits &sam)
TypeWithSize< sizeof(RawType)>::UInt Bits
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::exponent_bits ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::exponent_bits ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::exponent_bits ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::fraction_bits ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::fraction_bits ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::fraction_bits ( ) const
inline
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::Infinity ( )
inlinestatic

Definition at line 324 of file gtest-internal.h.

324  {
326  }
static RawType ReinterpretBits(const Bits bits)
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::Infinity ( )
inlinestatic

Definition at line 324 of file gtest-internal.h.

324  {
326  }
static RawType ReinterpretBits(const Bits bits)
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::Infinity ( )
inlinestatic

Definition at line 324 of file gtest-internal.h.

324  {
326  }
static RawType ReinterpretBits(const Bits bits)
template<typename RawType>
bool testing::internal::FloatingPoint< RawType >::is_nan ( ) const
inline

Definition at line 346 of file gtest-internal.h.

346  {
347  // It's a NAN if the exponent bits are all ones and the fraction
348  // bits are not entirely zeros.
349  return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
350  }
template<typename RawType>
bool testing::internal::FloatingPoint< RawType >::is_nan ( ) const
inline

Definition at line 346 of file gtest-internal.h.

Referenced by testing::internal::FloatingPoint< RawType >::AlmostEquals(), and testing::internal::FloatingEqMatcher< FloatType >::Impl< T >::MatchAndExplain().

346  {
347  // It's a NAN if the exponent bits are all ones and the fraction
348  // bits are not entirely zeros.
349  return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
350  }
template<typename RawType>
bool testing::internal::FloatingPoint< RawType >::is_nan ( ) const
inline

Definition at line 346 of file gtest-internal.h.

346  {
347  // It's a NAN if the exponent bits are all ones and the fraction
348  // bits are not entirely zeros.
349  return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
350  }
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::Max ( )
static
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::Max ( )
static
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::Max ( )
static
template<>
float testing::internal::FloatingPoint< float >::Max ( )
inline

Definition at line 414 of file gtest-internal.h.

414 { return FLT_MAX; }
template<>
float testing::internal::FloatingPoint< float >::Max ( )
inline

Definition at line 414 of file gtest-internal.h.

414 { return FLT_MAX; }
template<>
float testing::internal::FloatingPoint< float >::Max ( )
inline

Definition at line 414 of file gtest-internal.h.

414 { return FLT_MAX; }
template<>
double testing::internal::FloatingPoint< double >::Max ( )
inline

Definition at line 416 of file gtest-internal.h.

References testing::internal::GetTestTypeId(), testing::internal::GetTypeId(), and GTEST_API_.

416 { return DBL_MAX; }
template<>
double testing::internal::FloatingPoint< double >::Max ( )
inline

Definition at line 416 of file gtest-internal.h.

416 { return DBL_MAX; }
template<>
double testing::internal::FloatingPoint< double >::Max ( )
inline

Definition at line 416 of file gtest-internal.h.

References testing::internal::GetTestTypeId(), testing::internal::GetTypeId(), and GTEST_API_.

416 { return DBL_MAX; }
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::ReinterpretBits ( const Bits  bits)
inlinestatic
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::ReinterpretBits ( const Bits  bits)
inlinestatic
template<typename RawType>
static RawType testing::internal::FloatingPoint< RawType >::ReinterpretBits ( const Bits  bits)
inlinestatic
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::sign_bit ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::sign_bit ( ) const
inline
template<typename RawType>
Bits testing::internal::FloatingPoint< RawType >::sign_bit ( ) const
inline
template<typename RawType>
static Bits testing::internal::FloatingPoint< RawType >::SignAndMagnitudeToBiased ( const Bits sam)
inlinestaticprivate

Definition at line 389 of file gtest-internal.h.

389  {
390  if (kSignBitMask & sam) {
391  // sam represents a negative number.
392  return ~sam + 1;
393  } else {
394  // sam represents a positive number.
395  return kSignBitMask | sam;
396  }
397  }
template<typename RawType>
static Bits testing::internal::FloatingPoint< RawType >::SignAndMagnitudeToBiased ( const Bits sam)
inlinestaticprivate

Definition at line 389 of file gtest-internal.h.

389  {
390  if (kSignBitMask & sam) {
391  // sam represents a negative number.
392  return ~sam + 1;
393  } else {
394  // sam represents a positive number.
395  return kSignBitMask | sam;
396  }
397  }
template<typename RawType>
static Bits testing::internal::FloatingPoint< RawType >::SignAndMagnitudeToBiased ( const Bits sam)
inlinestaticprivate

Definition at line 389 of file gtest-internal.h.

389  {
390  if (kSignBitMask & sam) {
391  // sam represents a negative number.
392  return ~sam + 1;
393  } else {
394  // sam represents a positive number.
395  return kSignBitMask | sam;
396  }
397  }

Member Data Documentation

template<typename RawType>
static const size_t testing::internal::FloatingPoint< RawType >::kBitCount = 8*sizeof(RawType)
static

Definition at line 271 of file gtest-internal.h.

template<typename RawType>
static const size_t testing::internal::FloatingPoint< RawType >::kExponentBitCount = kBitCount - 1 - kFractionBitCount
static

Definition at line 278 of file gtest-internal.h.

template<typename RawType>
static const Bits testing::internal::FloatingPoint< RawType >::kExponentBitMask = ~(kSignBitMask | kFractionBitMask)
static

Definition at line 288 of file gtest-internal.h.

template<typename RawType>
static const size_t testing::internal::FloatingPoint< RawType >::kFractionBitCount
static
Initial value:
=
std::numeric_limits<RawType>::digits - 1

Definition at line 274 of file gtest-internal.h.

template<typename RawType>
static const Bits testing::internal::FloatingPoint< RawType >::kFractionBitMask
static
Initial value:
=
~static_cast<Bits>(0) >> (kExponentBitCount + 1)

Definition at line 284 of file gtest-internal.h.

template<typename RawType>
static const size_t testing::internal::FloatingPoint< RawType >::kMaxUlps = 4
static

Definition at line 302 of file gtest-internal.h.

template<typename RawType>
static const Bits testing::internal::FloatingPoint< RawType >::kSignBitMask = static_cast<Bits>(1) << (kBitCount - 1)
static

Definition at line 281 of file gtest-internal.h.


The documentation for this class was generated from the following file: