| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2013 The LibYuv Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 for (int i = 1; i < 4100; ++i) { | 59 for (int i = 1; i < 4100; ++i) { |
| 60 EXPECT_EQ(0x10000, libyuv::FixedDiv(i, i)); | 60 EXPECT_EQ(0x10000, libyuv::FixedDiv(i, i)); |
| 61 EXPECT_EQ(0x20000, libyuv::FixedDiv(i * 2, i)); | 61 EXPECT_EQ(0x20000, libyuv::FixedDiv(i * 2, i)); |
| 62 EXPECT_EQ(0x30000, libyuv::FixedDiv(i * 3, i)); | 62 EXPECT_EQ(0x30000, libyuv::FixedDiv(i * 3, i)); |
| 63 EXPECT_EQ(0x40000, libyuv::FixedDiv(i * 4, i)); | 63 EXPECT_EQ(0x40000, libyuv::FixedDiv(i * 4, i)); |
| 64 EXPECT_EQ(0x08000, libyuv::FixedDiv(i, i * 2)); | 64 EXPECT_EQ(0x08000, libyuv::FixedDiv(i, i * 2)); |
| 65 EXPECT_NEAR(16384 * 65536 / i, libyuv::FixedDiv(16384, i), 1); | 65 EXPECT_NEAR(16384 * 65536 / i, libyuv::FixedDiv(16384, i), 1); |
| 66 } | 66 } |
| 67 EXPECT_EQ(123 * 65536, libyuv::FixedDiv(123, 1)); | 67 EXPECT_EQ(123 * 65536, libyuv::FixedDiv(123, 1)); |
| 68 | 68 |
| 69 srandom(time(NULL)); | |
| 70 MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num)); | 69 MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num)); |
| 71 MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div)); | 70 MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div)); |
| 72 for (int j = 0; j < 1280; ++j) { | 71 for (int j = 0; j < 1280; ++j) { |
| 73 if (div[j] == 0) { | 72 if (div[j] == 0) { |
| 74 div[j] = 1280; | 73 div[j] = 1280; |
| 75 } | 74 } |
| 76 num[j] &= 0xffff; // Clamp to avoid divide overflow. | 75 num[j] &= 0xffff; // Clamp to avoid divide overflow. |
| 77 } | 76 } |
| 78 for (int i = 0; i < benchmark_pixels_div1280_; ++i) { | 77 for (int i = 0; i < benchmark_pixels_div1280_; ++i) { |
| 79 for (int j = 0; j < 1280; ++j) { | 78 for (int j = 0; j < 1280; ++j) { |
| 80 result_opt[j] = libyuv::FixedDiv(num[j], div[j]); | 79 result_opt[j] = libyuv::FixedDiv(num[j], div[j]); |
| 81 } | 80 } |
| 82 } | 81 } |
| 83 for (int j = 0; j < 1280; ++j) { | 82 for (int j = 0; j < 1280; ++j) { |
| 84 result_c[j] = libyuv::FixedDiv_C(num[j], div[j]); | 83 result_c[j] = libyuv::FixedDiv_C(num[j], div[j]); |
| 85 EXPECT_NEAR(result_c[j], result_opt[j], 1); | 84 EXPECT_NEAR(result_c[j], result_opt[j], 1); |
| 86 } | 85 } |
| 87 } | 86 } |
| 88 | 87 |
| 89 TEST_F(libyuvTest, TestFixedDiv_Opt) { | 88 TEST_F(libyuvTest, TestFixedDiv_Opt) { |
| 90 int num[1280]; | 89 int num[1280]; |
| 91 int div[1280]; | 90 int div[1280]; |
| 92 int result_opt[1280]; | 91 int result_opt[1280]; |
| 93 int result_c[1280]; | 92 int result_c[1280]; |
| 94 | 93 |
| 95 srandom(time(NULL)); | |
| 96 MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num)); | 94 MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num)); |
| 97 MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div)); | 95 MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div)); |
| 98 for (int j = 0; j < 1280; ++j) { | 96 for (int j = 0; j < 1280; ++j) { |
| 99 num[j] &= 4095; // Make numerator smaller. | 97 num[j] &= 4095; // Make numerator smaller. |
| 100 div[j] &= 4095; // Make divisor smaller. | 98 div[j] &= 4095; // Make divisor smaller. |
| 101 if (div[j] == 0) { | 99 if (div[j] == 0) { |
| 102 div[j] = 1280; | 100 div[j] = 1280; |
| 103 } | 101 } |
| 104 } | 102 } |
| 105 | 103 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 120 EXPECT_NEAR(result_c[j], result_opt[j], 1); | 118 EXPECT_NEAR(result_c[j], result_opt[j], 1); |
| 121 } | 119 } |
| 122 } | 120 } |
| 123 | 121 |
| 124 TEST_F(libyuvTest, TestFixedDiv1_Opt) { | 122 TEST_F(libyuvTest, TestFixedDiv1_Opt) { |
| 125 int num[1280]; | 123 int num[1280]; |
| 126 int div[1280]; | 124 int div[1280]; |
| 127 int result_opt[1280]; | 125 int result_opt[1280]; |
| 128 int result_c[1280]; | 126 int result_c[1280]; |
| 129 | 127 |
| 130 srandom(time(NULL)); | |
| 131 MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num)); | 128 MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num)); |
| 132 MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div)); | 129 MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div)); |
| 133 for (int j = 0; j < 1280; ++j) { | 130 for (int j = 0; j < 1280; ++j) { |
| 134 num[j] &= 4095; // Make numerator smaller. | 131 num[j] &= 4095; // Make numerator smaller. |
| 135 div[j] &= 4095; // Make divisor smaller. | 132 div[j] &= 4095; // Make divisor smaller. |
| 136 if (div[j] <= 1) { | 133 if (div[j] <= 1) { |
| 137 div[j] = 1280; | 134 div[j] = 1280; |
| 138 } | 135 } |
| 139 } | 136 } |
| 140 | 137 |
| 141 int has_x86 = TestCpuFlag(kCpuHasX86); | 138 int has_x86 = TestCpuFlag(kCpuHasX86); |
| 142 for (int i = 0; i < benchmark_pixels_div1280_; ++i) { | 139 for (int i = 0; i < benchmark_pixels_div1280_; ++i) { |
| 143 if (has_x86) { | 140 if (has_x86) { |
| 144 for (int j = 0; j < 1280; ++j) { | 141 for (int j = 0; j < 1280; ++j) { |
| 145 result_opt[j] = libyuv::FixedDiv1(num[j], div[j]); | 142 result_opt[j] = libyuv::FixedDiv1(num[j], div[j]); |
| 146 } | 143 } |
| 147 } else { | 144 } else { |
| 148 for (int j = 0; j < 1280; ++j) { | 145 for (int j = 0; j < 1280; ++j) { |
| 149 result_opt[j] = libyuv::FixedDiv1_C(num[j], div[j]); | 146 result_opt[j] = libyuv::FixedDiv1_C(num[j], div[j]); |
| 150 } | 147 } |
| 151 } | 148 } |
| 152 } | 149 } |
| 153 for (int j = 0; j < 1280; ++j) { | 150 for (int j = 0; j < 1280; ++j) { |
| 154 result_c[j] = libyuv::FixedDiv1_C(num[j], div[j]); | 151 result_c[j] = libyuv::FixedDiv1_C(num[j], div[j]); |
| 155 EXPECT_NEAR(result_c[j], result_opt[j], 1); | 152 EXPECT_NEAR(result_c[j], result_opt[j], 1); |
| 156 } | 153 } |
| 157 } | 154 } |
| 158 | 155 |
| 159 } // namespace libyuv | 156 } // namespace libyuv |
| OLD | NEW |