public void UnclusteredPoints()
        {
            var points = TestDataHelper.UniformRandomPoints(20000, 100, 1000000);
            var ct     = new ClusteringTendency(points, 5);

            Assert.AreEqual(ClusteringTendency.ClusteringQuality.Unclustered, ct.HowClustered, $"Data should be unclustered, but was: {ct}");
        }
        public void WeaklyClustered()
        {
            // Mostly outliers with a few large clusters.
            var clusteredPoints = TestData(Enumerable.Range(1, 3000).Select(i => i <= 5 ? 100 : 1).ToArray(), 100, 1000000);
            var points          = clusteredPoints.Points().ToList();
            var ct = new ClusteringTendency(points, 5);

            Assert.AreEqual(ClusteringTendency.ClusteringQuality.WeaklyClustered, ct.HowClustered, $"Data should be WeaklyClustered, but was: {ct}");
        }
        public void AllClustered()
        {
            // Fifty clusters all the same size.
            var clusteredPoints = TestData(Enumerable.Range(1, 50).Select(i => 100).ToArray(), 100, 1000000);
            var points          = clusteredPoints.Points().ToList();
            var ct = new ClusteringTendency(points, 5);

            Assert.AreEqual(ClusteringTendency.ClusteringQuality.HighlyClustered, ct.HowClustered, $"Data should be HighlyClustered, but was: {ct}");
        }
        public void SingleOrMajorityCluster()
        {
            // Many clusters with one point and one with a whole lot.
            var clusteredPoints = TestData(Enumerable.Range(1, 1000).Select(i => i == 1 ? 10000 : 1).ToArray(), 100, 1000000);
            var points          = clusteredPoints.Points().ToList();
            var ct         = new ClusteringTendency(points, 5);
            var acceptable = ct.HowClustered == ClusteringTendency.ClusteringQuality.SinglyClustered ||
                             ct.HowClustered == ClusteringTendency.ClusteringQuality.MajorityClustered ||
                             ct.HowClustered == ClusteringTendency.ClusteringQuality.HighlyClustered;

            Assert.IsTrue(acceptable, $"Data was: {ct}");
        }