public void LineCount_OnManyThreads_ShouldAlwaysGetTheSameResult([ValueSource("Files")] ITextFile file)
 {
     const int NumCalls = 10;
     var countedFile = new CountedTextFile(file, f => new DiyLazy<FileLineCount>(f));
     var lineCounts = Enumerable.Range(0, NumCalls).AsParallel().Select(i => countedFile.LineCount).ToList();
     Assert.That(lineCounts.Distinct().Count(), Is.EqualTo(1));
 }
        public void LineCount_OnManyThreads_ShouldAlwaysGetTheSameResult([ValueSource("Files")] ITextFile file)
        {
            const int NumCalls    = 10;
            var       countedFile = new CountedTextFile(file);
            var       lineCounts  = Enumerable.Range(0, NumCalls).AsParallel().Select(i => countedFile.LineCount).ToList();

            Assert.That(lineCounts.Distinct().Count(), Is.EqualTo(1));
        }
        public void LineCount_OnManyThreads_ShouldOnlyReadFileOnce([ValueSource("Files")] ITextFile file)
        {
            const int NumCalls    = 10;
            var       countedFile = new CountedTextFile(file);

            Enumerable.Range(0, NumCalls).AsParallel().Select(i => countedFile.LineCount).ToList();
            Assert.That(countedFile.NumberOfCallsToCountLines, Is.EqualTo(1));
        }
        public void LineCount_OnManyThreads_ShouldOnlyReadFileOnce([ValueSource("Files")] ITextFile file)
        {
            const int NumCalls = 10;
            ILazy<FileLineCount> lazy = null;
            var countedFile = new CountedTextFile(file, f => lazy = new DiyLazy<FileLineCount>(f));
            Enumerable.Range(0, NumCalls).AsParallel().Select(i => countedFile.LineCount).ToList();

            switch (lazy.Mode)
            {
                case LazyThreadSafetyMode.PublicationOnly:
                    Assert.Ignore("This lazy does not guarantee only one execution, on all threads - not an error");
                    break;
                case LazyThreadSafetyMode.ExecutionAndPublication:
                    Assert.That(countedFile.NumberOfCallsToCountLines, Is.EqualTo(1));
                    break;
            }
        }
        public void LineCount_OnManyThreads_ShouldOnlyReadFileOnce([ValueSource("Files")] ITextFile file)
        {
            const int             NumCalls = 10;
            ILazy <FileLineCount> lazy     = null;
            var countedFile = new CountedTextFile(file, f => lazy = new DiyLazy <FileLineCount>(f));

            Enumerable.Range(0, NumCalls).AsParallel().Select(i => countedFile.LineCount).ToList();

            switch (lazy.Mode)
            {
            case LazyThreadSafetyMode.PublicationOnly:
                Assert.Ignore("This lazy does not guarantee only one execution, on all threads - not an error");
                break;

            case LazyThreadSafetyMode.ExecutionAndPublication:
                Assert.That(countedFile.NumberOfCallsToCountLines, Is.EqualTo(1));
                break;
            }
        }
        public void LineCount_ShouldNotReadTheFile_UntilLineCountIsCalled()
        {
            var countedFile = new CountedTextFile(EmbeddedFiles.Medium);

            Assert.That(countedFile.NumberOfCallsToCountLines, Is.EqualTo(0));
        }
 public void LineCount_ShouldNotReadTheFile_UntilLineCountIsCalled()
 {
     var countedFile = new CountedTextFile(EmbeddedFiles.Medium, f => new DiyLazy<FileLineCount>(f));
     Assert.That(countedFile.NumberOfCallsToCountLines, Is.EqualTo(0));
 }