public void StrFldMerger_EmptyStruct() { StructureType str = new StructureType("foo", 0); var sfm = new StructureFieldMerger(str); DataType dt = sfm.Merge(); Assert.AreEqual("(struct \"foo\")", dt.ToString()); }
public void StrFldMerger_SingleMember() { StructureType str = new StructureType("foo", 0); str.Fields.Add(4, PrimitiveType.Word16); var sfm = new StructureFieldMerger(str); DataType dt = sfm.Merge(); Assert.AreEqual("(struct \"foo\" (4 word16 w0004))", dt.ToString()); }
public void StrFldMerger_FindOverlappingCluster() { StructureType str = new StructureType("foo", 0); str.Fields.Add(2, PrimitiveType.Word32); str.Fields.Add(4, PrimitiveType.Word32); var sfm = new StructureFieldMerger(str); foreach (List <StructureField> cluster in sfm.GetOverlappingClusters(str.Fields)) { Assert.AreEqual(2, cluster.Count); } }
public void StrFldMerger_Merge() { StructureType str = new StructureType("foo", 0); UnionType u = new UnionType(null, null, PrimitiveType.Ptr32, PrimitiveType.Word16); EquivalenceClass eq = Eqv(u); str.Fields.Add(2, eq); str.Fields.Add(4, PrimitiveType.SegmentSelector); var sfm = new StructureFieldMerger(str); StructureType strNew = sfm.Merge(); Assert.AreEqual("(struct \"foo\" (2 (union (ptr32 u0) ((struct (0 word16 w0000) (2 selector pseg0002)) u1)) u0002))", strNew.ToString()); }
public void StrFldMerger_BuildOverlappedStructure() { List <StructureField> fields = new List <StructureField>(); fields.Add(new StructureField(0, PrimitiveType.Ptr32)); fields.Add(new StructureField(0, PrimitiveType.Word16)); fields.Add(new StructureField(2, PrimitiveType.SegmentSelector)); var sfm = new StructureFieldMerger(new StructureType()); DataType dt = sfm.BuildOverlappedStructure(fields); Assert.AreEqual("(union (ptr32 u0) ((struct (0 word16 w0000) (2 selector pseg0002)) u1))", dt.ToString()); }
public void StrFldMerger_FindOverLappingClusterWithEqv() { StructureType str = new StructureType("foo", 0); UnionType u = new UnionType(null, null, PrimitiveType.Ptr32, PrimitiveType.Word16); EquivalenceClass eq = Eqv(u); str.Fields.Add(2, eq); str.Fields.Add(4, PrimitiveType.SegmentSelector); var sfm = new StructureFieldMerger(str); IEnumerable <List <StructureField> > eb = sfm.GetOverlappingClusters(str.Fields); IEnumerator <List <StructureField> > e = eb.GetEnumerator(); Assert.IsTrue(e.MoveNext()); Assert.AreEqual(3, e.Current.Count); List <StructureField> cluster = e.Current; }
public void Setup() { factory = new TypeFactory(); sfm = new StructureFieldMerger(); }