From 351e50da8254346723c24c2c90189638000119bf Mon Sep 17 00:00:00 2001 From: sator-imaging <16752340+sator-imaging@users.noreply.github.com> Date: Sun, 1 Mar 2026 14:02:06 +0900 Subject: [PATCH 1/2] Prefer array over list --- cli/Program.cs | 2 +- directives/FUnitSourceGenerator.cs | 3 +-- src/FUnit.TestSuite.cs | 4 ++-- src/FUnit.cs | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cli/Program.cs b/cli/Program.cs index 7f377a3..8726a48 100644 --- a/cli/Program.cs +++ b/cli/Program.cs @@ -94,7 +94,7 @@ FUnit Test Runner { matcher.AddIncludePatterns(fileGlobs); } -var csFiles = matcher.GetResultsInFullPath(currentDirectory).Where(File.Exists).ToList(); +var csFiles = matcher.GetResultsInFullPath(currentDirectory).Where(File.Exists).ToArray(); List validFUnitFiles = []; diff --git a/directives/FUnitSourceGenerator.cs b/directives/FUnitSourceGenerator.cs index aab5702..97dbbba 100644 --- a/directives/FUnitSourceGenerator.cs +++ b/directives/FUnitSourceGenerator.cs @@ -59,8 +59,7 @@ public void Execute(GeneratorExecutionContext context) var root = syntaxTree.GetCompilationUnitRoot(); var directives = root .DescendantTrivia() - .Where(t => t.IsKind(SyntaxKind.WarningDirectiveTrivia)) - .ToList(); // ToList is better than ToImmutableList in this case + .Where(t => t.IsKind(SyntaxKind.WarningDirectiveTrivia)); foreach (var trivia in directives) { diff --git a/src/FUnit.TestSuite.cs b/src/FUnit.TestSuite.cs index b778137..b4d9117 100644 --- a/src/FUnit.TestSuite.cs +++ b/src/FUnit.TestSuite.cs @@ -53,7 +53,7 @@ public sealed class TestSuite /// Gets a read-only dictionary where the key is the test subject and the value is a list of test case descriptions. /// public IReadOnlyDictionary> TestsBySubject => - this.cache_TestsBySubject ??= this._testCasesBySubject.ToDictionary(k => k.Key, v => v.Value.Select(x => x.Description).ToList() as IReadOnlyList); + this.cache_TestsBySubject ??= this._testCasesBySubject.ToDictionary(k => k.Key, v => v.Value.Select(x => x.Description).ToArray() as IReadOnlyList); private Dictionary>? cache_TestsBySubject; internal TestSuite(Action builder) @@ -324,7 +324,7 @@ internal async Task ExecuteCoreAsync( return new TestResult.Error(msg, e.StackTrace, IsFUnitSystemError: false, IsAssertionFailure: e is FUnitException); }) - .ToList(); + .ToArray(); } tests.Add(new(tc.Description, tc.ExecutionCount, errors)); diff --git a/src/FUnit.cs b/src/FUnit.cs index cf751a9..96eb94e 100644 --- a/src/FUnit.cs +++ b/src/FUnit.cs @@ -91,11 +91,11 @@ public static async Task RunAsync(string[] args, Action builder var failedTestCases = Result.TestsBySubject .SelectMany(x => x.Value.Select(test => (subject: x.Key, test))) .Where(x => x.test.Errors?.Count is > 0) - .ToList(); + .ToArray(); var skippedTestCases = Result.TestsBySubject .SelectMany(x => x.Value) .Where(x => x.ExecutionCount == 0) - .ToList(); + .ToArray(); // NOTE: remove system errors from result var totalTestCaseCount = Result.TestsBySubject.Sum(x => x.Value.Count(y => y.Errors?.All(error => error.IsFUnitSystemError) != true)); From 96a3d62e9c4f425f32044a2373d3b8b0163d5de8 Mon Sep 17 00:00:00 2001 From: sator-imaging <16752340+sator-imaging@users.noreply.github.com> Date: Sun, 1 Mar 2026 05:14:50 +0000 Subject: [PATCH 2/2] fix --- src/FUnit.TestSuite.cs | 4 ++-- src/FUnit.cs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/FUnit.TestSuite.cs b/src/FUnit.TestSuite.cs index b4d9117..cd080c6 100644 --- a/src/FUnit.TestSuite.cs +++ b/src/FUnit.TestSuite.cs @@ -278,7 +278,7 @@ internal async Task ExecuteCoreAsync( foreach (var (description, error) in this._buildErrors) { errors.Add( - new(description, 1, new List() + new(description, 1, new TestResult.Error[] { new(error.Message, error.StackTrace, IsFUnitSystemError: true, IsAssertionFailure: false), })); @@ -297,7 +297,7 @@ internal async Task ExecuteCoreAsync( foreach (var tc in testCases) { - List? errors = null; + TestResult.Error[]? errors = null; var failedCases = failedTestCases.Where(x => x.subject == tc.Subject && x.description == tc.Description); if (failedCases.Any()) diff --git a/src/FUnit.cs b/src/FUnit.cs index 96eb94e..b6f8a01 100644 --- a/src/FUnit.cs +++ b/src/FUnit.cs @@ -105,22 +105,22 @@ public static async Task RunAsync(string[] args, Action builder ConsoleLogger.LogInfo("## Test Summary"); ConsoleLogger.LogInfo($"Options: {Result.Options} "); ConsoleLogger.LogInfo($"Duration: {Result.TotalExecutionTime.ToString(TimeSpanFormat)} "); - if (skippedTestCases.Count > 0) + if (skippedTestCases.Length > 0) { - ConsoleLogger.LogFailed($"{SR.MarkdownFailed} Total {skippedTestCases.Count} tests canceled"); + ConsoleLogger.LogFailed($"{SR.MarkdownFailed} Total {skippedTestCases.Length} tests canceled"); - return ~(failedTestCases.Count); // ok: bash treats -1 as 255 (byte) + return ~(failedTestCases.Length); // ok: bash treats -1 as 255 (byte) } else { - if (failedTestCases.Count == 0) + if (failedTestCases.Length == 0) { ConsoleLogger.LogPassed($"{SR.MarkdownPassed} All Tests Passed: {totalTestCaseCount}"); } else { var failedCount = failedTestCases.Count(x => x.test.Errors?.Any(y => y.IsAssertionFailure) ?? false); - var erroredCount = failedTestCases.Count - failedCount; + var erroredCount = failedTestCases.Length - failedCount; ConsoleLogger.LogPassed($"Passed: {totalTestCaseCount - failedTestCaseCountWithoutSystemErrors} ({totalTestCaseCount}) "); ConsoleLogger.LogFailed($"Failed: {failedCount} "); if (erroredCount > 0) @@ -157,7 +157,7 @@ public static async Task RunAsync(string[] args, Action builder } } - return failedTestCases.Count; + return failedTestCases.Length; } } }