Skip to content

style: idiomatic cleanups in demo app and tooling projects - #419

Closed
twcclegg wants to merge 2 commits into
mainfrom
style/demo-and-tools
Closed

twcclegg wants to merge 2 commits into
mainfrom
style/demo-and-tools

Conversation

@twcclegg

Copy link
Copy Markdown
Owner

Summary

Part of the ongoing idiomatic-C# cleanup sweep (see #409, #412, #413). Scope: PhoneNumbers.Demo, PhoneNumbers.Demo.Tests, PhoneNumbers.MetadataBuilder, PhoneNumbers.Fuzz, PhoneNumbers.PerformanceTest.

  • PhoneNumbers.PerformanceTest/** (Program.cs + all 8 Benchmarks/*.cs) and PhoneNumbers.Fuzz/Program.cs: converted from block-scoped to file-scoped namespaces, matching the convention already used elsewhere in the repo (PhoneNumbers.Demo, PhoneNumbers.MetadataBuilder, PhoneNumbers.Extensions) and enabled by LangVersion latest. Purely mechanical — no logic touched, benchmark [Benchmark]/[Params] attributes and method signatures untouched.
  • PhoneNumbers.Demo, PhoneNumbers.Demo.Tests, PhoneNumbers.MetadataBuilder/Program.cs: read through, already idiomatic (file-scoped namespaces, modern patterns) — no changes made.

Test plan

  • dotnet build csharp/PhoneNumbers.slnx — clean, 0 warnings
  • dotnet build csharp/PhoneNumbers.Demo — clean, 0 warnings
  • dotnet build csharp/PhoneNumbers.PerformanceTest — clean, 0 warnings
  • dotnet build csharp/PhoneNumbers.Fuzz — clean, 0 warnings
  • dotnet test csharp/PhoneNumbers.Demo.Tests — 67/67 passing

Matches the convention already used elsewhere in the repo (Demo,
MetadataBuilder, Extensions) and enabled by LangVersion latest.
@codecov

codecov Bot commented Aug 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.42%. Comparing base (e75ae83) to head (a43e465).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #419   +/-   ##
=======================================
  Coverage   87.42%   87.42%           
=======================================
  Files          41       41           
  Lines        3856     3856           
  Branches      990      990           
=======================================
  Hits         3371     3371           
  Misses        283      283           
  Partials      202      202           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions

Copy link
Copy Markdown

📊 Benchmark Results

Commit: 9dab406 · Full run · Linux ubuntu-24.04-arm

Both sides were measured on the same runner in the same job, so the numbers are
comparable. Treat sub-percent differences as noise.

PR branch

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
InputDigitPerKeystroke 1000 4.796 ms 0.0827 ms 0.0773 ms 54.6875 3.88 MB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]     : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  Job-AMQORM : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Runtime=.NET 10.0  InvocationCount=1  IterationCount=20  
LaunchCount=1  RunStrategy=ColdStart  UnrollFactor=1  
WarmupCount=1  

Method Mean Error StdDev Allocated
CreateInstance 403.0 μs 123.4 μs 142.2 μs 119.48 KB
CreateInstanceAndLoadAllRegions 7,152.3 μs 438.8 μs 505.3 μs 1620.34 KB
FirstRegionLookup 456.3 μs 157.1 μs 180.9 μs 124.54 KB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
ExtractPossibleNumber_CleanInput 1000 21.64 μs 0.019 μs 0.018 μs - -
ExtractPossibleNumber_WithLeadingJunk 1000 38.19 μs 0.042 μs 0.035 μs 0.6714 48360 B

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
FindNumbers_Valid 100 142.2 μs 0.35 μs 0.32 μs 0.9766 70.71 KB
FindNumbers_StrictGrouping 100 321.7 μs 0.69 μs 0.64 μs 1.4648 124.84 KB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
GetDescriptionForNumber 1000 1,392.51 μs 2.875 μs 2.401 μs 1.9531 196.59 KB
GetDisplayCountry 1000 18.60 μs 0.027 μs 0.024 μs 0.0916 7.56 KB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
ParseValidateAndFormatPhoneNumbers 1000 2,573.0 μs 13.63 μs 10.64 μs 7.8125 577.71 KB
ParseOnly 1000 437.9 μs 0.67 μs 0.60 μs 4.8828 348.13 KB
ParseNationalFormat 1000 772.5 μs 1.29 μs 1.08 μs 5.8594 431.36 KB
ParseWithExtension 1000 1,109.2 μs 1.24 μs 1.16 μs 13.6719 957.38 KB
ValidateOnly 1000 736.3 μs 2.04 μs 1.71 μs - 41.11 KB
FormatOnly 1000 1,073.6 μs 3.22 μs 2.86 μs 1.9531 187.92 KB
PR base

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
InputDigitPerKeystroke 1000 4.487 ms 0.0763 ms 0.0713 ms 54.6875 3.88 MB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]     : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  Job-AMQORM : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Runtime=.NET 10.0  InvocationCount=1  IterationCount=20  
LaunchCount=1  RunStrategy=ColdStart  UnrollFactor=1  
WarmupCount=1  

Method Mean Error StdDev Allocated
CreateInstance 392.2 μs 113.8 μs 131.1 μs 119.48 KB
CreateInstanceAndLoadAllRegions 7,079.1 μs 381.0 μs 438.8 μs 1620.34 KB
FirstRegionLookup 474.6 μs 156.2 μs 179.9 μs 124.54 KB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
ExtractPossibleNumber_CleanInput 1000 21.61 μs 0.021 μs 0.020 μs - -
ExtractPossibleNumber_WithLeadingJunk 1000 38.17 μs 0.064 μs 0.057 μs 0.6714 48360 B

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
FindNumbers_Valid 100 144.1 μs 0.24 μs 0.21 μs 0.9766 70.71 KB
FindNumbers_StrictGrouping 100 318.8 μs 0.86 μs 0.80 μs 1.4648 124.84 KB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
GetDescriptionForNumber 1000 1,398.17 μs 4.785 μs 4.476 μs 1.9531 196.59 KB
GetDisplayCountry 1000 18.49 μs 0.022 μs 0.020 μs 0.0916 7.56 KB

BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.4 LTS (Noble Numbat)
Neoverse-N2, 4 physical cores
.NET SDK 10.0.400
  [Host]    : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a
  .NET 10.0 : .NET 10.0.11 (10.0.11, 10.0.1126.37416), Arm64 RyuJIT armv8.0-a

Job=.NET 10.0  Runtime=.NET 10.0  

Method PhoneNumberCount Mean Error StdDev Gen0 Allocated
ParseValidateAndFormatPhoneNumbers 1000 2,539.8 μs 26.82 μs 25.09 μs 7.8125 577.71 KB
ParseOnly 1000 435.7 μs 0.68 μs 0.63 μs 4.8828 348.13 KB
ParseNationalFormat 1000 764.7 μs 1.71 μs 1.60 μs 5.8594 431.36 KB
ParseWithExtension 1000 1,107.8 μs 1.80 μs 1.68 μs 13.6719 957.38 KB
ValidateOnly 1000 736.7 μs 2.49 μs 2.33 μs - 41.11 KB
FormatOnly 1000 1,082.3 μs 1.88 μs 1.67 μs 1.9531 187.92 KB

@twcclegg twcclegg closed this Aug 26, 2026
@twcclegg
twcclegg deleted the style/demo-and-tools branch August 26, 2026 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant