| File: ChainTests.cs | Web Access |
| Project: ..\..\..\test\Microsoft.ML.Tests\Microsoft.ML.Tests.csproj (Microsoft.ML.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using Microsoft.ML.Data; using Microsoft.ML.RunTests; using Microsoft.ML.Transforms; using Xunit; using Xunit.Abstractions; namespace Microsoft.ML.Tests { public class ChainTests : TestDataPipeBase { public ChainTests(ITestOutputHelper helper) : base(helper) { } private class MyData { public float Feature { get; set; } } [Theory] [InlineData(true)] [InlineData(false)] public void TransformerChainAcceptsNullOrEmptyTransformers(bool useNull) { var chain = new TransformerChain<ITransformer>( useNull ? null : Array.Empty<ITransformer>(), useNull ? null : Array.Empty<TransformerScope>()); Assert.Null(chain.LastTransformer); Assert.Empty(chain); var data = ML.Data.LoadFromEnumerable(new[] { new MyData() }); Assert.Same(data, chain.Transform(data)); Assert.Same(data.Schema, chain.GetOutputSchema(data.Schema)); } [Fact] public void TransformerChainEnumeratesTransformersOnce() { var data = ML.Data.LoadFromEnumerable(new[] { new MyData() }); var first = ML.Transforms.CopyColumns("F1", "Feature").Fit(data); var last = ML.Transforms.CopyColumns("F2", "F1").Fit(first.Transform(data)); int enumerationCount = 0; IEnumerable<ITransformer> GetTransformers() { enumerationCount++; yield return first; yield return last; } var chain = new TransformerChain<ColumnCopyingTransformer>( GetTransformers(), new[] { TransformerScope.Everything, TransformerScope.Everything }); Assert.Equal(1, enumerationCount); Assert.Equal(new ITransformer[] { first, last }, chain); Assert.Same(last, chain.LastTransformer); Assert.Equal(typeof(float), chain.Transform(data).Schema["F2"].Type.RawType); } } }