public unsafe void TestReferenceHashCodes() { var wr = new Writer.MetadataWriter(); var systemRuntimeScopeRecord = new Writer.ScopeReference { Name = (Writer.ConstantStringValue) "System.Runtime", MajorVersion = 4, }; var rootNamespaceRecord = new Writer.NamespaceReference { Name = null, ParentScopeOrNamespace = systemRuntimeScopeRecord, }; var fooTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = rootNamespaceRecord, TypeName = (Writer.ConstantStringValue) "Foo", }; var nestedTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = fooTypeRecord, TypeName = (Writer.ConstantStringValue) "Nested", }; var reallyNestedTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = nestedTypeRecord, TypeName = (Writer.ConstantStringValue) "ReallyNested", }; var systemNamespaceRecord = new Writer.NamespaceReference { Name = (Writer.ConstantStringValue) "System", ParentScopeOrNamespace = rootNamespaceRecord, }; var objectTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = systemNamespaceRecord, TypeName = (Writer.ConstantStringValue) "Object", }; wr.AdditionalRootRecords.Add(objectTypeRecord); wr.AdditionalRootRecords.Add(fooTypeRecord); wr.AdditionalRootRecords.Add(nestedTypeRecord); wr.AdditionalRootRecords.Add(reallyNestedTypeRecord); var ms = new MemoryStream(); wr.Write(ms); fixed(byte *pBuffer = ms.ToArray()) { var rd = new Reader.MetadataReader((IntPtr)pBuffer, (int)ms.Length); var fooTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(fooTypeRecord)); var fooTypeHashCode = TypeHashingAlgorithms.ComputeNameHashCode("Foo"); Assert.Equal(fooTypeHashCode, MetadataTypeHashingAlgorithms.ComputeHashCode(fooTypeHandle, rd)); var objectTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(objectTypeRecord)); Assert.Equal(TypeHashingAlgorithms.ComputeNameHashCode("System.Object"), MetadataTypeHashingAlgorithms.ComputeHashCode(objectTypeHandle, rd)); var nestedTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(nestedTypeRecord)); var nestedTypeHashCode = TypeHashingAlgorithms.ComputeNestedTypeHashCode(fooTypeHashCode, TypeHashingAlgorithms.ComputeNameHashCode("Nested")); Assert.Equal(nestedTypeHashCode, MetadataTypeHashingAlgorithms.ComputeHashCode(nestedTypeHandle, rd)); var reallyNestedTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(reallyNestedTypeRecord)); var reallyNestedTypeHashCode = TypeHashingAlgorithms.ComputeNestedTypeHashCode(nestedTypeHashCode, TypeHashingAlgorithms.ComputeNameHashCode("ReallyNested")); Assert.Equal(reallyNestedTypeHashCode, MetadataTypeHashingAlgorithms.ComputeHashCode(reallyNestedTypeHandle, rd)); } }
public unsafe void TestReferenceHashCodes() { var wr = new Writer.MetadataWriter(); var systemRuntimeScopeRecord = new Writer.ScopeReference { Name = (Writer.ConstantStringValue)"System.Runtime", MajorVersion = 4, }; var rootNamespaceRecord = new Writer.NamespaceReference { Name = null, ParentScopeOrNamespace = systemRuntimeScopeRecord, }; var fooTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = rootNamespaceRecord, TypeName = (Writer.ConstantStringValue)"Foo", }; var nestedTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = fooTypeRecord, TypeName = (Writer.ConstantStringValue)"Nested", }; var reallyNestedTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = nestedTypeRecord, TypeName = (Writer.ConstantStringValue)"ReallyNested", }; var systemNamespaceRecord = new Writer.NamespaceReference { Name = (Writer.ConstantStringValue)"System", ParentScopeOrNamespace = rootNamespaceRecord, }; var objectTypeRecord = new Writer.TypeReference { ParentNamespaceOrType = systemNamespaceRecord, TypeName = (Writer.ConstantStringValue)"Object", }; wr.AdditionalRootRecords.Add(objectTypeRecord); wr.AdditionalRootRecords.Add(fooTypeRecord); wr.AdditionalRootRecords.Add(nestedTypeRecord); wr.AdditionalRootRecords.Add(reallyNestedTypeRecord); var ms = new MemoryStream(); wr.Write(ms); fixed (byte* pBuffer = ms.ToArray()) { var rd = new Reader.MetadataReader((IntPtr)pBuffer, (int)ms.Length); var fooTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(fooTypeRecord)); var fooTypeHashCode = TypeHashingAlgorithms.ComputeNameHashCode("Foo"); Assert.Equal(fooTypeHashCode, MetadataTypeHashingAlgorithms.ComputeHashCode(fooTypeHandle, rd)); var objectTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(objectTypeRecord)); Assert.Equal(TypeHashingAlgorithms.ComputeNameHashCode("System.Object"), MetadataTypeHashingAlgorithms.ComputeHashCode(objectTypeHandle, rd)); var nestedTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(nestedTypeRecord)); var nestedTypeHashCode = TypeHashingAlgorithms.ComputeNestedTypeHashCode(fooTypeHashCode, TypeHashingAlgorithms.ComputeNameHashCode("Nested")); Assert.Equal(nestedTypeHashCode , MetadataTypeHashingAlgorithms.ComputeHashCode(nestedTypeHandle, rd)); var reallyNestedTypeHandle = new Reader.TypeReferenceHandle(wr.GetRecordHandle(reallyNestedTypeRecord)); var reallyNestedTypeHashCode = TypeHashingAlgorithms.ComputeNestedTypeHashCode(nestedTypeHashCode, TypeHashingAlgorithms.ComputeNameHashCode("ReallyNested")); Assert.Equal(reallyNestedTypeHashCode, MetadataTypeHashingAlgorithms.ComputeHashCode(reallyNestedTypeHandle, rd)); } }