aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/Sk64.cpp
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-05 14:34:31 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-05 14:34:31 -0800
commit3298d565d8a70b84f28b455f6289293883c85494 (patch)
tree3ca78e8673ac147dfcc86e9feeb2155b40ef9005 /src/core/Sk64.cpp
parent0910916c0f7b951ee55c4b7c6358295b9bca0565 (diff)
downloadexternal_skia-3298d565d8a70b84f28b455f6289293883c85494.zip
external_skia-3298d565d8a70b84f28b455f6289293883c85494.tar.gz
external_skia-3298d565d8a70b84f28b455f6289293883c85494.tar.bz2
auto import from //depot/cupcake/@136594
Diffstat (limited to 'src/core/Sk64.cpp')
-rw-r--r--src/core/Sk64.cpp205
1 files changed, 0 insertions, 205 deletions
diff --git a/src/core/Sk64.cpp b/src/core/Sk64.cpp
index 2715d23..4381b50 100644
--- a/src/core/Sk64.cpp
+++ b/src/core/Sk64.cpp
@@ -368,208 +368,3 @@ SkFixed Sk64::getFixedDiv(const Sk64& denom) const
return SkApplySign(result, sign);
}
-///////////////////////////////////////////////////////////////////////
-
-#ifdef SK_DEBUG
-
-#include "SkRandom.h"
-#include <math.h>
-
-#ifdef SK_SUPPORT_UNITTEST
-struct BoolTable {
- int8_t zero, pos, neg, toBool, sign;
-};
-
-static void bool_table_test(const Sk64& a, const BoolTable& table)
-{
- SkASSERT(a.isZero() != a.nonZero());
-
- SkASSERT(!a.isZero() == !table.zero);
- SkASSERT(!a.isPos() == !table.pos);
- SkASSERT(!a.isNeg() == !table.neg);
- SkASSERT(a.getSign() == table.sign);
-}
-
-#ifdef SkLONGLONG
- static SkLONGLONG asLL(const Sk64& a)
- {
- return ((SkLONGLONG)a.fHi << 32) | a.fLo;
- }
-#endif
-#endif
-
-void Sk64::UnitTest()
-{
-#ifdef SK_SUPPORT_UNITTEST
- enum BoolTests {
- kZero_BoolTest,
- kPos_BoolTest,
- kNeg_BoolTest
- };
- static const BoolTable gBoolTable[] = {
- { 1, 0, 0, 0, 0 },
- { 0, 1, 0, 1, 1 },
- { 0, 0, 1, 1, -1 }
- };
-
- Sk64 a, b, c;
-
- a.fHi = a.fLo = 0;
- b.set(0);
- c.setZero();
- SkASSERT(a == b);
- SkASSERT(a == c);
- bool_table_test(a, gBoolTable[kZero_BoolTest]);
-
- a.fHi = 0; a.fLo = 5;
- b.set(5);
- SkASSERT(a == b);
- SkASSERT(a.is32() && a.get32() == 5 && !a.is64());
- bool_table_test(a, gBoolTable[kPos_BoolTest]);
-
- a.fHi = -1; a.fLo = (uint32_t)-5;
- b.set(-5);
- SkASSERT(a == b);
- SkASSERT(a.is32() && a.get32() == -5 && !a.is64());
- bool_table_test(a, gBoolTable[kNeg_BoolTest]);
-
- a.setZero();
- b.set(6);
- c.set(-6);
- SkASSERT(a != b && b != c && a != c);
- SkASSERT(!(a == b) && !(a == b) && !(a == b));
- SkASSERT(a < b && b > a && a <= b && b >= a);
- SkASSERT(c < a && a > c && c <= a && a >= c);
- SkASSERT(c < b && b > c && c <= b && b >= c);
-
- // Now test add/sub
-
- SkRandom rand;
- int i;
-
- for (i = 0; i < 1000; i++)
- {
- int aa = rand.nextS() >> 1;
- int bb = rand.nextS() >> 1;
- a.set(aa);
- b.set(bb);
- SkASSERT(a.get32() == aa && b.get32() == bb);
- c = a; c.add(bb);
- SkASSERT(c.get32() == aa + bb);
- c = a; c.add(-bb);
- SkASSERT(c.get32() == aa - bb);
- c = a; c.add(b);
- SkASSERT(c.get32() == aa + bb);
- c = a; c.sub(b);
- SkASSERT(c.get32() == aa - bb);
- }
-
-#ifdef SkLONGLONG
- for (i = 0; i < 1000; i++)
- {
- rand.next64(&a); //a.fHi >>= 1; // avoid overflow
- rand.next64(&b); //b.fHi >>= 1; // avoid overflow
-
- if (!(i & 3)) // want to explicitly test these cases
- {
- a.fLo = 0;
- b.fLo = 0;
- }
- else if (!(i & 7)) // want to explicitly test these cases
- {
- a.fHi = 0;
- b.fHi = 0;
- }
-
- SkLONGLONG aa = asLL(a);
- SkLONGLONG bb = asLL(b);
-
- SkASSERT((a < b) == (aa < bb));
- SkASSERT((a <= b) == (aa <= bb));
- SkASSERT((a > b) == (aa > bb));
- SkASSERT((a >= b) == (aa >= bb));
- SkASSERT((a == b) == (aa == bb));
- SkASSERT((a != b) == (aa != bb));
-
- c = a; c.add(b);
- SkASSERT(asLL(c) == aa + bb);
- c = a; c.sub(b);
- SkASSERT(asLL(c) == aa - bb);
- c = a; c.rsub(b);
- SkASSERT(asLL(c) == bb - aa);
- c = a; c.negate();
- SkASSERT(asLL(c) == -aa);
-
- int bits = rand.nextU() & 63;
- c = a; c.shiftLeft(bits);
- SkASSERT(asLL(c) == (aa << bits));
- c = a; c.shiftRight(bits);
- SkASSERT(asLL(c) == (aa >> bits));
- c = a; c.roundRight(bits);
-
- SkLONGLONG tmp;
-
- tmp = aa;
- if (bits > 0)
- tmp += (SkLONGLONG)1 << (bits - 1);
- SkASSERT(asLL(c) == (tmp >> bits));
-
- c.setMul(a.fHi, b.fHi);
- tmp = (SkLONGLONG)a.fHi * b.fHi;
- SkASSERT(asLL(c) == tmp);
- }
-
-
- for (i = 0; i < 100000; i++)
- {
- Sk64 wide;
- int32_t denom = rand.nextS();
-
- while (denom == 0)
- denom = rand.nextS();
- wide.setMul(rand.nextS(), rand.nextS());
- SkLONGLONG check = wide.getLongLong();
-
- wide.div(denom, Sk64::kTrunc_DivOption);
- check /= denom;
- SkLONGLONG w = wide.getLongLong();
-
- SkASSERT(check == w);
-
-#ifdef SK_CAN_USE_FLOATx
- wide.setMul(rand.nextS(), rand.nextS());
- wide.abs();
- denom = wide.getSqrt();
- int32_t ck = (int32_t)sqrt((double)wide.getLongLong());
- int diff = denom - ck;
- SkASSERT(SkAbs32(diff) <= 1);
-
- wide.setMul(rand.nextS(), rand.nextS());
- Sk64 dwide;
- dwide.setMul(rand.nextS(), rand.nextS());
- SkFixed fixdiv = wide.getFixedDiv(dwide);
- double dnumer = (double)wide.getLongLong();
- double ddenom = (double)dwide.getLongLong();
- double ddiv = dnumer / ddenom;
- SkFixed dfixdiv;
- if (ddiv >= (double)SK_MaxS32 / (double)SK_Fixed1)
- dfixdiv = SK_MaxS32;
- else if (ddiv <= -(double)SK_MaxS32 / (double)SK_Fixed1)
- dfixdiv = SK_MinS32;
- else
- dfixdiv = SkFloatToFixed(dnumer / ddenom);
- diff = fixdiv - dfixdiv;
-
- if (SkAbs32(diff) > 1) {
- SkDebugf(" %d === numer %g denom %g div %g xdiv %x fxdiv %x\n",
- i, dnumer, ddenom, ddiv, dfixdiv, fixdiv);
- }
-// SkASSERT(SkAbs32(diff) <= 1);
-#endif
- }
-#endif
-#endif
-}
-
-#endif
-