Exemplo n.º 1
0
        public void InsertAndDeletePageBenchmark()
        {
            IntHashSet numbers = new IntHashSet();
            const int queueSize = 4000;
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open( );

                Queue queue = new Queue( queueSize );
                for ( int i = 0; i < queueSize; i++ )
                {
                    TestKey testKey = new TestKey( GetUniqueRand( numbers ) );
                    queue.Enqueue( testKey );
                    bTree.InsertKey( testKey, (int)testKey.Key );
                }
                int time = System.Environment.TickCount;
                for ( int i = 0; i < 100000; i++ )
                {
                    TestKey testKey = (TestKey)queue.Dequeue();
                    bTree.DeleteKey( testKey, (int)testKey.Key );
                    numbers.Remove( (int)testKey.Key );
                    TestKey newKey = new TestKey( GetUniqueRand( numbers ) );
                    queue.Enqueue( newKey );
                    bTree.InsertKey( newKey, (int)newKey.Key );
                }
                time = System.Environment.TickCount - time;
                Console.WriteLine( " work took " + time.ToString() );

                bTree.Close();
            }
        }
Exemplo n.º 2
0
        public void SearchForRangeOrderTest()
        {
            IntHashSet numbers = new IntHashSet();
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                TestKey testKey = new TestKey( 0 );

                for ( int i = 0; i < 10000; i++ )
                {
                    testKey = new TestKey( GetUniqueRand( numbers ) );
                    bTree.InsertKey( testKey, (int)testKey.Key );
                }

                ArrayList keys_offsets = new ArrayList();
                bTree.SearchForRange( new TestKey( 0 ), testKey, keys_offsets );
                for( int j = 1; j < keys_offsets.Count; ++j )
                {
                    KeyPair pair1 = (KeyPair) keys_offsets[ j - 1 ];
                    KeyPair pair2 = (KeyPair) keys_offsets[ j ];
                    if( pair1._key.CompareTo( pair2._key ) > 0 )
                    {
                        throw new Exception( "Invalid key order, j = " + j );
                    }
                }

                bTree.Close();
            }
        }
Exemplo n.º 3
0
 public void BatchInsertingAndReopen()
 {
     TestKey keyFactory = new TestKey();
     IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
     using( bTree )
     {
         bTree.Open();
         for( int i = 0; i < 10000; i++ )
         {
             bTree.InsertKey( new TestKey( i ), i );
         }
         Assert.AreEqual( 10000, bTree.Count );
         bTree.Close();
         bTree.Open();
         Assert.AreEqual( 10000, bTree.Count );
         for( int i = 10000; i < 20000; i++ )
         {
             bTree.InsertKey( new TestKey( i ), i );
         }
         Assert.AreEqual( 20000, bTree.Count );
         bTree.Close();
         bTree.Open();
         Assert.AreEqual( 20000, bTree.Count );
         bTree.Close();
     }
 }
Exemplo n.º 4
0
        public void BatchSearchingBackward()
        {
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                IntArrayList offsets = new IntArrayList();
                for( int i = 10000; i > 0; i-- )
                {
                    bTree.InsertKey( new TestKey( i ), i );
                    offsets.Clear();
                    bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
                    Assert.AreEqual( true, FindOffset( offsets, i ), i.ToString() + " not found" );
                }
                Assert.AreEqual( 10000, bTree.Count );
                for( int i = 10000; i > 0; i-- )
                {
                    bTree.DeleteKey( new TestKey( i ), i );
                    offsets.Clear();
                    bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
                    Assert.AreEqual( 0, offsets.Count, i.ToString() + " must not be found" );
                    Assert.AreEqual( false, FindOffset( offsets, i ) );
                }
                Assert.AreEqual( 0, bTree.Count );

                bTree.Close();
                bTree.Open();
                Assert.AreEqual( 0, bTree.Count );
                bTree.Close();
            }
        }
