Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Unified Diff: tests/SkNxTest.cpp

Issue 1184113003: Thorough tests for saturatedAdd and mulDiv255Round. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: fix portable saturatedAdd() Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkNx.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/SkNxTest.cpp
diff --git a/tests/SkNxTest.cpp b/tests/SkNxTest.cpp
index 2463b46f089105a8f4e43191128c91fb7dae2e95..eab625d41e3fe2f6e71d2ac2e4658850d9859e2a 100644
--- a/tests/SkNxTest.cpp
+++ b/tests/SkNxTest.cpp
@@ -5,6 +5,7 @@
* found in the LICENSE file.
*/
+#include "Sk4px.h"
#include "SkNx.h"
#include "SkRandom.h"
#include "Test.h"
@@ -154,3 +155,38 @@ DEF_TEST(SkNi_min, r) {
}}
#endif
}
+
+DEF_TEST(SkNi_saturatedAdd, r) {
+ for (int a = 0; a < (1<<8); a++) {
+ for (int b = 0; b < (1<<8); b++) {
+ int exact = a+b;
+ if (exact > 255) { exact = 255; }
+ if (exact < 0) { exact = 0; }
+
+ REPORTER_ASSERT(r, Sk16b(a).saturatedAdd(Sk16b(b)).kth<0>() == exact);
+ }
+ }
+}
+
+DEF_TEST(Sk4px_muldiv255round, r) {
+ for (int a = 0; a < (1<<8); a++) {
+ for (int b = 0; b < (1<<8); b++) {
+ int exact = (a*b+127)/255;
+
+ // Duplicate a and b 16x each.
+ Sk4px av((SkAlpha)a),
+ bv((SkAlpha)b);
+
+ // This way should always be exactly correct.
+ int correct = av.mulWiden(bv).div255RoundNarrow().kth<0>();
+ REPORTER_ASSERT(r, correct == exact);
+
+ // We're a bit more flexible on this method: correct for 0 or 255, otherwise off by <=1.
+ int fast = av.fastMulDiv255Round(bv).kth<0>();
+ REPORTER_ASSERT(r, fast-exact >= -1 && fast-exact <= 1);
+ if (a == 0 || a == 255 || b == 0 || b == 255) {
+ REPORTER_ASSERT(r, fast == exact);
+ }
+ }
+ }
+}
« no previous file with comments | « src/core/SkNx.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698