public void SerializeMapRandomTest()
        {
            var rnd = new Random();

            for (var i = 1; i <= 100; i++)
            {
                var name   = "test" + i;
                var blocks = Enumerable
                             .Repeat(0, rnd.Next(10, 1000))
                             .Select(_ => RandomRectangle(rnd));
                var timeAnomalies = Enumerable
                                    .Repeat(0, rnd.Next(10, 1000))
                                    .Select(_ => RandomRectangle(rnd));
                var stages = Enumerable
                             .Repeat(0, rnd.Next(1, 20))
                             .Select(_ => RandomStage(rnd));
                var map         = new Map(name, blocks, timeAnomalies, stages);
                var code        = MapConstructorSerializer.SerializeMap(map);
                var restoredMap = MapConstructorSerializer.DeserializeMap(code);
                CollectionAssert.AreEqual(map.Blocks, restoredMap.Blocks,
                                          $"Ошибка в тесте {name} (блоки)");
                CollectionAssert.AreEqual(map.TimeAnomalies, restoredMap.TimeAnomalies,
                                          $"Ошибка в тесте {name} (аномалии)");
                CollectionAssert.AreEqual(map.Stages.Select(s => s.Spawn),
                                          restoredMap.Stages.Select(s => s.Spawn),
                                          $"Ошибка в тесте {name} (спавны)");
                CollectionAssert.AreEqual(map.Stages.Select(s => s.Target),
                                          restoredMap.Stages.Select(s => s.Target),
                                          $"Ошибка в тесте {name} (порталы)");
            }
        }
        public void SerializeRectangleTest(int x, int y, int width, int height)
        {
            var rect = new Rectangle(x, y, width, height);
            var code = MapConstructorSerializer.SerializeRectangle(rect);

            Assert.IsTrue(code is >= 0 and <= 214358880);
            var restoredRect = MapConstructorSerializer.DeserializeRectangle(code);

            Assert.AreEqual(rect, restoredRect);
        }
        public void SerializeStageTest(int sx, int sy, int tx, int ty, int tWidth, int tHeight)
        {
            var stage = new Stage(new Point(sx, sy), new Rectangle(tx, ty, tWidth, tHeight));

            var(code1, code2) = MapConstructorSerializer.SerializeStage(stage);
            Assert.IsTrue(code1 is >= 0 and <= 14640);
            Assert.IsTrue(code2 is >= 0 and <= 214358880);
            var restoredStage = MapConstructorSerializer.DeserializeStage(code1, code2);

            Assert.AreEqual(stage.Spawn, restoredStage.Spawn);
            Assert.AreEqual(stage.Target, restoredStage.Target);
        }