tstRTBitOperations.cpp revision e64031e20c39650a7bc902a3e1aba613b9415dee
/* $Id$ */
/** @file
* IPRT Testcase - Inlined Bit Operations.
*/
/*
* Copyright (C) 2006-2009 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the
* VirtualBox OSE distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*/
/*******************************************************************************
* Header Files *
*******************************************************************************/
#include <iprt/initterm.h>
/*
* Test 2 - ID allocation using a bitmap.
*/
#define NIL_TEST2_ID 0
struct TestMap2
{
};
{
/*
* Scan sequentially from the last one + 1.
*/
&& idChunk > NIL_TEST2_ID)
{
if (idChunk > NIL_TEST2_ID)
{
{
return NIL_TEST2_ID;
}
}
}
/*
* Ok, scan from the start.
*/
if (idChunk <= NIL_TEST2_ID)
{
return NIL_TEST2_ID;
}
{
return NIL_TEST2_ID;
}
}
{
/* Some simple tests first. */
/* The real test. */
p2->idChunkPrev = 0;
while (cLeft-- > 0)
}
int main()
{
/*
* Init the runtime and stuff.
*/
if (rc)
return rc;
int rcRet = 0;
int i;
int j;
int k;
/*
* Tests
*/
struct TestMap
{
};
#if 0
#else
#endif
#define DUMP() RTTestPrintf(hTest, RTTESTLVL_INFO, "au32={%08x,%08x,%08x,%08x}", p->au32[0], p->au32[1], p->au32[2], p->au32[3])
#define CHECK(expr) do { if (!(expr)) { RTTestFailed(hTest, "line %d: %s", __LINE__, #expr); DUMP(); } CHECK_GUARD(s); } while (0)
#define CHECK_BIT(expr, b1) do { if (!(expr)) { RTTestFailed(hTest, "line %d, b1=%d: %s", __LINE__, b1, #expr); } CHECK_GUARD(s); } while (0)
#define CHECK_BIT2(expr, b1, b2) do { if (!(expr)) { RTTestFailed(hTest, "line %d, b1=%d b2=%d: %s", __LINE__, b1, b2, #expr); } CHECK_GUARD(s); } while (0)
#define CHECK_BIT3(expr, b1, b2, b3) do { if (!(expr)) { RTTestFailed(hTest, "line %d, b1=%d b2=%d b3=%d: %s", __LINE__, b1, b2, b3, #expr); } CHECK_GUARD(s); } while (0)
#define GUARD_MAP(p) do { } while (0)
#define CHECK_GUARD(p) do { } while (0)
/* self check. */
MAP_CLEAR(p);
CHECK_GUARD(p);
/* set */
MAP_CLEAR(p);
MAP_CLEAR(p);
ASMAtomicBitSet(&p->au32[0], 0);
/* clear */
MAP_SET(p);
ASMBitClear(&p->au32[0], 0);
MAP_SET(p);
ASMAtomicBitClear(&p->au32[0], 0);
/* toggle */
MAP_SET(p);
ASMBitToggle(&p->au32[0], 0);
MAP_SET(p);
ASMAtomicBitToggle(&p->au32[0], 0);
/* test bit. */
for (i = 0; i < 128; i++)
{
MAP_SET(p);
ASMBitToggle(&p->au32[0], i);
MAP_SET(p);
ASMAtomicBitToggle(&p->au32[0], i);
}
/* bit searching */
MAP_SET(p);
MAP_SET(p);
MAP_SET(p);
MAP_SET(p);
MAP_SET(p);
MAP_CLEAR(p);
for (i = 1; i < 128; i++)
for (i = 0; i < 128; i++)
{
MAP_SET(p);
ASMBitClear(&p->au32[0], i);
for (j = 0; j < i; j++)
for (j = i; j < 128; j++)
}
/* clear range. */
MAP_SET(p);
for (i = 0; i < 128; i++)
{
for (j = i + 1; j <= 128; j++)
{
MAP_SET(p);
ASMBitClearRange(&p->au32, i, j);
for (k = 0; k < i; k++)
for (k = i; k < j; k++)
for (k = j; k < 128; k++)
}
}
/* searching for set bits. */
MAP_CLEAR(p);
for (i = 0; i < 65; i++)
for (i = 65; i < 128; i++)
for (i = 0; i < 16; i++)
for (i = 17; i < 65; i++)
MAP_SET(p);
for (i = 1; i < 128; i++)
for (i = 0; i < 128; i++)
{
MAP_CLEAR(p);
for (j = 0; j < i; j++)
for (j = i; j < 128; j++)
}
CHECK(ASMBitLastSetU32(0) == 0);
for (i = 0; i < 32; i++)
CHECK(ASMBitFirstSetU32(0) == 0);
for (i = 0; i < 32; i++)
/*
* Special tests.
*/
/*
* Summary
*/
return RTTestSummaryAndDestroy(hTest);
}