Exemplo n.º 5
0
 public void Clearing()
 {
     TestKey keyFactory = new TestKey();
     IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
     using( bTree )
     {
         bTree.Open();
         bTree.InsertKey( new TestKey( 1 ), 1 );
         for( int i = 0; i < 10000; i++ )
         {
             bTree.InsertKey( new TestKey( 2 ), i );
         }
         bTree.InsertKey( new TestKey( 3 ), 3 );
         IntArrayList offsets = new IntArrayList();
         bTree.SearchForRange( new TestKey( 2 ), new TestKey( 2 ), offsets );
         Assert.AreEqual( 10000, offsets.Count );
         bTree.Clear();
         offsets.Clear();
         bTree.SearchForRange( new TestKey( 2 ), new TestKey( 2 ), offsets );
         Assert.AreEqual( 0, offsets.Count );
         Assert.AreEqual( 0, bTree.Count );
         for( int i = 0; i < 10000; i++ )
         {
             bTree.InsertKey( new TestKey( 2 ), i );
         }
         Assert.AreEqual( 10000, bTree.Count );
         bTree.Close();
     }
 }
Exemplo n.º 6
0
 public void GroupsMultipleEqualKeys()
 {
     const int cycles = 20000;
     TestKey keyFactory = new TestKey( 0 );
     IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
     using( bTree )
     {
         bTree.Open();
         for( int j = 0; j < 10; ++j )
         {
             for( int i = 0; i < cycles; ++i )
             {
                 bTree.InsertKey( new TestKey( j ), i );
             }
         }
         for( int j = 0; j < 10; ++j )
         {
             IntArrayList offsets = new IntArrayList();
             bTree.SearchForRange( new TestKey( j ), new TestKey( j ), offsets );
             Assert.AreEqual( cycles, offsets.Count );
             for( int i = 0; i < cycles; ++i )
             {
                 bTree.DeleteKey( new TestKey( j ), i );
             }
         }
         bTree.Close();
     }
 }
Exemplo n.º 7
0
        public void SearchForRangeEnumerator()
        {
            TestKey keyFactory = new TestKey( 0 );
            IBTree bTree = new OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                for( int i = 0; i < 100000; ++i )
                {
                    bTree.InsertKey( new TestKey( i ), i );
                }
                int count = 0;
                foreach( KeyPair pair in bTree.SearchForRange( new TestKey( 0 ), new TestKey( 9999 ) ) )
                {
                    Assert.AreEqual( count, (int) pair._key.Key );
                    Assert.AreEqual( count, pair._offset );
                    ++count;
                }
                Assert.AreEqual( count, 10000 );

                count = 0;
                foreach( KeyPair pair in bTree.SearchForRange( new TestKey( 100001 ), new TestKey( 100001 ) ) )
                {
                    Assert.AreEqual( count, (int) pair._key.Key );
                    Assert.AreEqual( count, pair._offset );
                    ++count;
                }
                Assert.AreEqual( count, 0 );

                count = 0;
                foreach( KeyPair pair in bTree.SearchForRange( new TestKey( 49999 ), new TestKey( 49999 ) ) )
                {
                    Assert.AreEqual( (int) pair._key.Key, 49999 );
                    Assert.AreEqual( pair._offset, 49999 );
                    ++count;
                }
                Assert.AreEqual( count, 1 );

                // delete each 15 of 16 keys
                for( int i = 0; i < 100000; ++i )
                {
                    if( ( i & 15 ) != 0 )
                    {
                        bTree.DeleteKey( new TestKey( i ), i );
                    }
                }
                count = 0;
                foreach( KeyPair pair in bTree.SearchForRange( new TestKey( 0 ), new TestKey( 100000 ) ) )
                {
                    Assert.AreEqual( 16 * count, (int) pair._key.Key );
                    Assert.AreEqual( 16 * count, pair._offset );
                    ++count;
                }
                Assert.AreEqual( count, 100000 / 16 );

                bTree.Close();
            }
        }
