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