From 0366e1127d52b4de5b06202c341dc4511db70cd1 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:25:51 +0100 Subject: [PATCH 01/21] Add .NET formatting workflow and minor code cleanup Added a GitHub Actions workflow (format.yml) to enforce code formatting checks on PRs and pushes to main. Also removed an unnecessary blank line in StructuredNetworkCharacterCount.cs for code clarity. --- .github/workflows/format.yml | 24 +++++++++++++++++++ .../StructuredNetworkCharacterCount.cs | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/format.yml diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 000000000..872d0b3f8 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,24 @@ +name: Check formatting + +on: + pull_request: + push: + branches: [ main ] + +jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + global-json-file: global.json + + - name: Verify code formatting + run: | + dotnet format src/csharp/Microsoft.Spark.sln --verify-no-changes + dotnet format examples/Microsoft.Spark.Examples.sln --verify-no-changes + dotnet format benchmark/csharp/Microsoft.Spark.Benchmark.sln --verify-no-changes diff --git a/examples/Microsoft.Spark.CSharp.Examples/Sql/Streaming/StructuredNetworkCharacterCount.cs b/examples/Microsoft.Spark.CSharp.Examples/Sql/Streaming/StructuredNetworkCharacterCount.cs index e8442af8b..4e5219c37 100644 --- a/examples/Microsoft.Spark.CSharp.Examples/Sql/Streaming/StructuredNetworkCharacterCount.cs +++ b/examples/Microsoft.Spark.CSharp.Examples/Sql/Streaming/StructuredNetworkCharacterCount.cs @@ -54,7 +54,7 @@ public void Run(string[] args) .WriteStream() .Format("console") .Start(); - + query.AwaitTermination(); } } From cbea28cdc94f2296ee27ce48eee83e4f786fea42 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:26:07 +0100 Subject: [PATCH 02/21] Add DataFrame union example and improve code formatting Added a union operation between DataFrames in Basic.cs and displayed the result. Improved readability in Datasource.cs by adding blank lines, including within RunParquetExample. --- examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Basic.cs | 2 +- .../Microsoft.Spark.CSharp.Examples/Sql/Batch/Datasource.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Basic.cs b/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Basic.cs index e09c79e20..6fe85248e 100644 --- a/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Basic.cs +++ b/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Basic.cs @@ -108,7 +108,7 @@ public void Run(string[] args) DataFrame joinedDf3 = df.Join(df, df["name"] == df["name"], "outer"); joinedDf3.Show(); - + // Union of two data frames DataFrame unionDf = df.Union(df); unionDf.Show(); diff --git a/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Datasource.cs b/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Datasource.cs index d10a5e989..ab92efca1 100644 --- a/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Datasource.cs +++ b/examples/Microsoft.Spark.CSharp.Examples/Sql/Batch/Datasource.cs @@ -20,7 +20,7 @@ public void Run(string[] args) { Console.Error.WriteLine( "Usage: Datasource "); - + Environment.Exit(1); } @@ -92,11 +92,11 @@ private void RunDatasourceExample(SparkSession spark) private void RunParquetExample(SparkSession spark, string json) { DataFrame peopleDf = spark.Read().Json(json); - + peopleDf.Write().Mode(SaveMode.Overwrite).Parquet("people.parquet"); DataFrame parquetFile = spark.Read().Parquet("people.parquet"); - + parquetFile.CreateTempView("parquet"); DataFrame teenagers = spark.Sql( From c3f646f0287e4cdab003e68535b4d22ed8596bba Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:26:23 +0100 Subject: [PATCH 03/21] Add blank line for readability in VectorFunctions.intrinsics.cs Inserted a blank line after the 'ones' vector declaration in the Tpch namespace to improve code readability. No functional changes were made. --- benchmark/csharp/Tpch/VectorFunctions.intrinsics.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmark/csharp/Tpch/VectorFunctions.intrinsics.cs b/benchmark/csharp/Tpch/VectorFunctions.intrinsics.cs index e63849a3b..8c8ab430c 100644 --- a/benchmark/csharp/Tpch/VectorFunctions.intrinsics.cs +++ b/benchmark/csharp/Tpch/VectorFunctions.intrinsics.cs @@ -71,7 +71,7 @@ internal static unsafe DoubleArray ComputeDiscountPrice(DoubleArray price, Doubl fixed (double* pBuffer = buffer) { Vector256 ones = Vector256.Create(1.0); - + int i = 0; for (; i < vectorizationLength; i += 4) { From b7e96d4c32cd823006508ef8d9532bf6c399b32f Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:26:47 +0100 Subject: [PATCH 04/21] Clean up and reorder using directives in ML.Feature Refactored using statements in Estimator.cs, Evaluator.cs, Pipeline.cs, PipelineStage.cs, and Transformer.cs for consistency and clarity. Removed unused imports and standardized import order. Minor whitespace and formatting adjustments were also made. --- src/csharp/Microsoft.Spark/ML/Feature/Estimator.cs | 2 +- src/csharp/Microsoft.Spark/ML/Feature/Evaluator.cs | 2 +- src/csharp/Microsoft.Spark/ML/Feature/Pipeline.cs | 4 ++-- src/csharp/Microsoft.Spark/ML/Feature/PipelineStage.cs | 2 +- src/csharp/Microsoft.Spark/ML/Feature/Transformer.cs | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/csharp/Microsoft.Spark/ML/Feature/Estimator.cs b/src/csharp/Microsoft.Spark/ML/Feature/Estimator.cs index 2208424a8..0083c520c 100644 --- a/src/csharp/Microsoft.Spark/ML/Feature/Estimator.cs +++ b/src/csharp/Microsoft.Spark/ML/Feature/Estimator.cs @@ -2,8 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Spark.Sql; using Microsoft.Spark.Interop.Ipc; +using Microsoft.Spark.Sql; namespace Microsoft.Spark.ML.Feature { diff --git a/src/csharp/Microsoft.Spark/ML/Feature/Evaluator.cs b/src/csharp/Microsoft.Spark/ML/Feature/Evaluator.cs index 1d0deef87..e8cd7f587 100644 --- a/src/csharp/Microsoft.Spark/ML/Feature/Evaluator.cs +++ b/src/csharp/Microsoft.Spark/ML/Feature/Evaluator.cs @@ -2,8 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Spark.Sql; using Microsoft.Spark.Interop.Ipc; +using Microsoft.Spark.Sql; namespace Microsoft.Spark.ML.Feature { diff --git a/src/csharp/Microsoft.Spark/ML/Feature/Pipeline.cs b/src/csharp/Microsoft.Spark/ML/Feature/Pipeline.cs index 517f16710..6ce9b2fdd 100644 --- a/src/csharp/Microsoft.Spark/ML/Feature/Pipeline.cs +++ b/src/csharp/Microsoft.Spark/ML/Feature/Pipeline.cs @@ -3,11 +3,11 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using Microsoft.Spark.Interop; using Microsoft.Spark.Interop.Ipc; using Microsoft.Spark.Sql; using Microsoft.Spark.Utils; -using System.Collections.Generic; namespace Microsoft.Spark.ML.Feature { @@ -83,7 +83,7 @@ public JavaPipelineStage[] GetStages() out JavaPipelineStage instance)) { result[i] = instance; - } + } } return result; diff --git a/src/csharp/Microsoft.Spark/ML/Feature/PipelineStage.cs b/src/csharp/Microsoft.Spark/ML/Feature/PipelineStage.cs index 3420b3789..3705b748b 100644 --- a/src/csharp/Microsoft.Spark/ML/Feature/PipelineStage.cs +++ b/src/csharp/Microsoft.Spark/ML/Feature/PipelineStage.cs @@ -2,9 +2,9 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Microsoft.Spark.Interop.Ipc; using Microsoft.Spark.Sql; using Microsoft.Spark.Sql.Types; -using Microsoft.Spark.Interop.Ipc; namespace Microsoft.Spark.ML.Feature { diff --git a/src/csharp/Microsoft.Spark/ML/Feature/Transformer.cs b/src/csharp/Microsoft.Spark/ML/Feature/Transformer.cs index cea34c4c8..10ec8ebcd 100644 --- a/src/csharp/Microsoft.Spark/ML/Feature/Transformer.cs +++ b/src/csharp/Microsoft.Spark/ML/Feature/Transformer.cs @@ -2,8 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using Microsoft.Spark.Sql; using Microsoft.Spark.Interop.Ipc; +using Microsoft.Spark.Sql; namespace Microsoft.Spark.ML.Feature { From 4bff1b87c61e66fa4f51d068c44dafb2d1ac1a5a Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:27:01 +0100 Subject: [PATCH 05/21] Refactor: remove line breaks in Avro function signatures Refactored the method signatures for FromAvro and ToAvro in Microsoft.Spark.Sql.Avro.Functions to be single-line definitions. This change is purely stylistic and improves code readability without affecting functionality. --- src/csharp/Microsoft.Spark/Sql/Avro/Functions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/csharp/Microsoft.Spark/Sql/Avro/Functions.cs b/src/csharp/Microsoft.Spark/Sql/Avro/Functions.cs index e1ba0bd48..da055766d 100644 --- a/src/csharp/Microsoft.Spark/Sql/Avro/Functions.cs +++ b/src/csharp/Microsoft.Spark/Sql/Avro/Functions.cs @@ -36,7 +36,7 @@ public static class Functions /// The avro schema in JSON string format. /// Column object [Since(Versions.V2_4_0)] - public static Column FromAvro(Column data, string jsonFormatSchema) => + public static Column FromAvro(Column data, string jsonFormatSchema) => new Column( (JvmObjectReference)Jvm.CallStaticJavaMethod( s_avroClassName.Value, @@ -58,7 +58,7 @@ public static Column FromAvro(Column data, string jsonFormatSchema) => public static Column FromAvro( Column data, string jsonFormatSchema, - Dictionary options) => + Dictionary options) => new Column( (JvmObjectReference)Jvm.CallStaticJavaMethod( s_avroClassName.Value, @@ -73,7 +73,7 @@ public static Column FromAvro( /// The data column. /// Column object [Since(Versions.V2_4_0)] - public static Column ToAvro(Column data) => + public static Column ToAvro(Column data) => new Column((JvmObjectReference)Jvm.CallStaticJavaMethod(s_avroClassName.Value, "to_avro", data)); /// @@ -83,7 +83,7 @@ public static Column ToAvro(Column data) => /// User-specified output avro schema in JSON string format. /// Column object [Since(Versions.V3_0_0)] - public static Column ToAvro(Column data, string jsonFormatSchema) => + public static Column ToAvro(Column data, string jsonFormatSchema) => new Column( (JvmObjectReference)Jvm.CallStaticJavaMethod( s_avroClassName.Value, From ade4135a50ea1e6330b17004566d75e797498975 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:27:28 +0100 Subject: [PATCH 06/21] Refactor formatting in Trigger.cs and ComplexTypes.cs Reformatted s_triggerClassName assignment in Trigger.cs for clarity. Added a blank line in ComplexTypes.cs to improve readability. No functional changes were made. --- src/csharp/Microsoft.Spark/Sql/Streaming/Trigger.cs | 2 +- src/csharp/Microsoft.Spark/Sql/Types/ComplexTypes.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/csharp/Microsoft.Spark/Sql/Streaming/Trigger.cs b/src/csharp/Microsoft.Spark/Sql/Streaming/Trigger.cs index 28c2e51c9..35b6c78aa 100644 --- a/src/csharp/Microsoft.Spark/Sql/Streaming/Trigger.cs +++ b/src/csharp/Microsoft.Spark/Sql/Streaming/Trigger.cs @@ -14,7 +14,7 @@ namespace Microsoft.Spark.Sql.Streaming public sealed class Trigger : IJvmObjectReferenceProvider { private static IJvmBridge Jvm { get; } = SparkEnvironment.JvmBridge; - private static readonly string s_triggerClassName = + private static readonly string s_triggerClassName = "org.apache.spark.sql.streaming.Trigger"; internal Trigger(JvmObjectReference jvmObject) => Reference = jvmObject; diff --git a/src/csharp/Microsoft.Spark/Sql/Types/ComplexTypes.cs b/src/csharp/Microsoft.Spark/Sql/Types/ComplexTypes.cs index c2894f0c6..470769d98 100644 --- a/src/csharp/Microsoft.Spark/Sql/Types/ComplexTypes.cs +++ b/src/csharp/Microsoft.Spark/Sql/Types/ComplexTypes.cs @@ -77,7 +77,7 @@ internal override object FromInternal(object obj) { return obj; } - + var arrayList = (ArrayList)obj; for (int i = 0; i < arrayList.Count; ++i) { From c3ed31a282f4104cc57337dbb41fbcc18a6b1099 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:27:54 +0100 Subject: [PATCH 07/21] Add XML documentation to Microsoft.Spark.Sql classes Improved code documentation by adding XML comments to methods and properties in DataFrameReader, GenericRow, RelationalGroupedDataset, and SparkSession. Enhanced IntelliSense support and clarified usage with summaries and parameter descriptions. No functional changes were made. --- src/csharp/Microsoft.Spark/Sql/DataFrameReader.cs | 6 +++--- src/csharp/Microsoft.Spark/Sql/GenericRow.cs | 6 +++--- src/csharp/Microsoft.Spark/Sql/RelationalGroupedDataset.cs | 4 ++-- src/csharp/Microsoft.Spark/Sql/SparkSession.cs | 2 +- src/csharp/Microsoft.Spark/Sql/StorageLevel.cs | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/csharp/Microsoft.Spark/Sql/DataFrameReader.cs b/src/csharp/Microsoft.Spark/Sql/DataFrameReader.cs index 338cff54e..b3a3abfb7 100644 --- a/src/csharp/Microsoft.Spark/Sql/DataFrameReader.cs +++ b/src/csharp/Microsoft.Spark/Sql/DataFrameReader.cs @@ -33,7 +33,7 @@ public DataFrameReader Format(string source) Reference.Invoke("format", source); return this; } - + /// /// Specifies the schema by using . /// @@ -49,7 +49,7 @@ public DataFrameReader Schema(StructType schema) Reference.Invoke("schema", DataType.FromJson(Reference.Jvm, schema.Json)); return this; } - + /// /// Specifies the schema by using the given DDL-formatted string. /// @@ -253,7 +253,7 @@ public DataFrame Jdbc( /// Input paths /// DataFrame object public DataFrame Orc(params string[] paths) => LoadSource("orc", paths); - + /// /// Returns the specified table as a DataFrame. /// diff --git a/src/csharp/Microsoft.Spark/Sql/GenericRow.cs b/src/csharp/Microsoft.Spark/Sql/GenericRow.cs index 8c2e9ff40..6861ec6d4 100644 --- a/src/csharp/Microsoft.Spark/Sql/GenericRow.cs +++ b/src/csharp/Microsoft.Spark/Sql/GenericRow.cs @@ -19,9 +19,9 @@ public sealed class GenericRow /// Column values for a row public GenericRow(object[] values) { - Values = values; + Values = values; } - + /// /// Values representing this row. /// @@ -57,7 +57,7 @@ public object Get(int index) } return Values[index]; - } + } /// /// Returns the string version of this row. diff --git a/src/csharp/Microsoft.Spark/Sql/RelationalGroupedDataset.cs b/src/csharp/Microsoft.Spark/Sql/RelationalGroupedDataset.cs index ee5e37aaa..67a7be0fc 100644 --- a/src/csharp/Microsoft.Spark/Sql/RelationalGroupedDataset.cs +++ b/src/csharp/Microsoft.Spark/Sql/RelationalGroupedDataset.cs @@ -89,7 +89,7 @@ public DataFrame Sum(params string[] colNames) => /// /// Name of the column to pivot /// New RelationalGroupedDataset object with pivot applied - public RelationalGroupedDataset Pivot(string pivotColumn) => + public RelationalGroupedDataset Pivot(string pivotColumn) => new RelationalGroupedDataset( (JvmObjectReference)Reference.Invoke("pivot", pivotColumn), _dataFrame); @@ -109,7 +109,7 @@ public RelationalGroupedDataset Pivot(string pivotColumn, IEnumerable va /// /// The column to pivot /// New RelationalGroupedDataset object with pivot applied - public RelationalGroupedDataset Pivot(Column pivotColumn) => + public RelationalGroupedDataset Pivot(Column pivotColumn) => new RelationalGroupedDataset( (JvmObjectReference)Reference.Invoke("pivot", pivotColumn), _dataFrame); diff --git a/src/csharp/Microsoft.Spark/Sql/SparkSession.cs b/src/csharp/Microsoft.Spark/Sql/SparkSession.cs index da90691a9..75fd09b67 100644 --- a/src/csharp/Microsoft.Spark/Sql/SparkSession.cs +++ b/src/csharp/Microsoft.Spark/Sql/SparkSession.cs @@ -185,7 +185,7 @@ public SparkSession NewSession() => /// A string that represents the version of Spark on which this application is running. /// public string Version() => (string)Reference.Invoke("version"); - + /// /// Returns the specified table/view as a DataFrame. /// diff --git a/src/csharp/Microsoft.Spark/Sql/StorageLevel.cs b/src/csharp/Microsoft.Spark/Sql/StorageLevel.cs index 6364f5493..1480e6984 100644 --- a/src/csharp/Microsoft.Spark/Sql/StorageLevel.cs +++ b/src/csharp/Microsoft.Spark/Sql/StorageLevel.cs @@ -223,7 +223,7 @@ public override bool Equals(object obj) { return false; } - + return (UseDisk == that.UseDisk) && (UseMemory == that.UseMemory) && (UseOffHeap == that.UseOffHeap) && (Deserialized == that.Deserialized) && (Replication == that.Replication); From 5d8cc5dae5bd9a2cfe92c9ea2cdc62b1f2b23065 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:28:13 +0100 Subject: [PATCH 08/21] Improve formatting and whitespace in ML feature tests Refactor test files in Microsoft.Spark.E2ETest.ML.Feature to add blank lines between logical code blocks, adjust using directive order, and enhance parameter formatting and documentation in TestFeatureBase. No functional changes; these updates improve readability and maintainability. --- .../IpcTests/ML/Feature/BucketizerTests.cs | 6 +++--- .../ML/Feature/CountVectorizerModelTests.cs | 18 +++++++++--------- .../ML/Feature/CountVectorizerTests.cs | 14 +++++++------- .../IpcTests/ML/Feature/FeatureBaseTests.cs | 8 ++++---- .../IpcTests/ML/Feature/HashingTFTests.cs | 10 +++++----- .../IpcTests/ML/Feature/IDFModelTests.cs | 16 ++++++++-------- .../IpcTests/ML/Feature/IDFTests.cs | 10 +++++----- .../IpcTests/ML/Feature/PipelineModelTests.cs | 4 ++-- .../IpcTests/ML/Feature/PipelineTests.cs | 16 ++++++++-------- .../IpcTests/ML/Feature/TokenizerTests.cs | 16 ++++++++-------- .../IpcTests/ML/Feature/Word2VecModelTests.cs | 8 ++++---- .../IpcTests/ML/Feature/Word2VecTests.cs | 10 +++++----- 12 files changed, 68 insertions(+), 68 deletions(-) diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/BucketizerTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/BucketizerTests.cs index 949ba06da..50885d528 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/BucketizerTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/BucketizerTests.cs @@ -55,16 +55,16 @@ public void TestBucketizer() Assert.Equal(expectedInputCol, bucketizer.GetInputCol()); Assert.Equal(expectedOutputCol, bucketizer.GetOutputCol()); Assert.Equal(expectedSplits, bucketizer.GetSplits()); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "bucket"); bucketizer.Save(savePath); - + Bucketizer loadedBucketizer = Bucketizer.Load(savePath); Assert.Equal(bucketizer.Uid(), loadedBucketizer.Uid()); } - + TestFeatureBase(bucketizer, "handleInvalid", "keep"); } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerModelTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerModelTests.cs index e4c24adec..8fc91624c 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerModelTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerModelTests.cs @@ -31,12 +31,12 @@ public void TestCountVectorizerModel() { DataFrame input = _spark.Sql("SELECT array('hello', 'I', 'AM', 'a', 'string', 'TO', " + "'TOKENIZE') as input from range(100)"); - + const string inputColumn = "input"; const string outputColumn = "output"; const double minTf = 10.0; const bool binary = false; - + var vocabulary = new List() { "hello", @@ -45,17 +45,17 @@ public void TestCountVectorizerModel() "TO", "TOKENIZE" }; - + var countVectorizerModel = new CountVectorizerModel(vocabulary); - + Assert.IsType(new CountVectorizerModel("my-uid", vocabulary)); - + countVectorizerModel = countVectorizerModel .SetInputCol(inputColumn) .SetOutputCol(outputColumn) .SetMinTF(minTf) .SetBinary(binary); - + Assert.Equal(inputColumn, countVectorizerModel.GetInputCol()); Assert.Equal(outputColumn, countVectorizerModel.GetOutputCol()); Assert.Equal(minTf, countVectorizerModel.GetMinTF()); @@ -64,7 +64,7 @@ public void TestCountVectorizerModel() { string savePath = Path.Join(tempDirectory.Path, "countVectorizerModel"); countVectorizerModel.Save(savePath); - + CountVectorizerModel loadedModel = CountVectorizerModel.Load(savePath); Assert.Equal(countVectorizerModel.Uid(), loadedModel.Uid()); } @@ -75,8 +75,8 @@ public void TestCountVectorizerModel() Assert.IsType(countVectorizerModel.TransformSchema(input.Schema())); Assert.IsType(countVectorizerModel.Transform(input)); - + TestFeatureBase(countVectorizerModel, "minDF", 100); - } + } } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerTests.cs index 5d046dc87..27fba6fef 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/CountVectorizerTests.cs @@ -38,16 +38,16 @@ public void TestCountVectorizer() const double minTf = 10; const int vocabSize = 10000; const bool binary = false; - + var countVectorizer = new CountVectorizer(); - + countVectorizer .SetInputCol(inputColumn) .SetOutputCol(outputColumn) .SetMinDF(minDf) .SetMinTF(minTf) .SetVocabSize(vocabSize); - + Assert.IsType(countVectorizer.Fit(input)); Assert.Equal(inputColumn, countVectorizer.GetInputCol()); Assert.Equal(outputColumn, countVectorizer.GetOutputCol()); @@ -60,17 +60,17 @@ public void TestCountVectorizer() { string savePath = Path.Join(tempDirectory.Path, "countVectorizer"); countVectorizer.Save(savePath); - + CountVectorizer loadedVectorizer = CountVectorizer.Load(savePath); Assert.Equal(countVectorizer.Uid(), loadedVectorizer.Uid()); } - + Assert.NotEmpty(countVectorizer.ExplainParams()); Assert.NotEmpty(countVectorizer.ToString()); - + TestFeatureBase(countVectorizer, "minDF", 0.4); } - + /// /// Test signatures for APIs introduced in Spark 2.4.*. /// diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/FeatureBaseTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/FeatureBaseTests.cs index 0f9be7661..55d443c72 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/FeatureBaseTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/FeatureBaseTests.cs @@ -17,7 +17,7 @@ protected FeatureBaseTests(SparkFixture fixture) { _spark = fixture.Spark; } - + /// /// Tests the common functionality across all ML.Feature classes. /// @@ -25,12 +25,12 @@ protected FeatureBaseTests(SparkFixture fixture) /// The name of a parameter that can be set on this object /// A parameter value that can be set on this object public void TestFeatureBase( - Params testObject, - string paramName, + Params testObject, + string paramName, object paramValue) { Assert.NotEmpty(testObject.ExplainParams()); - + Param param = testObject.GetParam(paramName); Assert.NotEmpty(param.Doc); Assert.NotEmpty(param.Name); diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/HashingTFTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/HashingTFTests.cs index 246b4516e..59784f4b2 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/HashingTFTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/HashingTFTests.cs @@ -28,7 +28,7 @@ public void TestHashingTF() int expectedFeatures = 10; Assert.IsType(new HashingTF()); - + HashingTF hashingTf = new HashingTF("my-unique-id") .SetNumFeatures(expectedFeatures) .SetInputCol(expectedInputCol) @@ -43,21 +43,21 @@ public void TestHashingTF() DataFrame output = hashingTf.Transform(input); DataFrame outputVector = output.Select(expectedOutputCol); - + Assert.Contains(expectedOutputCol, outputVector.Columns()); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "hashingTF"); hashingTf.Save(savePath); - + HashingTF loadedHashingTf = HashingTF.Load(savePath); Assert.Equal(hashingTf.Uid(), loadedHashingTf.Uid()); } hashingTf.SetBinary(true); Assert.True(hashingTf.GetBinary()); - + TestFeatureBase(hashingTf, "numFeatures", 1000); } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFModelTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFModelTests.cs index 1894373a6..36e2750dd 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFModelTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFModelTests.cs @@ -26,14 +26,14 @@ public void TestIDFModel() int expectedDocFrequency = 1980; string expectedInputCol = "rawFeatures"; string expectedOutputCol = "features"; - + DataFrame sentenceData = _spark.Sql("SELECT 0.0 as label, 'Hi I heard about Spark' as sentence"); - + Tokenizer tokenizer = new Tokenizer() .SetInputCol("sentence") .SetOutputCol("words"); - + DataFrame wordsData = tokenizer.Transform(sentenceData); HashingTF hashingTF = new HashingTF() @@ -42,21 +42,21 @@ public void TestIDFModel() .SetNumFeatures(20); DataFrame featurizedData = hashingTF.Transform(wordsData); - + IDF idf = new IDF() .SetInputCol(expectedInputCol) .SetOutputCol(expectedOutputCol) .SetMinDocFreq(expectedDocFrequency); - + IDFModel idfModel = idf.Fit(featurizedData); DataFrame rescaledData = idfModel.Transform(featurizedData); Assert.Contains(expectedOutputCol, rescaledData.Columns()); - + Assert.Equal(expectedInputCol, idfModel.GetInputCol()); Assert.Equal(expectedOutputCol, idfModel.GetOutputCol()); Assert.Equal(expectedDocFrequency, idfModel.GetMinDocFreq()); - + using (var tempDirectory = new TemporaryDirectory()) { string modelPath = Path.Join(tempDirectory.Path, "idfModel"); @@ -65,7 +65,7 @@ public void TestIDFModel() IDFModel loadedModel = IDFModel.Load(modelPath); Assert.Equal(idfModel.Uid(), loadedModel.Uid()); } - + TestFeatureBase(idfModel, "minDocFreq", 1000); } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFTests.cs index 64698ac9a..95f3b3ea9 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/IDFTests.cs @@ -26,25 +26,25 @@ public void TestIDFModel() string expectedInputCol = "rawFeatures"; string expectedOutputCol = "features"; int expectedDocFrequency = 100; - + IDF idf = new IDF() .SetInputCol(expectedInputCol) .SetOutputCol(expectedOutputCol) .SetMinDocFreq(expectedDocFrequency); - + Assert.Equal(expectedInputCol, idf.GetInputCol()); Assert.Equal(expectedOutputCol, idf.GetOutputCol()); Assert.Equal(expectedDocFrequency, idf.GetMinDocFreq()); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "IDF"); idf.Save(savePath); - + IDF loadedIdf = IDF.Load(savePath); Assert.Equal(idf.Uid(), loadedIdf.Uid()); } - + TestFeatureBase(idf, "minDocFreq", 1000); } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineModelTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineModelTests.cs index 7434d0553..1897be37f 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineModelTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineModelTests.cs @@ -5,8 +5,8 @@ using System.IO; using Microsoft.Spark.ML.Feature; using Microsoft.Spark.Sql; -using Microsoft.Spark.UnitTest.TestUtils; using Microsoft.Spark.Sql.Types; +using Microsoft.Spark.UnitTest.TestUtils; using Xunit; namespace Microsoft.Spark.E2ETest.IpcTests.ML.Feature @@ -59,7 +59,7 @@ public void TestPipelineModelTransform() Assert.IsType(pipelineModel.TransformSchema(input.Schema())); Assert.IsType(output); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "pipelineModel"); diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineTests.cs index 3a07335de..7d1092b12 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/PipelineTests.cs @@ -5,8 +5,8 @@ using System.IO; using Microsoft.Spark.ML.Feature; using Microsoft.Spark.Sql; -using Microsoft.Spark.UnitTest.TestUtils; using Microsoft.Spark.Sql.Types; +using Microsoft.Spark.UnitTest.TestUtils; using Xunit; namespace Microsoft.Spark.E2ETest.IpcTests.ML.Feature @@ -37,12 +37,12 @@ public void TestPipeline() Pipeline pipeline = new Pipeline() .SetStages(stages); JavaPipelineStage[] returnStages = pipeline.GetStages(); - + Assert.Equal(stages[0].Uid(), returnStages[0].Uid()); Assert.Equal(stages[0].ToString(), returnStages[0].ToString()); Assert.Equal(stages[1].Uid(), returnStages[1].Uid()); Assert.Equal(stages[1].ToString(), returnStages[1].ToString()); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "pipeline"); @@ -51,7 +51,7 @@ public void TestPipeline() Pipeline loadedPipeline = Pipeline.Load(savePath); Assert.Equal(pipeline.Uid(), loadedPipeline.Uid()); } - + TestFeatureBase(pipeline, "stages", stages); } @@ -70,7 +70,7 @@ public void TestPipelineFit() const double minDf = 1; const double minTf = 10; const int vocabSize = 10000; - + CountVectorizer countVectorizer = new CountVectorizer() .SetInputCol(inputColumn) .SetOutputCol(outputColumn) @@ -84,12 +84,12 @@ public void TestPipelineFit() Pipeline pipeline = new Pipeline().SetStages(stages); PipelineModel pipelineModel = pipeline.Fit(input); - + DataFrame output = pipelineModel.Transform(input); Assert.IsType(pipelineModel.TransformSchema(input.Schema())); Assert.IsType(output); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "pipeline"); @@ -104,7 +104,7 @@ public void TestPipelineFit() Pipeline loadedPipelineWithRead = pipeline.Read().Load(writePath); Assert.Equal(pipeline.Uid(), loadedPipelineWithRead.Uid()); } - + TestFeatureBase(pipeline, "stages", stages); } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/TokenizerTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/TokenizerTests.cs index af76ac523..3e73aeeca 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/TokenizerTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/TokenizerTests.cs @@ -26,31 +26,31 @@ public void TestTokenizer() string expectedUid = "theUid"; string expectedInputCol = "input_col"; string expectedOutputCol = "output_col"; - + DataFrame input = _spark.Sql("SELECT 'hello I AM a string TO, TOKENIZE' as input_col" + " from range(100)"); - + Tokenizer tokenizer = new Tokenizer(expectedUid) .SetInputCol(expectedInputCol) .SetOutputCol(expectedOutputCol); - + DataFrame output = tokenizer.Transform(input); - + Assert.Contains(output.Schema().Fields, (f => f.Name == expectedOutputCol)); Assert.Equal(expectedInputCol, tokenizer.GetInputCol()); Assert.Equal(expectedOutputCol, tokenizer.GetOutputCol()); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "Tokenizer"); tokenizer.Save(savePath); - + Tokenizer loadedTokenizer = Tokenizer.Load(savePath); Assert.Equal(tokenizer.Uid(), loadedTokenizer.Uid()); } - + Assert.Equal(expectedUid, tokenizer.Uid()); - + TestFeatureBase(tokenizer, "inputCol", "input_col"); } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecModelTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecModelTests.cs index 04c7d7a79..4c2ec7706 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecModelTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecModelTests.cs @@ -23,16 +23,16 @@ public Word2VecModelTests(SparkFixture fixture) : base(fixture) [Fact] public void TestWord2VecModel() { - DataFrame documentDataFrame = + DataFrame documentDataFrame = _spark.Sql("SELECT split('Hi I heard about Spark', ' ') as text"); Word2Vec word2vec = new Word2Vec() .SetInputCol("text") .SetOutputCol("result") .SetMinCount(1); - + Word2VecModel model = word2vec.Fit(documentDataFrame); - + const int expectedSynonyms = 2; DataFrame synonyms = model.FindSynonyms("Hi", expectedSynonyms); @@ -47,7 +47,7 @@ public void TestWord2VecModel() Word2VecModel loadedModel = Word2VecModel.Load(savePath); Assert.Equal(model.Uid(), loadedModel.Uid()); } - + TestFeatureBase(model, "maxIter", 2); } } diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecTests.cs index 1c36eb2c2..2b291fefb 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Feature/Word2VecTests.cs @@ -24,7 +24,7 @@ public Word2VecTests(SparkFixture fixture) : base(fixture) public void TestWord2Vec() { DataFrame documentDataFrame = _spark.Sql("SELECT split('Spark dotnet is cool', ' ')"); - + const string expectedInputCol = "text"; const string expectedOutputCol = "result"; const int expectedMinCount = 0; @@ -35,7 +35,7 @@ public void TestWord2Vec() const double expectedStepSize = 1.9; const int expectedVectorSize = 20; const int expectedWindowSize = 200; - + Word2Vec word2vec = new Word2Vec() .SetInputCol(expectedInputCol) .SetOutputCol(expectedOutputCol) @@ -47,7 +47,7 @@ public void TestWord2Vec() .SetStepSize(expectedStepSize) .SetVectorSize(expectedVectorSize) .SetWindowSize(expectedWindowSize); - + Assert.Equal(expectedInputCol, word2vec.GetInputCol()); Assert.Equal(expectedOutputCol, word2vec.GetOutputCol()); Assert.Equal(expectedMinCount, word2vec.GetMinCount()); @@ -58,7 +58,7 @@ public void TestWord2Vec() Assert.Equal(expectedStepSize, word2vec.GetStepSize()); Assert.Equal(expectedVectorSize, word2vec.GetVectorSize()); Assert.Equal(expectedWindowSize, word2vec.GetWindowSize()); - + using (var tempDirectory = new TemporaryDirectory()) { string savePath = Path.Join(tempDirectory.Path, "word2vec"); @@ -67,7 +67,7 @@ public void TestWord2Vec() Word2Vec loadedWord2Vec = Word2Vec.Load(savePath); Assert.Equal(word2vec.Uid(), loadedWord2Vec.Uid()); } - + TestFeatureBase(word2vec, "maxIter", 2); } } From eafeee0642a3295e4b5a5f367c27a783017ab6e1 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:28:31 +0100 Subject: [PATCH 09/21] Code formatting and minor structural improvements Improved code consistency by adjusting spacing, blank lines, and array initializations. Moved assertion checks in PayloadReader.cs for clarity. Grouped case statements in PayloadWriter.cs for better maintainability. No changes to functional logic. --- .../Microsoft.Spark.Worker.UnitTest/PayloadReader.cs | 10 +++++----- .../Microsoft.Spark.Worker.UnitTest/PayloadWriter.cs | 2 +- src/csharp/Microsoft.Spark.Worker.UnitTest/TestData.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadReader.cs b/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadReader.cs index a81eb905c..904000f09 100644 --- a/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadReader.cs +++ b/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadReader.cs @@ -17,7 +17,7 @@ public static List Read(Stream inputStream) bool timingDataReceived = false; bool exceptionThrown = false; var rowsReceived = new List(); - + while (true) { int length = SerDe.ReadInt32(inputStream); @@ -29,7 +29,7 @@ public static List Read(Stream inputStream) var rows = unpickler.loads(pickledBytes) as ArrayList; foreach (object row in rows) { - rowsReceived.Add((object[]) row); + rowsReceived.Add((object[])row); } } else if (length == (int)SpecialLengths.TIMING_DATA) @@ -54,11 +54,11 @@ public static List Read(Stream inputStream) break; } } - + Assert.True(timingDataReceived); Assert.False(exceptionThrown); - + return rowsReceived; } } -} \ No newline at end of file +} diff --git a/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadWriter.cs b/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadWriter.cs index a96d6130b..f269bf85f 100644 --- a/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadWriter.cs +++ b/src/csharp/Microsoft.Spark.Worker.UnitTest/PayloadWriter.cs @@ -343,7 +343,7 @@ internal PayloadWriter Create(Version version = null) new TaskContextWriterV2_4_X(), new BroadcastVariableWriterV2_4_X(), new CommandWriterV2_4_X()); - case Versions.V3_0_0: + case Versions.V3_0_0: case Versions.V3_2_0: return new PayloadWriter( version, diff --git a/src/csharp/Microsoft.Spark.Worker.UnitTest/TestData.cs b/src/csharp/Microsoft.Spark.Worker.UnitTest/TestData.cs index a4e6f49d0..74c0b7856 100644 --- a/src/csharp/Microsoft.Spark.Worker.UnitTest/TestData.cs +++ b/src/csharp/Microsoft.Spark.Worker.UnitTest/TestData.cs @@ -73,7 +73,7 @@ internal static CommandPayload GetDefaultCommandPayload() var command2 = new Command() { - ChainedUdfs = new PicklingWorkerFunction.ExecuteDelegate[] {udfWrapper3.Execute }, + ChainedUdfs = new PicklingWorkerFunction.ExecuteDelegate[] { udfWrapper3.Execute }, ArgOffsets = new[] { 1, 2 }, SerializerMode = CommandSerDe.SerializedMode.Row, DeserializerMode = CommandSerDe.SerializedMode.Row From 57c19c4d67e5793b99ef1baf47c57d5ef1b82b42 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:28:48 +0100 Subject: [PATCH 10/21] Refactor unit tests and add MapType/StructType coverage Refactored ColumnTests.cs for consistent list initialization and formatting in TestIsIn. Removed a redundant blank line in TimestampTests.cs. Added new tests for MapType and StructType in TypesTests.cs to improve test coverage. --- .../Sql/ColumnTests.cs | 40 +++++++++---------- .../Sql/TimestampTests.cs | 2 +- .../Sql/TypesTests.cs | 4 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/csharp/Microsoft.Spark.UnitTest/Sql/ColumnTests.cs b/src/csharp/Microsoft.Spark.UnitTest/Sql/ColumnTests.cs index adffd9312..ba1dcfde7 100644 --- a/src/csharp/Microsoft.Spark.UnitTest/Sql/ColumnTests.cs +++ b/src/csharp/Microsoft.Spark.UnitTest/Sql/ColumnTests.cs @@ -307,30 +307,30 @@ public void TestOver() [Fact] public void TestIsIn() - { + { { - var expected = new List {"vararg_1", "vararg_2"}; - Column column1 = CreateColumn("col1"); - column1.IsIn("vararg_1", "vararg_2"); - + var expected = new List { "vararg_1", "vararg_2" }; + Column column1 = CreateColumn("col1"); + column1.IsIn("vararg_1", "vararg_2"); + VerifyNonStaticCall(column1, "isin", expected); } { Column column1 = CreateColumn("col1"); - var expected = new List(){0, 1, 99}; - column1.IsIn(0, 1, 99); + var expected = new List() { 0, 1, 99 }; + column1.IsIn(0, 1, 99); VerifyNonStaticCall(column1, "isin", expected); } { Column column1 = CreateColumn("col1"); - var expected = new List(){0L, 1L, 99L}; - column1.IsIn(0L, 1L, 99L); + var expected = new List() { 0L, 1L, 99L }; + column1.IsIn(0L, 1L, 99L); VerifyNonStaticCall(column1, "isin", expected); } { Column column1 = CreateColumn("col1"); - var expected = new List(){true, false}; - column1.IsIn(true, false); + var expected = new List() { true, false }; + column1.IsIn(true, false); VerifyNonStaticCall(column1, "isin", expected); } { @@ -339,20 +339,20 @@ public void TestIsIn() short short2 = 2; short short3 = 99; - var expected = new List(){short1, short2, short3}; - column1.IsIn(short1, short2, short3); + var expected = new List() { short1, short2, short3 }; + column1.IsIn(short1, short2, short3); VerifyNonStaticCall(column1, "isin", expected); - } + } { Column column1 = CreateColumn("col1"); - var expected = new List(){0F, 1F, 99F}; - column1.IsIn(0F, 1F, 99F); + var expected = new List() { 0F, 1F, 99F }; + column1.IsIn(0F, 1F, 99F); VerifyNonStaticCall(column1, "isin", expected); } { Column column1 = CreateColumn("col1"); - var expected = new List(){0.0, 1.0, 99.99}; - column1.IsIn(0.0, 1.0, 99.99); + var expected = new List() { 0.0, 1.0, 99.99 }; + column1.IsIn(0.0, 1.0, 99.99); VerifyNonStaticCall(column1, "isin", expected); } { @@ -361,8 +361,8 @@ public void TestIsIn() decimal decimal2 = 2; decimal decimal3 = 3; - var expected = new List(){decimal1, decimal2, decimal3}; - column1.IsIn(decimal1, decimal2, decimal3); + var expected = new List() { decimal1, decimal2, decimal3 }; + column1.IsIn(decimal1, decimal2, decimal3); VerifyNonStaticCall(column1, "isin", expected); } } diff --git a/src/csharp/Microsoft.Spark.UnitTest/Sql/TimestampTests.cs b/src/csharp/Microsoft.Spark.UnitTest/Sql/TimestampTests.cs index 14a766731..c0dbd6271 100644 --- a/src/csharp/Microsoft.Spark.UnitTest/Sql/TimestampTests.cs +++ b/src/csharp/Microsoft.Spark.UnitTest/Sql/TimestampTests.cs @@ -17,7 +17,7 @@ public void TimestampTest() var testDate = new DateTime(2020, 1, 1, 8, 30, 30, DateTimeKind.Utc).AddTicks(1230); var timestamp = new Timestamp(testDate); - + // Validate values. Assert.Equal(2020, timestamp.Year); Assert.Equal(1, timestamp.Month); diff --git a/src/csharp/Microsoft.Spark.UnitTest/Sql/TypesTests.cs b/src/csharp/Microsoft.Spark.UnitTest/Sql/TypesTests.cs index 2eb82fb75..f8d1c2ef4 100644 --- a/src/csharp/Microsoft.Spark.UnitTest/Sql/TypesTests.cs +++ b/src/csharp/Microsoft.Spark.UnitTest/Sql/TypesTests.cs @@ -72,7 +72,7 @@ public void TestArrayTypeFromInternal() Assert.Equal(expected, actual.ToArray()); } } - + [Fact] public void TestMapType() { @@ -119,7 +119,7 @@ public void TestMapTypeFromInternal() Assert.Equal(expected, actual); } } - + [Fact] public void TestStructTypeAndStructFieldTypes() { From b2a3e3f0bfbc0f13aa9e4530df2d1804cce4f364 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:29:00 +0100 Subject: [PATCH 11/21] Add test for JvmCallbackClient and code formatting fixes Added TestJvmCallbackClientProperty to CallbackTests.cs to verify property behavior and exception handling. Improved code formatting and consistency in CallbackTests.cs, TypeConverterTests.cs, and DependencyProviderUtilsTests.cs. Included missing using directives and clarified expectedFiles array in DependencyProviderUtilsTests.cs. --- src/csharp/Microsoft.Spark.UnitTest/CallbackTests.cs | 6 +++--- .../DependencyProviderUtilsTests.cs | 4 ++-- src/csharp/Microsoft.Spark.UnitTest/TypeConverterTests.cs | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/csharp/Microsoft.Spark.UnitTest/CallbackTests.cs b/src/csharp/Microsoft.Spark.UnitTest/CallbackTests.cs index 6150f448b..2e139e1f2 100644 --- a/src/csharp/Microsoft.Spark.UnitTest/CallbackTests.cs +++ b/src/csharp/Microsoft.Spark.UnitTest/CallbackTests.cs @@ -138,15 +138,15 @@ public void TestCallbackHandlers() Assert.Empty(callbackHandler.Inputs); } } - + [Fact] public void TestJvmCallbackClientProperty() { var server = new CallbackServer(_mockJvm.Object, run: false); Assert.Throws(() => server.JvmCallbackClient); - + using ISocketWrapper callbackSocket = SocketFactory.CreateSocket(); - server.Run(callbackSocket); + server.Run(callbackSocket); Assert.NotNull(server.JvmCallbackClient); } diff --git a/src/csharp/Microsoft.Spark.UnitTest/DependencyProviderUtilsTests.cs b/src/csharp/Microsoft.Spark.UnitTest/DependencyProviderUtilsTests.cs index 16cc73759..dc462b879 100644 --- a/src/csharp/Microsoft.Spark.UnitTest/DependencyProviderUtilsTests.cs +++ b/src/csharp/Microsoft.Spark.UnitTest/DependencyProviderUtilsTests.cs @@ -1,5 +1,5 @@ using System; -using System.IO; +using System.IO; using System.Linq; using Microsoft.Spark.UnitTest.TestUtils; using Microsoft.Spark.Utils; @@ -140,7 +140,7 @@ public void TestFileNames() File.Create(filePath).Dispose(); } - var expectedFiles = new string[] + var expectedFiles = new string[] { $"dependencyProviderMetadata_{runId.ToString("N").Substring(0, 8)}00000000001", $"dependencyProviderMetadata_{runId.ToString("N").Substring(0, 8)}00000000010", diff --git a/src/csharp/Microsoft.Spark.UnitTest/TypeConverterTests.cs b/src/csharp/Microsoft.Spark.UnitTest/TypeConverterTests.cs index 34fec9f96..9f754ef09 100644 --- a/src/csharp/Microsoft.Spark.UnitTest/TypeConverterTests.cs +++ b/src/csharp/Microsoft.Spark.UnitTest/TypeConverterTests.cs @@ -136,7 +136,7 @@ public void TestDictionaryDictionary() foreach (KeyValuePair> kvp in expected) { var innerHashtable = new Hashtable(); - foreach(KeyValuePair innerKvp in kvp.Value) + foreach (KeyValuePair innerKvp in kvp.Value) { innerHashtable[innerKvp.Key] = innerKvp.Value; } @@ -180,7 +180,7 @@ public void TestDictionaryAndArray() .Range(0, 10) .Select(i => Enumerable.Range(i, 10).ToDictionary(j => j, j => j * j)) .ToArray(); - + var arrayList = new ArrayList(); for (int i = 0; i < expected.Length; ++i) { From 0573abd945303a0676093f6235d648e162cc1f64 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:29:15 +0100 Subject: [PATCH 12/21] Add SparkSession.Active() test and reorder using directive Reordered the static using directive in DataFrameFunctionsTests.cs for consistency. Added an assertion in SparkSessionTests.cs to verify SparkSession.Active() returns a SparkSession instance. --- .../IpcTests/Sql/DataFrameFunctionsTests.cs | 2 +- .../Microsoft.Spark.E2ETest/IpcTests/Sql/SparkSessionTests.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/DataFrameFunctionsTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/DataFrameFunctionsTests.cs index f982c721d..8f004b4f8 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/DataFrameFunctionsTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/DataFrameFunctionsTests.cs @@ -5,8 +5,8 @@ using System.Collections.Generic; using Microsoft.Spark.E2ETest.Utils; using Microsoft.Spark.Sql; -using static Microsoft.Spark.Sql.Functions; using Xunit; +using static Microsoft.Spark.Sql.Functions; namespace Microsoft.Spark.E2ETest.IpcTests { diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/SparkSessionTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/SparkSessionTests.cs index d34d71aa7..3e2745b2c 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/SparkSessionTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/Sql/SparkSessionTests.cs @@ -65,7 +65,7 @@ public void TestSignaturesV2_4_X() Assert.IsType(_spark.Catalog); Assert.NotNull(_spark.Version()); - + Assert.IsType(SparkSession.Active()); } From 58f87472c49b19c65d47a716694dfa0d65e9f05d Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:29:30 +0100 Subject: [PATCH 13/21] Format cleanup in ParamTests.cs Test() method Removed unnecessary blank lines in the Test() method of ParamTests.cs to improve code readability. No functional changes were made. --- .../Microsoft.Spark.E2ETest/IpcTests/ML/Param/ParamTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Param/ParamTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Param/ParamTests.cs index ecb9166e1..d51cd705c 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Param/ParamTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/ML/Param/ParamTests.cs @@ -24,9 +24,9 @@ public void Test() const string expectedParent = "parent"; const string expectedName = "name"; const string expectedDoc = "doc"; - + var param = new Param(expectedParent, expectedName, expectedDoc); - + Assert.Equal(expectedParent, param.Parent); Assert.Equal(expectedDoc, param.Doc); Assert.Equal(expectedName, param.Name); From 8f848b9f4c498bc1311e88b8094eb2dba010d07b Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:30:00 +0100 Subject: [PATCH 14/21] Reorganize usings and minor formatting cleanup Moved System.Collections.Generic using in JvmObjectUtils.cs to group with other System namespaces for better readability. Made minor formatting adjustments in CommandSerDe.cs else block with no functional changes. --- src/csharp/Microsoft.Spark/Utils/CommandSerDe.cs | 2 +- src/csharp/Microsoft.Spark/Utils/JvmObjectUtils.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/csharp/Microsoft.Spark/Utils/CommandSerDe.cs b/src/csharp/Microsoft.Spark/Utils/CommandSerDe.cs index 51e346671..e17019c21 100644 --- a/src/csharp/Microsoft.Spark/Utils/CommandSerDe.cs +++ b/src/csharp/Microsoft.Spark/Utils/CommandSerDe.cs @@ -253,7 +253,7 @@ internal static object DeserializeArrowOrDataFrameUdf( ref nodeIndex, ref udfIndex); } - else + else { udf = (ArrowWorkerFunction.ExecuteDelegate) DeserializeUdfs( diff --git a/src/csharp/Microsoft.Spark/Utils/JvmObjectUtils.cs b/src/csharp/Microsoft.Spark/Utils/JvmObjectUtils.cs index 8064b746e..3a77e3cc0 100644 --- a/src/csharp/Microsoft.Spark/Utils/JvmObjectUtils.cs +++ b/src/csharp/Microsoft.Spark/Utils/JvmObjectUtils.cs @@ -3,10 +3,10 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using System.Linq; using System.Reflection; using Microsoft.Spark.Interop.Ipc; -using System.Collections.Generic; namespace Microsoft.Spark.Utils { From ecf461887a31f4176e6d41a9b12053d9a01d631e Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:30:17 +0100 Subject: [PATCH 15/21] Set default Spark log level to ERROR in tests Introduce DefaultLogLevel constant in SparkFixture and set SparkContext log level to "ERROR" after SparkSession creation. Also, apply minor formatting improvements in SparkContextTests.cs and SparkConfTests.cs. --- src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkConfTests.cs | 2 +- .../Microsoft.Spark.E2ETest/IpcTests/SparkContextTests.cs | 2 +- src/csharp/Microsoft.Spark.E2ETest/SparkFixture.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkConfTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkConfTests.cs index 7afa7a4c9..5a1682c16 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkConfTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkConfTests.cs @@ -39,7 +39,7 @@ public void TestSparkConf() Assert.Equal(100, sparkConf.GetInt("key_int", 0)); // Validate GetAll(). - Dictionary actualAllConfigs = + Dictionary actualAllConfigs = sparkConf.GetAll().ToDictionary(x => x.Key, x => x.Value); Assert.Equal(expectedConfigs, actualAllConfigs); diff --git a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkContextTests.cs b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkContextTests.cs index 0044c3ec4..59aa01938 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkContextTests.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/IpcTests/SparkContextTests.cs @@ -51,7 +51,7 @@ public void TestSignaturesV2_4_X() Assert.IsType(sc.GetCheckpointDir()); Assert.IsType(sc.HadoopConfiguration()); - + Assert.NotNull(sc.Version()); } diff --git a/src/csharp/Microsoft.Spark.E2ETest/SparkFixture.cs b/src/csharp/Microsoft.Spark.E2ETest/SparkFixture.cs index 904c448a7..8db9988af 100644 --- a/src/csharp/Microsoft.Spark.E2ETest/SparkFixture.cs +++ b/src/csharp/Microsoft.Spark.E2ETest/SparkFixture.cs @@ -52,7 +52,7 @@ public class EnvironmentVariableNames private readonly TemporaryDirectory _tempDirectory = new TemporaryDirectory(); private const string DefaultRepository = "https://repos.spark-packages.org/"; - + public const string DefaultLogLevel = "ERROR"; internal SparkSession Spark { get; } @@ -121,7 +121,7 @@ public SparkFixture() .Config("spark.ui.showConsoleProgress", false) .AppName("Microsoft.Spark.E2ETest") .GetOrCreate(); - + Spark.SparkContext.SetLogLevel(DefaultLogLevel); Jvm = Spark.Reference.Jvm; From 9fc8bfb5f16619a2404f368669695582dc322c52 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:30:35 +0100 Subject: [PATCH 16/21] Reorder using directives for clarity and style Rearranged the using statements in SparkSessionExtensions.cs to improve readability and maintain consistent formatting. No functional changes were introduced. --- .../Microsoft.Spark/Experimental/Sql/SparkSessionExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csharp/Microsoft.Spark/Experimental/Sql/SparkSessionExtensions.cs b/src/csharp/Microsoft.Spark/Experimental/Sql/SparkSessionExtensions.cs index 278d54e66..ea1076b51 100644 --- a/src/csharp/Microsoft.Spark/Experimental/Sql/SparkSessionExtensions.cs +++ b/src/csharp/Microsoft.Spark/Experimental/Sql/SparkSessionExtensions.cs @@ -6,8 +6,8 @@ using System.Linq; using Microsoft.Spark.Sql; using Microsoft.Spark.Sql.Types; -using static Microsoft.Spark.Utils.AssemblyInfoProvider; using static Microsoft.Spark.Sql.Functions; +using static Microsoft.Spark.Utils.AssemblyInfoProvider; namespace Microsoft.Spark.Experimental.Sql { From 574b09a02bc7bbd6ac4f0b2635fcfcd91ec6e013 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:30:48 +0100 Subject: [PATCH 17/21] Add XML docs, refactor if, and add JVM callback client Added XML documentation to HashMap.cs for key lookup method. Refactored if-statement formatting in CallbackConnection.cs for clarity. Introduced _jvmCallbackClient field and JvmCallbackClient property in CallbackServer.cs to manage JVM callback client reference. --- .../Microsoft.Spark/Interop/Internal/Java/Util/HashMap.cs | 2 +- src/csharp/Microsoft.Spark/Interop/Ipc/CallbackConnection.cs | 3 ++- src/csharp/Microsoft.Spark/Interop/Ipc/CallbackServer.cs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/csharp/Microsoft.Spark/Interop/Internal/Java/Util/HashMap.cs b/src/csharp/Microsoft.Spark/Interop/Internal/Java/Util/HashMap.cs index fb992d2be..77ab8e435 100644 --- a/src/csharp/Microsoft.Spark/Interop/Internal/Java/Util/HashMap.cs +++ b/src/csharp/Microsoft.Spark/Interop/Internal/Java/Util/HashMap.cs @@ -28,7 +28,7 @@ internal HashMap(IJvmBridge jvm) => /// value to be associated with the specified key internal void Put(object key, object value) => Reference.Invoke("put", key, value); - + /// /// Returns the value to which the specified key is mapped, /// or null if this map contains no mapping for the key. diff --git a/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackConnection.cs b/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackConnection.cs index 1ad652c07..b892e317e 100644 --- a/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackConnection.cs +++ b/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackConnection.cs @@ -173,7 +173,8 @@ private ConnectionStatus ProcessStream( // - CallbackFlags.CLOSE // - CallbackFlags.CALLBACK int requestFlag = BinaryPrimitives.ReadInt32BigEndian(requestFlagBytes); - if (requestFlag == (int)CallbackFlags.CLOSE) { + if (requestFlag == (int)CallbackFlags.CLOSE) + { return ConnectionStatus.REQUEST_CLOSE; } else if (requestFlag != (int)CallbackFlags.CALLBACK) diff --git a/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackServer.cs b/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackServer.cs index d86fd7305..b8241710b 100644 --- a/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackServer.cs +++ b/src/csharp/Microsoft.Spark/Interop/Ipc/CallbackServer.cs @@ -64,7 +64,7 @@ internal sealed class CallbackServer private bool _isRunning = false; private ISocketWrapper _listener; - + private JvmObjectReference _jvmCallbackClient; internal int CurrentNumConnections => _connections.Count; From 069232f8a26abdc49b1ff3ff0300cc2cfb198d39 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:31:00 +0100 Subject: [PATCH 18/21] Reorder using directives in ConfigurationService.cs Moved 'using static System.Environment' below other using statements for improved code organization. No functional changes were made. --- src/csharp/Microsoft.Spark/Services/ConfigurationService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csharp/Microsoft.Spark/Services/ConfigurationService.cs b/src/csharp/Microsoft.Spark/Services/ConfigurationService.cs index 505868fa6..25037cb55 100644 --- a/src/csharp/Microsoft.Spark/Services/ConfigurationService.cs +++ b/src/csharp/Microsoft.Spark/Services/ConfigurationService.cs @@ -5,8 +5,8 @@ using System; using System.IO; using System.Runtime.InteropServices; -using static System.Environment; using Microsoft.Spark.Utils; +using static System.Environment; namespace Microsoft.Spark.Services { From 4dd3d5e96f349d66c878782401251c0a82b37fa5 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:31:13 +0100 Subject: [PATCH 19/21] Add XML docs to Param class for improved clarity Added XML documentation comments to constructors and properties in the Param class within Microsoft.Spark.ML.Feature.Param. These changes enhance code readability and maintainability without affecting functionality. --- src/csharp/Microsoft.Spark/ML/Param/Param.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/csharp/Microsoft.Spark/ML/Param/Param.cs b/src/csharp/Microsoft.Spark/ML/Param/Param.cs index 3a9bf252b..256dac066 100644 --- a/src/csharp/Microsoft.Spark/ML/Param/Param.cs +++ b/src/csharp/Microsoft.Spark/ML/Param/Param.cs @@ -19,7 +19,7 @@ namespace Microsoft.Spark.ML.Feature.Param /// public class Param : IJvmObjectReferenceProvider { - private static readonly string s_ParamClassName = + private static readonly string s_ParamClassName = "org.apache.spark.ml.param.Param"; /// @@ -35,7 +35,7 @@ public Param(Identifiable parent, string name, string doc) s_ParamClassName, parent.Uid(), name, doc)) { } - + /// /// Creates a new instance of a which will be attached to the parent /// with the UID specified. The most likely use case for a is being @@ -61,7 +61,7 @@ public Param(string parent, string name, string doc) /// /// A description of how the works public string Doc => (string)Reference.Invoke("doc"); - + /// /// The name of the /// From f25a8ed8a8d4d265623ba7ef58081a0934f9b633 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:31:25 +0100 Subject: [PATCH 20/21] Minor formatting cleanup in Broadcast.cs and JvmException.cs Removed unnecessary whitespace after assignment operators and constructor definitions. No changes to functionality or logic. --- src/csharp/Microsoft.Spark/Broadcast.cs | 2 +- src/csharp/Microsoft.Spark/JvmException.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/csharp/Microsoft.Spark/Broadcast.cs b/src/csharp/Microsoft.Spark/Broadcast.cs index 501833d28..981a85f78 100644 --- a/src/csharp/Microsoft.Spark/Broadcast.cs +++ b/src/csharp/Microsoft.Spark/Broadcast.cs @@ -290,7 +290,7 @@ internal static void Remove(long bid) /// internal static class JvmBroadcastRegistry { - private static ThreadLocal> s_jvmBroadcastVariables = + private static ThreadLocal> s_jvmBroadcastVariables = new ThreadLocal>(() => new List()); /// diff --git a/src/csharp/Microsoft.Spark/JvmException.cs b/src/csharp/Microsoft.Spark/JvmException.cs index 75e3aec42..6951b0d0d 100644 --- a/src/csharp/Microsoft.Spark/JvmException.cs +++ b/src/csharp/Microsoft.Spark/JvmException.cs @@ -11,7 +11,7 @@ namespace Microsoft.Spark /// public class JvmException : Exception { - public JvmException(string message) + public JvmException(string message) : base(message) { } From 66c53bf5b6f794db57bd322f5c7426a4c2e74e81 Mon Sep 17 00:00:00 2001 From: Ifeanyi Shadrach Odom Date: Mon, 3 Aug 2026 09:31:35 +0100 Subject: [PATCH 21/21] Simulate multiple assemblies in package resolver test Update PackageResolverTests to use an assemblyPaths array with two DLLs, improving test coverage for packages containing multiple assemblies. --- .../PackageResolverTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/csharp/Extensions/Microsoft.Spark.Extensions.DotNet.Interactive.UnitTest/PackageResolverTests.cs b/src/csharp/Extensions/Microsoft.Spark.Extensions.DotNet.Interactive.UnitTest/PackageResolverTests.cs index 08eb802d9..9b951c0d7 100644 --- a/src/csharp/Extensions/Microsoft.Spark.Extensions.DotNet.Interactive.UnitTest/PackageResolverTests.cs +++ b/src/csharp/Extensions/Microsoft.Spark.Extensions.DotNet.Interactive.UnitTest/PackageResolverTests.cs @@ -33,7 +33,7 @@ public void TestPackageResolver() using (File.Create(nugetFile.FullName)) { } - + var assemblyPaths = new string[] { Path.Combine(packageFrameworkPath, "1.dll"), @@ -51,7 +51,7 @@ public void TestPackageResolver() packageVersion, assemblyPaths, packageRootPath, - probingPaths) + probingPaths) }); var packageResolver = new PackageResolver(mockSupportNugetWrapper.Object);