BenchmarkDotNet icon indicating copy to clipboard operation
BenchmarkDotNet copied to clipboard

BenchmarkDotNet doesn't display `null` parameter correctly

Open DoctorKrolic opened this issue 2 years ago • 1 comments

BenchmarkDotNet version: 0.13.9

My benchmark code:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

BenchmarkRunner.Run<NullableEqualsBenchmarks>();

public class NullableEqualsBenchmarks
{
    [Params(1, 0, null)]
    public int? Prop { get; set; }

    [Benchmark]
    public int CurrentLoweringNonDefault()
    {
        int? num = Prop;
        int num2 = 42;
        if ((num.GetValueOrDefault() == num2) & num.HasValue)
        {
            return 1;
        }

        return 0;
    }

    [Benchmark]
    public int ProposedLoweringNonDefault()
    {
        if (Prop.GetValueOrDefault() == 42)
        {
            return 1;
        }

        return 0;
    }

    [Benchmark]
    public int CurrentLoweringDefault()
    {
        int? num = Prop;
        int num2 = 0;
        if ((num.GetValueOrDefault() == num2) & num.HasValue)
        {
            return 1;
        }

        return 0;
    }

    [Benchmark]
    public int ProposedLoweringDefault()
    {
        if (Prop.GetValueOrDefault(1) == 0)
        {
            return 1;
        }

        return 0;
    }
}

Result table after run:

Method Prop Mean Error StdDev
CurrentLoweringNonDefault ? 0.4134 ns 0.0025 ns 0.0023 ns
ProposedLoweringNonDefault ? 0.2143 ns 0.0095 ns 0.0089 ns
CurrentLoweringDefault ? 0.4140 ns 0.0004 ns 0.0004 ns
ProposedLoweringDefault ? 0.2118 ns 0.0089 ns 0.0078 ns
CurrentLoweringNonDefault 0 0.4051 ns 0.0026 ns 0.0024 ns
ProposedLoweringNonDefault 0 0.2104 ns 0.0070 ns 0.0065 ns
CurrentLoweringDefault 0 0.2134 ns 0.0035 ns 0.0030 ns
ProposedLoweringDefault 0 0.0074 ns 0.0015 ns 0.0012 ns
CurrentLoweringNonDefault 1 0.4160 ns 0.0029 ns 0.0027 ns
ProposedLoweringNonDefault 1 0.2154 ns 0.0063 ns 0.0059 ns
CurrentLoweringDefault 1 0.4141 ns 0.0005 ns 0.0004 ns
ProposedLoweringDefault 1 0.2155 ns 0.0064 ns 0.0060 ns

I would expect null to be displayed in Prop column instead of meaningless ?s

DoctorKrolic avatar Oct 19 '23 21:10 DoctorKrolic

Should be fixed by #2122

timcassell avatar Oct 19 '23 22:10 timcassell