public void GenerateSites_With100x75Map200Points_SitesKeepDistance()
        {
            var generator = new EvenlySpreadSiteGenerator();

            var result = generator.GenerateSites(100, 75, 200);

            foreach (var site in result)
            {
                foreach (var other in result.Where(s => s != site))
                {
                    var distance = site.Point.CalculateDistance(other.Point);
                    Assert.LessOrEqual(2, distance, $"Distance of {site} and {other} is too close");
                }
            }
        }
        public void TestGenerateSites_10_6_9()
        {
            const int quantity = 9;

            var siteGenerator = new EvenlySpreadSiteGenerator();
            var result        = siteGenerator.GenerateSites(36, 27, quantity).ToList();

            Assert.AreEqual(quantity, result.Count);

            Assert.IsTrue(result[0].Point.X >= 0 && result[0].Point.X <= 12, result[0].Point.X.ToString(CultureInfo.InvariantCulture));
            Assert.IsTrue(result[0].Point.Y >= 0 && result[0].Point.Y <= 9, result[0].Point.Y.ToString(CultureInfo.InvariantCulture));

            Assert.IsTrue(result[1].Point.X >= 0 && result[1].Point.X <= 12, result[1].Point.X.ToString(CultureInfo.InvariantCulture));
            Assert.IsTrue(result[1].Point.Y >= 9 && result[1].Point.Y <= 18, result[1].Point.Y.ToString(CultureInfo.InvariantCulture));

            Assert.IsTrue(result[2].Point.X >= 0 && result[2].Point.X <= 12);
            Assert.IsTrue(result[2].Point.Y >= 18 && result[2].Point.Y <= 27);

            Assert.IsTrue(result[3].Point.X >= 12 && result[3].Point.X <= 24);
            Assert.IsTrue(result[3].Point.Y >= 0 && result[0].Point.Y <= 9, result[0].Point.Y.ToString(CultureInfo.InvariantCulture));

            Assert.IsTrue(result[4].Point.X >= 12 && result[4].Point.X <= 24);
            Assert.IsTrue(result[4].Point.Y >= 9 && result[4].Point.Y <= 18);

            Assert.IsTrue(result[5].Point.X >= 12 && result[5].Point.X <= 24);
            Assert.IsTrue(result[5].Point.Y >= 18 && result[5].Point.Y <= 27);

            Assert.IsTrue(result[6].Point.X >= 24 && result[6].Point.X <= 36);
            Assert.IsTrue(result[6].Point.Y >= 0 && result[6].Point.Y <= 9, result[0].Point.Y.ToString(CultureInfo.InvariantCulture));

            Assert.IsTrue(result[7].Point.X >= 24 && result[7].Point.X <= 36);
            Assert.IsTrue(result[7].Point.Y >= 9 && result[7].Point.Y <= 18);

            Assert.IsTrue(result[8].Point.X >= 24 && result[8].Point.X <= 36);
            Assert.IsTrue(result[8].Point.Y >= 18 && result[8].Point.Y <= 27);
        }
        public void GenerateSites_With100x75Map250Points_SitesKeepDistance()
        {
            var generator = new EvenlySpreadSiteGenerator();

            Assert.Throws <InvalidOperationException>(() => generator.GenerateSites(100, 75, 250));
        }