@@ -94,16 +94,20 @@ public void CanDisassembleAllMethodCalls(Jit jit, Platform platform, Runtime run
94
94
{
95
95
if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
96
96
97
+ var printSource = IsPrintSourceSupported ( platform ) ;
97
98
var disassemblyDiagnoser = new DisassemblyDiagnoser (
98
- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 3 ) ) ;
99
+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 3 ) ) ;
99
100
100
101
CanExecute < WithCalls > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . ColdStart ) ) ;
101
102
102
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Benchmark ) } (Int32)") ;
103
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Benchmark ) } (Boolean)") ;
104
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Static ) } ()") ;
105
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Instance ) } ()") ;
106
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Recursive ) } ()") ;
103
+ DisassemblyResult result = disassemblyDiagnoser . Results . Single ( ) . Value ;
104
+
105
+ Assert . Empty ( result . Errors ) ;
106
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Benchmark ) } (Int32)") ;
107
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Benchmark ) } (Boolean)") ;
108
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Static ) } ()") ;
109
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Instance ) } ()") ;
110
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Recursive ) } ()") ;
107
111
}
108
112
109
113
[ Theory ]
@@ -113,16 +117,20 @@ public void CanDisassembleAllMethodCallsUsingFilters(Jit jit, Platform platform,
113
117
{
114
118
if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
115
119
120
+ var printSource = IsPrintSourceSupported ( platform ) ;
116
121
var disassemblyDiagnoser = new DisassemblyDiagnoser (
117
- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 1 , filters : new [ ] { "*WithCalls*" } ) ) ;
122
+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 1 , filters : new [ ] { "*WithCalls*" } ) ) ;
118
123
119
124
CanExecute < WithCalls > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . ColdStart ) ) ;
120
125
121
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Benchmark ) } (Int32)") ;
122
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Benchmark ) } (Boolean)") ;
123
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Static ) } ()") ;
124
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Instance ) } ()") ;
125
- AssertDisassembled ( disassemblyDiagnoser , $ "{ nameof ( WithCalls . Recursive ) } ()") ;
126
+ DisassemblyResult result = disassemblyDiagnoser . Results . Single ( ) . Value ;
127
+
128
+ Assert . Empty ( result . Errors ) ;
129
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Benchmark ) } (Int32)") ;
130
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Benchmark ) } (Boolean)") ;
131
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Static ) } ()") ;
132
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Instance ) } ()") ;
133
+ AssertDisassemblyResult ( result , $ "{ nameof ( WithCalls . Recursive ) } ()") ;
126
134
}
127
135
128
136
public class Generic < T > where T : new ( )
@@ -138,13 +146,15 @@ public void CanDisassembleGenericTypes(Jit jit, Platform platform, Runtime runti
138
146
{
139
147
if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
140
148
149
+ var printSource = IsPrintSourceSupported ( platform ) ;
141
150
var disassemblyDiagnoser = new DisassemblyDiagnoser (
142
- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 3 ) ) ;
151
+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 3 ) ) ;
143
152
144
153
CanExecute < Generic < int > > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . Monitoring ) ) ;
145
154
146
155
var result = disassemblyDiagnoser . Results . Values . Single ( ) ;
147
156
157
+ Assert . Empty ( result . Errors ) ;
148
158
Assert . Contains ( result . Methods , method => method . Maps . Any ( map => map . SourceCodes . OfType < Asm > ( ) . Any ( ) ) ) ;
149
159
}
150
160
@@ -160,13 +170,15 @@ public void CanDisassembleInlinableBenchmarks(Jit jit, Platform platform, Runtim
160
170
{
161
171
if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
162
172
173
+ var printSource = IsPrintSourceSupported ( platform ) ;
163
174
var disassemblyDiagnoser = new DisassemblyDiagnoser (
164
- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 3 ) ) ;
175
+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 3 ) ) ;
165
176
166
177
CanExecute < WithInlineable > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . Monitoring ) ) ;
167
178
168
179
var disassemblyResult = disassemblyDiagnoser . Results . Values . Single ( result => result . Methods . Count ( method => method . Name . Contains ( nameof ( WithInlineable . JustReturn ) ) ) == 1 ) ;
169
180
181
+ Assert . Empty ( disassemblyResult . Errors ) ;
170
182
Assert . Contains ( disassemblyResult . Methods , method => method . Maps . Any ( map => map . SourceCodes . OfType < Asm > ( ) . All ( asm => asm . ToString ( ) . Contains ( "ret" ) ) ) ) ;
171
183
}
172
184
@@ -181,12 +193,13 @@ private IConfig CreateConfig(Jit jit, Platform platform, Runtime runtime, IDiagn
181
193
. AddDiagnoser ( disassemblyDiagnoser )
182
194
. AddLogger ( new OutputLogger ( Output ) ) ;
183
195
184
- private void AssertDisassembled ( DisassemblyDiagnoser diagnoser , string methodSignature )
196
+ private void AssertDisassemblyResult ( DisassemblyResult result , string methodSignature )
185
197
{
186
- DisassemblyResult result = diagnoser . Results . Single ( ) . Value ;
187
-
188
198
Assert . Contains ( methodSignature , result . Methods . Select ( m => m . Name . Split ( '.' ) . Last ( ) ) . ToArray ( ) ) ;
189
199
Assert . Contains ( result . Methods . Single ( m => m . Name . EndsWith ( methodSignature ) ) . Maps , map => map . SourceCodes . Any ( ) ) ;
190
200
}
201
+
202
+ private static bool IsPrintSourceSupported ( Platform platform )
203
+ => platform != Platform . X86 ; // Workaround for https://github.com/dotnet/BenchmarkDotNet/issues/2789
191
204
}
192
205
}
0 commit comments