public void TestEncoderBase <TType, TArray>(IEncoder <TType> encoder, TType in1, TType in2, bool testnull) { TType[] arrayIn1 = new[] { in1, in2 }; TArray[] arrayIn2 = new TArray[] { (TArray)(object)in1, (TArray)(object)null, (TArray)(object)in2 }; PacketData data = new PacketData(); data.AddEstimate(encoder.Estimate(in1)); data.AddEstimate(encoder.Array.Estimate(arrayIn1)); if (testnull) { data.AddEstimate(encoder.Nullable.Estimate(null)); data.AddEstimate(encoder.Nullable.Estimate(in1)); data.AddEstimate(encoder.Nullable.Array.Estimate(arrayIn2)); } data.InitArray(); encoder.Encode(in1, data); encoder.Array.Encode(arrayIn1, data); if (testnull) { encoder.Nullable.Encode(null, data); encoder.Nullable.Encode(in1, data); encoder.Nullable.Array.Encode(arrayIn2, data); } data.Flip(); TType out1 = encoder.Decode(data); TType[] arrayOut1 = (TType[])encoder.Array.Decode(data); if (testnull) { TArray outNull = (TArray)encoder.Nullable.Decode(data); TArray out1Null = (TArray)encoder.Nullable.Decode(data); TArray[] arrayOut2 = (TArray[])encoder.Nullable.Array.Decode(data); } Assert.True(Equals(in1, out1), $"Not consistent {in1} {out1}"); }