public void ToByteArrayTest()
        {
            Guid         centroidID = Guid.NewGuid();
            ClusterPoint target     = new ClusterPoint
            {
                X          = 1.23,
                Y          = 3.45,
                CentroidID = centroidID
            };

            MemoryStream stream = new MemoryStream();

            stream.Write(BitConverter.GetBytes(1.23), 0, sizeof(double));
            stream.Write(BitConverter.GetBytes(3.45), 0, sizeof(double));
            stream.Write(centroidID.ToByteArray(), 0, 16);
            byte[] expected = stream.ToArray();

            byte[] actual;
            actual = target.ToByteArray();
            Assert.AreEqual(expected.Length, actual.Length);
            for (int i = 0; i < expected.Length; i++)
            {
                Assert.AreEqual(expected[i], actual[i]);
            }
        }
        public void EnumeratorTest()
        {
            ClusterPoint p           = new ClusterPoint(1, 2, Guid.NewGuid());
            MemoryStream stream      = new MemoryStream();
            const int    NumElements = 5;

            for (int i = 0; i < NumElements; i++)
            {
                stream.Write(p.ToByteArray(), 0, ClusterPoint.Size);
            }

            ObjectStreamReader <ClusterPoint> pointStream = new ObjectStreamReader <ClusterPoint>(new MemoryStream(stream.ToArray()), ClusterPoint.FromByteArray, ClusterPoint.Size);

            Assert.AreEqual(p.CentroidID, pointStream.First().CentroidID);

            DateTime serialStart = DateTime.Now;

            int[] serialOutput = pointStream.Select(point =>
            {
                System.Threading.Thread.Sleep(200);
                return(1);
            }).ToArray();
            DateTime serialEnd = DateTime.Now;

            Assert.AreEqual(NumElements, serialOutput.Length);

            DateTime parallelStart = DateTime.Now;

            int[] parallelOutput = pointStream.AsParallel().Select(point =>
            {
                System.Threading.Thread.Sleep(200);
                return(1);
            }).ToArray();
            DateTime parallelEnd = DateTime.Now;

            Assert.AreEqual(NumElements, parallelOutput.Length);

            System.Diagnostics.Trace.WriteLine(string.Format("serial: {0}, parallel: {1}",
                                                             (serialEnd - serialStart).TotalSeconds,
                                                             (parallelEnd - parallelStart).TotalSeconds));
        }