📄 stress.cpp
字号:
unsigned count_min = 0; for (i = 0; i < ITERATIONS; ++i) { if (bvect_min.is_bit_true(i)) ++count_min; } unsigned count_full = bvect_full.count(); if (count_min == count_full) { printf("simple count test ok.\n"); } else { printf("simple count test failed count_min = %i count_full = %i\n", count_min, count_full); exit(1); } // detailed vectors verification CheckVectors(bvect_min, bvect_full, ITERATIONS); // now clearning for (i = 0; i < ITERATIONS; i+=2) { bvect_min.clear_bit(i); bvect_full.clear_bit(i); bvect_full1.set_range(i, i, false); } CheckVectors(bvect_min, bvect_full, ITERATIONS); CheckVectors(bvect_min, bvect_full1, ITERATIONS); for (i = 0; i < ITERATIONS; ++i) { bvect_min.clear_bit(i); } bvect_full.clear(); CheckVectors(bvect_min, bvect_full, ITERATIONS); cout << "Random step filling" << endl; for (i = rand()%10; i < ITERATIONS; i+=rand()%10) { bvect_min.clear_bit(i); bvect_full.clear_bit(i); } CheckVectors(bvect_min, bvect_full, ITERATIONS); bvect bv1; bvect bv2; bv1[10] = true; bv1[1000] = true; bv2[200] = bv2[700] = bv2[500] = true; bv1.swap(bv2); if (bv1.count() != 3) { cout << "Swap test failed!" << endl; exit(1); } if (bv2.count() != 2) { cout << "Swap test failed!" << endl; exit(1); }}void SimpleRandomFillTest(){ assert(ITERATIONS < BITVECT_SIZE); cout << "-------------------------- SimpleRandomFillTest" << endl; { printf("Simple random fill test 1."); bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; bvect_full.set_new_blocks_strat(bm::BM_BIT); unsigned iter = ITERATIONS / 5; printf("\nSimple Random fill test ITERATIONS = %i\n", iter); bvect_min.set_bit(0); bvect_full.set_bit(0); unsigned i; for (i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.set_bit(num); bvect_full.set_bit(num); if ((i % 1000) == 0) cout << "." << flush; CheckCountRange(bvect_full, 0, num); CheckCountRange(bvect_full, num, num+iter); } CheckVectors(bvect_min, bvect_full, iter); CheckCountRange(bvect_full, 0, iter); printf("Simple random fill test 2."); for(i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.clear_bit(num); bvect_full.clear_bit(num); } CheckVectors(bvect_min, bvect_full, iter); } { printf("\nSimple random fill test 3.\n"); bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full(bm::BM_GAP); unsigned iter = ITERATIONS; printf("\nSimple Random fill test ITERATIONS = %i\n", iter); unsigned i; for(i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.set_bit(num); bvect_full.set_bit(num); CheckCountRange(bvect_full, 0, 65535); CheckCountRange(bvect_full, 0, num); CheckCountRange(bvect_full, num, num+iter); if ((i % 1000) == 0) cout << "." << flush; } CheckVectors(bvect_min, bvect_full, iter); printf("Simple random fill test 4."); for(i = 0; i < iter; ++i) { unsigned num = ::rand() % iter; bvect_min.clear_bit(num); bvect_full.clear_bit(num); CheckCountRange(bvect_full, 0, num); CheckCountRange(bvect_full, num, num+iter); if ((i % 1000) == 0) cout << "." << flush; } CheckVectors(bvect_min, bvect_full, iter); CheckCountRange(bvect_full, 0, iter); }}void RangeRandomFillTest(){ assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- RangeRandomFillTest" << endl; { bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; printf("Range Random fill test\n"); unsigned min = BITVECT_SIZE / 2; unsigned max = BITVECT_SIZE / 2 + ITERATIONS; if (max > BITVECT_SIZE) max = BITVECT_SIZE - 1; FillSets(&bvect_min, &bvect_full, min, max, 0); CheckVectors(bvect_min, bvect_full, BITVECT_SIZE); CheckCountRange(bvect_full, min, max); } { bvect_mini bvect_min(BITVECT_SIZE); bvect bvect_full; printf("Range Random fill test\n"); unsigned min = BITVECT_SIZE / 2; unsigned max = BITVECT_SIZE / 2 + ITERATIONS; if (max > BITVECT_SIZE) max = BITVECT_SIZE - 1; FillSetsIntervals(&bvect_min, &bvect_full, min, max, 4); CheckVectors(bvect_min, bvect_full, BITVECT_SIZE); CheckCountRange(bvect_full, min, max); } }void AndOperationsTest(){ assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- AndOperationTest" << endl; { bvect_mini bvect_min1(256); bvect_mini bvect_min2(256); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("AND test\n"); bvect_min1.set_bit(1); bvect_min1.set_bit(12); bvect_min1.set_bit(13); bvect_min2.set_bit(12); bvect_min2.set_bit(13); bvect_min1.combine_and(bvect_min2); bvect_full1.set_bit(1); bvect_full1.set_bit(12); bvect_full1.set_bit(13); bvect_full2.set_bit(12); bvect_full2.set_bit(13); bm::id_t predicted_count = bm::count_and(bvect_full1, bvect_full2); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckCountRange(bvect_full1, 0, 256); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; printf("AND test stage 1.\n"); for (int i = 0; i < 112; ++i) { bvect_min1.set_bit(i); bvect_full1.set_bit(i); bvect_min2.set_bit(i); bvect_full2.set_bit(i); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10);// FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0);// FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bvect_min1.combine_and(bvect_min2); bm::id_t predicted_count = bm::count_and(bvect_full1,bvect_full2); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("AND test stage 2.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bm::id_t predicted_count = bm::count_and(bvect_full1,bvect_full2); bvect_min1.combine_and(bvect_min2); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; bvect_full1.stat(); exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); cout << "------------------------------" << endl; printf("AND test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bvect_min1.combine_and(bvect_min2); bm::id_t predicted_count = bm::count_and(bvect_full1, bvect_full2); bvect_full1.bit_and(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); CheckCountRange(bvect_full1, BITVECT_SIZE/2, BITVECT_SIZE); }}void OrOperationsTest(){ assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- OrOperationTest" << endl; { bvect_mini bvect_min1(256); bvect_mini bvect_min2(256); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("OR test\n"); bvect_min1.set_bit(1); bvect_min1.set_bit(12); bvect_min1.set_bit(13); bvect_min2.set_bit(12); bvect_min2.set_bit(13); bvect_min1.combine_or(bvect_min2); bvect_full1.set_bit(1); bvect_full1.set_bit(12); bvect_full1.set_bit(13); bvect_full2.set_bit(12); bvect_full2.set_bit(13); bm::id_t predicted_count = bm::count_or(bvect_full1, bvect_full2); bvect_full1.bit_or(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; cout << predicted_count << " " << count << endl; bvect_full1.stat(); exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckCountRange(bvect_full1, 0, 256); CheckCountRange(bvect_full1, 128, 256); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("OR test stage 2.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/7, 0); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/7, 0); bvect_min1.combine_or(bvect_min2); bm::id_t predicted_count = bm::count_or(bvect_full1, bvect_full2); bvect_full1.bit_or(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE/10+10); CheckCountRange(bvect_full1, 0, BITVECT_SIZE/10+10); } { bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); cout << "------------------------------" << endl; printf("OR test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bvect_min1.combine_or(bvect_min2); bm::id_t predicted_count = bm::count_or(bvect_full1, bvect_full2); bvect_full1.bit_or(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bvect_full1.optimize(); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); CheckCountRange(bvect_full1, 0, BITVECT_SIZE); } cout << "Testing combine_or" << endl; { bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); unsigned ids[10000]; unsigned to_add = 10000; unsigned bn = 0; for (unsigned i = 0; i < to_add; ++i) { ids[i] = bn; bvect_full2.set(bn); bvect_min1.set_bit(bn); bn += 15; } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_or(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_or(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -