public void Test3() {
            var sd = new Dictionary<string, string>();
            var tt = new SimpleTranslationTable<string>(sd);
            var ro = new ReadonlySimpleTranslationTable<string>(tt);
            sd.Add("key", "value");
            tt
                .Add("key2", "value2")
                .Add("key3", "value3")
            ;
            Assert.IsTrue(sd["key3"]=="value3");
            Assert.IsTrue(ro["key3"]=="value3");
            Assert.IsTrue(tt["key3"]=="value3");

            Assert.IsTrue(sd["key"]=="value");
            Assert.IsTrue(ro["key"]=="value");
            Assert.IsTrue(tt["key"]=="value");

            var rod = ro.ToDictionary();
            var rox = new SimpleTranslationTable<string>(rod);
            rod.Add("blah", "blx");
            Assert.IsTrue(ro["blah", null]==null);
            Assert.IsTrue(rox["blah", null]=="blx");

        }
        public void complexType() {
            var tt = new SimpleTranslationTable<myClass>();
            var ro = new ReadonlySimpleTranslationTable<myClass>(tt);
            tt.Add(
                new myClass{ name="left", age=1 },
                new myClass{ name="right", age=2 }
            ).Add(
                new myClass(),
                new myClass{ name="noname", age=-1 }
            );
            var r = tt[new myClass { name="left", age=1 }];
            int i = new myClass { name="right", age=2 };
            Assert.IsTrue(r == "right, 2");
            Assert.IsTrue(r == i);

            var u = tt[new myClass()];
            i=new myClass { name="noname", age=-1 };
            Assert.IsTrue("noname, -1" == u);
            Assert.IsTrue(u == i);
        }