180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc. 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "Test.h" 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkRandom.h" 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include <math.h> 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustruct BoolTable { 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int8_t zero, pos, neg, toBool, sign; 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void bool_table_test(skiatest::Reporter* reporter, 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const Sk64& a, const BoolTable& table) 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a.isZero() != a.nonZero()); 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, !a.isZero() == !table.zero); 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, !a.isPos() == !table.pos); 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, !a.isNeg() == !table.neg); 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a.getSign() == table.sign); 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SkLONGLONG 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static SkLONGLONG asLL(const Sk64& a) 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return ((SkLONGLONG)a.fHi << 32) | a.fLo; 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic void TestSk64(skiatest::Reporter* reporter) { 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum BoolTests { 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kZero_BoolTest, 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kPos_BoolTest, 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru kNeg_BoolTest 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static const BoolTable gBoolTable[] = { 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 1, 0, 0, 0, 0 }, 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 0, 1, 0, 1, 1 }, 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 0, 0, 1, 1, -1 } 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru }; 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Sk64 a, b, c; 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.fHi = a.fLo = 0; 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.set(0); 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c.setZero(); 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a == b); 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a == c); 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool_table_test(reporter, a, gBoolTable[kZero_BoolTest]); 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.fHi = 0; a.fLo = 5; 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.set(5); 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a == b); 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a.is32() && a.get32() == 5 && !a.is64()); 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool_table_test(reporter, a, gBoolTable[kPos_BoolTest]); 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.fHi = -1; a.fLo = (uint32_t)-5; 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.set(-5); 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a == b); 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a.is32() && a.get32() == -5 && !a.is64()); 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool_table_test(reporter, a, gBoolTable[kNeg_BoolTest]); 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.setZero(); 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.set(6); 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c.set(-6); 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a != b && b != c && a != c); 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, !(a == b) && !(a == b) && !(a == b)); 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a < b && b > a && a <= b && b >= a); 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, c < a && a > c && c <= a && a >= c); 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, c < b && b > c && c <= b && b >= c); 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Now test add/sub 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkRandom rand; 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int i; 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (i = 0; i < 1000; i++) 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int aa = rand.nextS() >> 1; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int bb = rand.nextS() >> 1; 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.set(aa); 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.set(bb); 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, a.get32() == aa && b.get32() == bb); 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.add(bb); 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, c.get32() == aa + bb); 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.add(-bb); 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, c.get32() == aa - bb); 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.add(b); 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, c.get32() == aa + bb); 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.sub(b); 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, c.get32() == aa - bb); 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SkLONGLONG 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (i = 0; i < 1000; i++) 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru rand.next64(&a); //a.fHi >>= 1; // avoid overflow 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru rand.next64(&b); //b.fHi >>= 1; // avoid overflow 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (!(i & 3)) // want to explicitly test these cases 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.fLo = 0; 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.fLo = 0; 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else if (!(i & 7)) // want to explicitly test these cases 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru a.fHi = 0; 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru b.fHi = 0; 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkLONGLONG aa = asLL(a); 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkLONGLONG bb = asLL(b); 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, (a < b) == (aa < bb)); 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, (a <= b) == (aa <= bb)); 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, (a > b) == (aa > bb)); 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, (a >= b) == (aa >= bb)); 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, (a == b) == (aa == bb)); 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, (a != b) == (aa != bb)); 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.add(b); 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == aa + bb); 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.sub(b); 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == aa - bb); 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.rsub(b); 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == bb - aa); 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.negate(); 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == -aa); 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int bits = rand.nextU() & 63; 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.shiftLeft(bits); 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == (aa << bits)); 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.shiftRight(bits); 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == (aa >> bits)); 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c = a; c.roundRight(bits); 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkLONGLONG tmp; 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru tmp = aa; 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (bits > 0) 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru tmp += (SkLONGLONG)1 << (bits - 1); 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == (tmp >> bits)); 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru c.setMul(a.fHi, b.fHi); 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru tmp = (SkLONGLONG)a.fHi * b.fHi; 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, asLL(c) == tmp); 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (i = 0; i < 100000; i++) 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Sk64 wide; 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int32_t denom = rand.nextS(); 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru while (denom == 0) 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru denom = rand.nextS(); 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru wide.setMul(rand.nextS(), rand.nextS()); 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkLONGLONG check = wide.getLongLong(); 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru wide.div(denom, Sk64::kTrunc_DivOption); 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru check /= denom; 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkLONGLONG w = wide.getLongLong(); 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, check == w); 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru wide.setMul(rand.nextS(), rand.nextS()); 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru wide.abs(); 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru denom = wide.getSqrt(); 17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int32_t ck = (int32_t)sqrt((double)wide.getLongLong()); 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int diff = denom - ck; 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, SkAbs32(diff) <= 1); 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru wide.setMul(rand.nextS(), rand.nextS()); 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru Sk64 dwide; 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dwide.setMul(rand.nextS(), rand.nextS()); 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkFixed fixdiv = wide.getFixedDiv(dwide); 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru double dnumer = (double)wide.getLongLong(); 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru double ddenom = (double)dwide.getLongLong(); 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru double ddiv = dnumer / ddenom; 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkFixed dfixdiv; 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (ddiv >= (double)SK_MaxS32 / (double)SK_Fixed1) 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dfixdiv = SK_MaxS32; 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else if (ddiv <= -(double)SK_MaxS32 / (double)SK_Fixed1) 18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dfixdiv = SK_MinS32; 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dfixdiv = SkFloatToFixed(dnumer / ddenom); 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru diff = fixdiv - dfixdiv; 19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkAbs32(diff) > 1) { 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf(" %d === numer %g denom %g div %g xdiv %x fxdiv %x\n", 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru i, dnumer, ddenom, ddiv, dfixdiv, fixdiv); 19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru REPORTER_ASSERT(reporter, SkAbs32(diff) <= 1); 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "TestClassDef.h" 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_TESTCLASS("Sk64", Sk64TestClass, TestSk64) 204