File: Interop\Oleaut32\DECIMALTests.cs
Web Access
Project: src\src\System.Windows.Forms.Primitives\tests\UnitTests\System.Windows.Forms.Primitives.Tests.csproj (System.Windows.Forms.Primitives.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Runtime.InteropServices;
 
namespace System.Windows.Forms.Tests.Interop.Oleaut32;
 
// NB: doesn't require thread affinity
public class DECIMALTests
{
    [Fact]
    public unsafe void DECIMAL_Sizeof_Invoke_ReturnsExpected()
    {
        Assert.Equal(16, Marshal.SizeOf<DECIMAL>());
        Assert.Equal(16, sizeof(DECIMAL));
    }
 
    [Fact]
    public void DECIMAL_ToDecimal_InvokeEmpty_ReturnsExpected()
    {
        DECIMAL dec = default;
        Assert.Equal(0m, dec.ToDecimal());
    }
 
    [Theory]
    [InlineData((double)int.MinValue)]
    [InlineData(-1.2)]
    [InlineData(0)]
    [InlineData(1.2)]
    [InlineData((double)int.MaxValue)]
    public void DECIMAL_ToDecimal_InvokeCustom_ReturnsExpected(double value)
    {
        HRESULT hr = VarDecFromR8(value, out DECIMAL dec);
        Assert.Equal(HRESULT.S_OK, hr);
        Assert.Equal((decimal)value, dec.ToDecimal());
    }
 
    [DllImport(Libraries.Oleaut32, ExactSpelling = true)]
    private static extern HRESULT VarDecFromR8(double dblIn, out DECIMAL pdecOut);
}