public void AssignClusterPointToNearestCentroidTest() { KMeansTaskData task = new KMeansTaskData(Guid.NewGuid(), Guid.NewGuid(), 1, null, 2, 3, 10, 0, null, DateTime.Now, DateTime.Now, 0, null); KMeansTaskProcessor_Accessor target = new KMeansTaskProcessor_Accessor(task); target.centroids = new List <Centroid>(); target.centroids.Add(new Centroid { ID = Guid.NewGuid(), X = 0.0F, Y = -1.0F }); target.centroids.Add(new Centroid { ID = Guid.NewGuid(), X = 10.0F, Y = 10.0F }); ClusterPoint clusterPoint = new ClusterPoint { CentroidID = Guid.Empty, X = 1.0F, Y = 2.0F }; ClusterPoint expected = new ClusterPoint { CentroidID = target.centroids[0].ID, X = 1.0F, Y = 2.0F }; ClusterPointProcessingResult_Accessor actual; actual = target.AssignClusterPointToNearestCentroid(clusterPoint); Assert.AreEqual(expected.CentroidID, actual.Point.CentroidID); }
public void AssignClusterPointToNearestCentroidTest() { KMeansTaskData task = new KMeansTaskData(Guid.NewGuid(), Guid.NewGuid(), 1, null, 2, 3, 10, 0, null, DateTime.Now, DateTime.Now, 0, null); KMeansTaskProcessor_Accessor target = new KMeansTaskProcessor_Accessor(task); target.centroids = new List<Centroid>(); target.centroids.Add(new Centroid { ID = Guid.NewGuid(), X = 0.0F, Y = -1.0F }); target.centroids.Add(new Centroid { ID = Guid.NewGuid(), X = 10.0F, Y = 10.0F }); ClusterPoint clusterPoint = new ClusterPoint { CentroidID = Guid.Empty, X = 1.0F, Y = 2.0F }; ClusterPoint expected = new ClusterPoint { CentroidID = target.centroids[0].ID, X = 1.0F, Y = 2.0F }; ClusterPointProcessingResult_Accessor actual; actual = target.AssignClusterPointToNearestCentroid(clusterPoint); Assert.AreEqual(expected.CentroidID, actual.Point.CentroidID); }
public void ProcessPointsTest() { CloudBlobContainer container = AzureHelper.StorageAccount.CreateCloudBlobClient().GetContainerReference("test"); container.CreateIfNotExist(); CloudBlob points = container.GetBlobReference(Guid.NewGuid().ToString()); CloudBlob centroids = container.GetBlobReference(Guid.NewGuid().ToString()); const int NumPoints = 100, NumCentroids = 10; using (ObjectStreamWriter<ClusterPoint> pointStream = new ObjectStreamWriter<ClusterPoint>(points, point => point.ToByteArray(), ClusterPoint.Size)) { for (int i = 0; i < NumPoints; i++) { pointStream.Write(new ClusterPoint(1, 2, Guid.Empty)); } } Guid centroidID = Guid.NewGuid(); using (ObjectStreamWriter<Centroid> stream = new ObjectStreamWriter<Centroid>(centroids, point => point.ToByteArray(), Centroid.Size)) { stream.Write(new Centroid(centroidID, 3, 4)); for (int i = 0; i < NumCentroids - 1; i++) { stream.Write(new Centroid(Guid.NewGuid(), 1000, 1000)); } } KMeansTaskProcessor_Accessor target = new KMeansTaskProcessor_Accessor(new KMeansTaskData(Guid.NewGuid(), Guid.NewGuid(), NumPoints, points.Uri, NumCentroids, 1, 0, 0, centroids.Uri, DateTime.UtcNow, DateTime.UtcNow, 0, null)); System.Diagnostics.Trace.WriteLine("Entering InitializeCentroids"); target.InitializeCentroids(); System.Diagnostics.Trace.WriteLine("Entering ProcessPoints"); System.Diagnostics.Trace.WriteLine("ProcessPoints took " + AzureHelper.Time(() => { target.ProcessPoints(); }).TotalSeconds + " seconds"); // Commit the blocks CloudBlockBlob newPointsBlob = AzureHelper.GetBlob(target.TaskResult.Points); using (Stream stream = AzureHelper.GetBlob(target.TaskResult.PointsBlockListBlob).OpenRead()) { BinaryFormatter bf = new BinaryFormatter(); List<string> pointsBlockList = bf.Deserialize(stream) as List<string>; newPointsBlob.PutBlockList(pointsBlockList); } using (ObjectStreamReader<ClusterPoint> stream = new ObjectStreamReader<ClusterPoint>(newPointsBlob, ClusterPoint.FromByteArray, ClusterPoint.Size)) { foreach (ClusterPoint p in stream) { Assert.AreEqual(centroidID, p.CentroidID); } } Assert.AreEqual(NumPoints, target.TaskResult.NumPointsChanged); Assert.IsTrue(target.TaskResult.PointsProcessedDataByCentroid.ContainsKey(centroidID)); Assert.AreEqual(NumPoints, target.TaskResult.PointsProcessedDataByCentroid[centroidID].NumPointsProcessed); const double Epsilon = 0.0001; Assert.IsTrue(Math.Abs((1 * NumPoints) - target.TaskResult.PointsProcessedDataByCentroid[centroidID].PartialPointSum.X) < Epsilon); Assert.IsTrue(Math.Abs((2 * NumPoints) - target.TaskResult.PointsProcessedDataByCentroid[centroidID].PartialPointSum.Y) < Epsilon); }
public void ProcessPointsTest() { CloudBlobContainer container = AzureHelper.StorageAccount.CreateCloudBlobClient().GetContainerReference("test"); container.CreateIfNotExist(); CloudBlob points = container.GetBlobReference(Guid.NewGuid().ToString()); CloudBlob centroids = container.GetBlobReference(Guid.NewGuid().ToString()); const int NumPoints = 100, NumCentroids = 10; using (ObjectStreamWriter <ClusterPoint> pointStream = new ObjectStreamWriter <ClusterPoint>(points, point => point.ToByteArray(), ClusterPoint.Size)) { for (int i = 0; i < NumPoints; i++) { pointStream.Write(new ClusterPoint(1, 2, Guid.Empty)); } } Guid centroidID = Guid.NewGuid(); using (ObjectStreamWriter <Centroid> stream = new ObjectStreamWriter <Centroid>(centroids, point => point.ToByteArray(), Centroid.Size)) { stream.Write(new Centroid(centroidID, 3, 4)); for (int i = 0; i < NumCentroids - 1; i++) { stream.Write(new Centroid(Guid.NewGuid(), 1000, 1000)); } } KMeansTaskProcessor_Accessor target = new KMeansTaskProcessor_Accessor(new KMeansTaskData(Guid.NewGuid(), Guid.NewGuid(), NumPoints, points.Uri, NumCentroids, 1, 0, 0, centroids.Uri, DateTime.UtcNow, DateTime.UtcNow, 0, null)); System.Diagnostics.Trace.WriteLine("Entering InitializeCentroids"); target.InitializeCentroids(); System.Diagnostics.Trace.WriteLine("Entering ProcessPoints"); System.Diagnostics.Trace.WriteLine("ProcessPoints took " + AzureHelper.Time(() => { target.ProcessPoints(); }).TotalSeconds + " seconds"); // Commit the blocks CloudBlockBlob newPointsBlob = AzureHelper.GetBlob(target.TaskResult.Points); using (Stream stream = AzureHelper.GetBlob(target.TaskResult.PointsBlockListBlob).OpenRead()) { BinaryFormatter bf = new BinaryFormatter(); List <string> pointsBlockList = bf.Deserialize(stream) as List <string>; newPointsBlob.PutBlockList(pointsBlockList); } using (ObjectStreamReader <ClusterPoint> stream = new ObjectStreamReader <ClusterPoint>(newPointsBlob, ClusterPoint.FromByteArray, ClusterPoint.Size)) { foreach (ClusterPoint p in stream) { Assert.AreEqual(centroidID, p.CentroidID); } } Assert.AreEqual(NumPoints, target.TaskResult.NumPointsChanged); Assert.IsTrue(target.TaskResult.PointsProcessedDataByCentroid.ContainsKey(centroidID)); Assert.AreEqual(NumPoints, target.TaskResult.PointsProcessedDataByCentroid[centroidID].NumPointsProcessed); const double Epsilon = 0.0001; Assert.IsTrue(Math.Abs((1 * NumPoints) - target.TaskResult.PointsProcessedDataByCentroid[centroidID].PartialPointSum.X) < Epsilon); Assert.IsTrue(Math.Abs((2 * NumPoints) - target.TaskResult.PointsProcessedDataByCentroid[centroidID].PartialPointSum.Y) < Epsilon); }