コード例 #1
0
        public void GenerateSites_With20x10Map10Points_SitesFitToGrid()
        {
            var generator = new EvenlySpreadSiteGenerator();

            var result = generator.GenerateSites(20, 10, 8);

            Assert.NotNull(result);

            var sites = result.OrderBy(s => Math.Floor(s.Point.Y) * 100 + Math.Floor(s.Point.X)).ToList();

            AssertIsBetween(2, 4, sites[0].Point.X);
            AssertIsBetween(2, 4, sites[0].Point.Y);
            AssertIsBetween(7, 9, sites[1].Point.X);
            AssertIsBetween(2, 4, sites[1].Point.Y);
            AssertIsBetween(12, 14, sites[2].Point.X);
            AssertIsBetween(2, 4, sites[2].Point.Y);
            AssertIsBetween(17, 19, sites[3].Point.X);
            AssertIsBetween(2, 4, sites[3].Point.Y);
            AssertIsBetween(2, 4, sites[4].Point.X);
            AssertIsBetween(7, 9, sites[4].Point.Y);
            AssertIsBetween(7, 9, sites[5].Point.X);
            AssertIsBetween(7, 9, sites[5].Point.Y);
            AssertIsBetween(12, 14, sites[6].Point.X);
            AssertIsBetween(7, 9, sites[6].Point.Y);
            AssertIsBetween(17, 19, sites[7].Point.X);
            AssertIsBetween(7, 9, sites[7].Point.Y);
        }
コード例 #2
0
        public void TestGenerateSites_8_6_10()
        {
            const int quantity = 10;

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

            Assert.AreEqual(quantity, result.Count);
        }
コード例 #3
0
        public void GenerateMap_With100x75Map200Points_SitesKeepDistance()
        {
            var generator = new EvenlySpreadSiteGenerator();
            var factory   = new VoronoiFactory(generator);

            var map = factory.CreateVoronoiMap(75, 100, 200);

            Assert.NotNull(map);
        }
コード例 #4
0
        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");
                }
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public void GenerateSites_With100x75Map250Points_SitesKeepDistance()
        {
            var generator = new EvenlySpreadSiteGenerator();

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