Esempio n. 1
0
        private TransformBlock <DataContentModel, IProcessorCommand> GetCalculateProducer(ExecutionDataflowBlockOptions options)
        {
            var convertToCommand = new TransformBlock <DataContentModel, IProcessorCommand>
                                   (
                dataContent =>
            {
                if (dataContent.TryMapTo(out IProcessorCommand processorCommand))
                {
                    if (processorCommand is BadProcessorCommand)
                    {
                        Logger.LogError("Data format error in {id}", processorCommand.Id);
                        return(processorCommand);
                    }
                    Interlocked.Increment(ref parsedCommands);
                    try
                    {
                        processorCommand.Calculate();
                    }
                    catch (Exception ex)
                    {
                        Logger.LogError("Error processing command in {id} ({error})", processorCommand.Id, ex.Message);
                        return(ProcessorCommandFabric.GetBadProcessor(processorCommand.Id));
                    }
                    return(processorCommand);
                }
                //There is no command in file, skip without error message
                return(ProcessorCommandFabric.GetBadProcessor(dataContent.FilePath));
            },
                options
                                   );

            return(convertToCommand);
        }
        public void ProcessorCommand_NotEqualsHashCodesForDifferentCommand()
        {
            //Arrange
            IProcessorCommand addCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand.Id = "1";
            IProcessorCommand subCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand.Id = "1";
            IProcessorCommand tranCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand.Id = "1";
            IProcessorCommand multCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand.Id = "1";
            IProcessorCommand badCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand.Id = "1";

            //Act

            //Assert
            Assert.NotEqual(addCommand.GetHashCode(), subCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), tranCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), multCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), badCommand.GetHashCode());
        }
        public void ProcessorCommand_EqualsForSameCommand()
        {
            //Arrange
            IProcessorCommand addCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand.Id = "1";
            IProcessorCommand subCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand.Id = "1";
            IProcessorCommand tranCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand.Id = "1";
            IProcessorCommand multCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand.Id = "1";
            IProcessorCommand badCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand.Id = "1";

            IProcessorCommand addCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand3.Id = "1";
            IProcessorCommand subCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand3.Id = "1";
            IProcessorCommand tranCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand3.Id = "1";
            IProcessorCommand multCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand3.Id = "1";
            IProcessorCommand badCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand3.Id = "1";

            //Act

            //Assert
            Assert.Equal(addCommand, addCommand3);
            Assert.Equal(subCommand, subCommand3);
            Assert.Equal(tranCommand, tranCommand3);
            Assert.Equal(multCommand, multCommand3);
            Assert.Equal(badCommand, badCommand3);
        }
