public void LoadRealFile()
        {
            // Sanity check
            FileAssert.Exists(BASIC_TEST_DATA_PATH, "The file " + BASIC_TEST_DATA_PATH + " was moved or is missing.\n" +
                              "This test will not work without a proper test file in this location that has at least one boid.\n" +
                              "(Present execution directory: " + Directory.GetCurrentDirectory() + ")");

            // Setup and Execute
            BoidsExperiment realExperiment = new BoidsExperiment(BASIC_TEST_DATA_PATH);

            // Test
            Assert.IsTrue(realExperiment.Current.Count > 0, "The file " + BASIC_TEST_DATA_PATH + "did not contain any parseable data.");
            Assert.IsTrue(realExperiment.BoidCount > 0, "The file " + BASIC_TEST_DATA_PATH + "did not result in a boid being instantiated.");
        }
        public void PlyGeneration()
        {
            // Initialize
            string[] easyDummy = { SYNTHETIC_EASY };

            // Execute
            BoidsExperiment easy = new BoidsExperiment(easyDummy);
            string          ply  = easy.BoidPly(); // Don't accidentally ToString your BoidsExperiments; you will NOT get a ply file.

            // Check
            Assert.IsNotNull(ply);

            // Prepare the correct header.
            StringBuilder correctPlyHeader = new StringBuilder();

            correctPlyHeader.Append("ply\n");
            correctPlyHeader.Append("format ascii 1.0\n");
            correctPlyHeader.Append("comment created by boidsTransformer\n");
            correctPlyHeader.Append("element vertex " + 441 + "\n");
            correctPlyHeader.Append("property float64 x\n");
            correctPlyHeader.Append("property float64 y\n");
            correctPlyHeader.Append("property float64 z\n");
            correctPlyHeader.Append("property float64 vx\n");
            correctPlyHeader.Append("property float64 vy\n");
            correctPlyHeader.Append("property float64 vz\n");
            correctPlyHeader.Append("property float64 s\n");
            correctPlyHeader.Append("element face " + 400 + "\n");
            correctPlyHeader.Append("property list uint8 int32 vertex_indices\n");
            correctPlyHeader.Append("end_header\n");

            string correct_ply_str = correctPlyHeader.ToString();

            Assert.IsTrue(ply.Length > 0);
            Assert.IsTrue(ply.Length > correctPlyHeader.Length);
            Assert.IsTrue(correctPlyHeader.Equals(ply.Substring(0, correct_ply_str.Length)),
                          "Expected: \"" + correct_ply_str + "\", but got \"" + ply.Substring(0, correct_ply_str.Length) + "\".");
            // REGEX check the body.
            Regex bodyCheck = new Regex(@"(?:(?:-?[\d\.]+\s+){7})+(?:(?:[\d]+\s+){5})+",
                                        RegexOptions.Compiled | RegexOptions.IgnoreCase);

            Assert.IsTrue(bodyCheck.IsMatch(ply));
        }
        public void SingleSnapshot()
        {
            // Initialize
            string[] easyDummy = { SYNTHETIC_EASY };

            // Execute
            BoidsExperiment easy = new BoidsExperiment(easyDummy);

            // Check
            Assert.IsTrue(easy.Current.Count == 1);
            BoidsExperiment.BoidsSnapshot snap = easy.Current[0];
            Assert.IsTrue(snap.Timestamp == SYNTHETIC_EASY_ANSWERS[0], "snap.Timestamp is " + snap.Timestamp + ", expected " + SYNTHETIC_EASY_ANSWERS[0]);
            int pairs = (SYNTHETIC_EASY_ANSWERS.Length - 1) / 2;

            Assert.IsTrue(snap.Coords.Count == pairs); // Probably could be simplified for test purposes?
            for (int i = 0; i < pairs; i++)
            {
                float[] currentPair = snap.Coords[i];
                Assert.IsTrue(currentPair[0] == SYNTHETIC_EASY_ANSWERS[i * 2 + 1]);
                Assert.IsTrue(currentPair[1] == SYNTHETIC_EASY_ANSWERS[i * 2 + 2]);
            }
        }