- .NET 9.0, C# latest, Autofac DI
- xUnit 2.x (test framework), xunit.runner.visualstudio, Microsoft.NET.Test.Sdk, coverlet.collector
dotnet build AdventOfCode.sln
dotnet test AdventOfCodeTests/AdventOfCodeTests.csproj
dotnet test --filter "FullyQualifiedName~Day5Tests" # run specific test class
dotnet run --project AdventOfCode 2024 15 # run specific dayIDayinterface:Day,Year,Part1(string path),Part2(string path)— returnsstringFramework/DayBaseabstract class reads file lines, delegates toPart1(IEnumerable<string>)/Part2(IEnumerable<string>)- Each year has its own
DayBasethat setsYear(e.g.,Events/_2024/Days/DayBase.cs) - Autofac auto-discovers all
IDayimplementations via assembly scanning inProgram.cs
| Item | Path |
|---|---|
| Solution class | AdventOfCode/Events/{YEAR}/Days/Day{N}.cs |
| Year DayBase | AdventOfCode/Events/{YEAR}/Days/DayBase.cs |
| Input files | AdventOfCode/Events/{YEAR}/InputFiles/{N}.txt |
| Test class | AdventOfCodeTests/Events/{YEAR}/Days/Day{N}Tests.cs |
| Test data | AdventOfCodeTests/Events/{YEAR}/TestData/{N}.txt |
| Common utils | AdventOfCode/Common/ (Coordinate, Direction, Vector) |
- Namespaces:
AdventOfCode.Events._{YEAR}.Days(underscore prefix for numeric year) - Class names:
Day1,Day12(no leading zeros) - Test classes:
Day1Tests,Day12Tests(no attributes needed, xUnit auto-discovers) - Tests instantiate the day directly:
private readonly DayNN _systemUnderTest = new(); - Test methods:
[Fact]for simple tests,[Theory]with[InlineData]for parameterized tests - Assertions: Use xUnit's
Assert.Equal(expected, actual)pattern (note parameter order) - Test data files use letter suffixes for variants:
12a.txt,12b.txt - Input/test data files must be added to
.csprojwithCopyToOutputDirectory: PreserveNewest - Both Part1 and Part2 return answers as
string