public void can_remove_values() { var mem = new MemorySimulator(Mega.Bytes(1)); var subject = new TaggedHashMap(64, new Allocator(0, Mega.Bytes(1), mem), mem); subject.Add(50000000, 123); subject.Add(1, 456); var ok1 = subject.Get(1, out _); var ok2 = subject.Get(50000000, out _); var ok3 = subject.Get(50, out _); Assert.That(ok1, Is.True); Assert.That(ok2, Is.True); Assert.That(ok3, Is.False); // remove one value at beginning subject.Remove(1); ok1 = subject.Get(1, out _); ok2 = subject.Get(50000000, out _); ok3 = subject.Get(50, out _); Assert.That(ok1, Is.False); Assert.That(ok2, Is.True); Assert.That(ok3, Is.False); }
public void TaggedHashMap__vs__Dictionary() { var rnd = new Random(); var sara_time = new Stopwatch(); var dotnet_time = new Stopwatch(); var mem = new MemorySimulator(Mega.Bytes(50)); var sara = new TaggedHashMap(0, new Allocator(0, Mega.Bytes(50), mem), mem); var dotnet = new Dictionary <ulong, ulong>(0); sara_time.Start(); for (ulong i = 0; i < 2500; i++) { var insKey = (ulong)rnd.Next(1, 1000000); var remKey = (ulong)rnd.Next(1, 1000000); if (!sara.Put(insKey, i, true)) { Assert.Fail("Put rejected the change at " + i); } sara.Remove(remKey); } sara_time.Stop(); dotnet_time.Start(); for (ulong i = 0; i < 2500; i++) { var insKey = (ulong)rnd.Next(1, 1000000); var remKey = (ulong)rnd.Next(1, 1000000); if (dotnet.ContainsKey(insKey)) { dotnet[insKey] = i; } else { dotnet.Add(insKey, i); } dotnet.Remove(remKey); } dotnet_time.Stop(); Assert.Pass("SArA: " + sara_time.Elapsed + "; dotnet: " + dotnet_time.Elapsed); }
public const int TestSize = 10_000_000; // large enough to keep the program running for a while static void Main(string[] args) { var RamSize = Giga.Bytes(1); var rnd = new Random(); var mem = new MemorySimulator(RamSize); var subject = new TaggedHashMap(TestSize, new Allocator(0, RamSize, mem), mem); Console.WriteLine("running..."); subject.Add(0, 1); for (int i = 0; i < TestSize; i++) // 100'000 should have an acceptable run time. 25'000 should be well under a second { if (!subject.Put((ulong)rnd.Next(1, 1000000), (ulong)i, true)) { throw new Exception("Bad push"); } subject.Remove((ulong)rnd.Next(1, 1000000)); } Console.WriteLine("done"); }