39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync/* $Id$ */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync/** @file
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * IPRT Testcase - List interface.
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2010-2011 Oracle Corporation
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync *
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * available from http://www.virtualbox.org. This file is free software;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * you can redistribute it and/or modify it under the terms of the GNU
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * General Public License (GPL) as published by the Free Software
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync *
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * The contents of this file may alternatively be used under the terms
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * of the Common Development and Distribution License Version 1.0
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * VirtualBox OSE distribution, in which case the provisions of the
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * CDDL are applicable instead of those of the GPL.
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync *
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * You may elect to license modified versions of this file under the
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * terms and conditions of either the GPL or the CDDL or both.
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync/*******************************************************************************
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync* Header Files *
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync*******************************************************************************/
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync#include <iprt/list.h>
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync#include <iprt/err.h>
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync#include <iprt/mem.h>
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync#include <iprt/string.h>
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync#include <iprt/test.h>
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync/*******************************************************************************
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync* Structures and Typedefs *
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync*******************************************************************************/
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsynctypedef struct LISTELEM
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync{
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /** Test data */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync unsigned idx;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /** Node */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTLISTNODE Node;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync} LISTELEM, *PLISTELEM;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsync
15aa5bd4323e2951c8b51648033af4104b2ba8f9vboxsyncstatic void tstRTListOrder(RTTEST hTest, PRTLISTNODE pList, unsigned cElements,
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync unsigned idxFirst, unsigned idxLast, unsigned idxStep)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync{
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST_CHECK(hTest, RTListIsEmpty(pList) == false);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetFirst(pList, LISTELEM, Node) != NULL);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(pList, LISTELEM, Node) != NULL);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync if (cElements > 1)
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(pList, LISTELEM, Node) != RTListGetFirst(pList, LISTELEM, Node));
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync else
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(pList, LISTELEM, Node) == RTListGetFirst(pList, LISTELEM, Node));
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /* Check that the order is right. */
c80170800394cbf2746e3136b41886c2d11617aevboxsync PLISTELEM pNode = RTListGetFirst(pList, LISTELEM, Node);
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync for (unsigned i = idxFirst; i < idxLast; i += idxStep)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST_CHECK(hTest, pNode->idx == i);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode = RTListNodeGetNext(&pNode->Node, LISTELEM, Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTTEST_CHECK(hTest, pNode->idx == idxLast);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(pList, LISTELEM, Node) == pNode);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST_CHECK(hTest, RTListNodeIsLast(pList, &pNode->Node) == true);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /* Check reverse order */
c80170800394cbf2746e3136b41886c2d11617aevboxsync pNode = RTListGetLast(pList, LISTELEM, Node);
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync for (unsigned i = idxLast; i > idxFirst; i -= idxStep)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST_CHECK(hTest, pNode->idx == i);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode = RTListNodeGetPrev(&pNode->Node, LISTELEM, Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTTEST_CHECK(hTest, pNode->idx == idxFirst);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetFirst(pList, LISTELEM, Node) == pNode);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST_CHECK(hTest, RTListNodeIsFirst(pList, &pNode->Node) == true);
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync /* The list enumeration. */
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync unsigned idx = idxFirst;
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTListForEach(pList, pNode, LISTELEM, Node)
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync {
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTTEST_CHECK_RETV(hTest, idx == pNode->idx);
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync idx += idxStep;
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync }
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTTEST_CHECK_MSG_RETV(hTest, idx == idxLast + idxStep || (idx == idxFirst && idxFirst == idxLast),
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync (hTest, "idx=%u idxFirst=%u idxLast=%u idxStep=%u\n", idx, idxFirst, idxLast, idxStep));
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync idx = idxLast;
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTListForEachReverse(pList, pNode, LISTELEM, Node)
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync {
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTTEST_CHECK_RETV(hTest, idx == pNode->idx);
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync idx -= idxStep;
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync }
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync RTTEST_CHECK_MSG_RETV(hTest, idx == idxFirst - idxStep || (idx == idxLast && idxFirst == idxLast),
99dfe084aaa87733b2e26f5f9a86054d0461ff60vboxsync (hTest, "idx=%u idxFirst=%u idxLast idxStep=%u\n", idx, idxFirst, idxLast, idxStep));
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync}
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsyncstatic void tstRTListCreate(RTTEST hTest, unsigned cElements)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync{
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTTestISubF("Creating and moving - %u elements", cElements);
839204fefd1dda6ccc1899359170f99d92aafcdbvboxsync Assert(cElements > 0);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
e961f5bfe1727c6816d3dad3805ebe21b6ba1c64vboxsync RTLISTANCHOR ListHead;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTListInit(&ListHead);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST_CHECK(hTest, RTListIsEmpty(&ListHead) == true);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetFirst(&ListHead, LISTELEM, Node) == NULL);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(&ListHead, LISTELEM, Node) == NULL);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /* Create the list */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync for (unsigned i = 0; i< cElements; i++)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync PLISTELEM pNode = (PLISTELEM)RTMemAlloc(sizeof(LISTELEM));
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode->idx = i;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode->Node.pPrev = NULL;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode->Node.pNext = NULL;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTListAppend(&ListHead, &pNode->Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListOrder(hTest, &ListHead, cElements, 0, cElements-1, 1);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync /* Move the list to a new one. */
e961f5bfe1727c6816d3dad3805ebe21b6ba1c64vboxsync RTLISTANCHOR ListHeadNew;
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync RTListInit(&ListHeadNew);
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync RTListMove(&ListHeadNew, &ListHead);
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync RTTEST_CHECK(hTest, RTListIsEmpty(&ListHead) == true);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetFirst(&ListHead, LISTELEM, Node) == NULL);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(&ListHead, LISTELEM, Node) == NULL);
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync tstRTListOrder(hTest, &ListHeadNew, cElements, 0, cElements-1, 1);
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync /*
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync * Safe iteration w/ removal.
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync */
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTTestISubF("Safe iteration w/ removal - %u elements", cElements);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync /* Move it element by element. */
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync PLISTELEM pNode, pSafe;
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTListForEachSafe(&ListHeadNew, pNode, pSafe, LISTELEM, Node)
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync {
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTListNodeRemove(&pNode->Node);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTListAppend(&ListHead, &pNode->Node);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync }
839204fefd1dda6ccc1899359170f99d92aafcdbvboxsync RTTESTI_CHECK(RTListIsEmpty(&ListHeadNew) == true);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync tstRTListOrder(hTest, &ListHead, cElements, 0, cElements-1, 1);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync /* And the other way. */
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTListForEachReverseSafe(&ListHead, pNode, pSafe, LISTELEM, Node)
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync {
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTListNodeRemove(&pNode->Node);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTListPrepend(&ListHeadNew, &pNode->Node);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync }
839204fefd1dda6ccc1899359170f99d92aafcdbvboxsync RTTESTI_CHECK(RTListIsEmpty(&ListHead) == true);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync tstRTListOrder(hTest, &ListHeadNew, cElements, 0, cElements-1, 1);
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync /*
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync * Remove elements now.
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync if (cElements > 1)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /* Remove every second */
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTTestISubF("Remove every second node - %u elements", cElements);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
c80170800394cbf2746e3136b41886c2d11617aevboxsync pNode = RTListGetFirst(&ListHeadNew, LISTELEM, Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync for (unsigned i = 0; i < cElements; i++)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync PLISTELEM pNext = RTListNodeGetNext(&pNode->Node, LISTELEM, Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync if (!(pNode->idx % 2))
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTListNodeRemove(&pNode->Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTMemFree(pNode);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode = pNext;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync bool fElementsEven = (cElements % 2) == 0;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync unsigned idxEnd = fElementsEven ? cElements - 1 : cElements - 2;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync cElements /= 2;
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync tstRTListOrder(hTest, &ListHeadNew, cElements, 1, idxEnd, 2);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /* Remove the rest now. */
f5df6e1305059bc0b3b08812aa23279103114ab8vboxsync RTTestISubF("Remove all nodes - %u elements", cElements);
c80170800394cbf2746e3136b41886c2d11617aevboxsync pNode = RTListGetFirst(&ListHeadNew, LISTELEM, Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync for (unsigned i = 0; i < cElements; i++)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync {
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync PLISTELEM pNext = RTListNodeGetNext(&pNode->Node, LISTELEM, Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTListNodeRemove(&pNode->Node);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTMemFree(pNode);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync pNode = pNext;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync }
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /* List should be empty again */
c5245f029ba21b3152e4ba59394838bb5c09126bvboxsync RTTEST_CHECK(hTest, RTListIsEmpty(&ListHeadNew) == true);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetFirst(&ListHeadNew, LISTELEM, Node) == NULL);
c80170800394cbf2746e3136b41886c2d11617aevboxsync RTTEST_CHECK(hTest, RTListGetLast(&ListHeadNew, LISTELEM, Node) == NULL);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync}
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsyncint main()
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync{
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTEST hTest;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync int rc = RTTestInitAndCreate("tstRTList", &hTest);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync if (rc)
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync return rc;
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync RTTestBanner(hTest);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListCreate(hTest, 1);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListCreate(hTest, 2);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListCreate(hTest, 3);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListCreate(hTest, 99);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListCreate(hTest, 100);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync tstRTListCreate(hTest, 101);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync /*
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync * Summary.
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync */
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync return RTTestSummaryAndDestroy(hTest);
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync}
39c2e57acd25ad706e24d3eed2cba74905506db0vboxsync