// // Copyright 2015 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ConstantFolding_test.cpp: // Tests for constant folding // #include "tests/test_utils/ConstantFoldingTest.h" usingnamespacesh; // Test that zero, true or false are not found in AST when they are not expected. This is to make // sure that the subsequent tests run correctly. TEST_F(ConstantFoldingExpressionTest, FoldFloatTestCheck) { … } TEST_F(ConstantFoldingTest, FoldIntegerAdd) { … } TEST_F(ConstantFoldingTest, FoldIntegerSub) { … } TEST_F(ConstantFoldingTest, FoldIntegerMul) { … } TEST_F(ConstantFoldingTest, FoldIntegerDiv) { … } TEST_F(ConstantFoldingTest, FoldIntegerModulus) { … } TEST_F(ConstantFoldingTest, FoldVectorCrossProduct) { … } // FoldMxNMatrixInverse tests check if the matrix 'inverse' operation // on MxN matrix is constant folded when argument is constant expression and also // checks the correctness of the result returned by the constant folding operation. // All the matrices including matrices in the shader code are in column-major order. TEST_F(ConstantFoldingTest, Fold2x2MatrixInverse) { … } // Check if the matrix 'inverse' operation on 3x3 matrix is constant folded. TEST_F(ConstantFoldingTest, Fold3x3MatrixInverse) { … } // Check if the matrix 'inverse' operation on 4x4 matrix is constant folded. TEST_F(ConstantFoldingTest, Fold4x4MatrixInverse) { … } // FoldMxNMatrixDeterminant tests check if the matrix 'determinant' operation // on MxN matrix is constant folded when argument is constant expression and also // checks the correctness of the result returned by the constant folding operation. // All the matrices including matrices in the shader code are in column-major order. TEST_F(ConstantFoldingTest, Fold2x2MatrixDeterminant) { … } // Check if the matrix 'determinant' operation on 3x3 matrix is constant folded. TEST_F(ConstantFoldingTest, Fold3x3MatrixDeterminant) { … } // Check if the matrix 'determinant' operation on 4x4 matrix is constant folded. TEST_F(ConstantFoldingTest, Fold4x4MatrixDeterminant) { … } // Check if the matrix 'transpose' operation on 3x3 matrix is constant folded. // All the matrices including matrices in the shader code are in column-major order. TEST_F(ConstantFoldingTest, Fold3x3MatrixTranspose) { … } // Test that 0xFFFFFFFF wraps to -1 when parsed as integer. // This is featured in the examples of ESSL3 section 4.1.3. ESSL3 section 12.42 // means that any 32-bit unsigned integer value is a valid literal. TEST_F(ConstantFoldingTest, ParseWrappedHexIntLiteral) { … } // Test that 3000000000 wraps to -1294967296 when parsed as integer. // This is featured in the examples of GLSL 4.5, and ESSL behavior should match // desktop GLSL when it comes to integer parsing. TEST_F(ConstantFoldingTest, ParseWrappedDecimalIntLiteral) { … } // Test that 0xFFFFFFFFu is parsed correctly as an unsigned integer literal. // This is featured in the examples of ESSL3 section 4.1.3. ESSL3 section 12.42 // means that any 32-bit unsigned integer value is a valid literal. TEST_F(ConstantFoldingTest, ParseMaxUintLiteral) { … } // Test that unary minus applied to unsigned int is constant folded correctly. // This is featured in the examples of ESSL3 section 4.1.3. ESSL3 section 12.42 // means that any 32-bit unsigned integer value is a valid literal. TEST_F(ConstantFoldingTest, FoldUnaryMinusOnUintLiteral) { … } // Test that constant mat2 initialization with a mat2 parameter works correctly. TEST_F(ConstantFoldingTest, FoldMat2ConstructorTakingMat2) { … } // Test that constant mat2 initialization with an int parameter works correctly. TEST_F(ConstantFoldingTest, FoldMat2ConstructorTakingScalar) { … } // Test that constant mat2 initialization with a mix of parameters works correctly. TEST_F(ConstantFoldingTest, FoldMat2ConstructorTakingMix) { … } // Test that constant mat2 initialization with a mat3 parameter works correctly. TEST_F(ConstantFoldingTest, FoldMat2ConstructorTakingMat3) { … } // Test that constant mat4x3 initialization with a mat3x2 parameter works correctly. TEST_F(ConstantFoldingTest, FoldMat4x3ConstructorTakingMat3x2) { … } // Test that constant mat2 initialization with a vec4 parameter works correctly. TEST_F(ConstantFoldingTest, FoldMat2ConstructorTakingVec4) { … } // Test that equality comparison of two different structs with a nested struct inside returns false. TEST_F(ConstantFoldingTest, FoldNestedDifferentStructEqualityComparison) { … } // Test that equality comparison of two identical structs with a nested struct inside returns true. TEST_F(ConstantFoldingTest, FoldNestedIdenticalStructEqualityComparison) { … } // Test that right elements are chosen from non-square matrix TEST_F(ConstantFoldingTest, FoldNonSquareMatrixIndexing) { … } // Test that folding outer product of vectors with non-matching lengths works. TEST_F(ConstantFoldingTest, FoldNonSquareOuterProduct) { … } // Test that folding bit shift left with non-matching signedness works. TEST_F(ConstantFoldingTest, FoldBitShiftLeftDifferentSignedness) { … } // Test that folding bit shift right with non-matching signedness works. TEST_F(ConstantFoldingTest, FoldBitShiftRightDifferentSignedness) { … } // Test that folding signed bit shift right extends the sign bit. // ESSL 3.00.6 section 5.9 Expressions. TEST_F(ConstantFoldingTest, FoldBitShiftRightExtendSignBit) { … } // Signed bit shift left should interpret its operand as a bit pattern. As a consequence a number // may turn from positive to negative when shifted left. // ESSL 3.00.6 section 5.9 Expressions. TEST_F(ConstantFoldingTest, FoldBitShiftLeftInterpretedAsBitPattern) { … } // Test that dividing the minimum signed integer by -1 works. // ESSL 3.00.6 section 4.1.3 Integers: // "However, for the case where the minimum representable value is divided by -1, it is allowed to // return either the minimum representable value or the maximum representable value." TEST_F(ConstantFoldingTest, FoldDivideMinimumIntegerByMinusOne) { … } // Test that folding an unsigned integer addition that overflows works. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldUnsignedIntegerAddOverflow) { … } // Test that folding a signed integer addition that overflows works. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldSignedIntegerAddOverflow) { … } // Test that folding an unsigned integer subtraction that overflows works. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldUnsignedIntegerDiffOverflow) { … } // Test that folding a signed integer subtraction that overflows works. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldSignedIntegerDiffOverflow) { … } // Test that folding an unsigned integer multiplication that overflows works. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldUnsignedIntegerMultiplyOverflow) { … } // Test that folding a signed integer multiplication that overflows works. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldSignedIntegerMultiplyOverflow) { … } // Test that folding of negating the minimum representable integer works. Note that in the test // "0x80000000" is a negative literal, and the minus sign before it is the negation operator. // ESSL 3.00.6 section 4.1.3 Integers: // "For all precisions, operations resulting in overflow or underflow will not cause any exception, // nor will they saturate, rather they will 'wrap' to yield the low-order n bits of the result where // n is the size in bits of the integer." TEST_F(ConstantFoldingTest, FoldMinimumSignedIntegerNegation) { … } // Test that folding of shifting the minimum representable integer works. TEST_F(ConstantFoldingTest, FoldMinimumSignedIntegerRightShift) { … } // Test that folding of shifting by 0 works. TEST_F(ConstantFoldingTest, FoldShiftByZero) { … } // Test that folding IsInf results in true when the parameter is an out-of-range float literal. // ESSL 3.00.6 section 4.1.4 Floats: // "If the value of the floating point number is too large (small) to be stored as a single // precision value, it is converted to positive (negative) infinity." // ESSL 3.00.6 section 12.4: // "Mandate support for signed infinities." TEST_F(ConstantFoldingTest, FoldIsInfOutOfRangeFloatLiteral) { … } // Regression test case of unary + constant folding of a void struct member. TEST_F(ConstantFoldingTest, VoidStructMember) { … } // Test that floats that are too small to be represented get flushed to zero. // ESSL 3.00.6 section 4.1.4 Floats: // "A value with a magnitude too small to be represented as a mantissa and exponent is converted to // zero." TEST_F(ConstantFoldingExpressionTest, FoldTooSmallFloat) { … } // IEEE 754 dictates that behavior of infinity is derived from limiting cases of real arithmetic. // lim radians(x) x -> inf = inf // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldRadiansInfinity) { … } // IEEE 754 dictates that behavior of infinity is derived from limiting cases of real arithmetic. // lim degrees(x) x -> inf = inf // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldDegreesInfinity) { … } // IEEE 754 dictates that sinh(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldSinhInfinity) { … } // IEEE 754 dictates that sinh(-inf) = -inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldSinhNegativeInfinity) { … } // IEEE 754 dictates that cosh(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldCoshInfinity) { … } // IEEE 754 dictates that cosh(-inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldCoshNegativeInfinity) { … } // IEEE 754 dictates that asinh(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldAsinhInfinity) { … } // IEEE 754 dictates that asinh(-inf) = -inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldAsinhNegativeInfinity) { … } // IEEE 754 dictates that acosh(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldAcoshInfinity) { … } // IEEE 754 dictates that pow or powr(0, inf) = 0. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldPowInfinity) { … } // IEEE 754 dictates that exp(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldExpInfinity) { … } // IEEE 754 dictates that exp(-inf) = 0. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldExpNegativeInfinity) { … } // IEEE 754 dictates that log(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldLogInfinity) { … } // IEEE 754 dictates that exp2(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldExp2Infinity) { … } // IEEE 754 dictates that exp2(-inf) = 0. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldExp2NegativeInfinity) { … } // IEEE 754 dictates that log2(inf) = inf. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldLog2Infinity) { … } // IEEE 754 dictates that behavior of infinity is derived from limiting cases of real arithmetic. // lim sqrt(x) x -> inf = inf // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldSqrtInfinity) { … } // IEEE 754 dictates that rSqrt(inf) = 0 // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldInversesqrtInfinity) { … } // IEEE 754 dictates that behavior of infinity is derived from limiting cases of real arithmetic. // lim length(x) x -> inf = inf // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldLengthInfinity) { … } // IEEE 754 dictates that behavior of infinity is derived from limiting cases of real arithmetic. // lim dot(x, y) x -> inf, y > 0 = inf // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldDotInfinity) { … } // IEEE 754 dictates that behavior of infinity is derived from limiting cases of real arithmetic. // lim dot(vec2(x, y), vec2(z)) x -> inf, finite y, z > 0 = inf // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldDotInfinity2) { … } // Faceforward behavior with infinity as a parameter can be derived from dot(). // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldFaceForwardInfinity) { … } // Faceforward behavior with infinity as a parameter can be derived from dot(). // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldFaceForwardInfinity2) { … } // Test that infinity - finite value evaluates to infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldInfinityMinusFinite) { … } // Test that -infinity + finite value evaluates to -infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldMinusInfinityPlusFinite) { … } // Test that infinity * finite value evaluates to infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldInfinityMultipliedByFinite) { … } // Test that infinity * infinity evaluates to infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldInfinityMultipliedByInfinity) { … } // Test that infinity * negative infinity evaluates to negative infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldInfinityMultipliedByNegativeInfinity) { … } // Test that dividing by minus zero results in the appropriately signed infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". // "If both positive and negative zeros are implemented, the correctly signed Inf will be // generated". TEST_F(ConstantFoldingExpressionTest, FoldDivideByNegativeZero) { … } // Test that infinity divided by zero evaluates to infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldInfinityDividedByZero) { … } // Test that negative infinity divided by zero evaluates to negative infinity. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldMinusInfinityDividedByZero) { … } // Test that dividing a finite number by infinity results in zero. // ESSL 3.00.6 section 4.5.1: "Infinities and zeroes are generated as dictated by IEEE". TEST_F(ConstantFoldingExpressionTest, FoldDivideByInfinity) { … } // Test that unsigned bitfieldExtract is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldUnsignedBitfieldExtract) { … } // Test that unsigned bitfieldExtract to extract 32 bits is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldUnsignedBitfieldExtract32Bits) { … } // Test that signed bitfieldExtract is folded correctly. The higher bits should be set to 1 if the // most significant bit of the extracted value is 1. TEST_F(ConstantFoldingExpressionTest, FoldSignedBitfieldExtract) { … } // Test that bitfieldInsert is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldBitfieldInsert) { … } // Test that bitfieldInsert to insert 32 bits is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldBitfieldInsert32Bits) { … } // Test that bitfieldReverse is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldBitfieldReverse) { … } // Test that bitCount is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldBitCount) { … } // Test that findLSB is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldFindLSB) { … } // Test that findLSB is folded correctly when the operand is zero. TEST_F(ConstantFoldingExpressionTest, FoldFindLSBZero) { … } // Test that findMSB is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldFindMSB) { … } // Test that findMSB is folded correctly when the operand is zero. TEST_F(ConstantFoldingExpressionTest, FoldFindMSBZero) { … } // Test that findMSB is folded correctly for a negative integer. // It is supposed to return the index of the most significant bit set to 0. TEST_F(ConstantFoldingExpressionTest, FoldFindMSBNegativeInt) { … } // Test that findMSB is folded correctly for -1. TEST_F(ConstantFoldingExpressionTest, FoldFindMSBMinusOne) { … } // Test that packUnorm4x8 is folded correctly for a vector of zeroes. TEST_F(ConstantFoldingExpressionTest, FoldPackUnorm4x8Zero) { … } // Test that packUnorm4x8 is folded correctly for a vector of ones. TEST_F(ConstantFoldingExpressionTest, FoldPackUnorm4x8One) { … } // Test that packSnorm4x8 is folded correctly for a vector of zeroes. TEST_F(ConstantFoldingExpressionTest, FoldPackSnorm4x8Zero) { … } // Test that packSnorm4x8 is folded correctly for a vector of ones. TEST_F(ConstantFoldingExpressionTest, FoldPackSnorm4x8One) { … } // Test that packSnorm4x8 is folded correctly for a vector of minus ones. TEST_F(ConstantFoldingExpressionTest, FoldPackSnorm4x8MinusOne) { … } // Test that unpackSnorm4x8 is folded correctly when it needs to clamp the result. TEST_F(ConstantFoldingExpressionTest, FoldUnpackSnorm4x8Clamp) { … } // Test that unpackUnorm4x8 is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldUnpackUnorm4x8) { … } // Test that ldexp is folded correctly. TEST_F(ConstantFoldingExpressionTest, FoldLdexp) { … } // Fold a ternary operator. TEST_F(ConstantFoldingTest, FoldTernary) { … } // Fold a ternary operator inside a consuming expression. TEST_F(ConstantFoldingTest, FoldTernaryInsideExpression) { … } // Fold indexing into an array constructor. TEST_F(ConstantFoldingExpressionTest, FoldArrayConstructorIndexing) { … } // Fold indexing into an array of arrays constructor. TEST_F(ConstantFoldingExpressionTest, FoldArrayOfArraysConstructorIndexing) { … } // Fold indexing into a named constant array. TEST_F(ConstantFoldingTest, FoldNamedArrayIndexing) { … } // Fold indexing into a named constant array of arrays. TEST_F(ConstantFoldingTest, FoldNamedArrayOfArraysIndexing) { … } // Fold indexing into an array constructor where some of the arguments are constant and others are // non-constant but without side effects. TEST_F(ConstantFoldingTest, FoldArrayConstructorIndexingWithMixedArguments) { … } // Indexing into an array constructor where some of the arguments have side effects can't be folded. TEST_F(ConstantFoldingTest, CantFoldArrayConstructorIndexingWithSideEffects) { … } // Fold comparing two array constructors. TEST_F(ConstantFoldingTest, FoldArrayConstructorEquality) { … } // Fold comparing two named constant arrays. TEST_F(ConstantFoldingExpressionTest, FoldNamedArrayEquality) { … } // Fold comparing two array of arrays constructors. TEST_F(ConstantFoldingTest, FoldArrayOfArraysConstructorEquality) { … } // Test that casting a negative float to uint results in a warning. ESSL 3.00.6 section 5.4.1 // specifies this as an undefined conversion. TEST_F(ConstantFoldingExpressionTest, FoldNegativeFloatToUint) { … } // Test that casting a negative float to uint inside a uvec constructor results in a warning. ESSL // 3.00.6 section 5.4.1 specifies this as an undefined conversion. TEST_F(ConstantFoldingExpressionTest, FoldNegativeFloatToUvec) { … } // Test that a negative float doesn't result in a warning when it is inside a constructor but isn't // actually converted. TEST_F(ConstantFoldingExpressionTest, NegativeFloatInsideUvecConstructorButOutOfRange) { … } // Test that a large float (above max int32_t) is converted to unsigned integer correctly. TEST_F(ConstantFoldingExpressionTest, LargeFloatToUint) { … } // Test that folding % with a negative dividend generates a warning. TEST_F(ConstantFoldingExpressionTest, IntegerModulusNegativeDividend) { … } // Test that folding % with a negative divisor generates a warning. TEST_F(ConstantFoldingExpressionTest, IntegerModulusNegativeDivisor) { … } TEST_F(ConstantFoldingExpressionTest, IsnanDifferentComponents) { … } TEST_F(ConstantFoldingExpressionTest, IsinfDifferentComponents) { … } TEST_F(ConstantFoldingExpressionTest, FloatBitsToIntDifferentComponents) { … } TEST_F(ConstantFoldingExpressionTest, FloatBitsToUintDifferentComponents) { … } TEST_F(ConstantFoldingExpressionTest, IntBitsToFloatDifferentComponents) { … } TEST_F(ConstantFoldingExpressionTest, UintBitsToFloatDifferentComponents) { … }