148 lines
4.1 KiB
C#
148 lines
4.1 KiB
C#
// /**
|
|
// * File: ODB.cs
|
|
// * Author: haraldwolff
|
|
// *
|
|
// * This file and it's content is copyrighted by the Author and / or copyright holder.
|
|
// * Any use wihtout proper permission is illegal and may lead to legal actions.
|
|
// *
|
|
// *
|
|
// **/
|
|
using NUnit.Framework;
|
|
using System;
|
|
using System.IO;
|
|
using ln.types.odb;
|
|
using System.Diagnostics;
|
|
using ln.types.threads;
|
|
using ln.types.odb.attributes;
|
|
using ln.types.odb.mapped;
|
|
using System.Linq;
|
|
namespace ln.types.test
|
|
{
|
|
public class testODB
|
|
{
|
|
|
|
[Test()]
|
|
public void TestCase()
|
|
{
|
|
String odbBase = Path.Combine(Path.GetTempPath(), "odb.test");
|
|
|
|
Console.WriteLine("Using path {0}", odbBase);
|
|
|
|
if (Directory.Exists(odbBase))
|
|
Directory.Delete(odbBase, true);
|
|
|
|
Guid docIdOne;
|
|
|
|
using (ODB odb = new ODB(odbBase))
|
|
{
|
|
ODBCollection<ODBTestClassA> colA = odb.GetCollection<ODBTestClassA>();
|
|
|
|
int[] numbers = new int[] { 0,53,2,34,37,35,23,1,456,7777,43,3535367 };
|
|
|
|
foreach (int n in numbers)
|
|
{
|
|
ODBTestClassA ca = new ODBTestClassA(n);
|
|
colA.Insert(ca);
|
|
}
|
|
|
|
ODBTestClassA cdouble = colA.Query(Query.Equals<ODBTestClassA>("Number", 1)).FirstOrDefault();
|
|
|
|
Assert.IsNotNull(cdouble);
|
|
Assert.AreEqual(cdouble.Number, 1);
|
|
|
|
docIdOne = cdouble.ID;
|
|
|
|
bool success = colA.Insert(cdouble);
|
|
Assert.IsFalse(success);
|
|
|
|
success = colA.Update(cdouble);
|
|
Assert.IsTrue(success);
|
|
|
|
success = colA.Upsert(cdouble);
|
|
Assert.IsTrue(success);
|
|
|
|
colA.Close();
|
|
}
|
|
|
|
using (ODB odb = new ODB(odbBase))
|
|
{
|
|
ODBCollection<ODBTestClassA> colA = odb.GetCollection<ODBTestClassA>();
|
|
Timing.Meassure("EnsureIndex", () => colA.EnsureIndex("Number"));
|
|
|
|
ODBTestClassA cSelect = colA.Query(Query.Equals<ODBTestClassA>("Number", 1)).FirstOrDefault();
|
|
|
|
Assert.AreEqual(docIdOne, cSelect.ID);
|
|
|
|
colA.Delete(cSelect);
|
|
cSelect = colA.Query(Query.Equals<ODBTestClassA>("Number", 1)).FirstOrDefault();
|
|
|
|
Assert.IsNull(cSelect);
|
|
|
|
cSelect = colA.Query(Query.Equals<ODBTestClassA>("Number", 3)).FirstOrDefault();
|
|
|
|
Assert.IsNull(cSelect);
|
|
|
|
Random random = new Random();
|
|
|
|
int choose = random.Next() % 10000;
|
|
int selection = 0;
|
|
int lc = choose;
|
|
|
|
for (int m = 0; m < 5; m++)
|
|
{
|
|
Stopwatch stopwatch = new Stopwatch();
|
|
stopwatch.Start();
|
|
|
|
for (int n = 0; n < 10000; n++)
|
|
{
|
|
ODBTestClassA testMass = new ODBTestClassA(random.Next());
|
|
colA.Upsert(testMass);
|
|
|
|
if (choose == 0)
|
|
selection = testMass.Number;
|
|
choose--;
|
|
|
|
}
|
|
|
|
stopwatch.Stop();
|
|
Console.WriteLine("Inserted 10000 Items in {0}ms", stopwatch.ElapsedMilliseconds);
|
|
}
|
|
|
|
|
|
Stopwatch stopwatch2 = new Stopwatch();
|
|
stopwatch2.Start();
|
|
ODBTestClassA selA = colA.Query(Query.Equals("Number", selection)).FirstOrDefault();
|
|
stopwatch2.Stop();
|
|
Console.WriteLine("Looked up item in {0}ms", stopwatch2.ElapsedMilliseconds);
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public class ODBTestClassA
|
|
{
|
|
[DocumentID]
|
|
public readonly Guid ID = Guid.NewGuid();
|
|
|
|
public String PropertyString { get; set; }
|
|
public string FieldString;
|
|
|
|
public int Number;
|
|
|
|
private ODBTestClassA()
|
|
{ }
|
|
|
|
public ODBTestClassA(int n)
|
|
{
|
|
Number = n;
|
|
PropertyString = String.Format("Property:{0}", n);
|
|
FieldString = String.Format("Field:{0}", n);
|
|
}
|
|
|
|
}
|
|
|
|
}
|