diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-05 14:34:31 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-05 14:34:31 -0800 |
commit | 3298d565d8a70b84f28b455f6289293883c85494 (patch) | |
tree | 3ca78e8673ac147dfcc86e9feeb2155b40ef9005 /src/core/Sk64.cpp | |
parent | 0910916c0f7b951ee55c4b7c6358295b9bca0565 (diff) | |
download | external_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.cpp | 205 |
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 - |