mirror of
https://github.com/danbulant/Cosmos
synced 2026-06-10 10:11:31 +00:00
Trying to Plug GetHashCode() for all ValueTypes.
This commit is contained in:
parent
dd47663ae5
commit
2c745389fe
17 changed files with 82 additions and 7 deletions
|
|
@ -10,6 +10,7 @@ namespace Cosmos.Compiler.Tests.Bcl.System
|
|||
// This does not compile:
|
||||
public static void Execute()
|
||||
{
|
||||
#if false
|
||||
Decimal value;
|
||||
String result;
|
||||
String expectedResult;
|
||||
|
|
@ -34,7 +35,7 @@ namespace Cosmos.Compiler.Tests.Bcl.System
|
|||
// Actually 'expectedResult' should be the same so...
|
||||
Assert.IsTrue((result == expectedResult), "String format (Decimal) doesn't work");
|
||||
|
||||
#if false
|
||||
|
||||
// Now let's Get the HashCode of a value
|
||||
int resultAsInt = value.GetHashCode();
|
||||
|
||||
|
|
|
|||
|
|
@ -37,9 +37,11 @@ namespace Cosmos.Compiler.Tests.Bcl.System
|
|||
// actually the Hash Code of a Byte is the same value expressed as int
|
||||
Assert.IsTrue((resultAsInt == value), "UInt16.GetHashCode() doesn't work");
|
||||
|
||||
#if false
|
||||
// Now let's try ToString() again but printed in hex (this test fails for now!)
|
||||
result = value.ToString("X2");
|
||||
expectedResult = "FFFF";
|
||||
#endif
|
||||
|
||||
Assert.IsTrue((result == expectedResult), "UInt16.ToString(X2) doesn't work");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,9 +37,11 @@ namespace Cosmos.Compiler.Tests.Bcl.System
|
|||
// actually the Hash Code of a Int32 is the same value
|
||||
Assert.IsTrue((resultAsInt == value), "Int32.GetHashCode() doesn't work");
|
||||
|
||||
#if false
|
||||
// Now let's try ToString() again but printed in hex (this test fails for now!)
|
||||
result = value.ToString("X2");
|
||||
expectedResult = "0x7FFFFFFF";
|
||||
#endif
|
||||
|
||||
Assert.IsTrue((result == expectedResult), "Int32.ToString(X2) doesn't work");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,13 +40,15 @@ namespace Cosmos.Compiler.Tests.Bcl.System
|
|||
|
||||
// actually the Hash Code of a Int64 is the value interpolated with XOR to obtain an Int32... so not the same of 'value'!
|
||||
Assert.IsTrue((resultAsInt == value), "Int32.GetHashCode() doesn't work"); // XXX TODO when GetHashCode() works
|
||||
#endif
|
||||
|
||||
|
||||
// Now let's try ToString() again but printed in hex (this test fails for now!)
|
||||
result = value.ToString("X2");
|
||||
expectedResult = "0xFFFFFFFFFFFFFFFF";
|
||||
|
||||
|
||||
Assert.IsTrue((result == expectedResult), "UInt64.ToString(X2) doesn't work");
|
||||
#endif
|
||||
|
||||
var xTest = TestMethod(0);
|
||||
Assert.IsTrue(xTest.Length == 0, "UInt64 test failed.");
|
||||
|
|
|
|||
|
|
@ -843,5 +843,9 @@ namespace Cosmos.Core.Plugs.System
|
|||
throw new ArgumentNullException();
|
||||
}
|
||||
|
||||
public static int GetHashCode(ref String aThis)
|
||||
{
|
||||
throw new NotImplementedException("String.GetHashCode()");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,5 +66,11 @@ namespace Cosmos.IL2CPU.Plugs.System
|
|||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int GetHashCode(object aThis)
|
||||
{
|
||||
return (int)aThis;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -70,6 +70,7 @@
|
|||
<Reference Include="System.Drawing" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="System\DecimalImpl.cs" />
|
||||
<Compile Include="System\EnumImpl.cs" />
|
||||
<Compile Include="System\IO\ErrorImpl.cs" />
|
||||
<Compile Include="System\Security\SecurityElementImpl.cs" />
|
||||
|
|
|
|||
|
|
@ -51,5 +51,13 @@ namespace Cosmos.System.Plugs.System
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int GetHashCode(ref bool aThis)
|
||||
{
|
||||
if (aThis == true)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ namespace Cosmos.System.Plugs.System
|
|||
return StringHelper.GetNumberString(aThis);
|
||||
}
|
||||
|
||||
public static Int32 GetHashCode(ref byte aThis)
|
||||
public static int GetHashCode(ref byte aThis)
|
||||
{
|
||||
return aThis;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
using Cosmos.IL2CPU.Plugs;
|
||||
|
||||
|
|
@ -24,5 +25,17 @@ namespace Cosmos.System.Plugs.System
|
|||
return "<Enum.ToString> not implemented";
|
||||
// return UInt32Impl.ToString(ref aThis);
|
||||
}
|
||||
|
||||
public static int GetHashCode(ref Enum aThis)
|
||||
{
|
||||
throw new NotImplementedException("Enum.GetHashCode()");
|
||||
}
|
||||
|
||||
#if false
|
||||
public static CorElementType InternalGetCorElementType(Enum aThis)
|
||||
{
|
||||
throw new NotImplementedException("Enum.GetHashCode()");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
@ -55,5 +55,10 @@ namespace Cosmos.System.Plugs.System
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int GetHashCode(ref Int16 aThis)
|
||||
{
|
||||
return aThis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -45,5 +45,10 @@ namespace Cosmos.System.Plugs.System
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int GetHashCode(ref Int32 aThis)
|
||||
{
|
||||
return aThis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -47,6 +47,12 @@ namespace Cosmos.System.Plugs.System
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
// The value of the lower 32 bits XORed with the uppper 32 bits.
|
||||
public static int GetHashCode(ref Int64 aThis)
|
||||
{
|
||||
return (unchecked((int)((long)aThis)) ^ (int)(aThis >> 32));
|
||||
}
|
||||
}
|
||||
|
||||
// See note in UInt32Impl2
|
||||
|
|
|
|||
|
|
@ -13,5 +13,10 @@ namespace Cosmos.System.Plugs.System
|
|||
return "<IntPtr>";
|
||||
}
|
||||
//}
|
||||
|
||||
public static int GetHashCode(ref IntPtr aThis)
|
||||
{
|
||||
return (int)aThis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -42,5 +42,11 @@ namespace Cosmos.System.Plugs.System
|
|||
}
|
||||
return new String(xResultChars, xCurrentPos + 1, 20 - xCurrentPos);
|
||||
}
|
||||
|
||||
// The value of the lower 32 bits XORed with the uppper 32 bits.
|
||||
public static int GetHashCode(ref UInt64 aThis)
|
||||
{
|
||||
return (unchecked((int)((long)aThis)) ^ (int)(aThis >> 32));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,5 +13,10 @@ namespace Cosmos.System.Plugs.System
|
|||
return "<UIntPtr>";
|
||||
}
|
||||
//}
|
||||
|
||||
public static int GetHashCode(ref UIntPtr aThis)
|
||||
{
|
||||
return (int)aThis;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,16 +5,20 @@ using Cosmos.IL2CPU.Plugs;
|
|||
namespace Cosmos.System.Plugs.System
|
||||
{
|
||||
[Plug(Target = typeof(ValueType))]
|
||||
class ValueTypeImp
|
||||
public static class ValueTypeImp
|
||||
{
|
||||
#if false
|
||||
public static int GetHashCode(ValueType aThis)
|
||||
{
|
||||
if (aThis is byte)
|
||||
return (int)aThis;
|
||||
|
||||
return -1;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
public static int GetHashCodeOfPtr(IntPtr ptr)
|
||||
{
|
||||
throw new NotImplementedException("ValueType.GetHashCodeOfPtr()");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue