public void WordsStartingWithAdjacentCodepointsGoToDifferentPartitions()
        {
            var sut             = new ByFirstCharPartitioner();
            var partitionQueues = new BlockingCollection <string> [2];

            partitionQueues[0] = new BlockingCollection <string>();
            partitionQueues[1] = new BlockingCollection <string>();

            var testWords = GenerateWordsStartingWith('a').Concat(GenerateWordsStartingWith('b')).ToArray();

            sut.PartitionIntoQueues(testWords, partitionQueues);

            Assert.IsTrue(
                partitionQueues[0].Count == testWords.Length / 2 && partitionQueues[1].Count == testWords.Length / 2);
        }
        public void WordsStartingWithSameLetterGoToSamePartition()
        {
            var sut             = new ByFirstCharPartitioner();
            var partitionQueues = new BlockingCollection <string> [2];

            partitionQueues[0] = new BlockingCollection <string>();
            partitionQueues[1] = new BlockingCollection <string>();

            var testWords = GenerateWordsStartingWith('a').ToArray();

            sut.PartitionIntoQueues(testWords, partitionQueues);

            Assert.IsTrue(
                partitionQueues[0].Count == testWords.Length && partitionQueues[1].Count == 0 ||
                partitionQueues[0].Count == 0 && partitionQueues[1].Count == testWords.Length);
        }
Пример #3
0
        public static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Not enough arguments. Usage: wordcount.exe input_file_path output_file_path [/instrument]");
                return;
            }

            if (args.Length > 2 && args[2] == "/instrument")
            {
                Instrument.Initialize(new ConsoleInstrumentationWriter());
            }

            string inputPath  = args[0];
            string outputPath = args[1];

            try
            {
                string inputPathError = CheckInputFilePath(inputPath);

                if (!string.IsNullOrEmpty(inputPathError))
                {
                    Console.WriteLine("Invalid input file path: {0}", inputPathError);
                    return;
                }

                string outputPathError = CheckOutputFilePath(outputPath);

                if (!string.IsNullOrEmpty(outputPathError))
                {
                    Console.WriteLine("Invalid output file path: {0}", outputPathError);
                    return;
                }

                using (var input = new FileStream(inputPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (var output = new FileStream(outputPath, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        var inputReader      = new InputReader();
                        var inputPartitioner = new ByFirstCharPartitioner();
                        var freqDictBuilder  = new InMemoryFreqDictionaryBuilder();
                        var outputWriter     = new OutputWriter();

                        var facade = new Facade(inputReader, inputPartitioner, freqDictBuilder, outputWriter);
                        facade.Run(input, output);
                    }
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine("File {0} not found", ex.FileName);
            }
            catch (UnauthorizedAccessException ex)
            {
                Console.WriteLine("Access is denied: {0}", ex.Message);
            }
            catch (IOException ex)
            {
                Console.WriteLine("IO error: {0}", ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unknown error {0}", ex);
            }
        }