| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Intel Corporation | 2 * Copyright (C) 2012 Intel Corporation |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 * THE POSSIBILITY OF SUCH DAMAGE. | 23 * THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "config.h" | 26 #include "config.h" |
| 27 #include "wtf/MathExtras.h" | 27 #include "wtf/MathExtras.h" |
| 28 | 28 |
| 29 #include <gtest/gtest.h> | 29 #include <gtest/gtest.h> |
| 30 | 30 |
| 31 namespace WTF { | 31 namespace WTF { |
| 32 | 32 |
| 33 TEST(MathExtrasTest, Lrint) | 33 TEST(MathExtrasTest, Lrint) { |
| 34 { | 34 EXPECT_EQ(-8, lrint(-7.5)); |
| 35 EXPECT_EQ(-8, lrint(-7.5)); | 35 EXPECT_EQ(-8, lrint(-8.5)); |
| 36 EXPECT_EQ(-8, lrint(-8.5)); | 36 EXPECT_EQ(0, lrint(-0.5)); |
| 37 EXPECT_EQ(0, lrint(-0.5)); | 37 EXPECT_EQ(0, lrint(0.5)); |
| 38 EXPECT_EQ(0, lrint(0.5)); | 38 EXPECT_EQ(0, lrint(-0.5)); |
| 39 EXPECT_EQ(0, lrint(-0.5)); | 39 EXPECT_EQ(1, lrint(1.3)); |
| 40 EXPECT_EQ(1, lrint(1.3)); | 40 EXPECT_EQ(2, lrint(1.7)); |
| 41 EXPECT_EQ(2, lrint(1.7)); | 41 EXPECT_EQ(0, lrint(0)); |
| 42 EXPECT_EQ(0, lrint(0)); | 42 EXPECT_EQ(0, lrint(-0)); |
| 43 EXPECT_EQ(0, lrint(-0)); | 43 if (sizeof(long int) == 8) { |
| 44 if (sizeof(long int) == 8) { | 44 // Largest double number with 0.5 precision and one halfway rounding case be
low. |
| 45 // Largest double number with 0.5 precision and one halfway rounding cas
e below. | 45 EXPECT_EQ(pow(2.0, 52), lrint(pow(2.0, 52) - 0.5)); |
| 46 EXPECT_EQ(pow(2.0, 52), lrint(pow(2.0, 52) - 0.5)); | 46 EXPECT_EQ(pow(2.0, 52) - 2, lrint(pow(2.0, 52) - 1.5)); |
| 47 EXPECT_EQ(pow(2.0, 52) - 2, lrint(pow(2.0, 52) - 1.5)); | 47 // Smallest double number with 0.5 precision and one halfway rounding case a
bove. |
| 48 // Smallest double number with 0.5 precision and one halfway rounding ca
se above. | 48 EXPECT_EQ(-pow(2.0, 52), lrint(-pow(2.0, 52) + 0.5)); |
| 49 EXPECT_EQ(-pow(2.0, 52), lrint(-pow(2.0, 52) + 0.5)); | 49 EXPECT_EQ(-pow(2.0, 52) + 2, lrint(-pow(2.0, 52) + 1.5)); |
| 50 EXPECT_EQ(-pow(2.0, 52) + 2, lrint(-pow(2.0, 52) + 1.5)); | 50 } |
| 51 } | 51 } |
| 52 } | 52 |
| 53 | 53 TEST(MathExtrasTest, clampToIntLong) { |
| 54 TEST(MathExtrasTest, clampToIntLong) | 54 if (sizeof(long) == sizeof(int)) |
| 55 { | 55 return; |
| 56 if (sizeof(long) == sizeof(int)) | 56 |
| 57 return; | 57 long maxInt = std::numeric_limits<int>::max(); |
| 58 | 58 long minInt = std::numeric_limits<int>::min(); |
| 59 long maxInt = std::numeric_limits<int>::max(); | 59 long overflowInt = maxInt + 1; |
| 60 long minInt = std::numeric_limits<int>::min(); | 60 long underflowInt = minInt - 1; |
| 61 long overflowInt = maxInt + 1; | 61 |
| 62 long underflowInt = minInt - 1; | 62 EXPECT_GT(overflowInt, maxInt); |
| 63 | 63 EXPECT_LT(underflowInt, minInt); |
| 64 EXPECT_GT(overflowInt, maxInt); | 64 |
| 65 EXPECT_LT(underflowInt, minInt); | 65 EXPECT_EQ(maxInt, clampTo<int>(maxInt)); |
| 66 | 66 EXPECT_EQ(minInt, clampTo<int>(minInt)); |
| 67 EXPECT_EQ(maxInt, clampTo<int>(maxInt)); | 67 |
| 68 EXPECT_EQ(minInt, clampTo<int>(minInt)); | 68 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); |
| 69 | 69 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); |
| 70 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); | 70 } |
| 71 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); | 71 |
| 72 } | 72 TEST(MathExtrasTest, clampToIntLongLong) { |
| 73 | 73 long long maxInt = std::numeric_limits<int>::max(); |
| 74 TEST(MathExtrasTest, clampToIntLongLong) | 74 long long minInt = std::numeric_limits<int>::min(); |
| 75 { | 75 long long overflowInt = maxInt + 1; |
| 76 long long maxInt = std::numeric_limits<int>::max(); | 76 long long underflowInt = minInt - 1; |
| 77 long long minInt = std::numeric_limits<int>::min(); | 77 |
| 78 long long overflowInt = maxInt + 1; | 78 EXPECT_GT(overflowInt, maxInt); |
| 79 long long underflowInt = minInt - 1; | 79 EXPECT_LT(underflowInt, minInt); |
| 80 | 80 |
| 81 EXPECT_GT(overflowInt, maxInt); | 81 EXPECT_EQ(maxInt, clampTo<int>(maxInt)); |
| 82 EXPECT_LT(underflowInt, minInt); | 82 EXPECT_EQ(minInt, clampTo<int>(minInt)); |
| 83 | 83 |
| 84 EXPECT_EQ(maxInt, clampTo<int>(maxInt)); | 84 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); |
| 85 EXPECT_EQ(minInt, clampTo<int>(minInt)); | 85 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); |
| 86 | 86 } |
| 87 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); | 87 |
| 88 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); | 88 TEST(MathExtrasTest, clampToIntFloat) { |
| 89 } | 89 float maxInt = static_cast<float>(std::numeric_limits<int>::max()); |
| 90 | 90 float minInt = static_cast<float>(std::numeric_limits<int>::min()); |
| 91 TEST(MathExtrasTest, clampToIntFloat) | 91 float overflowInt = maxInt * 1.1f; |
| 92 { | 92 float underflowInt = minInt * 1.1f; |
| 93 float maxInt = static_cast<float>(std::numeric_limits<int>::max()); | 93 |
| 94 float minInt = static_cast<float>(std::numeric_limits<int>::min()); | 94 EXPECT_GT(overflowInt, maxInt); |
| 95 float overflowInt = maxInt * 1.1f; | 95 EXPECT_LT(underflowInt, minInt); |
| 96 float underflowInt = minInt * 1.1f; | 96 |
| 97 | 97 EXPECT_EQ(maxInt, clampTo<int>(maxInt)); |
| 98 EXPECT_GT(overflowInt, maxInt); | 98 EXPECT_EQ(minInt, clampTo<int>(minInt)); |
| 99 EXPECT_LT(underflowInt, minInt); | 99 |
| 100 | 100 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); |
| 101 EXPECT_EQ(maxInt, clampTo<int>(maxInt)); | 101 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); |
| 102 EXPECT_EQ(minInt, clampTo<int>(minInt)); | 102 |
| 103 | 103 // This value and the value one greater are typically represented the same |
| 104 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); | 104 // way when stored in a 32-bit float. Make sure clamping does not cause us |
| 105 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); | 105 // to erroneously jump to the larger value. |
| 106 | 106 int nearFloatPrecisionLimit = 2147483520; |
| 107 // This value and the value one greater are typically represented the same | 107 EXPECT_EQ(nearFloatPrecisionLimit, clampTo<int>(static_cast<float>(nearFloatPr
ecisionLimit), 0, nearFloatPrecisionLimit + 1)); |
| 108 // way when stored in a 32-bit float. Make sure clamping does not cause us | 108 EXPECT_EQ(-nearFloatPrecisionLimit, clampTo<int>(static_cast<float>(-nearFloat
PrecisionLimit), -nearFloatPrecisionLimit - 1, 0)); |
| 109 // to erroneously jump to the larger value. | 109 } |
| 110 int nearFloatPrecisionLimit = 2147483520; | 110 |
| 111 EXPECT_EQ(nearFloatPrecisionLimit, clampTo<int>(static_cast<float>(nearFloat
PrecisionLimit), 0, nearFloatPrecisionLimit + 1)); | 111 TEST(MathExtrasTest, clampToIntDouble) { |
| 112 EXPECT_EQ(-nearFloatPrecisionLimit, clampTo<int>(static_cast<float>(-nearFlo
atPrecisionLimit), -nearFloatPrecisionLimit - 1, 0)); | 112 int maxInt = std::numeric_limits<int>::max(); |
| 113 } | 113 int minInt = std::numeric_limits<int>::min(); |
| 114 | 114 double almostOverflowInt = maxInt - 0.5; |
| 115 TEST(MathExtrasTest, clampToIntDouble) | 115 double overflowInt = maxInt + 0.5; |
| 116 { | 116 double almostUnderflowInt = minInt + 0.5; |
| 117 int maxInt = std::numeric_limits<int>::max(); | 117 double underflowInt = minInt - 0.5; |
| 118 int minInt = std::numeric_limits<int>::min(); | 118 |
| 119 double almostOverflowInt = maxInt - 0.5; | 119 EXPECT_LT(almostOverflowInt, maxInt); |
| 120 double overflowInt = maxInt + 0.5; | 120 EXPECT_GT(overflowInt, maxInt); |
| 121 double almostUnderflowInt = minInt + 0.5; | 121 EXPECT_GT(almostUnderflowInt, minInt); |
| 122 double underflowInt = minInt - 0.5; | 122 EXPECT_LT(underflowInt, minInt); |
| 123 | 123 |
| 124 EXPECT_LT(almostOverflowInt, maxInt); | 124 EXPECT_EQ(maxInt, clampTo<int>(static_cast<double>(maxInt))); |
| 125 EXPECT_GT(overflowInt, maxInt); | 125 EXPECT_EQ(minInt, clampTo<int>(static_cast<double>(minInt))); |
| 126 EXPECT_GT(almostUnderflowInt, minInt); | 126 |
| 127 EXPECT_LT(underflowInt, minInt); | 127 EXPECT_EQ(maxInt - 1, clampTo<int>(almostOverflowInt)); |
| 128 | 128 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); |
| 129 EXPECT_EQ(maxInt, clampTo<int>(static_cast<double>(maxInt))); | 129 EXPECT_EQ(minInt + 1, clampTo<int>(almostUnderflowInt)); |
| 130 EXPECT_EQ(minInt, clampTo<int>(static_cast<double>(minInt))); | 130 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); |
| 131 | 131 } |
| 132 EXPECT_EQ(maxInt - 1, clampTo<int>(almostOverflowInt)); | 132 |
| 133 EXPECT_EQ(maxInt, clampTo<int>(overflowInt)); | 133 TEST(MathExtrasTest, clampToFloatDouble) { |
| 134 EXPECT_EQ(minInt + 1, clampTo<int>(almostUnderflowInt)); | 134 double maxFloat = std::numeric_limits<float>::max(); |
| 135 EXPECT_EQ(minInt, clampTo<int>(underflowInt)); | 135 double minFloat = -maxFloat; |
| 136 } | 136 double overflowFloat = maxFloat * 1.1; |
| 137 | 137 double underflowFloat = minFloat * 1.1; |
| 138 TEST(MathExtrasTest, clampToFloatDouble) | 138 |
| 139 { | 139 EXPECT_GT(overflowFloat, maxFloat); |
| 140 double maxFloat = std::numeric_limits<float>::max(); | 140 EXPECT_LT(underflowFloat, minFloat); |
| 141 double minFloat = -maxFloat; | 141 |
| 142 double overflowFloat = maxFloat * 1.1; | 142 EXPECT_EQ(maxFloat, clampTo<float>(maxFloat)); |
| 143 double underflowFloat = minFloat * 1.1; | 143 EXPECT_EQ(minFloat, clampTo<float>(minFloat)); |
| 144 | 144 |
| 145 EXPECT_GT(overflowFloat, maxFloat); | 145 EXPECT_EQ(maxFloat, clampTo<float>(overflowFloat)); |
| 146 EXPECT_LT(underflowFloat, minFloat); | 146 EXPECT_EQ(minFloat, clampTo<float>(underflowFloat)); |
| 147 | 147 |
| 148 EXPECT_EQ(maxFloat, clampTo<float>(maxFloat)); | 148 EXPECT_EQ(maxFloat, clampTo<float>(std::numeric_limits<float>::infinity())); |
| 149 EXPECT_EQ(minFloat, clampTo<float>(minFloat)); | 149 EXPECT_EQ(minFloat, clampTo<float>(-std::numeric_limits<float>::infinity())); |
| 150 | 150 } |
| 151 EXPECT_EQ(maxFloat, clampTo<float>(overflowFloat)); | 151 |
| 152 EXPECT_EQ(minFloat, clampTo<float>(underflowFloat)); | 152 TEST(MathExtrasTest, clampToDouble) { |
| 153 | 153 EXPECT_EQ(0.0, clampTo<double>(0)); |
| 154 EXPECT_EQ(maxFloat, clampTo<float>(std::numeric_limits<float>::infinity())); | 154 EXPECT_EQ(0.0, clampTo<double>(0.0f)); |
| 155 EXPECT_EQ(minFloat, clampTo<float>(-std::numeric_limits<float>::infinity()))
; | 155 EXPECT_EQ(0.0, clampTo<double>(0ULL)); |
| 156 } | 156 EXPECT_EQ(3.5, clampTo<double>(std::numeric_limits<unsigned long long>::max(),
0.0, 3.5)); |
| 157 | 157 } |
| 158 TEST(MathExtrasTest, clampToDouble) | 158 |
| 159 { | 159 TEST(MathExtrasText, clampToLongLongDouble) { |
| 160 EXPECT_EQ(0.0, clampTo<double>(0)); | 160 double overflowLL = static_cast<double>(std::numeric_limits<long long>::max())
* 2; |
| 161 EXPECT_EQ(0.0, clampTo<double>(0.0f)); | 161 EXPECT_EQ(std::numeric_limits<long long>::max(), clampTo<long long>(overflowLL
)); |
| 162 EXPECT_EQ(0.0, clampTo<double>(0ULL)); | 162 EXPECT_EQ(std::numeric_limits<long long>::min(), clampTo<long long>(-overflowL
L)); |
| 163 EXPECT_EQ(3.5, clampTo<double>(std::numeric_limits<unsigned long long>::max(
), 0.0, 3.5)); | 163 } |
| 164 } | 164 |
| 165 | 165 TEST(MathExtrasText, clampToUnsignedLongLongDouble) { |
| 166 TEST(MathExtrasText, clampToLongLongDouble) | 166 double overflowULL = static_cast<double>(std::numeric_limits<unsigned long lon
g>::max()) * 2; |
| 167 { | 167 EXPECT_EQ(std::numeric_limits<unsigned long long>::max(), clampTo<unsigned lon
g long>(overflowULL)); |
| 168 double overflowLL = static_cast<double>(std::numeric_limits<long long>::max(
)) * 2; | 168 EXPECT_EQ(std::numeric_limits<unsigned long long>::min(), clampTo<unsigned lon
g long>(-overflowULL)); |
| 169 EXPECT_EQ(std::numeric_limits<long long>::max(), clampTo<long long>(overflow
LL)); | 169 } |
| 170 EXPECT_EQ(std::numeric_limits<long long>::min(), clampTo<long long>(-overflo
wLL)); | 170 |
| 171 } | 171 TEST(MathExtrasTest, clampToUnsignedUnsignedLong) { |
| 172 | 172 if (sizeof(unsigned long) == sizeof(unsigned)) |
| 173 TEST(MathExtrasText, clampToUnsignedLongLongDouble) | 173 return; |
| 174 { | 174 |
| 175 double overflowULL = static_cast<double>(std::numeric_limits<unsigned long l
ong>::max()) * 2; | 175 unsigned long maxUnsigned = std::numeric_limits<unsigned>::max(); |
| 176 EXPECT_EQ(std::numeric_limits<unsigned long long>::max(), clampTo<unsigned l
ong long>(overflowULL)); | 176 unsigned long overflowUnsigned = maxUnsigned + 1; |
| 177 EXPECT_EQ(std::numeric_limits<unsigned long long>::min(), clampTo<unsigned l
ong long>(-overflowULL)); | 177 |
| 178 } | 178 EXPECT_GT(overflowUnsigned, maxUnsigned); |
| 179 | 179 |
| 180 TEST(MathExtrasTest, clampToUnsignedUnsignedLong) | 180 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(maxUnsigned)); |
| 181 { | 181 |
| 182 if (sizeof(unsigned long) == sizeof(unsigned)) | 182 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(overflowUnsigned)); |
| 183 return; | 183 EXPECT_EQ(0u, clampTo<unsigned>(-1)); |
| 184 | 184 } |
| 185 unsigned long maxUnsigned = std::numeric_limits<unsigned>::max(); | 185 |
| 186 unsigned long overflowUnsigned = maxUnsigned + 1; | 186 TEST(MathExtrasTest, clampToUnsignedUnsignedLongLong) { |
| 187 | 187 unsigned long long maxUnsigned = std::numeric_limits<unsigned>::max(); |
| 188 EXPECT_GT(overflowUnsigned, maxUnsigned); | 188 unsigned long long overflowUnsigned = maxUnsigned + 1; |
| 189 | 189 |
| 190 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(maxUnsigned)); | 190 EXPECT_GT(overflowUnsigned, maxUnsigned); |
| 191 | 191 |
| 192 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(overflowUnsigned)); | 192 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(maxUnsigned)); |
| 193 EXPECT_EQ(0u, clampTo<unsigned>(-1)); | 193 |
| 194 } | 194 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(overflowUnsigned)); |
| 195 | 195 EXPECT_EQ(0u, clampTo<unsigned>(-1)); |
| 196 TEST(MathExtrasTest, clampToUnsignedUnsignedLongLong) | 196 } |
| 197 { | 197 |
| 198 unsigned long long maxUnsigned = std::numeric_limits<unsigned>::max(); | 198 TEST(MathExtrasTest, clampToLongLongUnsignedLongLong) { |
| 199 unsigned long long overflowUnsigned = maxUnsigned + 1; | 199 long long maxLongLongLL = std::numeric_limits<long long>::max(); |
| 200 | 200 unsigned long long maxLongLongULL = maxLongLongLL; |
| 201 EXPECT_GT(overflowUnsigned, maxUnsigned); | 201 unsigned long long overflowLongLong = maxLongLongULL + 1; |
| 202 | 202 |
| 203 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(maxUnsigned)); | 203 EXPECT_GT(overflowLongLong, maxLongLongULL); |
| 204 | 204 |
| 205 EXPECT_EQ(maxUnsigned, clampTo<unsigned>(overflowUnsigned)); | 205 EXPECT_EQ(maxLongLongLL, clampTo<long long>(maxLongLongULL)); |
| 206 EXPECT_EQ(0u, clampTo<unsigned>(-1)); | 206 EXPECT_EQ(maxLongLongLL - 1, clampTo<long long>(maxLongLongULL - 1)); |
| 207 } | 207 EXPECT_EQ(maxLongLongLL, clampTo<long long>(overflowLongLong)); |
| 208 | 208 |
| 209 TEST(MathExtrasTest, clampToLongLongUnsignedLongLong) | 209 EXPECT_EQ(-3LL, clampTo<long long>(2ULL, -5LL, -3LL)); |
| 210 { | 210 } |
| 211 long long maxLongLongLL = std::numeric_limits<long long>::max(); | 211 |
| 212 unsigned long long maxLongLongULL = maxLongLongLL; | 212 TEST(MathExtrasTest, clampToUnsignedLongLongInt) { |
| 213 unsigned long long overflowLongLong = maxLongLongULL + 1; | 213 EXPECT_EQ(0ULL, clampTo<unsigned long long>(-1)); |
| 214 | 214 EXPECT_EQ(0ULL, clampTo<unsigned long long>(0)); |
| 215 EXPECT_GT(overflowLongLong, maxLongLongULL); | 215 EXPECT_EQ(1ULL, clampTo<unsigned long long>(1)); |
| 216 | 216 } |
| 217 EXPECT_EQ(maxLongLongLL, clampTo<long long>(maxLongLongULL)); | 217 |
| 218 EXPECT_EQ(maxLongLongLL - 1, clampTo<long long>(maxLongLongULL - 1)); | 218 TEST(MathExtrasTest, clampToUnsignedLongLongUnsignedLongLong) { |
| 219 EXPECT_EQ(maxLongLongLL, clampTo<long long>(overflowLongLong)); | 219 EXPECT_EQ(0ULL, clampTo<unsigned long long>(0ULL)); |
| 220 | 220 EXPECT_EQ(1ULL, clampTo<unsigned long long>(0ULL, 1ULL, 2ULL)); |
| 221 EXPECT_EQ(-3LL, clampTo<long long>(2ULL, -5LL, -3LL)); | 221 EXPECT_EQ(2ULL, clampTo<unsigned long long>(3ULL, 1ULL, 2ULL)); |
| 222 } | 222 EXPECT_EQ(0xFFFFFFFFFFFFFFF5ULL, clampTo<unsigned long long>(0xFFFFFFFFFFFFFFF
5ULL)); |
| 223 | |
| 224 TEST(MathExtrasTest, clampToUnsignedLongLongInt) | |
| 225 { | |
| 226 EXPECT_EQ(0ULL, clampTo<unsigned long long>(-1)); | |
| 227 EXPECT_EQ(0ULL, clampTo<unsigned long long>(0)); | |
| 228 EXPECT_EQ(1ULL, clampTo<unsigned long long>(1)); | |
| 229 } | |
| 230 | |
| 231 TEST(MathExtrasTest, clampToUnsignedLongLongUnsignedLongLong) | |
| 232 { | |
| 233 EXPECT_EQ(0ULL, clampTo<unsigned long long>(0ULL)); | |
| 234 EXPECT_EQ(1ULL, clampTo<unsigned long long>(0ULL, 1ULL, 2ULL)); | |
| 235 EXPECT_EQ(2ULL, clampTo<unsigned long long>(3ULL, 1ULL, 2ULL)); | |
| 236 EXPECT_EQ(0xFFFFFFFFFFFFFFF5ULL, clampTo<unsigned long long>(0xFFFFFFFFFFFFF
FF5ULL)); | |
| 237 } | 223 } |
| 238 | 224 |
| 239 // Make sure that various +-inf cases are handled properly (they aren't | 225 // Make sure that various +-inf cases are handled properly (they aren't |
| 240 // by default on VS). | 226 // by default on VS). |
| 241 TEST(MathExtrasTest, infinityMath) | 227 TEST(MathExtrasTest, infinityMath) { |
| 242 { | 228 double posInf = std::numeric_limits<double>::infinity(); |
| 243 double posInf = std::numeric_limits<double>::infinity(); | 229 double negInf = -std::numeric_limits<double>::infinity(); |
| 244 double negInf = -std::numeric_limits<double>::infinity(); | 230 double nan = std::numeric_limits<double>::quiet_NaN(); |
| 245 double nan = std::numeric_limits<double>::quiet_NaN(); | 231 |
| 246 | 232 EXPECT_EQ(M_PI_4, atan2(posInf, posInf)); |
| 247 EXPECT_EQ(M_PI_4, atan2(posInf, posInf)); | 233 EXPECT_EQ(3.0 * M_PI_4, atan2(posInf, negInf)); |
| 248 EXPECT_EQ(3.0 * M_PI_4, atan2(posInf, negInf)); | 234 EXPECT_EQ(-M_PI_4, atan2(negInf, posInf)); |
| 249 EXPECT_EQ(-M_PI_4, atan2(negInf, posInf)); | 235 EXPECT_EQ(-3.0 * M_PI_4, atan2(negInf, negInf)); |
| 250 EXPECT_EQ(-3.0 * M_PI_4, atan2(negInf, negInf)); | 236 |
| 251 | 237 EXPECT_EQ(0.0, fmod(0.0, posInf)); |
| 252 EXPECT_EQ(0.0, fmod(0.0, posInf)); | 238 EXPECT_EQ(7.0, fmod(7.0, posInf)); |
| 253 EXPECT_EQ(7.0, fmod(7.0, posInf)); | 239 EXPECT_EQ(-7.0, fmod(-7.0, posInf)); |
| 254 EXPECT_EQ(-7.0, fmod(-7.0, posInf)); | 240 EXPECT_EQ(0.0, fmod(0.0, negInf)); |
| 255 EXPECT_EQ(0.0, fmod(0.0, negInf)); | 241 EXPECT_EQ(7.0, fmod(7.0, negInf)); |
| 256 EXPECT_EQ(7.0, fmod(7.0, negInf)); | 242 EXPECT_EQ(-7.0, fmod(-7.0, negInf)); |
| 257 EXPECT_EQ(-7.0, fmod(-7.0, negInf)); | 243 |
| 258 | 244 EXPECT_EQ(1.0, pow(5.0, 0.0)); |
| 259 EXPECT_EQ(1.0, pow(5.0, 0.0)); | 245 EXPECT_EQ(1.0, pow(-5.0, 0.0)); |
| 260 EXPECT_EQ(1.0, pow(-5.0, 0.0)); | 246 EXPECT_EQ(1.0, pow(nan, 0.0)); |
| 261 EXPECT_EQ(1.0, pow(nan, 0.0)); | 247 } |
| 262 } | 248 |
| 263 | 249 } // namespace WTF |
| 264 } // namespace WTF | |
| OLD | NEW |