public void WithSingleValueReturns() { // These vars basically used to ensure the compiler doesn't optimise away the return values entirely var longResultVar = 0L; var intResultVar = 0; var refResultVar = ""; var valResultVar = 0L; for (var i = 0; i < NumIterations; ++i) { longResultVar += _fastAtomicInt64.FastIncrement(); longResultVar += _fastAtomicInt64.FastDecrement(); longResultVar += _fastAtomicInt64.FastExchange(i); intResultVar += _fastAtomicInt32.FastIncrement(); intResultVar += _fastAtomicInt32.FastDecrement(); intResultVar += _fastAtomicInt32.FastTryExchange(i, i - 1) == i - 1 ? 1 : 0; var newUser = new User(i, "Xenoprimate"); refResultVar = _fastAtomicRef.FastExchange(newUser).Name; refResultVar = _fastAtomicRef.FastTryExchange(new User(i * 2, "Ben"), newUser).LoginID == newUser.LoginID ? refResultVar : String.Empty; valResultVar += _fastAtomicVal8.FastExchange(new Val8(i)).A; valResultVar += _fastAtomicVal16.FastTryExchange(new Val16(i + 1), new Val16(i)).A == i ? 0 : 1; valResultVar += _fastAtomicVal32.FastExchange(new Val32(i)).A; valResultVar += _fastAtomicVal64.FastTryExchange(new Val64(i + 1), new Val64(i)).A == i ? 0 : 1; SimulateContention(ContentionLevel); } if (longResultVar != 1499996500003L || intResultVar != -728379967 || !refResultVar.Equals("Ben", StringComparison.Ordinal) || valResultVar != 999997000002L) { throw new ApplicationException("This will never happen; it's just here to force the compiler not to optimise away these vars. These results were measured before."); } }