⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stress.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    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 + -