public void Test2()
{
TableServerData tsd = new TableServerData("0");
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
MemBlock[] addresses = new MemBlock[100];
byte[] value = new byte[20];
rng.GetBytes(value);
DateTime now = DateTime.UtcNow;
DateTime lease_end = now.AddMinutes(1);
for (int i = 0; i < addresses.Length; i++)
{
addresses[i] = (new AHAddress(rng)).ToMemBlock();
tsd.AddEntry(new Entry(addresses[i], value, now, lease_end));
}
AHAddress start = new AHAddress(rng);
AHAddress end = new AHAddress(rng);
LinkedList <MemBlock> keys_se = tsd.GetKeysBetween(start, end);
LinkedList <MemBlock> keys_es = tsd.GetKeysBetween(end, start);
String output = " - " + start + ":" + end;
if (start.IsLeftOf(end))
{
foreach (MemBlock address in addresses)
{
AHAddress addr = new AHAddress(address);
if (addr.IsLeftOf(end) && addr.IsRightOf(start))
{
Assert.IsTrue(keys_se.Contains(address), addr + " in lse" + output);
Assert.IsTrue(keys_es.Contains(address), addr + " in les" + output);
}
else
{
Assert.IsFalse(keys_se.Contains(address), addr + " out lse" + output);
Assert.IsFalse(keys_es.Contains(address), addr + " out les" + output);
}
}
}
else
{
foreach (MemBlock address in addresses)
{
AHAddress addr = new AHAddress(address);
if (addr.IsLeftOf(start) && addr.IsRightOf(end))
{
Assert.IsTrue(keys_se.Contains(address), addr + " in rse" + output);
Assert.IsTrue(keys_es.Contains(address), addr + " in res" + output);
}
else
{
Assert.IsFalse(keys_se.Contains(address), addr + " out rse" + output);
Assert.IsFalse(keys_es.Contains(address), addr + " out res" + output);
}
}
}
LinkedList <MemBlock> keys = tsd.GetKeys();
foreach (MemBlock addr in addresses)
{
Assert.IsTrue(keys.Contains(addr), "keys does not contain: " + (new AHAddress(addr)));
}
}