Exemplo n.º 8
0
        public void SequentialSearchDeleteInsert()
        {
            IntHashSet numbers = new IntHashSet();
            const int queueSize = 100000;
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open( );

                //Random random = new Random( System.Environment.TickCount );
                Queue queue = new Queue( queueSize );
                for ( int i = 0; i < queueSize; i++ )
                {
                    int key = GetUniqueRand( numbers );
                    TestKey testKey = new TestKey( key );
                    queue.Enqueue( testKey );
                    bTree.InsertKey( testKey, key );
                }
                bTree.Close();
                if( !bTree.Open() )
                {
                    throw new Exception( "Can't reopen btree! ");
                }
                int time = System.Environment.TickCount;
                IntArrayList offsets = new IntArrayList();
                for ( int i = 0; i < 20000; i++ )
                {
                    TestKey testKey = (TestKey)queue.Dequeue();
                    offsets.Clear();
                    bTree.SearchForRange( testKey, testKey, offsets );
                    Assert.AreEqual( 1, offsets.Count, testKey.Key.ToString() + " not found. i = " + i.ToString() );
                    Assert.AreEqual( (int)testKey.Key, offsets[0] );
                    bTree.DeleteKey( testKey, (int)testKey.Key );
                    numbers.Remove( (int)testKey.Key );
                    offsets.Clear();
                    bTree.SearchForRange( testKey, testKey, offsets );
                    Assert.AreEqual( 0, offsets.Count );
                    TestKey newKey = new TestKey( GetUniqueRand( numbers ) );
                    queue.Enqueue( newKey );
                    bTree.InsertKey( newKey, (int)newKey.Key );
                    offsets.Clear();
                    bTree.SearchForRange( newKey, newKey, offsets );
                    Assert.AreEqual( 1, offsets.Count );
                    Assert.AreEqual( (int)newKey.Key, offsets[0] );
                }
                time = System.Environment.TickCount - time;
                Console.WriteLine( " work took " + time.ToString() );

                bTree.Close();
            }
        }
Exemplo n.º 9
0
        public void GetAllKeysEnumerator()
        {
            TestKey keyFactory = new TestKey( 0 );
            OmniaMeaBTree bTree = new OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                for( int i = 0; i < 100000; ++i )
                {
                    bTree.InsertKey( new TestKey( i ), i );
                }
                int count = 0;
                foreach( KeyPair pair in bTree.GetAllKeys() )
                {
                    Assert.AreEqual( count, (int) pair._key.Key );
                    Assert.AreEqual( count, pair._offset );
                    ++count;
                }
                Assert.AreEqual( count, 100000 );

                KeyPair pair1 = bTree.GetMaximum();
                Assert.AreEqual( (int)pair1._key.Key, 99999 );
                pair1 = bTree.GetMinimum();
                Assert.AreEqual( (int)pair1._key.Key, 0 );

                // delete each 15 of 16 keys
                for( int i = 0; i < 100000; ++i )
                {
                    if( ( i & 15 ) != 0 )
                    {
                        bTree.DeleteKey( new TestKey( i ), i );
                    }
                }
                count = 0;
                foreach( KeyPair pair in bTree.GetAllKeys() )
                {
                    Assert.AreEqual( 16 * count, (int) pair._key.Key );
                    Assert.AreEqual( 16 * count, pair._offset );
                    ++count;
                }
                Assert.AreEqual( count, 100000 / 16 );
                pair1 = bTree.GetMaximum();
                Assert.AreEqual( (int)pair1._key.Key, 99984 );
                pair1 = bTree.GetMinimum();
                Assert.AreEqual( (int)pair1._key.Key, 0 );

                bTree.Close();
            }
        }
Exemplo n.º 10
0
        public void BatchInsertingAndDeleting()
        {
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                for( int i = 0; i < 10000; i++ )
                {
                    bTree.InsertKey( new TestKey( i ), i );
                }
                Assert.AreEqual( 10000, bTree.Count );
                for( int i = 0; i < 10000; i++ )
                {
                    bTree.DeleteKey( new TestKey( i ), i );
                }
                Assert.AreEqual( 0, bTree.Count );

                bTree.Close();
                bTree.Open();
                Assert.AreEqual( 0, bTree.Count );
                for( int i = 0; i < 10; i++ )
                {
                    bTree.InsertKey( new TestKey( i ), i );
                }
                Assert.AreEqual( 10, bTree.Count );
                IntArrayList offsets = new IntArrayList();
                for( int i = 0; i < 10; i++ )
                {
                    offsets.Clear();
                    bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
                    Assert.AreEqual( 1, offsets.Count );
                    Assert.AreEqual( i, offsets[0] );
                }
                for( int i = 0; i < 10; i++ )
                {
                    bTree.DeleteKey( new TestKey( i ), i );
                }
                Assert.AreEqual( 0, bTree.Count );
                for( int i = 0; i < 10; i++ )
                {
                    offsets.Clear();
                    bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
                    Assert.AreEqual( 0, offsets.Count );
                }
                bTree.Close();
            }
        }
Exemplo n.º 11
0
 public void GetAllOffsets()
 {
     TestKey keyFactory = new TestKey();
     IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
     using( bTree )
     {
         bTree.Open();
         bTree.InsertKey( new TestKey( 1 ), 1 );
         for( int i = 0; i < 10000; i++ )
         {
             bTree.InsertKey( new TestKey( 2 ), i );
         }
         bTree.InsertKey( new TestKey( 3 ), 3 );
         IntArrayList offsets = new IntArrayList();
         bTree.GetAllKeys( offsets );
         Assert.AreEqual( 10002, offsets.Count );
         bTree.Close();
         bTree.Open();
         offsets.Clear();
         bTree.GetAllKeys( offsets );
         Assert.AreEqual( 10002, offsets.Count );
         for( int i = 5; i < 15; ++i )
         {
             bTree.InsertKey( new TestKey( i - 5 ), i );
         }
         bTree.Close();
         bTree.Open();
         offsets.Clear();
         bTree.GetAllKeys( offsets );
         Assert.AreEqual( 10012, offsets.Count );
         bTree.Close();
         bTree.Open();
         for( int i = 5; i < 15; ++i )
         {
             bTree.DeleteKey( new TestKey( i - 5 ), i );
         }
         offsets.Clear();
         bTree.GetAllKeys( offsets );
         Assert.AreEqual( 10002, offsets.Count );
         bTree.Close();
         bTree.Open();
         offsets.Clear();
         bTree.GetAllKeys( offsets );
         Assert.AreEqual( 10002, offsets.Count );
         bTree.Close();
     }
 }
Exemplo n.º 12
0
 public void MultipleEqualKeys()
 {
     const int cycles = 10000;
     TestKey keyFactory = new TestKey( 0 );
     IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
     using( bTree )
     {
         bTree.Open();
         for( int i = 0; i < cycles; ++i )
         {
             bTree.InsertKey( keyFactory, i );
         }
         IntArrayList offsets = new IntArrayList();
         bTree.SearchForRange( keyFactory, keyFactory, offsets );
         Assert.AreEqual( cycles, bTree.Count );
         Assert.AreEqual( cycles, offsets.Count );
         bTree.Close();
     }
 }
Exemplo n.º 13
0
        public void Deleting()
        {
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                bTree.InsertKey( new TestKey( 1 ), 1 );
                bTree.InsertKey( new TestKey( 2 ), 2 );
                Assert.AreEqual( 2, bTree.Count );
                bTree.DeleteKey( new TestKey( 2 ), 2 );
                Assert.AreEqual( 1, bTree.Count );
                IntArrayList offsets = new IntArrayList();
                bTree.SearchForRange( new TestKey( 1 ), new TestKey( 1 ), offsets );
                Assert.AreEqual( 1, offsets.Count );
                Assert.AreEqual( 1, offsets[0] );

                bTree.Close();
            }
        }
