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...) 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...) 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 |