generated from codebeltnet/dotnet-new-classlib
-
Notifications
You must be signed in to change notification settings - Fork 0
V10.0.1/service update #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
9 commits
Select commit
Hold shift + click to select a range
9ef8464
✨ add guidelines for ai
gimlichael d39d947
🔥 remove redudant markdown file
gimlichael 5a22816
🗂️ replace .sln with .slnx for modern solution structure
gimlichael d475d33
⬆️ bump dependencies
gimlichael b93b033
👷 updated ci to include codeql again
gimlichael 7883c8b
📦️ updated NuGet package definition
gimlichael 64d8d17
💬 updated community health pages
gimlichael 1bc87cb
🚚 move PackageReleaseNotesFile property to props file
gimlichael 73d703b
📝 update copyright year in LICENSE file to 2026
gimlichael File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,164 @@ | ||
| --- | ||
| mode: agent | ||
| description: 'Writing Performance Benchmarks' | ||
| --- | ||
|
|
||
| # Benchmark Fixture Prompt (Tuning Benchmarks) | ||
|
|
||
| This prompt defines how to generate performance tests (“benchmarks”) for a project/solution using BenchmarkDotNet. | ||
| Benchmarks are *not* unit tests — they are micro- or component-level performance measurements that belong under the `tuning/` directory and follow strict conventions. | ||
|
|
||
| Copilot must follow these guidelines when generating benchmark fixtures. | ||
|
|
||
| --- | ||
|
|
||
| ## 1. Naming and Placement | ||
|
|
||
| - All benchmark projects live under the `tuning/` folder. | ||
| Examples: | ||
| - `tuning/<ProjectName>.Benchmarks/` | ||
| - `tuning/<ProjectName>.Console.Benchmarks/` | ||
|
|
||
| - **Namespaces must NOT end with `.Benchmarks`.** | ||
| They must mirror the production assembly’s namespace. | ||
|
|
||
| Example: | ||
| If benchmarking a type inside `YourProject.Console`, then: | ||
|
|
||
| ```csharp | ||
| namespace YourProject.Console | ||
| { | ||
| public class Sha512256Benchmark { … } | ||
| } | ||
| ``` | ||
|
|
||
| * **Benchmark class names must end with `Benchmark`.** | ||
| Example: `DateSpanBenchmark`, `FowlerNollVoBenchmark`. | ||
|
|
||
| * Benchmark files should be located in the matching benchmark project | ||
| (e.g., benchmarks for `YourProject.Console` go in `YourProject.Console.Benchmarks.csproj`). | ||
|
|
||
| * In the `.csproj` for each benchmark project, set the root namespace to the production namespace, for example: | ||
|
|
||
| ```xml | ||
| <RootNamespace>YourProject.Console</RootNamespace> | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## 2. Attributes and Configuration | ||
|
|
||
| Each benchmark class should use: | ||
|
|
||
| ```csharp | ||
| [MemoryDiagnoser] | ||
| [GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)] | ||
| ``` | ||
|
|
||
| Optional but strongly recommended where meaningful: | ||
|
|
||
| * `[Params(...)]` — define small, medium, large input sizes. | ||
| * `[GlobalSetup]` — deterministic initialization of benchmark data. | ||
| * `[Benchmark(Description = "...")]` — always add descriptions. | ||
| * `[Benchmark(Baseline = true)]` — when comparing two implementations. | ||
|
|
||
| Avoid complex global configs; prefer explicit attributes inside the class. | ||
|
|
||
| --- | ||
|
|
||
| ## 3. Structure and Best Practices | ||
|
|
||
| A benchmark fixture must: | ||
|
|
||
| * Measure a **single logical operation** per benchmark method. | ||
| * Avoid I/O, networking, disk access, logging, or side effects. | ||
| * Avoid expensive setup inside `[Benchmark]` methods. | ||
| * Use deterministic data (e.g., seeded RNG or predefined constants). | ||
| * Use `[GlobalSetup]` to allocate buffers, random payloads, or reusable test data only once. | ||
| * Avoid shared mutable state unless reset per iteration. | ||
|
|
||
| Use representative input sizes such as: | ||
|
|
||
| ```csharp | ||
| [Params(8, 256, 4096)] | ||
| public int Count { get; set; } | ||
| ``` | ||
|
|
||
| BenchmarkDotNet will run each benchmark for each parameter value. | ||
|
|
||
| --- | ||
|
|
||
| ## 4. Method Naming Conventions | ||
|
|
||
| Use descriptive names that communicate intent: | ||
|
|
||
| * `Parse_Short` | ||
| * `Parse_Long` | ||
| * `ComputeHash_Small` | ||
| * `ComputeHash_Large` | ||
| * `Serialize_Optimized` | ||
| * `Serialize_Baseline` | ||
|
|
||
| When comparing approaches, always list them clearly and tag one as the baseline. | ||
|
|
||
| --- | ||
|
|
||
| ## 5. Example Benchmark Fixture | ||
|
|
||
| ```csharp | ||
| using BenchmarkDotNet.Attributes; | ||
| using BenchmarkDotNet.Configs; | ||
|
|
||
| namespace YourProject | ||
| { | ||
| [MemoryDiagnoser] | ||
| [GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)] | ||
| public class SampleOperationBenchmark | ||
| { | ||
| [Params(8, 256, 4096)] | ||
| public int Count { get; set; } | ||
|
|
||
| private byte[] _payload; | ||
|
|
||
| [GlobalSetup] | ||
| public void Setup() | ||
| { | ||
| _payload = new byte[Count]; | ||
| // deterministic initialization | ||
| } | ||
|
|
||
| [Benchmark(Baseline = true, Description = "Operation - baseline")] | ||
| public int Operation_Baseline() => SampleOperation.Process(_payload); | ||
|
|
||
| [Benchmark(Description = "Operation - optimized")] | ||
| public int Operation_Optimized() => SampleOperation.ProcessOptimized(_payload); | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## 6. Reporting and CI | ||
|
|
||
| * Benchmark projects live exclusively under `tuning/`. They must not affect production builds. | ||
| * Heavy BenchmarkDotNet runs should *not* run in CI unless explicitly configured. | ||
| * Reports are produced by the benchmark runner and stored under the configured artifacts directory. | ||
|
|
||
| --- | ||
|
|
||
| ## 7. Additional Guidelines | ||
|
|
||
| * Keep benchmark fixtures focused and readable. | ||
| * Document non-obvious reasoning in short comments. | ||
| * Prefer realistic but deterministic data sets. | ||
| * When benchmarks reveal regressions or improvements, reference the associated PR or issue in a comment. | ||
| * Shared benchmark helpers belong in `tuning/` projects, not in production code. | ||
|
|
||
| --- | ||
|
|
||
| ## Final Notes | ||
|
|
||
| * Benchmarks are performance tests, not unit tests. | ||
| * Use `[Benchmark]` only for pure performance measurement. | ||
| * Avoid `MethodImplOptions.NoInlining` unless absolutely necessary. | ||
| * Use small sets of meaningful benchmark scenarios — avoid combinatorial explosion. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| <Solution> | ||
| <Folder Name="/src/"> | ||
| <Project Path="src/Codebelt.Unitify/Codebelt.Unitify.csproj" /> | ||
| </Folder> | ||
| <Folder Name="/test/"> | ||
| <Project Path="test/Codebelt.Unitify/Codebelt.Unitify.Tests.csproj" /> | ||
| </Folder> | ||
| </Solution> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix line ending characters.
Static analysis indicates the file uses CRLF line endings instead of LF. For cross-platform consistency and to satisfy YAMLlint, convert line endings to Unix-style (LF).
🧰 Tools
🪛 YAMLlint (1.38.0)
[error] 1-1: wrong new line character: expected \n
(new-lines)
🤖 Prompt for AI Agents