Exemplo n.º 14
0
 public void SmallCacheBTreeReopen()
 {
     TestKey keyFactory = new TestKey( 0 );
     IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
     using( bTree )
     {
         bTree.SetCacheSize(  2 );
         bTree.Open();
         for( int i = 0; i < 50000; ++i )
         {
             bTree.InsertKey( new TestKey( i ), i );
         }
         bTree.Close();
         bTree.Open();
         for( int i = 0; i < 15000; ++i )
         {
             IntArrayList offsets = new IntArrayList();
             bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
             Assert.AreEqual( 1, offsets.Count );
             bTree.DeleteKey( new TestKey( i ), i );
         }
         bTree.Close();
         bTree.Open();
         for( int i = 15000; i < 30000; ++i )
         {
             IntArrayList offsets = new IntArrayList();
             bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
             Assert.AreEqual( 1, offsets.Count );
             bTree.DeleteKey( new TestKey( i ), i );
         }
         bTree.Close();
         bTree.Open();
         for( int i = 30000; i < 50000; ++i )
         {
             IntArrayList offsets = new IntArrayList();
             bTree.SearchForRange( new TestKey( i ), new TestKey( i ), offsets );
             Assert.AreEqual( 1, offsets.Count );
         }
         bTree.Close();
     }
 }
Exemplo n.º 15
0
        public void SequentialInsertAndDelete()
        {
            IntHashSet numbers = new IntHashSet();
            const int queueSize = 10000;
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                int time = System.Environment.TickCount;
                Queue queue = new Queue( queueSize );
                const int cycles = 2;

                for( int count = 0; count < cycles; ++count )
                {
                    for ( int i = 0; i < queueSize; i++ )
                    {
                        TestKey testKey = new TestKey( GetUniqueRand( numbers ) );
                        queue.Enqueue( testKey );
                        bTree.InsertKey( testKey, (int)testKey.Key );
                    }
                    for ( int i = 0; i < queueSize - 1; i++ )
                    {
                        TestKey testKey = (TestKey)queue.Dequeue();
                        bTree.DeleteKey( testKey, (int)testKey.Key );
                        numbers.Remove( (int)testKey.Key );
                    }
                    queue.Clear();
                }

                Assert.AreEqual( cycles, bTree.Count );

                time = System.Environment.TickCount - time;
                Console.WriteLine( " work took " + time.ToString() );

                bTree.Close();
            }
        }
Exemplo n.º 16
0
        public void EmulateSequentialSplit_ThenDeleteAndGetAllKeys()
        {
            TestKey keyFactory = new TestKey();
            TestKey testKey;
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            using( bTree )
            {
                bTree.Open();
                for( int i = 0; i < 10; ++i )
                {
                    testKey = new TestKey( 0 );
                    bTree.InsertKey( testKey, i );
                }
                for( int i = 0; i < 10; ++i )
                {
                    testKey = new TestKey( Int32.MaxValue );
                    bTree.InsertKey( testKey, i );
                }
                for( int i = 1; i < 4991; ++i )
                {
                    testKey = new TestKey( i );
                    bTree.InsertKey( testKey, 0 );
                    testKey = new TestKey( Int32.MaxValue - i );
                    bTree.InsertKey( testKey, 0 );
                }
                int count_ = bTree.Count;
                Assert.AreEqual( 10000, count_ );
                bTree.Close();
                bTree.Open();
                ArrayList keys = new ArrayList( count_ );
                bTree.GetAllKeys( keys );
                if( keys.Count != count_ || bTree.Count != count_ )
                {
                    throw new Exception(
                        "keys.Count = " +  keys.Count + ", bTree.Count = " + bTree.Count + ", count_ = " + count_ );
                }
                testKey = new TestKey( 0 );
                bTree.DeleteKey( testKey, 0 );
                bTree.DeleteKey( testKey, 1 );
                bTree.DeleteKey( testKey, 2 );
                testKey = new TestKey( Int32.MaxValue );
                bTree.DeleteKey( testKey, 9 );
                bTree.DeleteKey( testKey, 8 );
                bTree.DeleteKey( testKey, 7 );
                for( int i = 10000; i < 55003; ++i )
                {
                    testKey = new TestKey( i );
                    bTree.InsertKey( testKey, 0 );
                    testKey = new TestKey( Int32.MaxValue - i );
                    bTree.InsertKey( testKey, 0 );
                }
                count_ = bTree.Count;
                Assert.AreEqual( 100000, count_ );
                bTree.Close();
                bTree.Open();
                keys = new ArrayList( count_ );
                bTree.GetAllKeys( keys );
                if( keys.Count != count_ || bTree.Count != count_ )
                {
                    throw new Exception(
                        "keys.Count = " +  keys.Count + ", bTree.Count = " + bTree.Count + ", count_ = " + count_ );
                }

                bTree.Close();
            }
        }
