Skip to content

Contributing

Arnel Robles edited this page Sep 28, 2026 · 1 revision

Test Coverage

dotnet test Mapsicle.sln -c Release runs all of it, including the allocation budgets.

Package Tests What it covers
Mapsicle 284 Core, plus regression, load, fault and untrusted input
Mapsicle.NamingConventions 55 Naming conventions
Mapsicle.Fluent 39 Fluent configuration and profiles
Mapsicle.Validation 27 FluentValidation integration
Mapsicle.Json 26 JSON serialization
Mapsicle.Audit 26 Change tracking
Mapsicle.Dapper 25 Dapper integration
Mapsicle.DataAnnotations 24 DataAnnotations validation
Mapsicle.AspNetCore 23 ASP.NET Core helpers
Mapsicle.Serilog 22 Serilog logging
Mapsicle.Caching 21 Caching integration
Mapsicle.EntityFramework 19 EF Core ProjectTo
Mapsicle.Performance 8 Allocation budgets on warm paths
Total 599

Four of those suites exist because a passing test count on its own says very little:

  • IssueRegressionTests carries one test per fixed defect, named by issue number. Reverted against the pre-fix source, 19 of its 28 fail. The 9 that pass are the controls, and they are supposed to pass either way.
  • UntrustedInputTests pins the security statements in this README, so a change to any of them fails the build rather than quietly making the documentation wrong.
  • FaultInjectionTests covers what happens when a mapping fails: which exception surfaces, whether it is wrapped, whether the destination is left half-written, and whether a failure poisons the cache for later calls.
  • LoadTests verifies every mapping against the input that produced it, because the failure a shared compiled delegate produces under concurrency is a wrong answer rather than an exception.

Allocation budgets run under dotnet test rather than only in a benchmark, so a change that starts boxing a value or allocating a closure on a warm path fails CI instead of being noticed in a profiler later.


Project Structure

Mapsicle/
├── src/
│   ├── Mapsicle/                    # Core - zero config
│   ├── Mapsicle.Fluent/             # Fluent + DI + Profiles
│   ├── Mapsicle.EntityFramework/    # EF Core ProjectTo
│   ├── Mapsicle.Validation/         # FluentValidation integration
│   ├── Mapsicle.NamingConventions/  # Naming convention support
│   ├── Mapsicle.Serilog/            # Serilog structured logging
│   ├── Mapsicle.Dapper/             # Dapper integration
│   ├── Mapsicle.Json/               # JSON serialization
│   ├── Mapsicle.AspNetCore/         # ASP.NET Core Minimal API
│   ├── Mapsicle.Caching/            # Memory/Distributed caching
│   ├── Mapsicle.Audit/              # Change tracking/diff
│   └── Mapsicle.DataAnnotations/    # DataAnnotations validation
├── tests/
│   ├── Mapsicle.Tests/
│   ├── Mapsicle.Fluent.Tests/
│   ├── Mapsicle.EntityFramework.Tests/
│   ├── Mapsicle.Validation.Tests/
│   ├── Mapsicle.NamingConventions.Tests/
│   ├── Mapsicle.Serilog.Tests/
│   ├── Mapsicle.Dapper.Tests/
│   ├── Mapsicle.Json.Tests/
│   ├── Mapsicle.AspNetCore.Tests/
│   ├── Mapsicle.Caching.Tests/
│   ├── Mapsicle.Audit.Tests/
│   ├── Mapsicle.DataAnnotations.Tests/
│   └── Mapsicle.Benchmarks/
└── examples/
    └── Mapsicle.Examples/           # Working examples for all packages

Run Examples

dotnet run --project examples/Mapsicle.Examples

Contributing

PRs welcome. Areas for contribution:

  • Performance optimizations
  • Additional type coercion scenarios
  • Documentation improvements

License

MIT License © Arnel Isiderio Robles


Stop configuring. Start mapping.

Free forever. Zero dependencies. Pure performance.

Clone this wiki locally