public void SolveTest()
        {
            //Arrange
            IMatrixSolver target = new MatrixSolver();
            var matrix = new int[7, 7]
            {
                {1,0,1,0,0,0,2},
                {0,1,0,1,0,0,3},

                {1,0,0,0,1,0,4},
                {0,1,0,0,0,1,8},

                {0,0,1,0,1,0,6},
                {1,0,0,0,0,0,5},
                {0,1,0,0,0,0,10}
            };

            var expected = new int[7, 7]
            {
                {1,0,0,0,0,0,5},
                {0,1,0,0,0,0,10},
                {0,0,1,0,0,0,7},
                {0,0,0,1,0,0,9},
                {0,0,0,0,1,0,1},
                {0,0,0,0,0,1,2},
                {0,0,0,0,0,0,0}
            };

            //Act
            var result = target.Solve(matrix);

            //Assert
            Assert.IsTrue(result, "couldnt solve matrix");
            Common.CheckArraysAreEqual(matrix, expected);
        }
        public void BuildMatrixTest()
        {
            //Arrange
            IMatrixSolver matrixSolver = new MatrixSolver();
            Decode_Accessor target = new Decode_Accessor(matrixSolver);
            IList<Drop> drops = new Drop[3]
            {
                new Drop(){SelectedParts=new int[2]{0,1},Data=new byte[2]{1,2}},
                new Drop(){SelectedParts=new int[2]{0,2},Data=new byte[2]{3,4}},
                new Drop(){SelectedParts=new int[2]{1,2},Data=new byte[2]{5,6}}
            };
            var expected = new int[6, 7]
            {
                {1,0,1,0,0,0,1},
                {0,1,0,1,0,0,2},

                {1,0,0,0,1,0,3},
                {0,1,0,0,0,1,4},

                {0,0,1,0,1,0,5},
                {0,0,0,1,0,1,6}
            };
            int blocksCount = 3;
            int chunkSize = 2;
            //Act
            var actual = target.BuildMatrix(drops, blocksCount, chunkSize);

            //Assert
            Common.CheckArraysAreEqual(expected, actual);
        }
 private void Application_Startup(object sender, StartupEventArgs e)
 {
     var decoderView = new Views.DecoderView();
     IMatrixSolver matrixSolver = new MatrixSolver();
     IDecode decoder = new Decode(matrixSolver);
     IEncodeService encodeServiceClient = new EncodeService.EncodeServiceClient();
     var decoderViewModel = new DecoderViewModel(decoder, encodeServiceClient);
     decoderView.DataContext = decoderViewModel;
     decoderView.Show();
 }
        public void Encode_DecodeTest()
        {
            //Arrange
            string sentMessage = "Message";
            byte[] file = Encoding.ASCII.GetBytes(sentMessage);
            IEncode encoder = new Encode(file);
            var blocksCount = encoder.NumberOfBlocks;
            var overHead = 20;
            IList<Drop> drops = new List<Drop>();
            for (int i = 0; i < blocksCount + overHead; i++)
            {
                var drop = encoder.Encode();
                drops.Add(drop);
            }
            IMatrixSolver matrixSolver = new MatrixSolver();
            IDecode target = new Decode(matrixSolver);

            //Act
            var actualByte = target.Decode(drops, blocksCount, encoder.ChunkSize, encoder.FileSize);
            var receievdMessage = Encoding.ASCII.GetString(actualByte);

            //Assert
            Assert.AreEqual(sentMessage, receievdMessage);
        }