VirtualBox

Changeset 19945 in vbox


Ignore:
Timestamp:
May 23, 2009 9:48:25 PM (16 years ago)
Author:
vboxsync
Message:

tstAvl -> tstRTAvl; use RTTest.

Location:
trunk/src/VBox/Runtime/testcase
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/Makefile.kmk

    r19933 r19945  
    4949#
    5050PROGRAMS += \
    51         tstAvl \
     51        tstRTAvl \
    5252        tstBase64 \
    5353        tstBitOperations \
     
    136136#
    137137
    138 tstAvl_SOURCES = tstAvl.cpp
     138tstRTAvl_SOURCES = tstRTAvl.cpp
    139139
    140140tstBase64_TEMPLATE = VBOXR3TSTEXE
  • trunk/src/VBox/Runtime/testcase/tstRTAvl.cpp

    r19943 r19945  
    11/* $Id$ */
    22/** @file
    3  * IPRT Testcase - Avl trees.
     3 * IPRT Testcase - AVL trees.
    44 */
    55
    66/*
    7  * Copyright (C) 2006-2007 Sun Microsystems, Inc.
     7 * Copyright (C) 2006-2009 Sun Microsystems, Inc.
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2929 */
    3030
    31 
    3231/*******************************************************************************
    3332*   Header Files                                                               *
    3433*******************************************************************************/
    3534#include <iprt/avl.h>
     35
    3636#include <iprt/asm.h>
     37#include <iprt/initterm.h>
     38#include <iprt/mem.h>
     39#include <iprt/rand.h>
    3740#include <iprt/stdarg.h>
    3841#include <iprt/string.h>
    39 
    40 #include <stdio.h>
    41 #include <stdlib.h> /* rand */
     42#include <iprt/test.h>
    4243
    4344
     
    6061
    6162
    62 /**
    63  * Gets a random number between 0 and Max.
    64  *
    65  * @return random number.
    66  * @param   Max     The max number. (exclusive)
    67  */
    68 uint32_t Random(uint32_t Max)
    69 {
    70     unsigned rc = rand();
    71     if (Max < RAND_MAX)
    72     {
    73         while (rc >= Max)
    74             rc /= 3;
    75     }
    76     else
    77     {
    78         /// @todo...
    79     }
    80     return rc;
    81 }
     63/*******************************************************************************
     64*   Global Variables                                                           *
     65*******************************************************************************/
     66static RTTEST g_hTest;
     67static RTRAND g_hRand;
    8268
    8369
     
    8874 * @param   MaxKey      The max key value for the tracker. (exclusive)
    8975 */
    90 PTRACKER TrackerCreate(uint32_t MaxKey)
     76static PTRACKER TrackerCreate(uint32_t MaxKey)
    9177{
    9278    uint32_t cbBitmap = (MaxKey + sizeof(uint32_t) * sizeof(uint8_t) - 1) / sizeof(uint8_t);
    93     PTRACKER pTracker = (PTRACKER)calloc(1, RT_OFFSETOF(TRACKER, abBitmap[cbBitmap]));
     79    PTRACKER pTracker = (PTRACKER)RTMemAllocZ(RT_OFFSETOF(TRACKER, abBitmap[cbBitmap]));
    9480    if (pTracker)
    9581    {
     
    9783        pTracker->LastAllocatedKey = MaxKey;
    9884        pTracker->cbBitmap = cbBitmap;
     85        Assert(pTracker->cSetBits == 0);
    9986    }
    10087    return pTracker;
     
    10794 * @param   pTracker        The tracker.
    10895 */
    109 void TrackerDestroy(PTRACKER pTracker)
    110 {
    111     if (pTracker)
    112         free(pTracker);
     96static void TrackerDestroy(PTRACKER pTracker)
     97{
     98    RTMemFree(pTracker);
    11399}
    114100
     
    122108 * @param   KeyLast     The last key in the range. (inclusive)
    123109 */
    124 bool TrackerInsert(PTRACKER pTracker, uint32_t Key, uint32_t KeyLast)
     110static bool TrackerInsert(PTRACKER pTracker, uint32_t Key, uint32_t KeyLast)
    125111{
    126112    bool fRc = !ASMBitTestAndSet(pTracker->abBitmap, Key);
     
    147133 * @param   KeyLast     The last key in the range. (inclusive)
    148134 */
    149 bool TrackerRemove(PTRACKER pTracker, uint32_t Key, uint32_t KeyLast)
     135static bool TrackerRemove(PTRACKER pTracker, uint32_t Key, uint32_t KeyLast)
    150136{
    151137    bool fRc = ASMBitTestAndClear(pTracker->abBitmap, Key);
     
    174160 * @remark  The caller has to call TrackerInsert.
    175161 */
    176 bool TrackerNewRandomEx(PTRACKER pTracker, uint32_t *pKey, uint32_t *pKeyLast, uint32_t cMaxKeys)
     162static bool TrackerNewRandomEx(PTRACKER pTracker, uint32_t *pKey, uint32_t *pKeyLast, uint32_t cMaxKeys)
    177163{
    178164    /*
    179165     * Find a key.
    180166     */
    181     uint32_t Key = Random(pTracker->MaxKey);
     167    uint32_t Key = RTRandAdvU32Ex(g_hRand, 0, pTracker->MaxKey - 1);
    182168    if (ASMBitTest(pTracker->abBitmap, Key))
    183169    {
     
    194180            {
    195181                const uint32_t KeyPrev = Key;
    196                 Key = Random(KeyPrev);
     182                Key = RTRandAdvU32Ex(g_hRand, 0, KeyPrev - 1);
    197183                if (!ASMBitTest(pTracker->abBitmap, Key))
    198184                    break;
     
    215201    else
    216202    {
    217         uint32_t cKeys = Random(RT_MIN(pTracker->MaxKey - Key, cMaxKeys));
     203        uint32_t cKeys = RTRandAdvU32Ex(g_hRand, 0, RT_MIN(pTracker->MaxKey - Key, cMaxKeys - 1));
    218204        KeyLast = Key + cKeys;
    219205        int Key2 = ASMBitNextSet(pTracker->abBitmap, RT_ALIGN_32(KeyLast, 32), Key);
     
    241227 * @remark  The caller has to call TrackerInsert.
    242228 */
    243 bool TrackerNewRandom(PTRACKER pTracker, uint32_t *pKey)
     229static bool TrackerNewRandom(PTRACKER pTracker, uint32_t *pKey)
    244230{
    245231    return TrackerNewRandomEx(pTracker, pKey, NULL, 1);
     
    255241 * @remark  The caller has to call TrackerRemove.
    256242 */
    257 bool TrackerFindRandom(PTRACKER pTracker, uint32_t *pKey)
    258 {
    259     uint32_t Key = Random(pTracker->MaxKey);
     243static bool TrackerFindRandom(PTRACKER pTracker, uint32_t *pKey)
     244{
     245    uint32_t Key = RTRandAdvU32Ex(g_hRand, 0, pTracker->MaxKey - 1);
    260246    if (!ASMBitTest(pTracker->abBitmap, Key))
    261247    {
     
    268254        else
    269255        {
    270             /* we're missing a ASMBitPrevSet function, so just try another, lower, value.*/
    271             for (;;)
    272             {
    273                 const uint32_t KeyPrev = Key;
    274                 Key = Random(KeyPrev);
    275                 if (ASMBitTest(pTracker->abBitmap, Key))
    276                     break;
    277                 Key2 = ASMBitNextSet(pTracker->abBitmap, RT_ALIGN_32(KeyPrev, 32), Key);
    278                 if (Key2 > 0)
     256            /* we're missing a ASMBitPrevSet function, so here's a quick replacement hack. */
     257            uint32_t *pu32Start = (uint32_t *)&pTracker->abBitmap[0];
     258            uint32_t *pu32Cur   = (uint32_t *)&pTracker->abBitmap[Key >> 8];
     259            while (pu32Cur >= pu32Start)
     260            {
     261                if (*pu32Cur)
    279262                {
    280                     Key = Key2;
    281                     break;
     263                    *pKey = ASMBitLastSetU32(*pu32Cur) - 1 + (uint32_t)((pu32Cur - pu32Start) * 32);
     264                    return true;
    282265                }
    283             }
     266                pu32Cur--;
     267            }
     268            Key2 = ASMBitFirstSet(pTracker->abBitmap, pTracker->MaxKey);
     269            if (Key2 == -1)
     270            {
     271                RTTestIFailed("cSetBits=%u - but ASMBitFirstSet failed to find any", pTracker->cSetBits);
     272                return false;
     273            }
     274            Key = Key2;
    284275        }
    285276    }
     
    301292 * @param   ch  The char.
    302293 */
    303 void ProgressChar(char ch)
    304 {
    305     fputc(ch, stdout);
    306     fflush(stdout);
     294static void ProgressChar(char ch)
     295{
     296    //RTTestIPrintf(RTTESTLVL_INFO, "%c", ch);
     297    RTTestIPrintf(RTTESTLVL_SUB_TEST, "%c", ch);
    307298}
    308299
     
    317308    if (cMax < 10000)
    318309        return;
     310
    319311    va_list va;
    320312    va_start(va, pszFormat);
    321     vfprintf(stdout, pszFormat, va);
     313    //RTTestIPrintfV(RTTESTLVL_INFO, pszFormat, va);
     314    RTTestIPrintfV(RTTESTLVL_SUB_TEST, pszFormat, va);
    322315    va_end(va);
    323316}
     
    338331
    339332
    340 int avlogcphys(unsigned cMax)
     333static int avlogcphys(unsigned cMax)
    341334{
    342335    /*
    343336     * Simple linear insert and remove.
    344337     */
    345     ProgressPrintf(cMax, "tstAVL oGCPhys(%d): linear left", cMax);
    346     PAVLOGCPHYSTREE pTree = (PAVLOGCPHYSTREE)calloc(sizeof(*pTree),1);
     338    if (cMax >= 10000)
     339        RTTestISubF("oGCPhys(%d): linear left", cMax);
     340    PAVLOGCPHYSTREE pTree = (PAVLOGCPHYSTREE)RTMemAllocZ(sizeof(*pTree));
    347341    unsigned i;
    348342    for (i = 0; i < cMax; i++)
    349343    {
    350344        Progress(i, cMax);
    351         PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)malloc(sizeof(*pNode));
     345        PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    352346        pNode->Key = i;
    353347        if (!RTAvloGCPhysInsert(pTree, pNode))
    354348        {
    355             printf("\ntstAvl: FAILURE - oGCPhys - linear left insert i=%d\n", i);
     349            RTTestIFailed("linear left insert i=%d\n", i);
    356350            return 1;
    357351        }
     
    360354        if (RTAvloGCPhysInsert(pTree, &Node))
    361355        {
    362             printf("\ntstAvl: FAILURE - oGCPhys - linear left negative insert i=%d\n", i);
     356            RTTestIFailed("linear left negative insert i=%d\n", i);
    363357            return 1;
    364358        }
     
    372366        if (!pNode)
    373367        {
    374             printf("\ntstAvl: FAILURE - oGCPhys - linear left remove i=%d\n", i);
     368            RTTestIFailed("linear left remove i=%d\n", i);
    375369            return 1;
    376370        }
    377371        memset(pNode, 0xcc, sizeof(*pNode));
    378         free(pNode);
     372        RTMemFree(pNode);
    379373
    380374        /* negative */
     
    382376        if (pNode)
    383377        {
    384             printf("\ntstAvl: FAILURE - oGCPhys - linear left negative remove i=%d\n", i);
     378            RTTestIFailed("linear left negative remove i=%d\n", i);
    385379            return 1;
    386380        }
     
    390384     * Simple linear insert and remove from the right.
    391385     */
    392     ProgressPrintf(cMax, "\ntstAVL oGCPhys(%d): linear right", cMax);
     386    if (cMax >= 10000)
     387        RTTestISubF("oGCPhys(%d): linear right", cMax);
    393388    for (i = 0; i < cMax; i++)
    394389    {
    395390        Progress(i, cMax);
    396         PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)malloc(sizeof(*pNode));
     391        PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    397392        pNode->Key = i;
    398393        if (!RTAvloGCPhysInsert(pTree, pNode))
    399394        {
    400             printf("\ntstAvl: FAILURE - oGCPhys - linear right insert i=%d\n", i);
     395            RTTestIFailed("linear right insert i=%d\n", i);
    401396            return 1;
    402397        }
     
    405400        if (RTAvloGCPhysInsert(pTree, &Node))
    406401        {
    407             printf("\ntstAvl: FAILURE - oGCPhys - linear right negative insert i=%d\n", i);
     402            RTTestIFailed("linear right negative insert i=%d\n", i);
    408403            return 1;
    409404        }
     
    417412        if (!pNode)
    418413        {
    419             printf("\ntstAvl: FAILURE - oGCPhys - linear right remove i=%d\n", i);
     414            RTTestIFailed("linear right remove i=%d\n", i);
    420415            return 1;
    421416        }
    422417        memset(pNode, 0xcc, sizeof(*pNode));
    423         free(pNode);
     418        RTMemFree(pNode);
    424419
    425420        /* negative */
     
    427422        if (pNode)
    428423        {
    429             printf("\ntstAvl: FAILURE - oGCPhys - linear right negative remove i=%d\n", i);
     424            RTTestIFailed("linear right negative remove i=%d\n", i);
    430425            return 1;
    431426        }
     
    435430     * Linear insert but root based removal.
    436431     */
    437     ProgressPrintf(cMax, "\ntstAVL oGCPhys(%d): linear root", cMax);
     432    if (cMax >= 10000)
     433        RTTestISubF("oGCPhys(%d): linear root", cMax);
    438434    for (i = 0; i < cMax; i++)
    439435    {
    440436        Progress(i, cMax);
    441         PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)malloc(sizeof(*pNode));
     437        PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    442438        pNode->Key = i;
    443439        if (!RTAvloGCPhysInsert(pTree, pNode))
    444440        {
    445             printf("\ntstAvl: FAILURE - oGCPhys - linear root insert i=%d\n", i);
     441            RTTestIFailed("linear root insert i=%d\n", i);
    446442            return 1;
    447443        }
     
    450446        if (RTAvloGCPhysInsert(pTree, &Node))
    451447        {
    452             printf("\ntstAvl: FAILURE - oGCPhys - linear root negative insert i=%d\n", i);
     448            RTTestIFailed("linear root negative insert i=%d\n", i);
    453449            return 1;
    454450        }
     
    464460        if (!pNode)
    465461        {
    466             printf("\ntstAvl: FAILURE - oGCPhys - linear root remove i=%d Key=%d\n", i, (unsigned)Key);
     462            RTTestIFailed("linear root remove i=%d Key=%d\n", i, (unsigned)Key);
    467463            return 1;
    468464        }
    469465        memset(pNode, 0xcc, sizeof(*pNode));
    470         free(pNode);
     466        RTMemFree(pNode);
    471467
    472468        /* negative */
     
    474470        if (pNode)
    475471        {
    476             printf("\ntstAvl: FAILURE - oGCPhys - linear root negative remove i=%d Key=%d\n", i, (unsigned)Key);
     472            RTTestIFailed("linear root negative remove i=%d Key=%d\n", i, (unsigned)Key);
    477473            return 1;
    478474        }
     
    480476    if (*pTree)
    481477    {
    482         printf("\ntstAvl: FAILURE - oGCPhys - sparse remove didn't remove it all!\n");
     478        RTTestIFailed("sparse remove didn't remove it all!\n");
    483479        return 1;
    484480    }
     
    488484     */
    489485    const unsigned cMaxSparse = RT_ALIGN(cMax, 32);
    490     ProgressPrintf(cMaxSparse, "\ntstAVL oGCPhys(%d): sparse", cMax);
     486    if (cMaxSparse >= 10000)
     487        RTTestISubF("oGCPhys(%d): sparse", cMax);
    491488    for (i = 0; i < cMaxSparse; i += 8)
    492489    {
    493490        Progress(i, cMaxSparse);
    494         PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)malloc(sizeof(*pNode));
     491        PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    495492        pNode->Key = i;
    496493        if (!RTAvloGCPhysInsert(pTree, pNode))
    497494        {
    498             printf("\ntstAvl: FAILURE - oGCPhys - sparse insert i=%d\n", i);
     495            RTTestIFailed("sparse insert i=%d\n", i);
    499496            return 1;
    500497        }
     
    503500        if (RTAvloGCPhysInsert(pTree, &Node))
    504501        {
    505             printf("\ntstAvl: FAILURE - oGCPhys - sparse negative insert i=%d\n", i);
     502            RTTestIFailed("sparse negative insert i=%d\n", i);
    506503            return 1;
    507504        }
     
    519516            if (!pNode)
    520517            {
    521                 printf("\ntstAvl: FAILURE - oGCPhys - sparse remove i=%d j=%d\n", i, j);
     518                RTTestIFailed("sparse remove i=%d j=%d\n", i, j);
    522519                return 1;
    523520            }
    524521            if (pNode->Key - (unsigned long)i >= 8 * 4)
    525522            {
    526                 printf("\ntstAvl: FAILURE - oGCPhys - sparse remove i=%d j=%d Key=%d\n", i, j, (unsigned)pNode->Key);
     523                RTTestIFailed("sparse remove i=%d j=%d Key=%d\n", i, j, (unsigned)pNode->Key);
    527524                return 1;
    528525            }
    529526            memset(pNode, 0xdd, sizeof(*pNode));
    530             free(pNode);
     527            RTMemFree(pNode);
    531528        }
    532529    }
    533530    if (*pTree)
    534531    {
    535         printf("\ntstAvl: FAILURE - oGCPhys - sparse remove didn't remove it all!\n");
     532        RTTestIFailed("sparse remove didn't remove it all!\n");
    536533        return 1;
    537534    }
    538     free(pTree);
     535    RTMemFree(pTree);
    539536    ProgressPrintf(cMaxSparse, "\n");
    540537    return 0;
     
    544541int avlogcphysRand(unsigned cMax, unsigned cMax2)
    545542{
    546     PAVLOGCPHYSTREE pTree = (PAVLOGCPHYSTREE)calloc(sizeof(*pTree),1);
     543    PAVLOGCPHYSTREE pTree = (PAVLOGCPHYSTREE)RTMemAllocZ(sizeof(*pTree));
    547544    unsigned i;
    548545
     
    550547     * Random tree.
    551548     */
    552     ProgressPrintf(cMax, "tstAVL oGCPhys(%d, %d): random", cMax, cMax2);
     549    if (cMax >= 10000)
     550        RTTestISubF("oGCPhys(%d, %d): random", cMax, cMax2);
    553551    PTRACKER pTracker = TrackerCreate(cMax2);
    554552    if (!pTracker)
    555553    {
    556         printf("tstAVL: Failure - oGCPhys - failed to create %d tracker!\n", cMax2);
     554        RTTestIFailed("failed to create %d tracker!\n", cMax2);
    557555        return 1;
    558556    }
     
    565563        if (!TrackerNewRandom(pTracker, &Key))
    566564        {
    567             printf("\ntstAVL: Failure - oGCPhys - failed to allocate node no. %d\n", i);
     565            RTTestIFailed("failed to allocate node no. %d\n", i);
    568566            TrackerDestroy(pTracker);
    569567            return 1;
    570568        }
    571         PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)malloc(sizeof(*pNode));
     569        PAVLOGCPHYSNODECORE pNode = (PAVLOGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    572570        pNode->Key = Key;
    573571        if (!RTAvloGCPhysInsert(pTree, pNode))
    574572        {
    575             printf("\ntstAvl: FAILURE - oGCPhys - random insert i=%d Key=%#x\n", i, Key);
     573            RTTestIFailed("random insert i=%d Key=%#x\n", i, Key);
    576574            return 1;
    577575        }
     
    580578        if (RTAvloGCPhysInsert(pTree, &Node))
    581579        {
    582             printf("\ntstAvl: FAILURE - oGCPhys - linear negative insert i=%d Key=%#x\n", i, Key);
     580            RTTestIFailed("linear negative insert i=%d Key=%#x\n", i, Key);
    583581            return 1;
    584582        }
     
    595593        if (!TrackerFindRandom(pTracker, &Key))
    596594        {
    597             printf("\ntstAVL: Failure - oGCPhys - failed to find free node no. %d\n", i);
     595            RTTestIFailed("failed to find free node no. %d\n", i);
    598596            TrackerDestroy(pTracker);
    599597            return 1;
     
    603601        if (!pNode)
    604602        {
    605             printf("\ntstAvl: FAILURE - oGCPhys - random remove i=%d Key=%#x\n", i, Key);
     603            RTTestIFailed("random remove i=%d Key=%#x\n", i, Key);
    606604            return 1;
    607605        }
    608606        if (pNode->Key != Key)
    609607        {
    610             printf("\ntstAvl: FAILURE - oGCPhys - random remove i=%d Key=%#x pNode->Key=%#x\n", i, Key, (unsigned)pNode->Key);
     608            RTTestIFailed("random remove i=%d Key=%#x pNode->Key=%#x\n", i, Key, (unsigned)pNode->Key);
    611609            return 1;
    612610        }
    613611        TrackerRemove(pTracker, Key, Key);
    614612        memset(pNode, 0xdd, sizeof(*pNode));
    615         free(pNode);
     613        RTMemFree(pNode);
    616614    }
    617615    if (*pTree)
    618616    {
    619         printf("\ntstAvl: FAILURE - oGCPhys - random remove didn't remove it all!\n");
     617        RTTestIFailed("random remove didn't remove it all!\n");
    620618        return 1;
    621619    }
    622620    ProgressPrintf(cMax, "\n");
    623621    TrackerDestroy(pTracker);
    624     free(pTree);
     622    RTMemFree(pTree);
    625623    return 0;
    626624}
     
    633631    unsigned            j;
    634632    unsigned            k;
    635     PAVLROGCPHYSTREE    pTree = (PAVLROGCPHYSTREE)calloc(sizeof(*pTree), 1);
     633    PAVLROGCPHYSTREE    pTree = (PAVLROGCPHYSTREE)RTMemAllocZ(sizeof(*pTree));
    636634
    637635    AssertCompileSize(AVLOGCPHYSNODECORE, 24);
    638636    AssertCompileSize(AVLROGCPHYSNODECORE, 32);
    639637
     638    RTTestISubF("RTAvlroGCPhys");
     639
    640640    /*
    641641     * Simple linear insert, get and remove.
     
    644644    for (i = 0; i < 65536; i += 4)
    645645    {
    646         PAVLROGCPHYSNODECORE pNode = (PAVLROGCPHYSNODECORE)malloc(sizeof(*pNode));
     646        PAVLROGCPHYSNODECORE pNode = (PAVLROGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    647647        pNode->Key = i;
    648648        pNode->KeyLast = i + 3;
    649649        if (!RTAvlroGCPhysInsert(pTree, pNode))
    650650        {
    651             printf("tstAvl: FAILURE - roGCPhys - linear insert i=%d\n", (unsigned)i);
     651            RTTestIFailed("linear insert i=%d\n", (unsigned)i);
    652652            return 1;
    653653        }
     
    663663                if (RTAvlroGCPhysInsert(pTree, &Node))
    664664                {
    665                     printf("tstAvl: FAILURE - roGCPhys - linear negative insert i=%d j=%d k=%d\n", i, j, k);
     665                    RTTestIFailed("linear negative insert i=%d j=%d k=%d\n", i, j, k);
    666666                    return 1;
    667667                }
     
    676676        if (!pNode)
    677677        {
    678             printf("tstAvl: FAILURE - roGCPhys - linear get i=%d\n", i);
     678            RTTestIFailed("linear get i=%d\n", i);
    679679            return 1;
    680680        }
    681681        if (pNode->Key > i || pNode->KeyLast < i)
    682682        {
    683             printf("tstAvl: FAILURE - roGCPhys - linear get i=%d Key=%d KeyLast=%d\n", i, (unsigned)pNode->Key, (unsigned)pNode->KeyLast);
     683            RTTestIFailed("linear get i=%d Key=%d KeyLast=%d\n", i, (unsigned)pNode->Key, (unsigned)pNode->KeyLast);
    684684            return 1;
    685685        }
     
    689689            if (RTAvlroGCPhysRangeGet(pTree, i + j) != pNode)
    690690            {
    691                 printf("tstAvl: FAILURE - roGCPhys - linear range get i=%d j=%d\n", i, j);
     691                RTTestIFailed("linear range get i=%d j=%d\n", i, j);
    692692                return 1;
    693693            }
     
    699699            ||  RTAvlroGCPhysGet(pTree, i + 3))
    700700        {
    701             printf("tstAvl: FAILURE - roGCPhys - linear negative get i=%d + n\n", i);
     701            RTTestIFailed("linear negative get i=%d + n\n", i);
    702702            return 1;
    703703        }
     
    711711        if (!pNode)
    712712        {
    713             printf("tstAvl: FAILURE - roGCPhys - linear remove i=%d\n", i);
     713            RTTestIFailed("linear remove i=%d\n", i);
    714714            return 1;
    715715        }
    716716        memset(pNode, 0xcc, sizeof(*pNode));
    717         free(pNode);
     717        RTMemFree(pNode);
    718718
    719719        /* negative */
     
    723723            ||  RTAvlroGCPhysRemove(pTree, i + 3))
    724724        {
    725             printf("tstAvl: FAILURE - roGCPhys - linear negative remove i=%d + n\n", i);
     725            RTTestIFailed("linear negative remove i=%d + n\n", i);
    726726            return 1;
    727727        }
     
    733733    for (i = 0; i < 65536; i += 8)
    734734    {
    735         PAVLROGCPHYSNODECORE pNode = (PAVLROGCPHYSNODECORE)malloc(sizeof(*pNode));
     735        PAVLROGCPHYSNODECORE pNode = (PAVLROGCPHYSNODECORE)RTMemAlloc(sizeof(*pNode));
    736736        pNode->Key = i;
    737737        pNode->KeyLast = i + 3;
    738738        if (!RTAvlroGCPhysInsert(pTree, pNode))
    739739        {
    740             printf("tstAvl: FAILURE - roGCPhys - sparse insert i=%d\n", i);
     740            RTTestIFailed("sparse insert i=%d\n", i);
    741741            return 1;
    742742        }
     
    753753                if (RTAvlroGCPhysInsert(pTree, &Node))
    754754                {
    755                     printf("tstAvl: FAILURE - roGCPhys - sparse negative insert i=%d j=%d k=%d\n", i, j, k);
     755                    RTTestIFailed("sparse negative insert i=%d j=%d k=%d\n", i, j, k);
    756756                    return 1;
    757757                }
     
    772772            if (!pNode)
    773773            {
    774                 printf("tstAvl: FAILURE - roGCPhys - sparse get i=%d j=%d KeyBase=%d\n", i, j, (unsigned)KeyBase);
     774                RTTestIFailed("sparse get i=%d j=%d KeyBase=%d\n", i, j, (unsigned)KeyBase);
    775775                return 1;
    776776            }
    777777            if (pNode->Key > KeyBase || pNode->KeyLast < KeyBase)
    778778            {
    779                 printf("tstAvl: FAILURE - roGCPhys - sparse get i=%d j=%d KeyBase=%d pNode->Key=%d\n", i, j, (unsigned)KeyBase, (unsigned)pNode->Key);
     779                RTTestIFailed("sparse get i=%d j=%d KeyBase=%d pNode->Key=%d\n", i, j, (unsigned)KeyBase, (unsigned)pNode->Key);
    780780                return 1;
    781781            }
     
    784784                if (RTAvlroGCPhysRangeGet(pTree, k) != pNode)
    785785                {
    786                     printf("tstAvl: FAILURE - roGCPhys - sparse range get i=%d j=%d k=%d\n", i, j, k);
     786                    RTTestIFailed("sparse range get i=%d j=%d k=%d\n", i, j, k);
    787787                    return 1;
    788788                }
     
    795795                    &&  RTAvlroGCPhysGet(pTree, k))
    796796                {
    797                     printf("tstAvl: FAILURE - roGCPhys - sparse negative get i=%d j=%d k=%d\n", i, j, k);
     797                    RTTestIFailed("sparse negative get i=%d j=%d k=%d\n", i, j, k);
    798798                    return 1;
    799799                }
     
    803803                if (RTAvlroGCPhysRangeGet(pTree, k))
    804804                {
    805                     printf("tstAvl: FAILURE - roGCPhys - sparse negative range get i=%d j=%d k=%d\n", i, j, k);
     805                    RTTestIFailed("sparse negative range get i=%d j=%d k=%d\n", i, j, k);
    806806                    return 1;
    807807                }
     
    811811                if (RTAvlroGCPhysRangeGet(pTree, k))
    812812                {
    813                     printf("tstAvl: FAILURE - roGCPhys - sparse negative range get i=%d j=%d k=%d\n", i, j, k);
     813                    RTTestIFailed("sparse negative range get i=%d j=%d k=%d\n", i, j, k);
    814814                    return 1;
    815815                }
     
    820820            if (RTAvlroGCPhysRangeRemove(pTree, Key) != pNode)
    821821            {
    822                 printf("tstAvl: FAILURE - roGCPhys - sparse remove i=%d j=%d Key=%d\n", i, j, (unsigned)Key);
     822                RTTestIFailed("sparse remove i=%d j=%d Key=%d\n", i, j, (unsigned)Key);
    823823                return 1;
    824824            }
    825825            memset(pNode, 0xdd, sizeof(*pNode));
    826             free(pNode);
     826            RTMemFree(pNode);
    827827        }
    828828    }
    829829    if (*pTree)
    830830    {
    831         printf("tstAvl: FAILURE - roGCPhys - sparse remove didn't remove it all!\n");
     831        RTTestIFailed("sparse remove didn't remove it all!\n");
    832832        return 1;
    833833    }
     
    856856        if (!RTAvlroGCPhysInsert(&s1.Tree, pNode))
    857857        {
    858             printf("tstAvl: FAILURE - roGCPhys - real insert i=%d\n", i);
     858            RTTestIFailed("real insert i=%d\n", i);
    859859            return 1;
    860860        }
    861861        if (RTAvlroGCPhysInsert(&s1.Tree, pNode))
    862862        {
    863             printf("tstAvl: FAILURE - roGCPhys - real negative insert i=%d\n", i);
     863            RTTestIFailed("real negative insert i=%d\n", i);
    864864            return 1;
    865865        }
    866866        if (RTAvlroGCPhysGet(&s1.Tree, pNode->Key) != pNode)
    867867        {
    868             printf("tstAvl: FAILURE - roGCPhys - real get (1) i=%d\n", i);
     868            RTTestIFailed("real get (1) i=%d\n", i);
    869869            return 1;
    870870        }
    871871        if (RTAvlroGCPhysGet(&s1.Tree, pNode->KeyLast) != NULL)
    872872        {
    873             printf("tstAvl: FAILURE - roGCPhys - real negative get (2) i=%d\n", i);
     873            RTTestIFailed("real negative get (2) i=%d\n", i);
    874874            return 1;
    875875        }
    876876        if (RTAvlroGCPhysRangeGet(&s1.Tree, pNode->Key) != pNode)
    877877        {
    878             printf("tstAvl: FAILURE - roGCPhys - real range get (1) i=%d\n", i);
     878            RTTestIFailed("real range get (1) i=%d\n", i);
    879879            return 1;
    880880        }
    881881        if (RTAvlroGCPhysRangeGet(&s1.Tree, pNode->Key + 1) != pNode)
    882882        {
    883             printf("tstAvl: FAILURE - roGCPhys - real range get (2) i=%d\n", i);
     883            RTTestIFailed("real range get (2) i=%d\n", i);
    884884            return 1;
    885885        }
    886886        if (RTAvlroGCPhysRangeGet(&s1.Tree, pNode->KeyLast) != pNode)
    887887        {
    888             printf("tstAvl: FAILURE - roGCPhys - real range get (3) i=%d\n", i);
     888            RTTestIFailed("real range get (3) i=%d\n", i);
    889889            return 1;
    890890        }
     
    898898        if (RTAvlroGCPhysGet(&s3.Tree, pNode->Key) != pNode)
    899899        {
    900             printf("tstAvl: FAILURE - roGCPhys - real get (10) i=%d\n", i);
     900            RTTestIFailed("real get (10) i=%d\n", i);
    901901            return 1;
    902902        }
    903903        if (RTAvlroGCPhysRangeGet(&s3.Tree, pNode->Key) != pNode)
    904904        {
    905             printf("tstAvl: FAILURE - roGCPhys - real range get (10) i=%d\n", i);
     905            RTTestIFailed("real range get (10) i=%d\n", i);
    906906            return 1;
    907907        }
     
    912912            if (RTAvlroGCPhysGet(&s3.Tree, j) != NULL)
    913913            {
    914                 printf("tstAvl: FAILURE - roGCPhys - real negative get (11) i=%d j=%#x\n", i, j);
     914                RTTestIFailed("real negative get (11) i=%d j=%#x\n", i, j);
    915915                return 1;
    916916            }
    917917            if (RTAvlroGCPhysRangeGet(&s3.Tree, j) != pNode)
    918918            {
    919                 printf("tstAvl: FAILURE - roGCPhys - real range get (11) i=%d j=%#x\n", i, j);
     919                RTTestIFailed("real range get (11) i=%d j=%#x\n", i, j);
    920920                return 1;
    921921            }
     
    929929int avlul(void)
    930930{
     931    RTTestISubF("RTAvlUL");
     932
    931933    /*
    932934     * Simple linear insert and remove.
     
    937939    for (i = 0; i < 65536; i++)
    938940    {
    939         PAVLULNODECORE pNode = (PAVLULNODECORE)malloc(sizeof(*pNode));
     941        PAVLULNODECORE pNode = (PAVLULNODECORE)RTMemAlloc(sizeof(*pNode));
    940942        pNode->Key = i;
    941943        if (!RTAvlULInsert(&pTree, pNode))
    942944        {
    943             printf("tstAvl: FAILURE - UL - linear insert i=%d\n", i);
     945            RTTestIFailed("linear insert i=%d\n", i);
    944946            return 1;
    945947        }
     
    948950        if (RTAvlULInsert(&pTree, &Node))
    949951        {
    950             printf("tstAvl: FAILURE - UL - linear negative insert i=%d\n", i);
     952            RTTestIFailed("linear negative insert i=%d\n", i);
    951953            return 1;
    952954        }
     
    958960        if (!pNode)
    959961        {
    960             printf("tstAvl: FAILURE - UL - linear remove i=%d\n", i);
     962            RTTestIFailed("linear remove i=%d\n", i);
    961963            return 1;
    962964        }
     
    964966        pNode->pRight    = (PAVLULNODECORE)0xbbbbbbbb;
    965967        pNode->uchHeight = 'e';
    966         free(pNode);
     968        RTMemFree(pNode);
    967969
    968970        /* negative */
     
    970972        if (pNode)
    971973        {
    972             printf("tstAvl: FAILURE - UL - linear negative remove i=%d\n", i);
     974            RTTestIFailed("linear negative remove i=%d\n", i);
    973975            return 1;
    974976        }
     
    980982    for (i = 0; i < 65536; i += 8)
    981983    {
    982         PAVLULNODECORE pNode = (PAVLULNODECORE)malloc(sizeof(*pNode));
     984        PAVLULNODECORE pNode = (PAVLULNODECORE)RTMemAlloc(sizeof(*pNode));
    983985        pNode->Key = i;
    984986        if (!RTAvlULInsert(&pTree, pNode))
    985987        {
    986             printf("tstAvl: FAILURE - UL - linear insert i=%d\n", i);
     988            RTTestIFailed("linear insert i=%d\n", i);
    987989            return 1;
    988990        }
     
    991993        if (RTAvlULInsert(&pTree, &Node))
    992994        {
    993             printf("tstAvl: FAILURE - UL - linear negative insert i=%d\n", i);
     995            RTTestIFailed("linear negative insert i=%d\n", i);
    994996            return 1;
    995997        }
     
    10081010            if (!pNode)
    10091011            {
    1010                 printf("tstAvl: FAILURE - UL - sparse remove i=%d j=%d\n", i, j);
     1012                RTTestIFailed("sparse remove i=%d j=%d\n", i, j);
    10111013                return 1;
    10121014            }
     
    10141016            pNode->pRight    = (PAVLULNODECORE)0xcccccccc;
    10151017            pNode->uchHeight = 'E';
    1016             free(pNode);
     1018            RTMemFree(pNode);
    10171019        }
    10181020    }
     
    10241026int main()
    10251027{
    1026     int cErrors = 0;
     1028    /*
     1029     * Init.
     1030     */
     1031    int rc = RTR3Init();
     1032    if (RT_FAILURE(rc))
     1033        return 1;
     1034
     1035    RTTEST hTest;
     1036    rc = RTTestCreate("tstRTAvl", &hTest);
     1037    if (RT_FAILURE(rc))
     1038        return 1;
     1039    g_hTest = hTest;
     1040    RTTestBanner(hTest);
     1041
     1042    rc = RTRandAdvCreateParkMiller(&g_hRand);
     1043    if (RT_FAILURE(rc))
     1044    {
     1045        RTTestIFailed("RTRandAdvCreateParkMiller -> %Rrc", rc);
     1046        return RTTestSummaryAndDestroy(hTest);
     1047    }
     1048
     1049    /*
     1050     * Testing.
     1051     */
    10271052    unsigned i;
    1028 
    1029     ProgressPrintf(~0, "tstAvl oGCPhys(32..2048)\n");
    1030     for (i = 32; i < 2048 && !cErrors; i++)
    1031         cErrors += avlogcphys(i);
    1032     cErrors += avlogcphys(_64K);
    1033     cErrors += avlogcphys(_512K);
    1034     cErrors += avlogcphys(_4M);
    1035     for (unsigned j = 0; j < /*256*/ 1 && !cErrors; j++)
    1036     {
    1037         ProgressPrintf(~0, "tstAvl oGCPhys(32..2048, *1K)\n");
    1038         for (i = 32; i < 4096 && !cErrors; i++)
    1039             cErrors += avlogcphysRand(i, i + _1K);
    1040         for (; i <= _4M && !cErrors; i *= 2)
    1041             cErrors += avlogcphysRand(i, i * 8);
    1042     }
    1043 
    1044     cErrors += avlrogcphys();
    1045     cErrors += avlul();
    1046 
    1047     if (!cErrors)
    1048         printf("tstAvl: SUCCESS\n");
    1049     else
    1050         printf("tstAvl: FAILURE - %d errors\n", cErrors);
    1051     return !!cErrors;
    1052 }
     1053    RTTestSub(hTest, "oGCPhys(32..2048)");
     1054    for (i = 32; i < 2048; i++)
     1055        if (avlogcphys(i))
     1056            break;
     1057
     1058    avlogcphys(_64K);
     1059    avlogcphys(_512K);
     1060    avlogcphys(_4M);
     1061
     1062    RTTestISubF("oGCPhys(32..2048, *1K)");
     1063    for (i = 32; i < 4096; i++)
     1064        if (avlogcphysRand(i, i + _1K))
     1065            break;
     1066    for (; i <= _4M; i *= 2)
     1067        if (avlogcphysRand(i, i * 8))
     1068            break;
     1069
     1070    avlrogcphys();
     1071    avlul();
     1072
     1073    /*
     1074     * Done.
     1075     */
     1076    return RTTestSummaryAndDestroy(hTest);
     1077}
     1078
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette