11using System ;
22using System . Collections . Generic ;
3+ using System . Diagnostics ;
34using System . Linq ;
5+ using System . Reflection ;
6+ using System . Reflection . Emit ;
7+ using System . Runtime . InteropServices ;
8+ using System . Runtime . Serialization ;
49using FluentAssertions ;
10+ using ObjectLayoutInspector ;
511using StructLinq . BCL . List ;
612using Xunit ;
713
814namespace StructLinq . BCL . Tests
915{
16+
1017 public class ListLayoutTests
1118 {
19+ [ Fact ]
20+ public void PrintLayout ( )
21+ {
22+ TypeLayout . PrintLayout < List < int > > ( ) ;
23+ TypeLayout . PrintLayout < ListLayout < int > > ( ) ;
24+ }
25+
26+ [ Fact ]
27+ public void ItemsOffsetForInt ( )
28+ {
29+ var fieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( List < int > ) ) ;
30+ var layoutFieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( ListLayout < int > ) ) ;
31+
32+ var ( _, offset ) = fieldOffsets . Single ( x=> x . fieldInfo . Name == "_items" ) ;
33+ var ( _, layoutOffset ) = layoutFieldOffsets . Single ( x=> x . fieldInfo . Name == "Items" ) ;
34+ layoutOffset . Should ( ) . Be ( offset ) ;
35+ }
36+
37+ [ Fact ]
38+ public void SizeOffsetForInt ( )
39+ {
40+ var fieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( List < int > ) ) ;
41+ var layoutFieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( ListLayout < int > ) ) ;
42+
43+ var ( _, offset ) = fieldOffsets . Single ( x=> x . fieldInfo . Name == "_size" ) ;
44+ var ( _, layoutOffset ) = layoutFieldOffsets . Single ( x=> x . fieldInfo . Name == "Size" ) ;
45+ layoutOffset . Should ( ) . Be ( offset ) ;
46+ }
47+
48+ [ Fact ]
49+ public void ItemsOffsetForString ( )
50+ {
51+ var fieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( List < string > ) ) ;
52+ var layoutFieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( ListLayout < string > ) ) ;
53+
54+ var ( _, offset ) = fieldOffsets . Single ( x=> x . fieldInfo . Name == "_items" ) ;
55+ var ( _, layoutOffset ) = layoutFieldOffsets . Single ( x=> x . fieldInfo . Name == "Items" ) ;
56+ layoutOffset . Should ( ) . Be ( offset ) ;
57+ }
58+
59+ [ Fact ]
60+ public void SizeOffsetForString ( )
61+ {
62+ var fieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( List < string > ) ) ;
63+ var layoutFieldOffsets = TypeInspector . GetFieldOffsets ( typeof ( ListLayout < string > ) ) ;
64+
65+ var ( _, offset ) = fieldOffsets . Single ( x=> x . fieldInfo . Name == "_size" ) ;
66+ var ( _, layoutOffset ) = layoutFieldOffsets . Single ( x=> x . fieldInfo . Name == "Size" ) ;
67+ layoutOffset . Should ( ) . Be ( offset ) ;
68+ }
69+
70+
1271 [ Theory ]
1372 [ InlineData ( 0 ) ]
1473 [ InlineData ( 10 ) ]
@@ -17,7 +76,9 @@ public void ShouldCountMustBe(int size)
1776 {
1877 var list = Enumerable . Range ( - 1 , size ) . ToList ( ) ;
1978 var layout = Unsafe . As < List < int > , ListLayout < int > > ( ref list ) ;
20- layout . Size . Should ( ) . Be ( size ) ;
79+ var typeLayout = TypeLayout . GetLayout ( list . GetType ( ) ) ;
80+ var layoutLayout = TypeLayout . GetLayout < ListLayout < int > > ( ) ;
81+ layout . Size . Should ( ) . Be ( size , typeLayout . ToString ( ) + layoutLayout ) ;
2182 }
2283
2384 [ Theory ]
0 commit comments