📄 stress.cpp
字号:
{ unsigned ids[] = {0, 65536, 65535, 65535*3, 65535*2, 10}; unsigned to_add = sizeof(ids)/sizeof(unsigned); 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 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); } }void SubOperationsTest(){ assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- SubOperationTest" << 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("SUB 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_sub(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_sub(bvect_full1, bvect_full2); bvect_full1.bit_sub(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; bvect_full1.set_new_blocks_strat(bm::BM_GAP); bvect_full2.set_new_blocks_strat(bm::BM_GAP); printf("SUB 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_sub(bvect_min2); bm::id_t predicted_count = bm::count_sub(bvect_full1, bvect_full2); bvect_full1.bit_sub(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, 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("SUB 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_sub(bvect_min2); bm::id_t predicted_count = bm::count_sub(bvect_full1, bvect_full2); bvect_full1.bit_sub(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); }}void XorOperationsTest(){ assert(ITERATIONS < BITVECT_SIZE); cout << "----------------------------------- XorOperationTest" << 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("XOR 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_xor(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_xor(bvect_full1, bvect_full2); bvect_full1.bit_xor(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "1.Predicted count error!" << endl; exit(1); } CheckVectors(bvect_min1, bvect_full1, 256); CheckCountRange(bvect_full1, 0, 256); CheckCountRange(bvect_full1, 128, 256); } { bvect bvect1; bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect2; bvect_mini bvect_min2(BITVECT_SIZE); for (int i = 0; i < 150000; ++i) { bvect2.set_bit(i); bvect_min2.set_bit(i); } bvect2.optimize(); bm::id_t predicted_count = bm::count_xor(bvect1, bvect2); bvect1.bit_xor(bvect2); bm::id_t count = bvect1.count(); if (count != predicted_count) { cout << "2.Predicted count error!" << endl; exit(1); } bvect_min1.combine_xor(bvect_min2); CheckVectors(bvect_min1, bvect1, BITVECT_SIZE, true); CheckCountRange(bvect1, 0, BITVECT_SIZE); } { bvect bvect1; bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect2; bvect_mini bvect_min2(BITVECT_SIZE); for (int i = 0; i < 150000; ++i) { bvect1.set_bit(i); bvect_min1.set_bit(i); } bvect1.optimize(); bm::id_t predicted_count = bm::count_xor(bvect1, bvect2); bvect1.bit_xor(bvect2); bm::id_t count = bvect1.count(); if (count != predicted_count) { cout << "3.Predicted count error!" << endl; exit(1); } bvect_min1.combine_xor(bvect_min2); CheckVectors(bvect_min1, bvect1, BITVECT_SIZE, true); } { bvect bvect1; bvect_mini bvect_min1(BITVECT_SIZE); bvect bvect2; bvect_mini bvect_min2(BITVECT_SIZE); for (int i = 0; i < 150000; ++i) { bvect1.set_bit(i); bvect_min1.set_bit(i); bvect2.set_bit(i); bvect_min2.set_bit(i); } bvect1.optimize(); bm::id_t predicted_count = bm::count_xor(bvect1, bvect2); bvect1.bit_xor(bvect2); bm::id_t count = bvect1.count(); if (count != predicted_count) { cout << "4.Predicted count error!" << endl; cout << count << " " << predicted_count << endl; exit(1); } bvect_min1.combine_xor(bvect_min2); CheckVectors(bvect_min1, bvect1, BITVECT_SIZE, true); } { 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("XOR 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_xor(bvect_min2); bm::id_t predicted_count = bm::count_xor(bvect_full1, bvect_full2); bvect_full1.bit_xor(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "5.Predicted count error!" << endl; cout << count << " " << predicted_count << 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("XOR test stage 3.\n"); FillSets(&bvect_min1, &bvect_full1, 1, BITVECT_SIZE/5, 2); FillSets(&bvect_min2, &bvect_full2, 1, BITVECT_SIZE/5, 2); bm::id_t predicted_count = bm::count_xor(bvect_full1, bvect_full2); bvect_min1.combine_xor(bvect_min2); bvect_full1.bit_xor(bvect_full2); bm::id_t count = bvect_full1.count(); if (count != predicted_count) { cout << "6.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_xor" << 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_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } { 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]={0,}; unsigned to_add = 10000; for (unsigned i = 0; i < to_add; i+=100) { ids[i] = i; bvect_full2.set(i); bvect_min1.set_bit(i); } unsigned* first = ids; unsigned* last = ids + to_add; bm::combine_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } { unsigned ids[] = {0, 65536, 65535, 65535*3, 65535*2, 10}; unsigned to_add = sizeof(ids)/sizeof(unsigned); bvect bvect_full1; bvect bvect_full2; bvect_mini bvect_min1(BITVECT_SIZE); bvect_full1.set_new_blocks_strat(bm::BM_BIT); bvect_full2.set_new_blocks_strat(bm::BM_BIT); 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_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } } { unsigned ids[] = {0, 65536, 65535, 65535*3, 65535*2, 10}; unsigned to_add = sizeof(ids)/sizeof(unsigned); 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 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_xor(bvect_full1, first, last); CheckVectors(bvect_min1, bvect_full1, BITVECT_SIZE); bm::combine_xor(bvect_full1, first, last); if (bvect_full1.count()) { cout << "combine_xor count failed!" << endl; exit(1); } }}void ComparisonTest(){ cout << "-------------------------------------- ComparisonTest" << endl; bvect_mini bvect_min1(BITVECT_SIZE); bvect_mini bvect_min2(BITVECT_SIZE); bvect bvect_full1; bvect bvect_full2; int res1, res2; bvect_full1.set_bit(31); bvect_full2.set_bit(63); res1 = bvect_full1.compare(bvect_full2); if (res1 != 1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -