Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I write (test) code that will not be optimized by the compiler/JIT?
    primarykey
    data
    text
    <p>I don't really know much about the internals of compiler and JIT optimizations, but I usually try to use "common sense" to guess what could be optimized and what couldn't. So there I was writing a simple unit test method today:</p> <pre><code>@Test // [Test] in C# public void testDefaultConstructor() { new MyObject(); } </code></pre> <p>This method is actually all I need. It checks that the default constructor exists and runs without exceptions.</p> <p>But then I started to think about the effect of compiler/JIT optimizations. Could the compiler/JIT optimize this method by eliminating the <code>new MyObject();</code> statement completely? Of course, it would need to determine that the call graph does not have side effects to other objects, which is the typical case for a normal constructor that simply initializes the internal state of the object.</p> <p>I presume that only the JIT would be allowed to perform such an optimization. This probably means that it's not something I should worry about, because the test method is being performed only once. Are my assumptions correct?</p> <p>Nevertheless, I'm trying to think about the general subject. When I thought about how to prevent this method from being optimized, I thought I may <code>assertTrue(new MyObject().toString() != null)</code>, but this is very dependent on the actual implementation of the <code>toString()</code> method, and even then, the JIT can determine that <code>toString()</code> method always returns a non-null string (e.g. if actually <code>Object.toString()</code> is being called), and thus optimize the whole branch. So this way wouldn't work.</p> <p>I know that in C# I can use <code>[MethodImpl(MethodImplOptions.NoOptimization)]</code>, but this is not what I'm actually looking for. I'm hoping to find a (language-independent) way of making sure that some specific part(s) of my code will actually run as I expect, without the JIT interfering in this process.</p> <p>Additionally, are there any typical optimization cases I should be aware of when creating my unit tests?</p> <p>Thanks a lot!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload