Example #1
0
    static void Main()
    {
        var sw = new Stopwatch();

        sw.Start();

        var loadSourceFileToMemory = new TransformBlock <string, string>(async path =>
        {
            Console.WriteLine("Loading to memory '{0}'...", path);

            using (StreamReader SourceReader = File.OpenText(path))
            {
                return(await SourceReader.ReadToEndAsync());
            }
        }, new ExecutionDataflowBlockOptions
        {
            MaxDegreeOfParallelism = MaxDegreeOfParallelismLoad
        });

        var generateTestClass = new TransformManyBlock <string, TestClass>(async text =>
        {
            Console.WriteLine("Generating test classes...");

            TestClassGenerator classGenerator = new TestClassGenerator();

            return(classGenerator.GenerateTestClasses(text));
        }, new ExecutionDataflowBlockOptions
        {
            MaxDegreeOfParallelism = MaxDegreeOfParallelismGenerate
        });

        var saveTestClassToFile = new ActionBlock <TestClass>(async testClass =>
        {
            using (StreamWriter DestinationWriter = File.CreateText(DestPath + testClass.FileName))
            {
                Console.WriteLine("Saving '{0}' on disk...", testClass.FileName);
                await DestinationWriter.WriteAsync(testClass.Source);
                Console.WriteLine("Saved '{0}'!", testClass.FileName);
            }
        }, new ExecutionDataflowBlockOptions
        {
            MaxDegreeOfParallelism = MaxDegreeOfParallelismSave
        });

        var linkOptions = new DataflowLinkOptions {
            PropagateCompletion = true
        };

        loadSourceFileToMemory.LinkTo(generateTestClass, linkOptions);
        generateTestClass.LinkTo(saveTestClassToFile, linkOptions);

        foreach (var path in _input)
        {
            loadSourceFileToMemory.Post(path);
        }

        loadSourceFileToMemory.Complete();

        saveTestClassToFile.Completion.Wait();
        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);
    }
Example #2
0
        static void Main(string[] args)
        {
            int                fileCounter     = 0;
            string             outputDirectory = ".";
            TestClassGenerator generator       = new TestClassGenerator();

            int maxLoading = 0;

            var downloadString = new TransformBlock <string, Task <string> >(path =>
            {
                while (fileLoadingCounter >= maxFileLoading)
                {
                    ;
                }
                StreamReader sr      = new StreamReader(path);
                Task <string> result = sr.ReadToEndAsync();
                fileLoadingCounter++;
                if (maxLoading < fileLoadingCounter)
                {
                    maxLoading = fileLoadingCounter;
                }
                result.ContinueWith(str => { fileLoadingCounter--; });
                return(result);
            });

            var generateClass = new TransformBlock <Task <string>, Task <string> >(async sourceTask =>
            {
                while (testsGeneratingCounter >= maxTestsGenerating)
                {
                    ;
                }
                testsGeneratingCounter++;
                Task <string> task = generator.GenerateTestAsync(await sourceTask);
                Task temp          = task.ContinueWith(str => { testsGeneratingCounter--; });
                return(task);
            });

            var outputString = new ActionBlock <Task <string> >(async sourceTask =>
            {
                string source = await sourceTask;
                while (fileWritingCounter >= maxFileWriting)
                {
                    ;
                }
                fileWritingCounter++;
                fileCounter++;
                StreamWriter sw = new StreamWriter($"{outputDirectory}/Test{fileCounter}.cs");
                Task t          = sw.WriteAsync(source);
                Task temp       = t.ContinueWith((str) => { fileWritingCounter--; });
                t.Wait();
                sw.Close();
            });

            var linkOptions = new DataflowLinkOptions {
                PropagateCompletion = true
            };

            downloadString.LinkTo(generateClass, linkOptions);
            generateClass.LinkTo(outputString, linkOptions);

            List <string> fileNames = new List <string>()
            {
                "Program.cs", "AssemblyGetter.cs",
                "StudentExtension.cs", "Factorizer.cs"
            };

            foreach (var name in fileNames)
            {
                downloadString.Post(name);
            }
            downloadString.Complete();
            outputString.Completion.Wait();

            Console.WriteLine(maxLoading);
            Console.ReadLine();
        }