public void ShouldSerializeMemory()
{
// preparing some random data
const int size = 128 * 1024 * 1024;
const int bufCount = 30;
const int bufSize = 100 * 1024;
var random = new Random();
var buffers = new List<Tuple<int, byte[]>>(bufCount);
for(var i = 0; i < bufCount; i++)
{
var buffer = new byte[bufSize];
random.NextBytes(buffer);
int address;
do
{
address = random.Next(size - bufSize);
}
while (buffers.Any(x => address >= (x.Item1 - bufSize) && address <= (x.Item1 + bufSize)));
buffers.Add(new Tuple<int, byte[]>(address, buffer));
}
using(var memory = new MappedMemory(size))
{
foreach(var buf in buffers)
{
memory.WriteBytes(buf.Item1, buf.Item2);
}
serializer.Serialize(memory, stream);
}
RewindStream();
using(var memory = serializer.Deserialize<MappedMemory>(stream))
{
foreach(var buf in buffers)
{
var bufCopy = memory.ReadBytes(buf.Item1, bufSize);
CollectionAssert.AreEqual(bufCopy, buf.Item2);
}
}
}