@@ -94,16 +94,20 @@ public void CanDisassembleAllMethodCalls(Jit jit, Platform platform, Runtime run
9494 {
9595 if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
9696
97+ var printSource = IsPrintSourceSupported ( platform ) ;
9798 var disassemblyDiagnoser = new DisassemblyDiagnoser (
98- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 3 ) ) ;
99+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 1 ) ) ;
99100
100101 CanExecute < WithCalls > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . ColdStart ) ) ;
101102
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 ) } ()") ;
107111 }
108112
109113 [ Theory ]
@@ -113,16 +117,20 @@ public void CanDisassembleAllMethodCallsUsingFilters(Jit jit, Platform platform,
113117 {
114118 if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
115119
120+ var printSource = IsPrintSourceSupported ( platform ) ;
116121 var disassemblyDiagnoser = new DisassemblyDiagnoser (
117- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 1 , filters : new [ ] { "*WithCalls*" } ) ) ;
122+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 1 , filters : new [ ] { "*WithCalls*" } ) ) ;
118123
119124 CanExecute < WithCalls > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . ColdStart ) ) ;
120125
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 ) } ()") ;
126134 }
127135
128136 public class Generic < T > where T : new ( )
@@ -138,13 +146,15 @@ public void CanDisassembleGenericTypes(Jit jit, Platform platform, Runtime runti
138146 {
139147 if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
140148
149+ var printSource = IsPrintSourceSupported ( platform ) ;
141150 var disassemblyDiagnoser = new DisassemblyDiagnoser (
142- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 3 ) ) ;
151+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 3 ) ) ;
143152
144153 CanExecute < Generic < int > > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . Monitoring ) ) ;
145154
146155 var result = disassemblyDiagnoser . Results . Values . Single ( ) ;
147156
157+ Assert . Empty ( result . Errors ) ;
148158 Assert . Contains ( result . Methods , method => method . Maps . Any ( map => map . SourceCodes . OfType < Asm > ( ) . Any ( ) ) ) ;
149159 }
150160
@@ -160,13 +170,15 @@ public void CanDisassembleInlinableBenchmarks(Jit jit, Platform platform, Runtim
160170 {
161171 if ( OsDetector . IsMacOS ( ) ) return ; // currently not supported
162172
173+ var printSource = IsPrintSourceSupported ( platform ) ;
163174 var disassemblyDiagnoser = new DisassemblyDiagnoser (
164- new DisassemblyDiagnoserConfig ( printSource : true , maxDepth : 3 ) ) ;
175+ new DisassemblyDiagnoserConfig ( printSource : printSource , maxDepth : 3 ) ) ;
165176
166177 CanExecute < WithInlineable > ( CreateConfig ( jit , platform , runtime , disassemblyDiagnoser , RunStrategy . Monitoring ) ) ;
167178
168179 var disassemblyResult = disassemblyDiagnoser . Results . Values . Single ( result => result . Methods . Count ( method => method . Name . Contains ( nameof ( WithInlineable . JustReturn ) ) ) == 1 ) ;
169180
181+ Assert . Empty ( disassemblyResult . Errors ) ;
170182 Assert . Contains ( disassemblyResult . Methods , method => method . Maps . Any ( map => map . SourceCodes . OfType < Asm > ( ) . All ( asm => asm . ToString ( ) . Contains ( "ret" ) ) ) ) ;
171183 }
172184
@@ -181,12 +193,13 @@ private IConfig CreateConfig(Jit jit, Platform platform, Runtime runtime, IDiagn
181193 . AddDiagnoser ( disassemblyDiagnoser )
182194 . AddLogger ( new OutputLogger ( Output ) ) ;
183195
184- private void AssertDisassembled ( DisassemblyDiagnoser diagnoser , string methodSignature )
196+ private void AssertDisassemblyResult ( DisassemblyResult result , string methodSignature )
185197 {
186- DisassemblyResult result = diagnoser . Results . Single ( ) . Value ;
187-
188198 Assert . Contains ( methodSignature , result . Methods . Select ( m => m . Name . Split ( '.' ) . Last ( ) ) . ToArray ( ) ) ;
189199 Assert . Contains ( result . Methods . Single ( m => m . Name . EndsWith ( methodSignature ) ) . Maps , map => map . SourceCodes . Any ( ) ) ;
190200 }
201+
202+ private static bool IsPrintSourceSupported ( Platform platform )
203+ => platform != Platform . X86 ; // Workaround for https://github.com/dotnet/BenchmarkDotNet/issues/2789
191204 }
192205}
0 commit comments