public void TestString() { var randomGenerator = new RandomGenerator(66707770); // make this deterministic. var index = new MemoryMappedIndex<string>(new MemoryMappedStream(new MemoryStream()), MemoryMappedDelegates.ReadFromString, MemoryMappedDelegates.WriteToString); var indexRef = new Dictionary<long, string>(); // add the data. var testCount = 10; while(testCount > 0) { var data = randomGenerator.GenerateString( randomGenerator.Generate(256) + 32); indexRef.Add(index.Add(data), data); testCount--; } // get the data and check. foreach(var entry in indexRef) { var data = index.Get(entry.Key); Assert.AreEqual(indexRef[entry.Key], data); } }
public void TestHuge() { var randomGenerator = new RandomGenerator(66707770); // make this deterministic var buffer = new byte[255]; var readFrom = new MemoryMappedFile.ReadFromDelegate<string>((stream, position) => { stream.Seek(position, System.IO.SeekOrigin.Begin); var size = stream.ReadByte(); int pos = 0; stream.Read(buffer, pos, size); while (size == 255) { pos = pos + size; size = stream.ReadByte(); if (buffer.Length < size + pos) { Array.Resize(ref buffer, size + pos); } stream.Read(buffer, pos, size); } pos = pos + size; return System.Text.Encoding.Unicode.GetString(buffer, 0, pos); }); var writeTo = new MemoryMappedFile.WriteToDelegate<string>((stream, position, structure) => { stream.Seek(position, System.IO.SeekOrigin.Begin); var bytes = System.Text.Encoding.Unicode.GetBytes(structure); var length = bytes.Length; for (int idx = 0; idx <= bytes.Length; idx = idx + 255) { var size = bytes.Length - idx; if (size > 255) { size = 255; } if (stream.Length <= stream.Position + size + 1) { // past end of stream. return -1; } stream.WriteByte((byte)size); stream.Write(bytes, idx, size); length++; } return length; }); var dictionary = new MemoryMappedHugeDictionary<string, string>(new MemoryMappedStream(new MemoryStream()), readFrom, writeTo, readFrom, writeTo); var reference = new Dictionary<string, string>(); var keys = new List<string>(); for (int idx = 0; idx < 100; idx++) { keys.Add(string.Format("key{0}", idx)); } var testCount = 1000; while (testCount > 0) { var keyIdx = randomGenerator.Generate(keys.Count); var value = randomGenerator.GenerateString( randomGenerator.Generate(256) + 32); dictionary[keys[keyIdx]] = value; reference[keys[keyIdx]] = value; testCount--; } foreach (var pair in reference) { var value = dictionary[pair.Key]; Assert.AreEqual(pair.Value, value); Assert.IsTrue(dictionary.TryGetValue(pair.Key, out value)); Assert.AreEqual(pair.Value, value); } }