public void BfsCloneTest()
 {
     // a <-> b
     // a -> c
     // a -> d
     // a -> e <-> f
     Trace.WriteLine("init graph");
     var a = new Graph<string>("a");
     var b = new Graph<string>("b");
     var c = new Graph<string>("c");
     var d = new Graph<string>("d");
     var e = new Graph<string>("e");
     var f = new Graph<string>("f");
     a.LinkTo(b);
     b.LinkTo(a);
     a.LinkTo(c);
     a.LinkTo(d);
     a.LinkTo(e);
     e.LinkTo(f);
     f.LinkTo(e);
     f.LinkTo(b);
     Trace.WriteLine("clone...");
     var a2 = a.BfsClone();
     Trace.WriteLine("done!");
     Assert.AreEqual(b.Payload,
         a2.Neighbors.First(v=>v.Payload=="e")
         .Neighbors.First(v=>v.Payload=="f")
         .Neighbors.First(v => v.Payload == "b").Payload);
 }