Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Test/Mono.Cecil.Tests')
-rw-r--r--Test/Mono.Cecil.Tests/FieldTests.cs44
1 files changed, 44 insertions, 0 deletions
diff --git a/Test/Mono.Cecil.Tests/FieldTests.cs b/Test/Mono.Cecil.Tests/FieldTests.cs
index 4f575de..93ed350 100644
--- a/Test/Mono.Cecil.Tests/FieldTests.cs
+++ b/Test/Mono.Cecil.Tests/FieldTests.cs
@@ -1,4 +1,5 @@
using System;
+using System.IO;
using Mono.Cecil.PE;
@@ -133,6 +134,49 @@ namespace Mono.Cecil.Tests {
});
}
+ int AlignmentOfInteger(int input)
+ {
+ if (input == 0)
+ return 0x40000000;
+ if (input < 0)
+ Assert.Fail ();
+ int alignment = 1;
+ while ((input & alignment) == 0)
+ alignment *= 2;
+
+ return alignment;
+ }
+
+ [Test]
+ public void FieldRVAAlignment ()
+ {
+ TestIL ("FieldRVAAlignment.il", ilmodule => {
+
+ var path = Path.GetTempFileName ();
+
+ ilmodule.Write (path);
+
+ using (var module = ModuleDefinition.ReadModule (path, new ReaderParameters { ReadWrite = true })) {
+ var priv_impl = GetPrivateImplementationType (module);
+ Assert.IsNotNull (priv_impl);
+
+ Assert.AreEqual (6, priv_impl.Fields.Count);
+
+ foreach (var field in priv_impl.Fields)
+ {
+ Assert.IsNotNull (field);
+
+ Assert.AreNotEqual (0, field.RVA);
+ Assert.IsNotNull (field.InitialValue);
+
+ int rvaAlignment = AlignmentOfInteger (field.RVA);
+ int desiredAlignment = Math.Min(8, AlignmentOfInteger (field.InitialValue.Length));
+ Assert.GreaterOrEqual (rvaAlignment, desiredAlignment);
+ }
+ }
+ });
+ }
+
[Test]
public void GenericFieldDefinition ()
{