Exemplo n.º 17
0
        public void SequentialInsertDeleteGetAllKeys()
        {
            IntHashSet numbers = new IntHashSet();
            const int queueSize = 3000;
            const int cacheSize = 32;
            TestKey keyFactory = new TestKey();
            IBTree bTree = new /*BTree*/OmniaMeaBTree( _indexFileName, keyFactory );
            bTree.SetCacheSize( cacheSize );
            using( bTree )
            {
                bTree.Open();
                int time = System.Environment.TickCount;
                Queue queue = new Queue( queueSize );
                const int cycles = 20;

                for ( int i = 0; i < queueSize * cacheSize; i++ )
                {
                    TestKey testKey = new TestKey( GetUniqueRand( numbers ) );
                    bTree.InsertKey( testKey, (int)testKey.Key );
                }

                for( int count = 0; count < cycles; ++count )
                {
                    for ( int i = 0; i < queueSize; i++ )
                    {
                        TestKey testKey = new TestKey( GetUniqueRand( numbers ) );
                        queue.Enqueue( testKey );
                        bTree.InsertKey( testKey, (int)testKey.Key );
                    }
                    int count_ = bTree.Count;
                    bTree.Close();
                    bTree.Open();
                    ArrayList keys = new ArrayList( count_ );
                    IntArrayList ints = new IntArrayList( count_ );
                    bTree.GetAllKeys( keys );
                    if( keys.Count != count_ || bTree.Count != count_ )
                    {
                        throw new Exception(
                            "keys.Count = " +  keys.Count + ", bTree.Count = " + bTree.Count + ", count_ = " + count_ );
                    }
                    foreach( KeyPair pair in keys )
                    {
                        ints.Add( (int) pair._key.Key );
                    }
                    for ( int i = 0; i < queueSize - 1; i++ )
                    {
                        TestKey testKey = (TestKey)queue.Dequeue();
                        int key = (int)testKey.Key;
                        bTree.DeleteKey( testKey, key );
                        numbers.Remove( key );
                        if( ints.BinarySearch( key ) < 0 )
                        {
                            throw new Exception( "The ints array doesn't contain removed key" );
                        }
                    }
                    queue.Clear();
                }

                Assert.AreEqual( cycles + queueSize * cacheSize, bTree.Count );

                time = System.Environment.TickCount - time;
                Console.WriteLine( " work took " + time.ToString() );

                bTree.Close();
            }
        }