Esempio n. 4
0
        public static bool TryMapTo(this DataContentModel fromModel, out IProcessorCommand toModel)
        {
            if (fromModel == null)
            {
                throw new ArgumentNullException(nameof(fromModel));
            }

            //Right command contains minimum 3 lines: operation, empty and matrix
            if (fromModel.ContentStrings.Length < 3 ||
                !string.IsNullOrWhiteSpace(fromModel.ContentStrings[1]) ||
                string.IsNullOrWhiteSpace(fromModel.ContentStrings[2]))
            {
                //It is not command file, skip
                toModel = null;
                return(false);
            }

            string strOperation = fromModel.ContentStrings[0];

            if (!Enum.TryParse(strOperation, true, out ProcessorCommandFabric.Operator operation))
            {
                //It is not command file, skip
                toModel = null;
                return(false);
            }

            IProcessorCommand processor = ProcessorCommandFabric.GetProcessor(operation);

            if (!fromModel.TryMapTo(out IEnumerable <Matrix <int> > matrices))
            {
                //It is a command file, but wrong data, return BadCommand
                toModel = ProcessorCommandFabric.GetBadProcessor(fromModel.FilePath);
                return(true);
            }
            processor.Source = matrices;
            processor.Id     = fromModel.FilePath;
            toModel          = processor;
            return(true);
        }
        public void ProcessorCommand_NotEqualsForDifferentCommand()
        {
            //Arrange
            IProcessorCommand addCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand.Id = "1";
            IProcessorCommand subCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand.Id = "1";
            IProcessorCommand tranCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand.Id = "1";
            IProcessorCommand multCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand.Id = "1";
            IProcessorCommand badCommand = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand.Id = "1";

            IProcessorCommand addCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add);

            addCommand2.Id = "2";
            IProcessorCommand subCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract);

            subCommand2.Id = "2";
            IProcessorCommand tranCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose);

            tranCommand2.Id = "2";
            IProcessorCommand multCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply);

            multCommand2.Id = "2";
            IProcessorCommand badCommand2 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad);

            badCommand2.Id = "2";

            List <Matrix <int> > lstMatrix = new List <Matrix <int> >
            {
                new Matrix <int>
                {
                    Data = new int[, ] {
                        { 1, 2, 3, 4, 5 },
                    }
                }
            };
            IProcessorCommand addCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add, lstMatrix);

            addCommand4.Id = "1";
            IProcessorCommand subCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract, lstMatrix);

            subCommand4.Id = "1";
            IProcessorCommand tranCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose, lstMatrix);

            tranCommand4.Id = "1";
            IProcessorCommand multCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply, lstMatrix);

            multCommand4.Id = "1";
            IProcessorCommand badCommand4 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad, lstMatrix);

            badCommand4.Id = "1";

            List <Matrix <int> > lstMatrix3 = new List <Matrix <int> >
            {
                new Matrix <int>
                {
                    Data = new int[, ] {
                        { 100, 2, 3, 4, 5 },
                    }
                }
            };
            IProcessorCommand addCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add, lstMatrix3);

            addCommand3.Id = "1";
            IProcessorCommand subCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract, lstMatrix3);

            subCommand3.Id = "1";
            IProcessorCommand tranCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose, lstMatrix3);

            tranCommand3.Id = "1";
            IProcessorCommand multCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply, lstMatrix3);

            multCommand3.Id = "1";
            IProcessorCommand badCommand3 = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Bad, lstMatrix3);

            badCommand3.Id = "1";

            //Act

            //Assert
            Assert.NotEqual(addCommand, subCommand);
            Assert.NotEqual(addCommand, tranCommand);
            Assert.NotEqual(addCommand, multCommand);
            Assert.NotEqual(addCommand, badCommand);

            Assert.NotEqual(addCommand, addCommand2);
            Assert.NotEqual(subCommand, subCommand2);
            Assert.NotEqual(tranCommand, tranCommand2);
            Assert.NotEqual(multCommand, multCommand2);
            Assert.NotEqual(badCommand, badCommand2);

            Assert.NotEqual(addCommand, addCommand4);
            Assert.NotEqual(subCommand, subCommand4);
            Assert.NotEqual(tranCommand, tranCommand4);
            Assert.NotEqual(multCommand, multCommand4);
            Assert.NotEqual(badCommand, badCommand4);

            Assert.NotEqual(addCommand3, addCommand4);
            Assert.NotEqual(subCommand3, subCommand4);
            Assert.NotEqual(tranCommand3, tranCommand4);
            Assert.NotEqual(multCommand3, multCommand4);
            Assert.NotEqual(badCommand3, badCommand4);

            Assert.NotEqual(addCommand.GetHashCode(), subCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), tranCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), multCommand.GetHashCode());
            Assert.NotEqual(addCommand.GetHashCode(), badCommand.GetHashCode());
        }
        public void ProcessorCommandFabricTests_GetProcessorReturnProcessorCommand()
        {
            //Arrange
            Matrix <int> firstMatrix = new Matrix <int>
            {
                Data = new int[3, 2]
                {
                    { 0, 1 },
                    { 2, 3 },
                    { 4, 5 }
                }
            };
            Matrix <int> secondMatrix = new Matrix <int>
            {
                Data = new int[3, 2]
                {
                    { 6, 7 },
                    { 8, 9 },
                    { 10, 11 }
                }
            };
            Matrix <int> thirdMatrix = new Matrix <int>
            {
                Data = new int[3, 2]
                {
                    { 12, 13 },
                    { 14, 15 },
                    { 16, 17 }
                }
            };
            AddProcessorCommand assertAddResult = new AddProcessorCommand()
            {
                Id     = null,
                Source = new List <Matrix <int> >
                {
                    firstMatrix,
                    secondMatrix,
                    thirdMatrix
                }
            };
            SubtractProcessorCommand assertSubResult = new SubtractProcessorCommand()
            {
                Id     = null,
                Source = new List <Matrix <int> >
                {
                    firstMatrix,
                    secondMatrix,
                    thirdMatrix
                }
            };
            TransposeProcessorCommand assertTranResult = new TransposeProcessorCommand()
            {
                Id     = null,
                Source = new List <Matrix <int> >
                {
                    firstMatrix,
                    secondMatrix,
                    thirdMatrix
                }
            };
            MultiplyProcessorCommand assertMultResult = new MultiplyProcessorCommand()
            {
                Id     = null,
                Source = new List <Matrix <int> >
                {
                    firstMatrix,
                    secondMatrix,
                    thirdMatrix
                }
            };
            BadProcessorCommand assertBadResult = new BadProcessorCommand();

            //Act
            ConsoleMatrixProcessing.Core.Abstractions.IProcessorCommand addProcessor = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Add,
                                                                                                                           new List <Matrix <int> >
            {
                firstMatrix,
                secondMatrix,
                thirdMatrix
            });
            ConsoleMatrixProcessing.Core.Abstractions.IProcessorCommand subProcessor = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Subtract,
                                                                                                                           new List <Matrix <int> >
            {
                firstMatrix,
                secondMatrix,
                thirdMatrix
            });
            ConsoleMatrixProcessing.Core.Abstractions.IProcessorCommand multProcessor = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Multiply,
                                                                                                                            new List <Matrix <int> >
            {
                firstMatrix,
                secondMatrix,
                thirdMatrix
            });
            ConsoleMatrixProcessing.Core.Abstractions.IProcessorCommand tranProcessor = ProcessorCommandFabric.GetProcessor(ProcessorCommandFabric.Operator.Transpose,
                                                                                                                            new List <Matrix <int> >
            {
                firstMatrix,
                secondMatrix,
                thirdMatrix
            });
            ConsoleMatrixProcessing.Core.Abstractions.IProcessorCommand badProcessor = ProcessorCommandFabric.GetBadProcessor();

            //Assert
            Assert.Equal(assertAddResult, addProcessor);
            Assert.Equal(assertSubResult, subProcessor);
            Assert.Equal(assertMultResult, multProcessor);
            Assert.Equal(assertTranResult, tranProcessor);
            Assert.Equal(assertBadResult, badProcessor);

            Assert.NotEqual(assertAddResult, subProcessor);
            Assert.NotEqual(assertSubResult, multProcessor);
            Assert.NotEqual(assertMultResult, tranProcessor);
            Assert.NotEqual(assertTranResult, subProcessor);
            Assert.NotEqual(assertBadResult, addProcessor);
        }