webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
Classes | Macros | Enumerations | Functions
safe_numerics_unittest.cc File Reference
#include <stddef.h>
#include <stdint.h>
#include <limits>
#include <type_traits>
#include "base/compiler_specific.h"
#include "base/numerics/safe_conversions.h"
#include "base/numerics/safe_math.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"

Classes

struct  TestNumericConversion< Dst, Src, conversion >
 
struct  TestNumericConversion< Dst, Src, SIGN_PRESERVING_VALUE_PRESERVING >
 
struct  TestNumericConversion< Dst, Src, SIGN_PRESERVING_NARROW >
 
struct  TestNumericConversion< Dst, Src, SIGN_TO_UNSIGN_WIDEN_OR_EQUAL >
 
struct  TestNumericConversion< Dst, Src, SIGN_TO_UNSIGN_NARROW >
 
struct  TestNumericConversion< Dst, Src, UNSIGN_TO_SIGN_NARROW_OR_EQUAL >
 

Macros

#define TEST_EXPECTED_VALIDITY(expected, actual)
 
#define TEST_EXPECTED_SUCCESS(actual)   TEST_EXPECTED_VALIDITY(true, actual)
 
#define TEST_EXPECTED_FAILURE(actual)   TEST_EXPECTED_VALIDITY(false, actual)
 
#define TEST_EXPECTED_VALUE(expected, actual)
 
#define TEST_ARITHMETIC(Dst)   TestArithmetic<Dst>(#Dst, __LINE__)
 
#define TEST_EXPECTED_RANGE(expected, actual)
 
#define TEST_NUMERIC_CONVERSION(d, s, t)   TestNumericConversion<d, s, t>::Test(#d, #s, __LINE__)
 

Enumerations

enum  NumericConversionType {
  SIGN_PRESERVING_VALUE_PRESERVING, SIGN_PRESERVING_NARROW, SIGN_TO_UNSIGN_WIDEN_OR_EQUAL, SIGN_TO_UNSIGN_NARROW,
  UNSIGN_TO_SIGN_NARROW_OR_EQUAL
}
 

Functions

template<typename Dst , typename Src >
Dst GetMaxConvertibleToFloat ()
 
template<typename Dst >
void TestSpecializedArithmetic (const char *dst, int line, typename std::enable_if< numeric_limits< Dst >::is_iec559, int >::type=0)
 
 TEST (SafeNumerics, SignedIntegerMath)
 
 TEST (SafeNumerics, UnsignedIntegerMath)
 
 TEST (SafeNumerics, FloatingPointMath)
 
 TEST (SafeNumerics, IntMinOperations)
 
 TEST (SafeNumerics, IntOperations)
 
 TEST (SafeNumerics, IntMaxOperations)
 
 TEST (SafeNumerics, FloatOperations)
 
 TEST (SafeNumerics, DoubleOperations)
 
 TEST (SafeNumerics, SizeTOperations)
 
 TEST (SafeNumerics, CastTests)
 
 TEST (SafeNumerics, IsValueInRangeForNumericType)
 
 TEST (SafeNumerics, CompoundNumericOperations)
 

Macro Definition Documentation

◆ TEST_ARITHMETIC

#define TEST_ARITHMETIC (   Dst)    TestArithmetic<Dst>(#Dst, __LINE__)

◆ TEST_EXPECTED_FAILURE

#define TEST_EXPECTED_FAILURE (   actual)    TEST_EXPECTED_VALIDITY(false, actual)

◆ TEST_EXPECTED_RANGE

#define TEST_EXPECTED_RANGE (   expected,
  actual 
)
Value:
EXPECT_EQ(expected, base::internal::DstRangeRelationToSrcRange<Dst>(actual)) \
<< "Conversion test: " << src << " value " << actual << " to " << dst << " on line " \
<< line;
line
Definition: buildtests.py:37
GLenum GLenum dst
Definition: gl2ext.h:304
#define EXPECT_EQ(expected, actual)
Definition: gtest.h:1759
string expected
Definition: buildtests.py:33
GLenum src
Definition: gl2ext.h:304

◆ TEST_EXPECTED_SUCCESS

#define TEST_EXPECTED_SUCCESS (   actual)    TEST_EXPECTED_VALIDITY(true, actual)

◆ TEST_EXPECTED_VALIDITY

#define TEST_EXPECTED_VALIDITY (   expected,
  actual 
)
Value:
EXPECT_EQ(expected, CheckedNumeric<Dst>(actual).IsValid()) \
<< "Result test: Value " << +(actual).ValueUnsafe() << " as " << dst << " on line " \
<< line;
line
Definition: buildtests.py:37
GLenum GLenum dst
Definition: gl2ext.h:304
Definition: safe_math.h:52
#define EXPECT_EQ(expected, actual)
Definition: gtest.h:1759
string expected
Definition: buildtests.py:33

◆ TEST_EXPECTED_VALUE

#define TEST_EXPECTED_VALUE (   expected,
  actual 
)
Value:
EXPECT_EQ(static_cast<Dst>(expected), CheckedNumeric<Dst>(actual).ValueUnsafe()) \
<< "Result test: Value " << +((actual).ValueUnsafe()) << " as " << dst << " on line " \
<< line;
line
Definition: buildtests.py:37
GLenum GLenum dst
Definition: gl2ext.h:304
Definition: safe_math.h:52
#define EXPECT_EQ(expected, actual)
Definition: gtest.h:1759
string expected
Definition: buildtests.py:33

◆ TEST_NUMERIC_CONVERSION

#define TEST_NUMERIC_CONVERSION (   d,
  s,
  t 
)    TestNumericConversion<d, s, t>::Test(#d, #s, __LINE__)

Enumeration Type Documentation

◆ NumericConversionType

Enumerator
SIGN_PRESERVING_VALUE_PRESERVING 
SIGN_PRESERVING_NARROW 
SIGN_TO_UNSIGN_WIDEN_OR_EQUAL 
SIGN_TO_UNSIGN_NARROW 
UNSIGN_TO_SIGN_NARROW_OR_EQUAL 

Function Documentation

◆ GetMaxConvertibleToFloat()

template<typename Dst , typename Src >
Dst GetMaxConvertibleToFloat ( )

◆ TEST() [1/12]

TEST ( SafeNumerics  ,
SignedIntegerMath   
)

◆ TEST() [2/12]

TEST ( SafeNumerics  ,
UnsignedIntegerMath   
)

◆ TEST() [3/12]

TEST ( SafeNumerics  ,
FloatingPointMath   
)

◆ TEST() [4/12]

TEST ( SafeNumerics  ,
IntMinOperations   
)

◆ TEST() [5/12]

TEST ( SafeNumerics  ,
IntOperations   
)

◆ TEST() [6/12]

TEST ( SafeNumerics  ,
IntMaxOperations   
)

◆ TEST() [7/12]

TEST ( SafeNumerics  ,
FloatOperations   
)

◆ TEST() [8/12]

TEST ( SafeNumerics  ,
DoubleOperations   
)

◆ TEST() [9/12]

TEST ( SafeNumerics  ,
SizeTOperations   
)

◆ TEST() [10/12]

TEST ( SafeNumerics  ,
CastTests   
)

◆ TEST() [11/12]

TEST ( SafeNumerics  ,
IsValueInRangeForNumericType   
)

◆ TEST() [12/12]

TEST ( SafeNumerics  ,
CompoundNumericOperations   
)

◆ TestSpecializedArithmetic()

template<typename Dst >
void TestSpecializedArithmetic ( const char *  dst,
int  line,
typename std::enable_if< numeric_limits< Dst >::is_iec559, int >::type  = 0 
)