public void TestMultiThreading()
        {
            const int numTestIterations = 5;

            for (int j = 0; j < numTestIterations; j++)
            {
                const int numThreads   = 10;
                const int numPerThread = 1000;
                var       threads      = new List <Thread>(numThreads);
                var       source       = AnimalMessage.CreateTestMessage();
                for (int i = 0; i < numThreads; i++)
                {
                    threads.Add(new Thread(() =>
                    {
                        RoundTrip(source, numPerThread, j > 0);
                    }));
                }
                numVerified = 0;
                foreach (var thread in threads)
                {
                    thread.Start();
                }
                foreach (var thread in threads)
                {
                    thread.Join(20000);
                }
                Assert.AreEqual(numThreads * numPerThread, numVerified);
            }
        }
        public void TestAsMaps()
        {
            MsgPackSerializer.DefaultContext.SerializationMethod = SerializationMethod.Map;
            AnimalMessage msg = AnimalMessage.CreateTestMessage();

            byte[] payload = msg.ToMsgPack();
            Assert.IsNotNull(payload);
            Assert.AreNotEqual(0, payload.Length);
            AnimalMessage restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            VerifyAnimalMessage(msg, restored);
        }
        public void TestNulls()
        {
            MsgPackSerializer.DefaultContext.SerializationMethod = SerializationMethod.Array;
            var msg = AnimalMessage.CreateTestMessage();

            msg.AnimalColor = null;
            byte[] payload = msg.ToMsgPack();
            Assert.IsNotNull(payload);
            Assert.AreNotEqual(0, payload.Length);
            var restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            Assert.IsNull(restored.AnimalColor);
        }
        public void TestCompat()
        {
            MsgPackSerializer.DefaultContext.SerializationMethod = SerializationMethod.Array;
            AnimalMessage msg = AnimalMessage.CreateTestMessage();

            byte[] payload          = msg.ToMsgPack();
            string msgFilename      = Path.Combine(Environment.CurrentDirectory, "animal.msg");
            string verifierFilename = Path.Combine(Environment.CurrentDirectory, "msgpack-sharp-verifier.exe");

            File.WriteAllBytes(msgFilename, payload);
            string args = verifierFilename + " " + msgFilename;

            Process.Start("mono", args);
            Assert.IsTrue(File.Exists(msgFilename + ".out"), "The verifier program that uses other people's msgpack libs failed to successfully handle our message while running [mono " + args + "]");
            payload = File.ReadAllBytes(msgFilename + ".out");
            AnimalMessage restored = MsgPackSerializer.Deserialize <AnimalMessage>(payload);

            VerifyAnimalMessage(msg, restored);
        }
        public void TestManualConfig()
        {
            var tank = new Tank()
            {
                Name     = "M1",
                MaxSpeed = 65.0f,
                Cargo    = AnimalMessage.CreateTestMessage()
            };

            MsgPackSerializer.DefaultContext.RegisterSerializer <Tank>("MaxSpeed", "Name", "Cargo");
            byte[] payload = tank.ToMsgPack();
            Assert.IsNotNull(payload);
            Assert.AreNotEqual(0, payload.Length);
            var restoredTank = MsgPackSerializer.Deserialize <Tank>(payload);

            Assert.IsNotNull(restoredTank);
            Assert.AreEqual(tank.Name, restoredTank.Name);
            Assert.AreEqual(tank.MaxSpeed, restoredTank.MaxSpeed);
            VerifyAnimalMessage(tank.Cargo, restoredTank.Cargo);
        }