private static void CheckFormatWithString <T0, T1, T2>(string?expectedResult, string format, T0 arg0, T1 arg1, T2 arg2)
        {
            var cf            = new CompositeFormat(format);
            var actualResult1 = cf.Format(null, arg0, arg1, arg2);
            var actualResult2 = cf.Format(arg0, arg1, arg2);
            var actualResult3 = new StringBuilder().AppendFormat(cf, null, arg0, arg1, arg2).ToString();
            var actualResult4 = new StringBuilder().AppendFormat(cf, arg0, arg1, arg2).ToString();

            Assert.Equal(expectedResult, actualResult1);
            Assert.Equal(expectedResult, actualResult2);
            Assert.Equal(expectedResult, actualResult3);
            Assert.Equal(expectedResult, actualResult4);
        }
        private static void CheckFormatWithString(string?expectedResult, string format, params object?[]?args)
        {
            var cf            = new CompositeFormat(format);
            var actualResult1 = cf.Format(null, args);
            var actualResult2 = cf.Format(args);
            var actualResult3 = new StringBuilder().AppendFormat(cf, null, args).ToString();
            var actualResult4 = new StringBuilder().AppendFormat(cf, args).ToString();

            Assert.Equal(expectedResult, actualResult1);
            Assert.Equal(expectedResult, actualResult2);
            Assert.Equal(expectedResult, actualResult3);
            Assert.Equal(expectedResult, actualResult4);
        }
        private static void CheckExpansion <T>(T arg)
        {
            var format = "{0,256} {1}";

            var expectedResult = string.Format(format, 3.14, arg);
            var cf             = new CompositeFormat(format);
            var actualResult1  = cf.Format(null, 3.14, arg);
            var actualResult2  = cf.Format(3.14, arg);
            var actualResult3  = new StringBuilder().AppendFormat(cf, null, 3.14, arg).ToString();
            var actualResult4  = new StringBuilder().AppendFormat(cf, 3.14, arg).ToString();

            Assert.Equal(expectedResult, actualResult1);
            Assert.Equal(expectedResult, actualResult2);
            Assert.Equal(expectedResult, actualResult3);
            Assert.Equal(expectedResult, actualResult4);
        }