Exemplo n.º 18
0
        public void MultipleBTrees()
        {
            ArrayList keys = new ArrayList();
            TestKey keyFactory = new TestKey();
            TestKey sameKey = new TestKey( -1 );
            OmniaMeaBTree bTree1 = new OmniaMeaBTree( _indexFileName, keyFactory );
            OmniaMeaBTree bTree2 = new OmniaMeaBTree( _indexFileName + "2", keyFactory );
            OmniaMeaBTree bTree3 = new OmniaMeaBTree( _indexFileName + "3", keyFactory );
            bTree1.Open();
            bTree2.Open();
            bTree3.Open();
            for( int i = 0; i < 50000; i++ )
            {
                bTree1.InsertKey( new TestKey( i ), i + 1 );
                bTree2.InsertKey( new TestKey( i ), i + 1 );
                bTree3.InsertKey( new TestKey( i ), i + 1 );
            }

            bTree1.Close();
            bTree2.Close();
            bTree1.Open();
            bTree3.Close();
            bTree2.Open();
            bTree3.Open();

            Assert.AreEqual( 50000, bTree1.Count );
            Assert.AreEqual( 50000, bTree2.Count );
            Assert.AreEqual( 50000, bTree3.Count );

            keys.Clear();
            bTree1.GetAllKeys( keys );
            Assert.AreEqual( 50000, keys.Count );
            keys.Clear();
            bTree2.GetAllKeys( keys );
            Assert.AreEqual( 50000, keys.Count );
            keys.Clear();
            bTree3.GetAllKeys( keys );
            Assert.AreEqual( 50000, keys.Count );

            for( int i = 0; i < 50000; i++ )
            {
                bTree1.InsertKey( new TestKey( i ), i - 1 );
                bTree2.InsertKey( new TestKey( i ), i - 1 );
                bTree3.InsertKey( new TestKey( i ), i - 1 );
            }

            bTree1.Close();
            bTree2.Close();
            bTree3.Close();
            bTree3.Open();
            bTree2.Open();
            bTree1.Open();

            Assert.AreEqual( 100000, bTree1.Count );
            Assert.AreEqual( 100000, bTree2.Count );
            Assert.AreEqual( 100000, bTree3.Count );

            keys.Clear();
            bTree1.GetAllKeys( keys );
            Assert.AreEqual( 100000, keys.Count );
            keys.Clear();
            bTree2.GetAllKeys( keys );
            Assert.AreEqual( 100000, keys.Count );
            keys.Clear();
            bTree3.GetAllKeys( keys );
            Assert.AreEqual( 100000, keys.Count );

            for( int i = 50000; i > 0; i-- )
            {
                bTree1.InsertKey( new TestKey( i ), i + 2 );
                bTree2.InsertKey( new TestKey( i ), i + 2 );
                bTree3.InsertKey( new TestKey( i ), i + 2 );
            }

            bTree1.Close();
            bTree2.Close();
            bTree3.Close();
            bTree3.Open();
            bTree2.Open();
            bTree1.Open();

            Assert.AreEqual( 150000, bTree1.Count );
            Assert.AreEqual( 150000, bTree2.Count );
            Assert.AreEqual( 150000, bTree3.Count );

            keys.Clear();
            bTree1.GetAllKeys( keys );
            Assert.AreEqual( 150000, keys.Count );
            keys.Clear();
            bTree2.GetAllKeys( keys );
            Assert.AreEqual( 150000, keys.Count );
            keys.Clear();
            bTree3.GetAllKeys( keys );
            Assert.AreEqual( 150000, keys.Count );

            for( int i = 0; i < 1100; i++ )
            {
                bTree1.InsertKey( sameKey, i );
                bTree2.InsertKey( sameKey, i );
                bTree3.InsertKey( sameKey, i );
            }

            keys.Clear();
            bTree1.GetAllKeys( keys );
            Assert.AreEqual( 151100, keys.Count );
            keys.Clear();
            bTree2.GetAllKeys( keys );
            Assert.AreEqual( 151100, keys.Count );
            keys.Clear();
            bTree3.GetAllKeys( keys );
            Assert.AreEqual( 151100, keys.Count );

            keys.Clear();
            bTree1.SearchForRange( sameKey, sameKey, keys );
            Assert.AreEqual( 1100, keys.Count );
            keys.Clear();
            bTree2.SearchForRange( sameKey, sameKey, keys );
            Assert.AreEqual( 1100, keys.Count );
            keys.Clear();
            bTree3.SearchForRange( sameKey, sameKey, keys );
            Assert.AreEqual( 1100, keys.Count );

            bTree1.Close();
            bTree3.Close();
            bTree3.Dispose();
            bTree1.Dispose();
            bTree2.Close();
            bTree1.Dispose();
        }
Exemplo n.º 19
0
 public IFixedLengthKey FactoryMethod( BinaryReader reader )
 {
     TestKey testKey = new TestKey();
     testKey.Read( reader );
     return testKey;
 }