diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2016-12-17 21:28:53 -0800 |
commit | 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 (patch) | |
tree | 18147b92b969d25ffbe61935fb63035cac820dd0 /db-4.8.30/test/scr037/SecondaryBTreeDatabaseTest.cs |
Berkeley DB 4.8 with rust build script for linux.
Diffstat (limited to 'db-4.8.30/test/scr037/SecondaryBTreeDatabaseTest.cs')
-rw-r--r-- | db-4.8.30/test/scr037/SecondaryBTreeDatabaseTest.cs | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/db-4.8.30/test/scr037/SecondaryBTreeDatabaseTest.cs b/db-4.8.30/test/scr037/SecondaryBTreeDatabaseTest.cs new file mode 100644 index 0000000..5c1fdfb --- /dev/null +++ b/db-4.8.30/test/scr037/SecondaryBTreeDatabaseTest.cs @@ -0,0 +1,232 @@ +/*- + * See the file LICENSE for redistribution information. + * + * Copyright (c) 2009 Oracle. All rights reserved. + * + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Xml; +using NUnit.Framework; +using BerkeleyDB; + +namespace CsharpAPITest +{ + [TestFixture] + public class SecondaryBTreeDatabaseTest + { + private string testFixtureHome; + private string testFixtureName; + private string testName; + private string testHome; + + [TestFixtureSetUp] + public void RunBeforeTests() + { + testFixtureName = "SecondaryBTreeDatabaseTest"; + testFixtureHome = "./TestOut/" + testFixtureName; + + Configuration.ClearDir(testFixtureHome); + } + + [Test] + public void TestOpen() + { + testName = "TestOpen"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + string dbSecFileName = testHome + "/" + + testName + "_sec.db"; + + Configuration.ClearDir(testHome); + + XmlElement xmlElem = Configuration.TestSetUp( + testFixtureName, testName); + + // Open a primary btree database. + BTreeDatabaseConfig btreeDBConfig = + new BTreeDatabaseConfig(); + btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; + BTreeDatabase btreeDB = BTreeDatabase.Open( + dbFileName, btreeDBConfig); + + // Open a secondary btree database. + SecondaryBTreeDatabaseConfig secDBConfig = + new SecondaryBTreeDatabaseConfig(btreeDB, null); + + SecondaryBTreeDatabaseConfigTest.Config(xmlElem, + ref secDBConfig, true); + SecondaryBTreeDatabase secDB = + SecondaryBTreeDatabase.Open(dbSecFileName, + secDBConfig); + + // Confirm its flags configured in secDBConfig. + Confirm(xmlElem, secDB, true); + + secDB.Close(); + btreeDB.Close(); + } + + [Test] + public void TestCompare() + { + testName = "TestCompare"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a primary btree database. + BTreeDatabaseConfig btreeDBConfig = + new BTreeDatabaseConfig(); + btreeDBConfig.Creation = CreatePolicy.ALWAYS; + BTreeDatabase btreeDB = BTreeDatabase.Open( + dbFileName, btreeDBConfig); + + // Open a secondary btree database. + SecondaryBTreeDatabaseConfig secBtreeDBConfig = + new SecondaryBTreeDatabaseConfig(null, null); + secBtreeDBConfig.Primary = btreeDB; + secBtreeDBConfig.Compare = + new EntryComparisonDelegate( + SecondaryEntryComparison); + secBtreeDBConfig.KeyGen = + new SecondaryKeyGenDelegate(SecondaryKeyGen); + SecondaryBTreeDatabase secDB = + SecondaryBTreeDatabase.Open( + dbFileName, secBtreeDBConfig); + + /* + * Get the compare function set in the configuration + * and run it in a comparison to see if it is alright. + */ + EntryComparisonDelegate cmp = + secDB.Compare; + DatabaseEntry dbt1, dbt2; + dbt1 = new DatabaseEntry( + BitConverter.GetBytes((int)257)); + dbt2 = new DatabaseEntry( + BitConverter.GetBytes((int)255)); + Assert.Less(0, cmp(dbt1, dbt2)); + + secDB.Close(); + btreeDB.Close(); + } + + [Test] + public void TestDuplicates() + { + testName = "TestDuplicates"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + string dbSecFileName = testHome + "/" + testName + + "_sec.db"; + + Configuration.ClearDir(testHome); + + // Open a primary btree database. + BTreeDatabaseConfig btreeDBConfig = + new BTreeDatabaseConfig(); + btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; + BTreeDatabase btreeDB = BTreeDatabase.Open( + dbFileName, btreeDBConfig); + + // Open a secondary btree database. + SecondaryBTreeDatabaseConfig secBtreeDBConfig = + new SecondaryBTreeDatabaseConfig(btreeDB, null); + secBtreeDBConfig.Creation = CreatePolicy.IF_NEEDED; + secBtreeDBConfig.Duplicates = DuplicatesPolicy.SORTED; + SecondaryBTreeDatabase secDB = + SecondaryBTreeDatabase.Open(dbSecFileName, + secBtreeDBConfig); + + secDB.Close(); + btreeDB.Close(); + } + + [Test] + public void TestPrefixCompare() + { + testName = "TestPrefixCompare"; + testHome = testFixtureHome + "/" + testName; + string dbFileName = testHome + "/" + testName + ".db"; + + Configuration.ClearDir(testHome); + + // Open a primary btree database. + BTreeDatabaseConfig btreeDBConfig = + new BTreeDatabaseConfig(); + btreeDBConfig.Creation = CreatePolicy.ALWAYS; + BTreeDatabase btreeDB = BTreeDatabase.Open( + dbFileName, btreeDBConfig); + + // Open a secondary btree database. + SecondaryBTreeDatabaseConfig secBtreeDBConfig = + new SecondaryBTreeDatabaseConfig(btreeDB, null); + secBtreeDBConfig.Primary = btreeDB; + secBtreeDBConfig.Compare = + new EntryComparisonDelegate( + SecondaryEntryComparison); + secBtreeDBConfig.PrefixCompare = + new EntryComparisonDelegate( + SecondaryEntryComparison); + secBtreeDBConfig.KeyGen = + new SecondaryKeyGenDelegate( + SecondaryKeyGen); + SecondaryBTreeDatabase secDB = + SecondaryBTreeDatabase.Open( + dbFileName, secBtreeDBConfig); + + /* + * Get the prefix compare function set in the + * configuration and run it in a comparison to + * see if it is alright. + */ + EntryComparisonDelegate cmp = + secDB.PrefixCompare; + DatabaseEntry dbt1, dbt2; + dbt1 = new DatabaseEntry( + BitConverter.GetBytes((int)1)); + dbt2 = new DatabaseEntry( + BitConverter.GetBytes((int)129)); + Assert.Greater(0, cmp(dbt1, dbt2)); + + secDB.Close(); + btreeDB.Close(); + } + + public int SecondaryEntryComparison( + DatabaseEntry dbt1, DatabaseEntry dbt2) + { + int a, b; + a = BitConverter.ToInt32(dbt1.Data, 0); + b = BitConverter.ToInt32(dbt2.Data, 0); + return a - b; + } + + public DatabaseEntry SecondaryKeyGen( + DatabaseEntry key, DatabaseEntry data) + { + DatabaseEntry dbtGen; + dbtGen = new DatabaseEntry(data.Data); + return dbtGen; + } + + public static void Confirm(XmlElement xmlElem, + SecondaryBTreeDatabase secDB, bool compulsory) + { + Configuration.ConfirmDuplicatesPolicy(xmlElem, + "Duplicates", secDB.Duplicates, compulsory); + Configuration.ConfirmUint(xmlElem, "MinKeysPerPage", + secDB.MinKeysPerPage, compulsory); + Configuration.ConfirmBool(xmlElem, "NoReverseSplitting", + secDB.ReverseSplit, compulsory); + Configuration.ConfirmBool(xmlElem, "UseRecordNumbers", + secDB.RecordNumbers, compulsory); + } + } +} |