void TestSelectKeepWithOrder()
        {
            var data = new[] { new TestClass()
                               {
                                   A = 1, B = 2, C = 3,
                               }, new TestClass()
                               {
                                   A = 4, B = 5, C = 6
                               } };
            var dataView = ComponentCreation.CreateDataView(Env, data);

            // Expected output will be CA
            var est          = new ColumnSelectingEstimator(Env, "C", "A");
            var transformer  = est.Fit(dataView);
            var result       = transformer.Transform(dataView);
            var foundColumnA = result.Schema.TryGetColumnIndex("A", out int aIdx);
            var foundColumnB = result.Schema.TryGetColumnIndex("B", out int bIdx);
            var foundColumnC = result.Schema.TryGetColumnIndex("C", out int cIdx);

            Assert.True(foundColumnA);
            Assert.Equal(1, aIdx);
            Assert.False(foundColumnB);
            Assert.Equal(0, bIdx);
            Assert.True(foundColumnC);
            Assert.Equal(0, cIdx);
        }
        void TestSelectColumnsWithMissing()
        {
            var data = new[] { new TestClass()
                               {
                                   A = 1, B = 2, C = 3,
                               }, new TestClass()
                               {
                                   A = 4, B = 5, C = 6
                               } };
            var dataView = ComponentCreation.CreateDataView(Env, data);
            var est      = new ColumnSelectingEstimator(Env, new[] { "D", "G" });

            Assert.Throws <ArgumentOutOfRangeException>(() => est.Fit(dataView));
        }
        void TestSelectDrop()
        {
            var data = new[] { new TestClass()
                               {
                                   A = 1, B = 2, C = 3,
                               }, new TestClass()
                               {
                                   A = 4, B = 5, C = 6
                               } };
            var dataView     = ComponentCreation.CreateDataView(Env, data);
            var est          = new ColumnSelectingEstimator(Env, null, new string[] { "A", "C" });
            var transformer  = est.Fit(dataView);
            var result       = transformer.Transform(dataView);
            var foundColumnA = result.Schema.TryGetColumnIndex("A", out int aIdx);
            var foundColumnB = result.Schema.TryGetColumnIndex("B", out int bIdx);
            var foundColumnC = result.Schema.TryGetColumnIndex("C", out int cIdx);

            Assert.False(foundColumnA);
            Assert.Equal(0, aIdx);
            Assert.True(foundColumnB);
            Assert.Equal(0, bIdx);
            Assert.False(foundColumnC);
            Assert.Equal(0, cIdx);
        }