public void Mesh_CreateTetrahedron()
        {
            string v1Traits   = "v1";
            string v2Traits   = "v2";
            string v3Traits   = "v3";
            string faceTraits = "face1";

            var mesh = new StringMesh();
            var face = mesh.CreateTriangle(v1Traits, v2Traits, v3Traits, faceTraits);

            var v4Traits    = "v4";
            var face2Traits = "face2";
            var face3Traits = "face3";
            var face4Traits = "face4";

            // Recover the first vertex
            var v1 = face.Bounding.Source;
            var v2 = face.Bounding.Target;
            var v3 = face.Bounding.Next.Target;

            // Use it to make next triangle - careful with sequence V2 -> v1
            var face2 = mesh.CreateTriangle(v2, v1, v4Traits, face2Traits);
            var v4    = face2.Bounding.Next.Target;

            // Recover halfedges
            var e21 = v2.HalfedgeTo(v1);
            var e14 = v1.HalfedgeTo(v4);
            var e42 = v4.HalfedgeTo(v2);

            var e12 = e21.Opposite;
            var e41 = e14.Opposite;
            var e24 = e42.Opposite;

            var face3 = mesh.CreateTriangle(v3, v4, v1, face3Traits);
            var face4 = mesh.CreateFace(e24, face4Traits);

            foreach (var he in mesh.Halfedges)
            {
                Assert.IsNotNull(he.Face);
            }

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