jit-regression-test

star 18.0k

Extract a standalone JIT regression test case from a given GitHub issue and save it under the JitBlue folder. USE FOR: creating JIT regression tests, extracting repro code from dotnet/runtime issues, "write a test for this JIT bug", "create a regression test for issue #NNNNN", converting issue repro to xunit test. DO NOT USE FOR: non-JIT tests (use standard test patterns), debugging JIT issues without a known repro, performance benchmarks (use performance-benchmark skill).

dotnet By dotnet schedule Updated 2/23/2026

name: jit-regression-test description: > Extract a standalone JIT regression test case from a given GitHub issue and save it under the JitBlue folder. USE FOR: creating JIT regression tests, extracting repro code from dotnet/runtime issues, "write a test for this JIT bug", "create a regression test for issue #NNNNN", converting issue repro to xunit test. DO NOT USE FOR: non-JIT tests (use standard test patterns), debugging JIT issues without a known repro, performance benchmarks (use performance-benchmark skill).

JIT Regression Test Extraction

๐Ÿšจ Do NOT create a test when: the issue has no reproducible code and you cannot compose a minimal repro, the issue is a duplicate of an existing test under JitBlue/, or the bug is in libraries/runtime rather than the JIT compiler itself.

Extract a JIT regression test case from a GitHub issue into a properly structured test under src/tests/JIT/Regression/JitBlue/.

Step 1: Gather Information from the GitHub Issue

From the GitHub issue, extract:

  1. Issue number โ†’ folder/file name (e.g., #99391 โ†’ Runtime_99391)
  2. Reproduction code โ€” if none provided, compose a minimal repro yourself
  3. Environment variables โ€” any DOTNET_* vars needed to reproduce
  4. Expected behavior โ€” correct output/behavior

Step 2: Create the Test Directory

Create a new folder under src/tests/JIT/Regression/JitBlue/:

src/tests/JIT/Regression/JitBlue/Runtime_<issue_number>/

Step 3: Create the Test File

Create a Runtime_<issue_number>.cs file following these conventions:

Example:

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Runtime.CompilerServices;
using Xunit;

public class Runtime_<issue_number>
{
    [Fact]
    public static void TestEntryPoint()
    {
        // Test code that exercises the bug
        // Use Assert.Equal, Assert.True, etc. for validation
    }
}

Key Conventions

  • License header: Always include the standard .NET Foundation license header
  • Class name: Match the file name exactly (Runtime_<issue_number>)
  • Test method: [Fact] attribute, named TestEntryPoint()
  • Minimize the reproduction: Strip to the minimal case that triggers the bug
  • Use [MethodImpl(MethodImplOptions.NoInlining)] when preventing inlining is needed to reproduce

Example: Simple Test (from Runtime_99391)

// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.


namespace Runtime_99391;

using System;
using System.Runtime.CompilerServices;
using System.Numerics;
using Xunit;

public class Runtime_99391
{
    [Fact]
    public static void TestEntryPoint()
    {
        Vector2 result2a = Vector2.Normalize(Value2);
        Assert.Equal(new Vector2(0, 1), result2a);
    }

    private static Vector2 Value2
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        get => new Vector2(0, 2);
    }
}

Step 4: Create a .csproj File or add to the existing Regression_*.csproj

A custom .csproj file is only required when:

  • Environment variables are needed to reproduce the bug (such as DOTNET_JitStressModeNames)
  • Special compilation settings are required

Otherwise, register the test file in the existing src/tests/JIT/Regression/Regression_*.csproj (Regression_ro_2.csproj is a good default) file and skip creating a new .csproj.

If a custom .csproj file is needed, it should be located next to the test source file with the following name: Runtime_<issue_number>.csproj. Example:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Optimize>True</Optimize>
    <DebugType>None</DebugType>
    <!-- Needed for CLRTestEnvironmentVariable -->
    <RequiresProcessIsolation>true</RequiresProcessIsolation>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="$(MSBuildProjectName).cs" />

    <CLRTestEnvironmentVariable Include="DOTNET_TieredCompilation" Value="0" />
  </ItemGroup>
</Project>

Tips

  • No .csproj needed for simple tests โ€” register the .cs file in Regression_ro_2.csproj instead.
  • Look at recent tests under src/tests/JIT/Regression/JitBlue/Runtime_* when in doubt about current conventions.
Install via CLI
npx skills add https://github.com/dotnet/runtime --skill jit-regression-test
Repository Details
star Stars 17,969
call_split Forks 5,473
navigation Branch main
article Path SKILL.md
More from Creator