public void Mesh_TestJoinFaces()
        {
            // We make two triangles, and join the middle edge
            //
            //   v1 o--------o v4
            //      | \      |
            //      |  \ f2  |
            //      |   \    |
            //      |    \   |
            //      | f1  \  |
            //      |      \ |
            //      |       \|
            //   v2 o--------o v3

            var vt1 = "v1";
            var vt2 = "v2";
            var vt3 = "v3";
            var vt4 = "v4";
            var vt5 = "v5";
            var vt6 = "v6";
            var vt7 = "v7";
            var vt8 = "v8";

            var mesh = new StringMesh();

            StringMesh.Face   f1 = mesh.CreateTriangle(vt1, vt2, vt3);
            StringMesh.Vertex v1 = f1.Vertices.First(v => v.Traits == vt1);
            StringMesh.Vertex v3 = f1.Vertices.First(v => v.Traits == vt3);
            StringMesh.Face   f2 = mesh.CreateTriangle(v1, v3, vt4);

            Assert.AreEqual(2, mesh.Faces.Count);
            Assert.AreEqual(5, mesh.Edges.Count);
            Assert.AreEqual(4, mesh.Vertices.Count);

            mesh.JoinFaces(v3.HalfedgeTo(v1));

            Assert.AreEqual(1, mesh.Faces.Count);
            Assert.AreEqual(4, mesh.Edges.Count);
            Assert.AreEqual(4, mesh.Vertices.Count);
        }