diff --git a/onnxruntime/test/featurizers_ops/max_abs_scaler_transformer_test.cc b/onnxruntime/test/featurizers_ops/max_abs_scaler_transformer_test.cc index 712448b345..1b336a34c2 100644 --- a/onnxruntime/test/featurizers_ops/max_abs_scaler_transformer_test.cc +++ b/onnxruntime/test/featurizers_ops/max_abs_scaler_transformer_test.cc @@ -5,44 +5,50 @@ #include "test/providers/provider_test_utils.h" #include "Featurizers/MaxAbsScalerFeaturizer.h" +#include "Featurizers/TestHelpers.h" -namespace dft = Microsoft::Featurizer::Featurizers; +namespace NS = Microsoft::Featurizer; namespace onnxruntime { namespace test { -TEST(FeaturizersTests, MaxAbsScaler_int8_values) { +namespace { +template +void TestWrapper() { + auto trainingBatches = NS::TestHelpers::make_vector>( + NS::TestHelpers::make_vector(static_cast(-4)), + NS::TestHelpers::make_vector(static_cast(3)), + NS::TestHelpers::make_vector(static_cast(0)), + NS::TestHelpers::make_vector(static_cast(2)), + NS::TestHelpers::make_vector(static_cast(-1))); + + using EstimatorT = NS::Featurizers::MaxAbsScalerEstimator; + EstimatorT estimator(NS::CreateTestAnnotationMapsPtr(1), 0); + NS::TestHelpers::Train(estimator, trainingBatches); + + auto pTransformer = estimator.create_transformer(); + NS::Archive ar; + pTransformer->save(ar); + auto stream = ar.commit(); OpTester test("MaxAbsScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // State from when the transformer was trained. Corresponds to Version 1 and a - // scale of 0 - test.AddInput("State", {8}, {1, 0, 0, 0, 0, 0, 128, 64}); + auto dim = static_cast(stream.size()); + test.AddInput("State", {dim}, stream); - // We are adding a scalar Tensor in this instance - test.AddInput("X", {5}, {-4,3,0,2,-1}); + test.AddInput("Input", {5}, {-4, 3, 0, 2, -1}); + test.AddOutput("Output", {5}, {-1.f, 0.75f, 0.f, 0.5f, -0.25f}); + test.Run(); +} +} // namespace - // Expected output. - test.AddOutput("ScaledValues", {5}, {-1.f,.75f,0.f,.5f,-.25f}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); +TEST(FeaturizersTests, MaxAbsScaler_int8_output_float_double) { + TestWrapper(); + TestWrapper(); } -TEST(FeaturizersTests, MaxAbsScaler_double_values) { - OpTester test("MaxAbsScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // State from when the transformer was trained. Corresponds to Version 1 and a - // scale of 0 - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 64}); - - // We are adding a scalar Tensor in this instance - test.AddInput("X", {5}, {-4, 3, 0, 2, -1}); - - // Expected output. - test.AddOutput("ScaledValues", {5}, {-1, .75, 0, .5, -.25}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); +TEST(FeaturizersTests, MaxAbsScaler_float_output_float_double) { + TestWrapper(); + TestWrapper(); } - } // namespace test } // namespace onnxruntime diff --git a/onnxruntime/test/featurizers_ops/min_max_scaler_transformer_test.cc b/onnxruntime/test/featurizers_ops/min_max_scaler_transformer_test.cc index 2eb3cf8ed8..7c1d778dfe 100644 --- a/onnxruntime/test/featurizers_ops/min_max_scaler_transformer_test.cc +++ b/onnxruntime/test/featurizers_ops/min_max_scaler_transformer_test.cc @@ -5,56 +5,63 @@ #include "test/providers/provider_test_utils.h" #include "Featurizers/MinMaxScalerFeaturizer.h" +#include "Featurizers/TestHelpers.h" +#include "Featurizers/../Archive.h" + +namespace NS = Microsoft::Featurizer; namespace onnxruntime { namespace test { -TEST(FeaturizersTests, MinMaxScalerTransformer_int8) { - OpTester test("MinMaxScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {6}, {1, 0, 0, 0, 1, 9}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {1}, {15}); - - // Expected output. - test.AddOutput("?2", {1}, {1.75}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); +namespace { +template +std::vector GetStream(const std::vector>& training_batches) { + using EstimatorT = NS::Featurizers::MinMaxScalerEstimator; + EstimatorT estimator(NS::CreateTestAnnotationMapsPtr(1), 0); + NS::TestHelpers::Train(estimator, training_batches); + auto pTransformer = estimator.create_transformer(); + NS::Archive ar; + pTransformer->save(ar); + return ar.commit(); } +} // namespace +TEST(FeaturizersTests, MinMaxScalerTransformer_float) { + using InputType = float; + using TransformedType = double; + + auto training_batches = NS::TestHelpers::make_vector>( + NS::TestHelpers::make_vector(static_cast(-1)), + NS::TestHelpers::make_vector(static_cast(-0.5)), + NS::TestHelpers::make_vector(static_cast(0)), + NS::TestHelpers::make_vector(static_cast(1))); + + auto stream = GetStream(training_batches); -TEST(FeaturizersTests, MinMaxScalerTransformer_float_t) { OpTester test("MinMaxScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 128, 191, 0, 0, 128, 63}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {1}, {2.f}); - - // Expected output. - test.AddOutput("?2", {1}, {1.5}); - + auto dim = static_cast(stream.size()); + test.AddInput("State", {dim}, stream); + test.AddInput("Input", {1}, {2}); + test.AddOutput("Output", {1}, {1.5f}); test.Run(OpTester::ExpectResult::kExpectSuccess); } TEST(FeaturizersTests, MinMaxScalerTransformer_only_one_input) { + using InputType = int8_t; + using TransformedType = double; + + auto training_batches = NS::TestHelpers::make_vector>( + NS::TestHelpers::make_vector(static_cast(-1))); + + auto stream = GetStream(training_batches); + OpTester test("MinMaxScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {6}, {1, 0, 0, 0, 255, 255}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {1}, {2}); - - // Expected output. - test.AddOutput("?2", {1}, {0}); - + auto dim = static_cast(stream.size()); + test.AddInput("State", {dim}, stream); + test.AddInput("Input", {1}, {2}); + test.AddOutput("Output", {1}, {0.f}); test.Run(OpTester::ExpectResult::kExpectSuccess); } - -} -} \ No newline at end of file +} // namespace test +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/test/featurizers_ops/robust_scaler_transformer_test.cc b/onnxruntime/test/featurizers_ops/robust_scaler_transformer_test.cc index ff5a1eb796..d77cb0d38e 100644 --- a/onnxruntime/test/featurizers_ops/robust_scaler_transformer_test.cc +++ b/onnxruntime/test/featurizers_ops/robust_scaler_transformer_test.cc @@ -5,105 +5,74 @@ #include "test/providers/provider_test_utils.h" #include "Featurizers/RobustScalerFeaturizer.h" +#include "Featurizers/TestHelpers.h" +#include "Featurizers/../Archive.h" + +namespace NS = Microsoft::Featurizer; namespace onnxruntime { namespace test { -TEST(FeaturizersTests, RobustScalerTransformer_default_with_centering) { - OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); +namespace { - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 160, 64, 0, 0, 128, 64}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {5}, {1, 3, 5, 7, 9}); - - // Expected output. - test.AddOutput("?2", {5}, {-1.0f,-0.5f, 0.0f, 0.5f, 1.0f}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); +template +std::vector GetStream(const std::vector>& training_batches, bool centering) { + using EstimatorT = NS::Featurizers::RobustScalerEstimator; + auto estimator = EstimatorT::CreateWithDefaultScaling(NS::CreateTestAnnotationMapsPtr(1), 0, centering); + NS::TestHelpers::Train(estimator, training_batches); + auto pTransformer = estimator.create_transformer(); + NS::Archive ar; + pTransformer->save(ar); + return ar.commit(); } +uint8_t operator"" _ui8(unsigned long long v) { + return static_cast(v); +} + +} // namespace + +TEST(FeaturizersTests, RobustScalerTransformer_input_int8__output_float_centering) { + using InputType = uint8_t; + using TransformedType = float; + + auto training_batches = NS::TestHelpers::make_vector>( + NS::TestHelpers::make_vector(1_ui8), + NS::TestHelpers::make_vector(7_ui8), + NS::TestHelpers::make_vector(5_ui8), + NS::TestHelpers::make_vector(3_ui8), + NS::TestHelpers::make_vector(9_ui8)); + + auto stream = GetStream(training_batches, true); + + OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); + auto dim = static_cast(stream.size()); + test.AddInput("State", {dim}, stream); + test.AddInput("Input", {5}, {1_ui8, 3_ui8, 5_ui8, 7_ui8, 9_ui8}); + test.AddOutput("Output", {5}, {-1.f, -0.5f, 0.f, 0.5f, 1.f}); + test.Run(OpTester::ExpectResult::kExpectSuccess); +} TEST(FeaturizersTests, RobustScalarTransformer_default_no_centering) { + using InputType = uint8_t; + using TransformedType = float; + + auto training_batches = NS::TestHelpers::make_vector>( + NS::TestHelpers::make_vector(1_ui8), + NS::TestHelpers::make_vector(7_ui8), + NS::TestHelpers::make_vector(5_ui8), + NS::TestHelpers::make_vector(3_ui8), + NS::TestHelpers::make_vector(9_ui8)); + + auto stream = GetStream(training_batches, false); + OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 64}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {5}, {1, 3, 5, 7, 9}); - - // Expected output. - test.AddOutput("?2", {5}, {0.25f, 0.75f, 1.25f, 1.75f, 2.25f}); - + auto dim = static_cast(stream.size()); + test.AddInput("State", {dim}, stream); + test.AddInput("Input", {5}, {1_ui8, 3_ui8, 5_ui8, 7_ui8, 9_ui8}); + test.AddOutput("Output", {5}, {1.0/4.0, 3./4., 5./4., 7./4., 9./4.}); test.Run(OpTester::ExpectResult::kExpectSuccess); } - -TEST(FeaturizersTests, RobustScalerTransformer_default_no_centering_zero_scale) { - OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {3}, {10, 10, 10}); - - // Expected output. - test.AddOutput("?2", {3}, {10.f, 10.f, 10.f}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); -} - - -TEST(FeaturizersTests, RobustScalarTransformer_default_with_centering_no_scaling) { - OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 160, 64, 0, 0, 128, 63}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {5}, {1, 3, 5, 7, 9}); - - // Expected output. - test.AddOutput("?2", {5}, {-4.f, -2.f, 0.f, 2.f, 4.f}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); -} - - -TEST(FeaturizersTests, RobustScalerTransformer_default_with_centering_custom_scaling) { - OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 160, 64, 0, 0, 0, 65}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {5}, {1, 3, 5, 7, 9}); - - // Expected output. - test.AddOutput("?2", {5}, {-0.5f, -0.25f, 0.f, 0.25f, 0.5f}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); -} - - -TEST(FeaturizersTests, RobustScalerTransformer_default_no_centering_custom_scaling) { - OpTester test("RobustScalerTransformer", 1, onnxruntime::kMSFeaturizersDomain); - - // Add state input - test.AddInput("State", {12}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65}); - - // We are adding a scalar Tensor in this instance - test.AddInput("?1", {5}, {1, 3, 5, 7, 9}); - - // Expected output. - test.AddOutput("?2", {5}, {0.125f, 0.375f, 0.625f, 0.875f, 1.125f}); - - test.Run(OpTester::ExpectResult::kExpectSuccess); -} - - -} -} +} // namespace test +} // namespace onnxruntime