public void CanRoundTripAsMapped()
        {
            var model = BuildModel(false);

            AllTheEnums ate = new AllTheEnums
            {
                I8  = I8.B,
                U8  = U8.B,
                I16 = I16.B,
                U16 = U16.B,
                I32 = I32.B,
                U32 = U32.B,
                I64 = I64.B,
                U64 = U64.B
            }, clone;

            clone = (AllTheEnums)model.DeepClone(ate);
            CompareAgainstClone(ate, clone, "Runtime");

            model.CompileInPlace();
            clone = (AllTheEnums)model.DeepClone(ate);
            CompareAgainstClone(ate, clone, "CompileInPlace");

            clone = (AllTheEnums)model.Compile().DeepClone(ate);
            CompareAgainstClone(ate, clone, "Compile");
        }
 static void CompareAgainstClone(AllTheEnums original, AllTheEnums clone, string caption)
 {
     Assert.NotNull(original);              //, caption + " (original)");
     Assert.NotNull(clone);                 //, caption + " (clone)");
     Assert.NotSame(original, clone);       //, caption);
     Assert.Equal(original.I8, clone.I8);   //, caption);
     Assert.Equal(original.U8, clone.U8);   //, caption);
     Assert.Equal(original.I16, clone.I16); //, caption);
     Assert.Equal(original.U16, clone.U16); //, caption);
     Assert.Equal(original.I32, clone.I32); //, caption);
     Assert.Equal(original.U32, clone.U32); //, caption);
     Assert.Equal(original.I64, clone.I64); //, caption);
     Assert.Equal(original.U64, clone.U64); //, caption);
 }