public void E_Safe_StaticImplementation_SingleThreaded() { // Here we guarantee thread safety by eliminating parallelism, but this has a big performance impact var results = new ConcurrentBag <int>(); for (var i = 0; i < Iterations; i++) { ITwoPlusTwo implementation = new StaticTwoPlusTwo(); var result = implementation.CalculateTwoPlusTwo(); results.Add(result); } ; Assert.IsEmpty(results.Where(r => r != RightAnswer)); }
public void B_Unsafe_StaticImplementation() { var results = new ConcurrentBag <int>(); var opt = new ParallelOptions { MaxDegreeOfParallelism = Iterations }; Parallel.For(0, Iterations, opt, i => { ITwoPlusTwo implementation = new StaticTwoPlusTwo(); var result = implementation.CalculateTwoPlusTwo(); results.Add(result); }); Assert.IsEmpty(results.Where(r => r != RightAnswer)); }
public void A_SanityCheck() { ITwoPlusTwo implementation = new StaticTwoPlusTwo(); var result = implementation.CalculateTwoPlusTwo(); Assert.AreEqual(RightAnswer, result); implementation = SingletonTwoPlusTwo.Instance; result = implementation.CalculateTwoPlusTwo(); Assert.AreEqual(RightAnswer, result); implementation = new InstanceTwoPlusTwo(); result = implementation.CalculateTwoPlusTwo(); Assert.AreEqual(RightAnswer, result); implementation = new ThreadSafeInstanceTwoPlusTwo(); result = implementation.CalculateTwoPlusTwo(); Assert.AreEqual(RightAnswer, result); implementation = new LocalTwoPlusTwo(); result = implementation.CalculateTwoPlusTwo(); Assert.AreEqual(RightAnswer, result); }