コード例 #1
0
    void testClear()
    {
        DPQ dpq;

        dpq.push( 1 );
        dpq.push( 20 );
        dpq.push( 50 );

        BOOST_CHECK_EQUAL( Index( 3 ), dpq.getSize() );

        dpq.clear();

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );

        dpq.push( 2 );
        dpq.push( 20 );
        dpq.push( 30 );

        BOOST_CHECK_EQUAL( Index( 3 ), dpq.getSize() );

        dpq.clear();

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #2
0
    void testClearManyItems()
    {
        DPQ dpq;
        typedef typename DPQ::Index Index;

        for( int i( 0 ); i < 70000; ++i )
        {
            dpq.push( i );
        }

        BOOST_CHECK( dpq.checkConsistency() );

        dpq.clear();

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );

        dpq.push( 2 );
        dpq.push( 20 );
        dpq.push( 30 );

        BOOST_CHECK_EQUAL( Index( 3 ), dpq.getSize() );

        dpq.clear();

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #3
0
    void testInterleavedSortingWithPops()
    {
        DPQ dpq;

        IndexVector idVector;

        const Index MAXI( 101 );
        for( int n( MAXI-1 ); n != 0  ; n-=2 )
        {
            const Index id( dpq.push( n ) );

            if( n == 12 || n == 46 )
            {
                idVector.push_back( id );
            }
        }

        dpq.pop( idVector.back() );
        idVector.pop_back();

        BOOST_CHECK_EQUAL( MAXI/2 -1, dpq.getSize() );

        BOOST_CHECK( dpq.checkConsistency() );

        for( int n( MAXI ); n != -1  ; n-=2 )
        {
            const Index id( dpq.push( n ) );

            if( n == 17 || n == 81 )
            {
                idVector.push_back( id );
            }
        }

        for( typename IndexVector::const_iterator i( idVector.begin() );
             i != idVector.end(); ++i )
        {
            dpq.pop( *i );
        }

        BOOST_CHECK( dpq.checkConsistency() );
        BOOST_CHECK_EQUAL( MAXI-4, dpq.getSize() );

        int n( 0 );
        while( ! dpq.isEmpty() )
        {
            ++n;
            if( n == 12 || n == 46 || n == 17 || n == 81 )
            {
                continue;
            }
            BOOST_CHECK_EQUAL( n, dpq.getTop() );
            dpq.popTop();
        }

        BOOST_CHECK_EQUAL( MAXI, Index( n ) );

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #4
0
    void testReplace()
    {
        DPQ dpq;

        dpq.push( 5 );
        const Index id( dpq.push( 4 ) );
        dpq.push( 3 );
        dpq.push( 1 );

        BOOST_CHECK_EQUAL( 1, dpq.getTop() );

        dpq.replace( id, 2 );  // 4->2

        BOOST_CHECK( dpq.checkConsistency() );
        BOOST_CHECK_EQUAL( 1, dpq.getTop() );

        dpq.popTop();
        BOOST_CHECK_EQUAL( 2, dpq.getTop() );
        dpq.popTop();
        BOOST_CHECK_EQUAL( 3, dpq.getTop() );
        dpq.popTop();
        BOOST_CHECK_EQUAL( 5, dpq.getTop() );
        dpq.popTop();

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #5
0
    void testReplaceTop()
    {
        DPQ dpq;

        dpq.push( 4 );
        dpq.push( 2 );
        dpq.push( 1 );

        BOOST_CHECK_EQUAL( 1, dpq.getTop() );

        dpq.replaceTop( 3 );

        BOOST_CHECK( dpq.checkConsistency() );
        BOOST_CHECK_EQUAL( 2, dpq.getTop() );

        dpq.popTop();
        BOOST_CHECK_EQUAL( 3, dpq.getTop() );
        dpq.popTop();
        BOOST_CHECK_EQUAL( 4, dpq.getTop() );
        dpq.popTop();


        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #6
0
    void testInterleavedSorting()
    {
        DPQ dpq;

        const Index MAXI( 101 );
        for( int i( MAXI-1 ); i != 0  ; i-=2 )
        {
            dpq.push( i );
        }

        for( int i( MAXI ); i != -1  ; i-=2 )
        {
            dpq.push( i );
        }

        BOOST_CHECK_EQUAL( MAXI, dpq.getSize() );

        BOOST_CHECK( dpq.checkConsistency() );

        int n( 0 );
        while( ! dpq.isEmpty() )
        {
            ++n;
            BOOST_CHECK_EQUAL( n, dpq.getTop() );
            dpq.popTop();
        }

        BOOST_CHECK_EQUAL( MAXI, Index( n ) );

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #7
0
    void testSimpleSorting()
    {
        DPQ dpq;

        const int MAXI( 100 );
        for( int i( MAXI ); i != 0  ; --i )
        {
            dpq.push( i );
        }

        BOOST_CHECK( dpq.checkConsistency() );

        int n( 0 );
        while( ! dpq.isEmpty() )
        {
            ++n;
            BOOST_CHECK_EQUAL( n, dpq.getTop() );
            dpq.popTop();
        }

        BOOST_CHECK_EQUAL( MAXI, n );

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #8
0
    void testConstruction()
    {
        DPQ dpq;

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #9
0
    void testSimpleSortingWithPops()
    {
        DPQ dpq;

        IndexVector idVector;

        const Index MAXI( 100 );
        for( int n( MAXI ); n != 0  ; --n )
        {
            Index id( dpq.push( n ) );
            if( n == 11 || n == 45 )
            {
                idVector.push_back( id );
            }
        }

        BOOST_CHECK( dpq.checkConsistency() );

        BOOST_CHECK_EQUAL( MAXI, dpq.getSize() );

        for( typename IndexVector::const_iterator i( idVector.begin() );
             i != idVector.end(); ++i )
        {
            dpq.pop( *i );
        }

        BOOST_CHECK_EQUAL( MAXI - 2, dpq.getSize() );

        int n( 0 );
        while( ! dpq.isEmpty() )
        {
            ++n;
            if( n == 11 || n == 45 )
            {
                continue; // skip
            }
            BOOST_CHECK_EQUAL( int( n ), dpq.getTop() );
            dpq.popTop();
        }

        BOOST_CHECK_EQUAL( MAXI, Index( n ) );

        BOOST_CHECK( dpq.isEmpty() );
        BOOST_CHECK( dpq.checkConsistency() );
    }
コード例 #10
0
    void testPush()
    {
        DPQ dpq;

        dpq.push( 1 );

        BOOST_CHECK( dpq.checkConsistency() );
        BOOST_CHECK( dpq.getTop() == 1.0 );
    }
コード例 #11
0
    void testDuplicatedItems()
    {
        DPQ dpq;

        dpq.push( 1 );
        dpq.push( 2 );
        dpq.push( 1 );
        dpq.push( 2 );

        BOOST_CHECK( dpq.checkConsistency() );

        BOOST_CHECK( dpq.getTop() == 1 );
        dpq.popTop();
        BOOST_CHECK( dpq.getTop() == 1 );
        dpq.popTop();
        BOOST_CHECK( dpq.getTop() == 2 );
        dpq.popTop();
        BOOST_CHECK( dpq.getTop() == 2 );
        dpq.popTop();

        BOOST_CHECK( dpq.isEmpty() );

        BOOST_CHECK( dpq.checkConsistency() );
    }