tstBitOperations.cpp revision 677833bc953b6cb418c701facbdcf4aa18d6c44e
/* $Id$ */
/** @file
* InnoTek Portable Runtime Testcase - Inlined Bit Operations.
*/
/*
* Copyright (C) 2006 InnoTek Systemberatung GmbH
*
* 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 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.
*
* If you received this file as part of a commercial VirtualBox
* distribution, then only the terms of your commercial VirtualBox
* license agreement apply instead of the previous paragraph.
*/
/*******************************************************************************
* Header Files *
*******************************************************************************/
int main()
{
int rcRet = 0;
int i;
int j;
int k;
RTPrintf("tstBitOperations: TESTING\n");
/*
* Tests
*/
#define CHECK(expr) do { if (!(expr)) { RTPrintf("tstBitOperations: error line %d: %s\n", __LINE__, #expr); DUMP(); rcRet++; } } while (0)
#define CHECK_BIT(expr, b1) do { if (!(expr)) { RTPrintf("tstBitOperations: error line %d, b1=%d: %s\n", __LINE__, b1, #expr); rcRet++; } } while (0)
#define CHECK_BIT2(expr, b1, b2) do { if (!(expr)) { RTPrintf("tstBitOperations: error line %d, b1=%d b2=%d: %s\n", __LINE__, b1, b2, #expr); rcRet++; } } while (0)
#define CHECK_BIT3(expr, b1, b2, b3) do { if (!(expr)) { RTPrintf("tstBitOperations: error line %d, b1=%d b2=%d b3=%d: %s\n", __LINE__, b1, b2, b3, #expr); rcRet++; } } while (0)
/* set */
ASMAtomicBitSet(&au32[0], 0);
/* clear */
ASMBitClear(&au32[0], 0);
ASMAtomicBitClear(&au32[0], 0);
/* toggle */
ASMBitToggle(&au32[0], 0);
ASMAtomicBitToggle(&au32[0], 0);
/* test bit. */
for (i = 0; i < 128; i++)
{
ASMBitToggle(&au32[0], i);
ASMAtomicBitToggle(&au32[0], i);
}
/* bit searching */
for (i = 1; i < 128; i++)
for (i = 0; i < 128; i++)
{
ASMBitClear(&au32[0], i);
for (j = 0; j < i; j++)
for (j = i; j < 128; j++)
}
/* clear range. */
for (i = 0; i < 128; i++)
{
for (j = i + 1; j <= 128; j++)
{
ASMBitClearRange(&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. */
for (i = 0; i < 65; i++)
for (i = 65; i < 128; i++)
for (i = 0; i < 16; i++)
for (i = 17; i < 65; i++)
for (i = 1; i < 128; i++)
for (i = 0; i < 128; i++)
{
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++)
/*
* Summary
*/
if (!rcRet)
RTPrintf("tstBitOperations: SUCCESS\n");
else
return rcRet;
}