Changeset 18365 in vbox
- Timestamp:
- Mar 27, 2009 2:03:40 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstBitOperations.cpp
r8245 r18365 34 34 *******************************************************************************/ 35 35 #include <iprt/asm.h> 36 #include <iprt/test.h> 36 37 #include <iprt/stream.h> 37 38 #include <iprt/string.h> 39 #include <iprt/test.h> 40 #include <iprt/initterm.h> 38 41 39 42 40 43 int main() 41 44 { 45 /* 46 * Init the runtime and stuff. 47 */ 48 RTTEST hTest; 49 if ( RT_FAILURE(RTR3Init()) 50 || RT_FAILURE(RTTestCreate("tstBitOperations", &hTest))) 51 { 52 RTPrintf("tstBitOperation: fatal initialization error\n"); 53 return 1; 54 } 55 RTTestBanner(hTest); 56 42 57 int rcRet = 0; 43 58 int i; 44 59 int j; 45 60 int k; 46 RTPrintf("tstBitOperations: TESTING\n");47 48 61 49 62 /* 50 63 * Tests 51 64 */ 52 uint32_t au32[4]; 53 #define MAP_CLEAR(a) memset(&a, 0, sizeof(a)); 54 #define MAP_SET(a) memset(&a, 0xff, sizeof(a)); 55 #define DUMP() RTPrintf("au32={%08x,%08x,%08x,%08x}\n", au32[0], au32[1], au32[2], au32[3]) 56 #define CHECK(expr) do { if (!(expr)) { RTPrintf("tstBitOperations: error line %d: %s\n", __LINE__, #expr); DUMP(); rcRet++; } } while (0) 57 #define CHECK_BIT(expr, b1) do { if (!(expr)) { RTPrintf("tstBitOperations: error line %d, b1=%d: %s\n", __LINE__, b1, #expr); rcRet++; } } while (0) 58 #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) 59 #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) 65 struct TestMap 66 { 67 uint32_t au32[4]; 68 }; 69 #if 0 70 struct TestMap sTest; 71 struct TestMap *p = &sTest; 72 #else 73 struct TestMap *p = (struct TestMap *)RTTestGuardedAllocTail(hTest, sizeof(*p)); 74 #endif 75 #define DUMP() RTTestPrintf(hTest, "au32={%08x,%08x,%08x,%08x}", p->au32[0], p->au32[1], p->au32[2], p->au32[3]) 76 #define CHECK(expr) do { if (!(expr)) { RTTestFailed(hTest, "line %d: %s", __LINE__, #expr); DUMP(); } CHECK_GUARD(s); } while (0) 77 #define CHECK_BIT(expr, b1) do { if (!(expr)) { RTTestFailed(hTest, "line %d, b1=%d: %s", __LINE__, b1, #expr); } CHECK_GUARD(s); } while (0) 78 #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) 79 #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) 80 81 #define GUARD_MAP(p) do { } while (0) 82 #define CHECK_GUARD(p) do { } while (0) 83 #define MAP_CLEAR(p) do { memset(p, 0, sizeof(*(p))); GUARD_MAP(p); } while (0) 84 #define MAP_SET(p) do { memset(p, 0xff, sizeof(*(p))); GUARD_MAP(p); } while (0) 85 86 /* self check. */ 87 MAP_CLEAR(p); 88 CHECK_GUARD(p); 60 89 61 90 /* set */ 62 MAP_CLEAR( au32);63 ASMBitSet(& au32[0], 0);64 ASMBitSet(& au32[0], 31);65 ASMBitSet(& au32[0], 65);66 CHECK( au32[0] == 0x80000001U);67 CHECK( au32[2] == 0x00000002U);68 CHECK(ASMBitTestAndSet(& au32[0], 0) &&au32[0] == 0x80000001U);69 CHECK(!ASMBitTestAndSet(& au32[0], 16) &&au32[0] == 0x80010001U);70 CHECK(ASMBitTestAndSet(& au32[0], 16) &&au32[0] == 0x80010001U);71 CHECK(!ASMBitTestAndSet(& au32[0], 80) &&au32[2] == 0x00010002U);72 73 MAP_CLEAR( au32);74 ASMAtomicBitSet(& au32[0], 0);75 ASMAtomicBitSet(& au32[0], 30);76 ASMAtomicBitSet(& au32[0], 64);77 CHECK( au32[0] == 0x40000001U);78 CHECK( au32[2] == 0x00000001U);79 CHECK(ASMAtomicBitTestAndSet(& au32[0], 0) &&au32[0] == 0x40000001U);80 CHECK(!ASMAtomicBitTestAndSet(& au32[0], 16) &&au32[0] == 0x40010001U);81 CHECK(ASMAtomicBitTestAndSet(& au32[0], 16) &&au32[0] == 0x40010001U);82 CHECK(!ASMAtomicBitTestAndSet(& au32[0], 80) &&au32[2] == 0x00010001U);91 MAP_CLEAR(p); 92 ASMBitSet(&p->au32[0], 0); 93 ASMBitSet(&p->au32[0], 31); 94 ASMBitSet(&p->au32[0], 65); 95 CHECK(p->au32[0] == 0x80000001U); 96 CHECK(p->au32[2] == 0x00000002U); 97 CHECK(ASMBitTestAndSet(&p->au32[0], 0) && p->au32[0] == 0x80000001U); 98 CHECK(!ASMBitTestAndSet(&p->au32[0], 16) && p->au32[0] == 0x80010001U); 99 CHECK(ASMBitTestAndSet(&p->au32[0], 16) && p->au32[0] == 0x80010001U); 100 CHECK(!ASMBitTestAndSet(&p->au32[0], 80) && p->au32[2] == 0x00010002U); 101 102 MAP_CLEAR(p); 103 ASMAtomicBitSet(&p->au32[0], 0); 104 ASMAtomicBitSet(&p->au32[0], 30); 105 ASMAtomicBitSet(&p->au32[0], 64); 106 CHECK(p->au32[0] == 0x40000001U); 107 CHECK(p->au32[2] == 0x00000001U); 108 CHECK(ASMAtomicBitTestAndSet(&p->au32[0], 0) && p->au32[0] == 0x40000001U); 109 CHECK(!ASMAtomicBitTestAndSet(&p->au32[0], 16) && p->au32[0] == 0x40010001U); 110 CHECK(ASMAtomicBitTestAndSet(&p->au32[0], 16) && p->au32[0] == 0x40010001U); 111 CHECK(!ASMAtomicBitTestAndSet(&p->au32[0], 80) && p->au32[2] == 0x00010001U); 83 112 84 113 /* clear */ 85 MAP_SET( au32);86 ASMBitClear(& au32[0], 0);87 ASMBitClear(& au32[0], 31);88 ASMBitClear(& au32[0], 65);89 CHECK( au32[0] == ~0x80000001U);90 CHECK( au32[2] == ~0x00000002U);91 CHECK(!ASMBitTestAndClear(& au32[0], 0) &&au32[0] == ~0x80000001U);92 CHECK(ASMBitTestAndClear(& au32[0], 16) &&au32[0] == ~0x80010001U);93 CHECK(!ASMBitTestAndClear(& au32[0], 16) &&au32[0] == ~0x80010001U);94 CHECK(ASMBitTestAndClear(& au32[0], 80) &&au32[2] == ~0x00010002U);95 96 MAP_SET( au32);97 ASMAtomicBitClear(& au32[0], 0);98 ASMAtomicBitClear(& au32[0], 30);99 ASMAtomicBitClear(& au32[0], 64);100 CHECK( au32[0] == ~0x40000001U);101 CHECK( au32[2] == ~0x00000001U);102 CHECK(!ASMAtomicBitTestAndClear(& au32[0], 0) &&au32[0] == ~0x40000001U);103 CHECK(ASMAtomicBitTestAndClear(& au32[0], 16) &&au32[0] == ~0x40010001U);104 CHECK(!ASMAtomicBitTestAndClear(& au32[0], 16) &&au32[0] == ~0x40010001U);105 CHECK(ASMAtomicBitTestAndClear(& au32[0], 80) &&au32[2] == ~0x00010001U);114 MAP_SET(p); 115 ASMBitClear(&p->au32[0], 0); 116 ASMBitClear(&p->au32[0], 31); 117 ASMBitClear(&p->au32[0], 65); 118 CHECK(p->au32[0] == ~0x80000001U); 119 CHECK(p->au32[2] == ~0x00000002U); 120 CHECK(!ASMBitTestAndClear(&p->au32[0], 0) && p->au32[0] == ~0x80000001U); 121 CHECK(ASMBitTestAndClear(&p->au32[0], 16) && p->au32[0] == ~0x80010001U); 122 CHECK(!ASMBitTestAndClear(&p->au32[0], 16) && p->au32[0] == ~0x80010001U); 123 CHECK(ASMBitTestAndClear(&p->au32[0], 80) && p->au32[2] == ~0x00010002U); 124 125 MAP_SET(p); 126 ASMAtomicBitClear(&p->au32[0], 0); 127 ASMAtomicBitClear(&p->au32[0], 30); 128 ASMAtomicBitClear(&p->au32[0], 64); 129 CHECK(p->au32[0] == ~0x40000001U); 130 CHECK(p->au32[2] == ~0x00000001U); 131 CHECK(!ASMAtomicBitTestAndClear(&p->au32[0], 0) && p->au32[0] == ~0x40000001U); 132 CHECK(ASMAtomicBitTestAndClear(&p->au32[0], 16) && p->au32[0] == ~0x40010001U); 133 CHECK(!ASMAtomicBitTestAndClear(&p->au32[0], 16) && p->au32[0] == ~0x40010001U); 134 CHECK(ASMAtomicBitTestAndClear(&p->au32[0], 80) && p->au32[2] == ~0x00010001U); 106 135 107 136 /* toggle */ 108 MAP_SET( au32);109 ASMBitToggle(& au32[0], 0);110 ASMBitToggle(& au32[0], 31);111 ASMBitToggle(& au32[0], 65);112 ASMBitToggle(& au32[0], 47);113 ASMBitToggle(& au32[0], 47);114 CHECK( au32[0] == ~0x80000001U);115 CHECK( au32[2] == ~0x00000002U);116 CHECK(!ASMBitTestAndToggle(& au32[0], 0) &&au32[0] == ~0x80000000U);117 CHECK(ASMBitTestAndToggle(& au32[0], 0) &&au32[0] == ~0x80000001U);118 CHECK(ASMBitTestAndToggle(& au32[0], 16) &&au32[0] == ~0x80010001U);119 CHECK(!ASMBitTestAndToggle(& au32[0], 16) &&au32[0] == ~0x80000001U);120 CHECK(ASMBitTestAndToggle(& au32[0], 80) &&au32[2] == ~0x00010002U);121 122 MAP_SET( au32);123 ASMAtomicBitToggle(& au32[0], 0);124 ASMAtomicBitToggle(& au32[0], 30);125 ASMAtomicBitToggle(& au32[0], 64);126 ASMAtomicBitToggle(& au32[0], 47);127 ASMAtomicBitToggle(& au32[0], 47);128 CHECK( au32[0] == ~0x40000001U);129 CHECK( au32[2] == ~0x00000001U);130 CHECK(!ASMAtomicBitTestAndToggle(& au32[0], 0) &&au32[0] == ~0x40000000U);131 CHECK(ASMAtomicBitTestAndToggle(& au32[0], 0) &&au32[0] == ~0x40000001U);132 CHECK(ASMAtomicBitTestAndToggle(& au32[0], 16) &&au32[0] == ~0x40010001U);133 CHECK(!ASMAtomicBitTestAndToggle(& au32[0], 16) &&au32[0] == ~0x40000001U);134 CHECK(ASMAtomicBitTestAndToggle(& au32[0], 80) &&au32[2] == ~0x00010001U);137 MAP_SET(p); 138 ASMBitToggle(&p->au32[0], 0); 139 ASMBitToggle(&p->au32[0], 31); 140 ASMBitToggle(&p->au32[0], 65); 141 ASMBitToggle(&p->au32[0], 47); 142 ASMBitToggle(&p->au32[0], 47); 143 CHECK(p->au32[0] == ~0x80000001U); 144 CHECK(p->au32[2] == ~0x00000002U); 145 CHECK(!ASMBitTestAndToggle(&p->au32[0], 0) && p->au32[0] == ~0x80000000U); 146 CHECK(ASMBitTestAndToggle(&p->au32[0], 0) && p->au32[0] == ~0x80000001U); 147 CHECK(ASMBitTestAndToggle(&p->au32[0], 16) && p->au32[0] == ~0x80010001U); 148 CHECK(!ASMBitTestAndToggle(&p->au32[0], 16) && p->au32[0] == ~0x80000001U); 149 CHECK(ASMBitTestAndToggle(&p->au32[0], 80) && p->au32[2] == ~0x00010002U); 150 151 MAP_SET(p); 152 ASMAtomicBitToggle(&p->au32[0], 0); 153 ASMAtomicBitToggle(&p->au32[0], 30); 154 ASMAtomicBitToggle(&p->au32[0], 64); 155 ASMAtomicBitToggle(&p->au32[0], 47); 156 ASMAtomicBitToggle(&p->au32[0], 47); 157 CHECK(p->au32[0] == ~0x40000001U); 158 CHECK(p->au32[2] == ~0x00000001U); 159 CHECK(!ASMAtomicBitTestAndToggle(&p->au32[0], 0) && p->au32[0] == ~0x40000000U); 160 CHECK(ASMAtomicBitTestAndToggle(&p->au32[0], 0) && p->au32[0] == ~0x40000001U); 161 CHECK(ASMAtomicBitTestAndToggle(&p->au32[0], 16) && p->au32[0] == ~0x40010001U); 162 CHECK(!ASMAtomicBitTestAndToggle(&p->au32[0], 16) && p->au32[0] == ~0x40000001U); 163 CHECK(ASMAtomicBitTestAndToggle(&p->au32[0], 80) && p->au32[2] == ~0x00010001U); 135 164 136 165 /* test bit. */ 137 166 for (i = 0; i < 128; i++) 138 167 { 139 MAP_SET(au32); 140 CHECK_BIT(ASMBitTest(&au32[0], i), i); 141 ASMBitToggle(&au32[0], i); 142 CHECK_BIT(!ASMBitTest(&au32[0], i), i); 143 CHECK_BIT(!ASMBitTestAndToggle(&au32[0], i), i); 144 CHECK_BIT(ASMBitTest(&au32[0], i), i); 145 CHECK_BIT(ASMBitTestAndToggle(&au32[0], i), i); 146 CHECK_BIT(!ASMBitTest(&au32[0], i), i); 147 148 MAP_SET(au32); 149 CHECK_BIT(ASMBitTest(&au32[0], i), i); 150 ASMAtomicBitToggle(&au32[0], i); 151 CHECK_BIT(!ASMBitTest(&au32[0], i), i); 152 CHECK_BIT(!ASMAtomicBitTestAndToggle(&au32[0], i), i); 153 CHECK_BIT(ASMBitTest(&au32[0], i), i); 154 CHECK_BIT(ASMAtomicBitTestAndToggle(&au32[0], i), i); 155 CHECK_BIT(!ASMBitTest(&au32[0], i), i); 156 168 MAP_SET(p); 169 CHECK_BIT(ASMBitTest(&p->au32[0], i), i); 170 ASMBitToggle(&p->au32[0], i); 171 CHECK_BIT(!ASMBitTest(&p->au32[0], i), i); 172 CHECK_BIT(!ASMBitTestAndToggle(&p->au32[0], i), i); 173 CHECK_BIT(ASMBitTest(&p->au32[0], i), i); 174 CHECK_BIT(ASMBitTestAndToggle(&p->au32[0], i), i); 175 CHECK_BIT(!ASMBitTest(&p->au32[0], i), i); 176 177 MAP_SET(p); 178 CHECK_BIT(ASMBitTest(&p->au32[0], i), i); 179 ASMAtomicBitToggle(&p->au32[0], i); 180 CHECK_BIT(!ASMBitTest(&p->au32[0], i), i); 181 CHECK_BIT(!ASMAtomicBitTestAndToggle(&p->au32[0], i), i); 182 CHECK_BIT(ASMBitTest(&p->au32[0], i), i); 183 CHECK_BIT(ASMAtomicBitTestAndToggle(&p->au32[0], i), i); 184 CHECK_BIT(!ASMBitTest(&p->au32[0], i), i); 157 185 } 158 186 159 187 /* bit searching */ 160 MAP_SET( au32);161 CHECK(ASMBitFirstClear(& au32[0], sizeof(au32) * 8) == -1);162 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == 0);163 164 ASMBitClear(& au32[0], 1);165 CHECK(ASMBitFirstClear(& au32[0], sizeof(au32) * 8) == 1);166 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == 0);167 168 MAP_SET( au32);169 ASMBitClear(& au32[0], 95);170 CHECK(ASMBitFirstClear(& au32[0], sizeof(au32) * 8) == 95);171 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == 0);172 173 MAP_SET( au32);174 ASMBitClear(& au32[0], 127);175 CHECK(ASMBitFirstClear(& au32[0], sizeof(au32) * 8) == 127);176 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == 0);177 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 0) == 1);178 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 1) == 2);179 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 2) == 3);180 181 182 MAP_SET( au32);183 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 0) == -1);184 ASMBitClear(& au32[0], 32);185 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 32) == -1);186 ASMBitClear(& au32[0], 88);187 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 57) == 88);188 189 MAP_SET( au32);190 ASMBitClear(& au32[0], 31);191 ASMBitClear(& au32[0], 57);192 ASMBitClear(& au32[0], 88);193 ASMBitClear(& au32[0], 101);194 ASMBitClear(& au32[0], 126);195 ASMBitClear(& au32[0], 127);196 CHECK(ASMBitFirstClear(& au32[0], sizeof(au32) * 8) == 31);197 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 31) == 57);198 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 57) == 88);199 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 88) == 101);200 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 101) == 126);201 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 126) == 127);202 CHECK(ASMBitNextClear(& au32[0], sizeof(au32) * 8, 127) == -1);203 204 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 29) == 30);205 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 30) == 32);206 207 MAP_CLEAR( au32);188 MAP_SET(p); 189 CHECK(ASMBitFirstClear(&p->au32[0], sizeof(p->au32) * 8) == -1); 190 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == 0); 191 192 ASMBitClear(&p->au32[0], 1); 193 CHECK(ASMBitFirstClear(&p->au32[0], sizeof(p->au32) * 8) == 1); 194 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == 0); 195 196 MAP_SET(p); 197 ASMBitClear(&p->au32[0], 95); 198 CHECK(ASMBitFirstClear(&p->au32[0], sizeof(p->au32) * 8) == 95); 199 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == 0); 200 201 MAP_SET(p); 202 ASMBitClear(&p->au32[0], 127); 203 CHECK(ASMBitFirstClear(&p->au32[0], sizeof(p->au32) * 8) == 127); 204 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == 0); 205 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 0) == 1); 206 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 1) == 2); 207 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 2) == 3); 208 209 210 MAP_SET(p); 211 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 0) == -1); 212 ASMBitClear(&p->au32[0], 32); 213 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 32) == -1); 214 ASMBitClear(&p->au32[0], 88); 215 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 57) == 88); 216 217 MAP_SET(p); 218 ASMBitClear(&p->au32[0], 31); 219 ASMBitClear(&p->au32[0], 57); 220 ASMBitClear(&p->au32[0], 88); 221 ASMBitClear(&p->au32[0], 101); 222 ASMBitClear(&p->au32[0], 126); 223 ASMBitClear(&p->au32[0], 127); 224 CHECK(ASMBitFirstClear(&p->au32[0], sizeof(p->au32) * 8) == 31); 225 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 31) == 57); 226 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 57) == 88); 227 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 88) == 101); 228 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 101) == 126); 229 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 126) == 127); 230 CHECK(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, 127) == -1); 231 232 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 29) == 30); 233 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 30) == 32); 234 235 MAP_CLEAR(p); 208 236 for (i = 1; i < 128; i++) 209 CHECK_BIT(ASMBitNextClear(& au32[0], sizeof(au32) * 8, i - 1) == i, i);237 CHECK_BIT(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, i - 1) == i, i); 210 238 for (i = 0; i < 128; i++) 211 239 { 212 MAP_SET( au32);213 ASMBitClear(& au32[0], i);214 CHECK_BIT(ASMBitFirstClear(& au32[0], sizeof(au32) * 8) == i, i);240 MAP_SET(p); 241 ASMBitClear(&p->au32[0], i); 242 CHECK_BIT(ASMBitFirstClear(&p->au32[0], sizeof(p->au32) * 8) == i, i); 215 243 for (j = 0; j < i; j++) 216 CHECK_BIT(ASMBitNextClear(& au32[0], sizeof(au32) * 8, j) == i, i);244 CHECK_BIT(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, j) == i, i); 217 245 for (j = i; j < 128; j++) 218 CHECK_BIT(ASMBitNextClear(& au32[0], sizeof(au32) * 8, j) == -1, i);246 CHECK_BIT(ASMBitNextClear(&p->au32[0], sizeof(p->au32) * 8, j) == -1, i); 219 247 } 220 248 221 249 /* clear range. */ 222 MAP_SET( au32);223 ASMBitClearRange(& au32, 0, 128);224 CHECK(! au32[0] && !au32[1] && !au32[2] && !au32[3]);250 MAP_SET(p); 251 ASMBitClearRange(&p->au32, 0, 128); 252 CHECK(!p->au32[0] && !p->au32[1] && !p->au32[2] && !p->au32[3]); 225 253 for (i = 0; i < 128; i++) 226 254 { 227 255 for (j = i + 1; j <= 128; j++) 228 256 { 229 MAP_SET( au32);230 ASMBitClearRange(& au32, i, j);257 MAP_SET(p); 258 ASMBitClearRange(&p->au32, i, j); 231 259 for (k = 0; k < i; k++) 232 CHECK_BIT3(ASMBitTest(& au32[0], k), i, j, k);260 CHECK_BIT3(ASMBitTest(&p->au32[0], k), i, j, k); 233 261 for (k = i; k < j; k++) 234 CHECK_BIT3(!ASMBitTest(& au32[0], k), i, j, k);262 CHECK_BIT3(!ASMBitTest(&p->au32[0], k), i, j, k); 235 263 for (k = j; k < 128; k++) 236 CHECK_BIT3(ASMBitTest(& au32[0], k), i, j, k);264 CHECK_BIT3(ASMBitTest(&p->au32[0], k), i, j, k); 237 265 } 238 266 } 239 267 240 268 /* searching for set bits. */ 241 MAP_CLEAR( au32);242 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == -1);243 244 ASMBitSet(& au32[0], 65);245 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == 65);246 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 65) == -1);269 MAP_CLEAR(p); 270 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == -1); 271 272 ASMBitSet(&p->au32[0], 65); 273 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == 65); 274 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 65) == -1); 247 275 for (i = 0; i < 65; i++) 248 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, i) == 65);276 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, i) == 65); 249 277 for (i = 65; i < 128; i++) 250 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, i) == -1);251 252 ASMBitSet(& au32[0], 17);253 CHECK(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == 17);254 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, 17) == 65);278 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, i) == -1); 279 280 ASMBitSet(&p->au32[0], 17); 281 CHECK(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == 17); 282 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, 17) == 65); 255 283 for (i = 0; i < 16; i++) 256 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, i) == 17);284 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, i) == 17); 257 285 for (i = 17; i < 65; i++) 258 CHECK(ASMBitNextSet(& au32[0], sizeof(au32) * 8, i) == 65);259 260 MAP_SET( au32);286 CHECK(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, i) == 65); 287 288 MAP_SET(p); 261 289 for (i = 1; i < 128; i++) 262 CHECK_BIT(ASMBitNextSet(& au32[0], sizeof(au32) * 8, i - 1) == i, i);290 CHECK_BIT(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, i - 1) == i, i); 263 291 for (i = 0; i < 128; i++) 264 292 { 265 MAP_CLEAR( au32);266 ASMBitSet(& au32[0], i);267 CHECK_BIT(ASMBitFirstSet(& au32[0], sizeof(au32) * 8) == i, i);293 MAP_CLEAR(p); 294 ASMBitSet(&p->au32[0], i); 295 CHECK_BIT(ASMBitFirstSet(&p->au32[0], sizeof(p->au32) * 8) == i, i); 268 296 for (j = 0; j < i; j++) 269 CHECK_BIT(ASMBitNextSet(& au32[0], sizeof(au32) * 8, j) == i, i);297 CHECK_BIT(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, j) == i, i); 270 298 for (j = i; j < 128; j++) 271 CHECK_BIT(ASMBitNextSet(& au32[0], sizeof(au32) * 8, j) == -1, i);299 CHECK_BIT(ASMBitNextSet(&p->au32[0], sizeof(p->au32) * 8, j) == -1, i); 272 300 } 273 301 … … 292 320 * Summary 293 321 */ 294 if (!rcRet) 295 RTPrintf("tstBitOperations: SUCCESS\n"); 296 else 297 RTPrintf("tstBitOperations: FAILURE - %d errors\n", rcRet); 298 return rcRet; 322 return RTTestSummaryAndDestroy(hTest); 299 323 }
Note:
See TracChangeset
for help on using the changeset viewer.

