1.47.0
What's Changed
Other Changes
- perf(engine): hoist GetParameters and dict-dedup AfterTestDiscovery hooks by @thomhurst in #6062
- perf(engine): hoist GetParameters and drop LINQ in reflection discovery by @thomhurst in #6063
- perf(engine): cache treenode filter path on TestMetadata by @thomhurst in #6064
- perf: use is T pattern in ReflectionExtensions.HasAttribute fallback (#6060) by @thomhurst in #6066
- perf: replace OrderBy().ToArray() with Array.Sort in ConstraintKeyScheduler by @thomhurst in #6067
- perf: pool HashSet in WaitingTestIndex.GetCandidatesForReleasedKeys by @thomhurst in #6069
- perf: collapse OfType chains in JUnitXmlWriter (#6052) by @thomhurst in #6070
- perf(engine): avoid closure allocation in AfterHookPairTracker.GetOrCreateAfterAssemblyTask (#6041) by @thomhurst in #6071
- perf: avoid closure allocation in BeforeHookTaskCache.GetOrCreateBeforeAssemblyTask (#6040) by @thomhurst in #6073
- perf: use TryAdd in TestDependencyResolver dependency dedupe by @thomhurst in #6068
- perf: replace LINQ Any with foreach in TestGenericTypeResolver (#6044) by @thomhurst in #6072
- perf: avoid Cast().FirstOrDefault() iterator alloc in CastHelper (#6029) by @thomhurst in #6074
- perf(engine): avoid string round-trip when building nested type names (#6049) by @thomhurst in #6075
- perf(engine): replace Select+ToArray with manual Type[] build (#6043) by @thomhurst in #6076
- perf(core): replace OfType().FirstOrDefault()/.Any() with foreach in ClassConstructorHelper by @thomhurst in #6078
- perf(engine): avoid FirstOrDefault iterator alloc in TestGenericTypeResolver by @thomhurst in #6079
- perf(engine): use SearchValues for reporter filename sanitization by @thomhurst in #6090
- perf: dedupe TestDataFormatter.FormatArguments with pooled StringBuilder by @thomhurst in #6088
- perf(engine): use MemoryExtensions.Split for path parsing in MetadataFilterMatcher by @thomhurst in #6085
- perf(engine): use CollectionsMarshal.GetValueRefOrAddDefault for dictionary index builds by @thomhurst in #6086
- perf(engine): replace LINQ Where closure with inline filter in MetadataDependencyExpander BFS by @thomhurst in #6084
- perf(engine): pool StringBuilder in DisplayNameBuilder.FormatArguments by @thomhurst in #6082
- Preserve specialized chaining after null assertions by @thomhurst in #6008
- perf: use EnumerateLines for line splitting in HtmlReportGenerator by @thomhurst in #6089
- perf: collapse Replace chain in TestNameFormatter.BuildTestId by @thomhurst in #6083
- perf: use OrdinalIgnoreCase Contains in HtmlReportGenerator span mapping by @thomhurst in #6093
- perf(assertions): avoid eager interpolated-string alloc in assertion source ctors by @thomhurst in #6091
- perf: optimize TestNameFormatter argument and bool formatting by @thomhurst in #6095
- perf: use FrozenSet/FrozenDictionary for read-only static lookups by @thomhurst in #6099
- perf: avoid GetCustomAttributes() + LINQ chain for per-property attribute scans by @thomhurst in #6098
- perf(engine): replace magic-string RequiredAttribute match with type check in ConstructorHelper by @thomhurst in #6087
- perf(core): replace Select+Func factory chain in DataSourceHelpers by @thomhurst in #6081
- perf: replace LINQ dependency extraction with manual loop by @thomhurst in #6096
- perf(core): avoid string[] alloc in ArgumentFormatter.FormatArguments by @thomhurst in #6080
- perf: use [GeneratedRegex] in MetadataFilterMatcher by @thomhurst in #6094
- perf: dedupe GetSimpleTypeName into shared TypeNameFormatter by @thomhurst in #6097
- fix: remove GitVersion MSBuild task, pin local builds to 99.99.99 (#6077) by @thomhurst in #6101
- HTML Report: source link + code snippet on Source tab (#5993) by @thomhurst in #6100
- perf(sourcegen): Single-pass attribute classification by @thomhurst in #6111
- perf(core): eliminate per-test allocations in TestDetails/HookMethod by @thomhurst in #6109
- perf: hoist char[] alloc in FsCheckPropertyTestExecutor to static SearchValues by @thomhurst in #6108
- perf(core): de-LINQ data-source expansion by @thomhurst in #6110
- perf: avoid LINQ chains in TestDependency equality and MethodDataSourceAttribute method matching by @thomhurst in #6092
- perf(engine): reduce allocations in reflection-mode discovery/execution by @thomhurst in #6113
- perf(assertions): allocation-free passing path (TUnit.Assertions) by @thomhurst in #6112
- chore(deps): update tunit to 1.46.0 by @thomhurst in #6065
Dependencies
Full Changelog: v1.46.0...v1.47.0