Cosmos/Tests/Cosmos.Compiler.Tests.Bcl/System/UnsafeCodeTest.cs
2016-09-11 07:53:45 -05:00

57 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Cosmos.Compiler.Tests.Bcl.System
{
using Cosmos.TestRunner;
unsafe class UnsafeCodeTest
{
static long DoubleToInt64Bits(double value)
{
return *(long*)(&value);
}
static ulong Test(ref ulong a)
{
a = 12345678;
return a;
}
public static void Execute()
{
long val = Int64.MaxValue;
long* p = &val;
long newVal = *p;
Assert.IsTrue(val == newVal, $"Pointer deferencing failed expected {val} got {newVal}");
/* This the same thing BitConverter does to convert a Double to a Long it should fail in this case too */
double d = 1.0;
long asLong = *(long*)(&d);
byte[] hexDump;
hexDump = BitConverter.GetBytes(asLong);
Assert.IsTrue(asLong == 0x3FF0000000000000, "double asLong is wrong!");
ulong aLong = 0;
ulong retVal;
retVal = Test(ref aLong);
Assert.IsTrue(retVal == 12345678, "Ulong ref passing not works");
//asLong = DoubleToInt64Bits(d);
//hexDump = BitConverter.GetBytes(asLong);
//Console.WriteLine("asLong is : " + BitConverter.ToString(hexDump, 0));
//Assert.IsTrue(asLong == 0x3FF0000000000000, "DoubleToInt64Bits is wrong!");
}
}
}